Add Change, PatchSet, Patch, PatchLineComment entities

Signed-off-by: Shawn O. Pearce <sop@google.com>
This commit is contained in:
Shawn O. Pearce
2008-11-24 14:26:24 -08:00
parent af3f022daa
commit 74ef9f3488
12 changed files with 840 additions and 0 deletions

View File

@@ -0,0 +1,166 @@
// Copyright 2008 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.client.reviewdb;
import com.google.gwtorm.client.Column;
import com.google.gwtorm.client.IntKey;
import com.google.gwtorm.client.RowVersion;
import java.sql.Timestamp;
/** A change recommended to be inserted into {@link Branch}. */
public final class Change {
public static class Id extends IntKey<com.google.gwtorm.client.Key<?>> {
@Column
protected int id;
protected Id() {
}
public Id(final int id) {
this.id = id;
}
@Override
public int get() {
return id;
}
}
public static enum Status {
NEW('n'),
MERGED('M'),
ABANDONED('A');
private final char code;
private Status(final char c) {
code = c;
}
public char getCode() {
return code;
}
public static Status forCode(final char c) {
for (final Status s : Status.values()) {
if (s.code == c) {
return s;
}
}
return null;
}
}
/** Locally assigned unique identifier of the change */
@Column
protected Id changeId;
/** optimistic locking */
@Column
@RowVersion
protected int rowVersion;
/** When this change was first introduced into the database. */
@Column
protected Timestamp createdOn;
@Column(name = "owner_account_id")
protected Account.Id owner;
/** The branch (and project) this change merges into. */
@Column
protected Branch.NameKey dest;
/** Current state code; see {@link Status}. */
@Column
protected char status;
/** The total number of {@link PatchSet} children in this Change. */
@Column
protected int nbrPatchSets;
/** The current patch set. */
@Column
protected int currentPatchSetId;
/** Subject from the current patch set. */
@Column
protected String subject;
protected Change() {
}
public Change(final Change.Id newId, final Account.Id ownedBy,
final Branch.NameKey forBranch) {
changeId = newId;
createdOn = new Timestamp(System.currentTimeMillis());
owner = ownedBy;
dest = forBranch;
setStatus(Status.NEW);
}
public Change.Id getKey() {
return changeId;
}
public int getId() {
return changeId.get();
}
public Timestamp getCreatedOn() {
return createdOn;
}
public Account.Id getOwner() {
return owner;
}
public Branch.NameKey getDest() {
return dest;
}
/** Get the id of the most current {@link PatchSet} in this change. */
public PatchSet.Id currentPatchSetId() {
if (currentPatchSetId > 0) {
return new PatchSet.Id(changeId, currentPatchSetId);
}
return null;
}
public void setCurrentPatchSet(final PatchSetInfo ps) {
currentPatchSetId = ps.getKey().get();
subject = ps.getSubject();
}
/**
* Allocate a new PatchSet id within this change.
* <p>
* <b>Note: This makes the change dirty. Call update() after.</b>
*/
public PatchSet.Id newPatchSetId() {
return new PatchSet.Id(changeId, ++nbrPatchSets);
}
public Status getStatus() {
return Status.forCode(status);
}
public void setStatus(final Status newStatus) {
status = newStatus.getCode();
}
}

View File

@@ -0,0 +1,24 @@
// Copyright 2008 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.client.reviewdb;
import com.google.gwtorm.client.Access;
import com.google.gwtorm.client.OrmException;
import com.google.gwtorm.client.PrimaryKey;
public interface ChangeAccess extends Access<Change, Change.Id> {
@PrimaryKey("changeId")
Change get(Change.Id id) throws OrmException;
}

View File

@@ -0,0 +1,106 @@
// Copyright 2008 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.client.reviewdb;
import com.google.gwtorm.client.Column;
import com.google.gwtorm.client.StringKey;
/** A single modified file in a {@link PatchSet}. */
public final class Patch {
public static class Id extends StringKey<PatchSet.Id> {
@Column(name = Column.NONE)
protected PatchSet.Id patchSetId;
@Column
protected String fileName;
protected Id() {
patchSetId = new PatchSet.Id();
}
public Id(final PatchSet.Id ps, final String name) {
this.patchSetId = ps;
this.fileName = name;
}
@Override
public PatchSet.Id getParentKey() {
return patchSetId;
}
@Override
public String get() {
return fileName;
}
}
public static enum ChangeType {
ADD('A'),
MODIFIED('M'),
DELETED('D');
private final char code;
private ChangeType(final char c) {
code = c;
}
public char getCode() {
return code;
}
public static ChangeType forCode(final char c) {
for (final ChangeType s : ChangeType.values()) {
if (s.code == c) {
return s;
}
}
return null;
}
}
@Column(name = Column.NONE)
protected Id key;
/** What sort of change is this to the path; see {@link ChangeType}. */
@Column
protected char changeType;
/** Number of published comments on this patch. */
@Column
protected int nbrComments;
protected Patch() {
}
public Patch(final Patch.Id newId, final ChangeType type) {
key = newId;
setChangeType(type);
}
public int getCommentCount() {
return nbrComments;
}
public ChangeType getChangeType() {
return ChangeType.forCode(changeType);
}
public void setChangeType(final ChangeType type) {
changeType = type.getCode();
}
}

View File

@@ -0,0 +1,29 @@
// Copyright 2008 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.client.reviewdb;
import com.google.gwtorm.client.Access;
import com.google.gwtorm.client.OrmException;
import com.google.gwtorm.client.PrimaryKey;
import com.google.gwtorm.client.Query;
import com.google.gwtorm.client.ResultSet;
public interface PatchAccess extends Access<Patch, Patch.Id> {
@PrimaryKey("key")
Patch get(Patch.Id id) throws OrmException;
@Query("WHERE key.patchSetId = ? ORDER BY key.fileName")
ResultSet<Patch> byPatchSet(PatchSet.Id ps) throws OrmException;
}

View File

@@ -0,0 +1,182 @@
// Copyright 2008 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.client.reviewdb;
import com.google.gwtorm.client.Column;
import com.google.gwtorm.client.StringKey;
import java.sql.Timestamp;
/** A comment left by a user on a specific line of a {@link Patch}. */
public final class PatchLineComment {
public static class Id extends StringKey<Patch.Id> {
@Column(name = Column.NONE)
protected Patch.Id patchId;
@Column(length = 40)
protected String uuid;
protected Id() {
patchId = new Patch.Id();
}
public Id(final Patch.Id p, final String uuid) {
this.patchId = p;
this.uuid = uuid;
}
@Override
public Patch.Id getParentKey() {
return patchId;
}
@Override
public String get() {
return uuid;
}
}
protected static final char STATUS_PUBLISHED = 'P';
public static enum Status {
DRAFT('d'),
PUBLISHED(STATUS_PUBLISHED);
private final char code;
private Status(final char c) {
code = c;
}
public char getCode() {
return code;
}
public static Status forCode(final char c) {
for (final Status s : Status.values()) {
if (s.code == c) {
return s;
}
}
return null;
}
}
public static enum Side {
PRE_IMAGE('o'),
POST_IMAGE('n');
private final char code;
private Side(final char c) {
code = c;
}
public char getCode() {
return code;
}
public static Side forCode(final char c) {
for (final Side s : Side.values()) {
if (s.code == c) {
return s;
}
}
return null;
}
}
@Column(name = Column.NONE)
protected Id key;
/** Line number this comment applies to; it should display after the line. */
@Column
protected int lineNbr;
/** Who wrote this comment. */
@Column
protected Account.Id authorId;
/** When this comment was drafted. */
@Column
protected Timestamp writtenOn;
/** Current publication state of the comment; see {@link Status}. */
@Column
protected char status;
/** Which version of the file is this comment on (old vs. new). */
@Column
protected char side;
/** The text left by the user. */
@Column(notNull = false, length = Integer.MAX_VALUE)
protected String message;
protected PatchLineComment() {
}
public PatchLineComment(final PatchLineComment.Id id, final int line,
final Account.Id author) {
key = id;
lineNbr = line;
authorId = author;
writtenOn = new Timestamp(System.currentTimeMillis());
setStatus(Status.DRAFT);
setSide(Side.POST_IMAGE);
}
public PatchLineComment.Id getKey() {
return key;
}
public int getLine() {
return lineNbr;
}
public Account.Id getAuthorId() {
return authorId;
}
public Timestamp getWrittenOn() {
return writtenOn;
}
public Status getStatus() {
return Status.forCode(status);
}
public void setStatus(final Status s) {
status = s.getCode();
}
public Side getSide() {
return Side.forCode(side);
}
public void setSide(final Side s) {
side = s.getCode();
}
public String getMessage() {
return message;
}
public void setMessage(final String s) {
message = s;
}
}

View File

@@ -0,0 +1,31 @@
// Copyright 2008 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.client.reviewdb;
import com.google.gwtorm.client.Access;
import com.google.gwtorm.client.OrmException;
import com.google.gwtorm.client.PrimaryKey;
import com.google.gwtorm.client.Query;
import com.google.gwtorm.client.ResultSet;
public interface PatchLineCommentAccess extends
Access<PatchLineComment, PatchLineComment.Id> {
@PrimaryKey("key")
PatchLineComment get(PatchLineComment.Id id) throws OrmException;
@Query("WHERE key.patchId = ? AND status = '"
+ PatchLineComment.STATUS_PUBLISHED + "' ORDER BY writtenOn,lineNbr")
ResultSet<PatchLineComment> byPatch(Patch.Id id) throws OrmException;
}

View File

@@ -0,0 +1,78 @@
// Copyright 2008 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.client.reviewdb;
import com.google.gwtorm.client.Column;
import com.google.gwtorm.client.IntKey;
/** A single revision of a {@link Change}. */
public final class PatchSet {
public static class Id extends IntKey<Change.Id> {
@Column
protected Change.Id changeId;
@Column
protected int patchSetId;
protected Id() {
changeId = new Change.Id();
}
public Id(final Change.Id change, final int id) {
this.changeId = change;
this.patchSetId = id;
}
@Override
public Change.Id getParentKey() {
return changeId;
}
@Override
public int get() {
return patchSetId;
}
}
@Column(name = Column.NONE)
protected Id key;
@Column(length = 40, notNull = false)
protected String revision;
protected PatchSet() {
}
public PatchSet(final PatchSet.Id k) {
key = k;
}
public PatchSet(final PatchSet.Id k, final String rev) {
this(k);
revision = rev;
}
public PatchSet.Id getKey() {
return key;
}
public int getId() {
return key.get();
}
public String getRevision() {
return revision;
}
}

View File

@@ -0,0 +1,29 @@
// Copyright 2008 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.client.reviewdb;
import com.google.gwtorm.client.Access;
import com.google.gwtorm.client.OrmException;
import com.google.gwtorm.client.PrimaryKey;
import com.google.gwtorm.client.Query;
import com.google.gwtorm.client.ResultSet;
public interface PatchSetAccess extends Access<PatchSet, PatchSet.Id> {
@PrimaryKey("key")
PatchSet get(PatchSet.Id id) throws OrmException;
@Query("WHERE key.changeId = ? ORDER BY key.patchSetId")
ResultSet<PatchSet> byChange(Change.Id id) throws OrmException;
}

View File

@@ -0,0 +1,87 @@
// Copyright 2008 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.client.reviewdb;
import com.google.gwtorm.client.Column;
/**
* Additional data about a {@link PatchSet} not normally loaded.
* <p>
* This is stored out of band from the PatchSet itself, to reduce the size of
* each PatchSet record.
*/
public final class PatchSetInfo {
@Column(name = Column.NONE)
protected PatchSet.Id key;
/** First line of {@link #message}. */
@Column(notNull = false)
protected String subject;
/** The complete description of the change the patch set introduces. */
@Column(notNull = false, length = Integer.MAX_VALUE)
protected String message;
/** Identity of who wrote the patch set. May differ from {@link #committer}. */
@Column(notNull = false)
protected UserIdentity author;
/** Identity of who committed the patch set to the VCS. */
@Column(notNull = false)
protected UserIdentity committer;
protected PatchSetInfo() {
}
public PatchSetInfo(final PatchSet.Id k) {
key = k;
}
public PatchSet.Id getKey() {
return key;
}
public String getSubject() {
return subject;
}
public void setSubject(final String s) {
subject = s;
}
public String getMessage() {
return message;
}
public void setMessage(final String m) {
message = m;
}
public UserIdentity getAuthor() {
return author;
}
public void setAuthor(final UserIdentity u) {
author = u;
}
public UserIdentity getCommitter() {
return committer;
}
public void setCommitter(final UserIdentity u) {
committer = u;
}
}

View File

@@ -0,0 +1,24 @@
// Copyright 2008 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.client.reviewdb;
import com.google.gwtorm.client.Access;
import com.google.gwtorm.client.OrmException;
import com.google.gwtorm.client.PrimaryKey;
public interface PatchSetInfoAccess extends Access<PatchSetInfo, PatchSet.Id> {
@PrimaryKey("key")
PatchSetInfo get(PatchSet.Id id) throws OrmException;
}

View File

@@ -50,6 +50,21 @@ public interface ReviewDb extends Schema {
@Relation
ProjectLeadGroupAccess projectLeadGroups();
@Relation
ChangeAccess changes();
@Relation
PatchSetAccess patchSets();
@Relation
PatchSetInfoAccess patchSetInfo();
@Relation
PatchAccess patches();
@Relation
PatchLineCommentAccess patchComments();
/** Create the next unique id for an {@link Account}. */
@Sequence(startWith = 1000000)
int nextAccountId();

View File

@@ -0,0 +1,69 @@
// Copyright 2008 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.client.reviewdb;
import com.google.gwtorm.client.Column;
import java.sql.Timestamp;
public final class UserIdentity {
/** Full name of the user. */
@Column
protected String name;
/** Email address (or user@host style string anyway). */
@Column
protected String email;
/** Time (in UTC) when the identity was constructed. */
@Column
protected Timestamp when;
/** Offset from UTC */
@Column
protected int tz;
public String getName() {
return name;
}
public void setName(final String n) {
name = n;
}
public String getEmail() {
return email;
}
public void setEmail(final String e) {
email = e;
}
public Timestamp getDate() {
return when;
}
public void setDate(final Timestamp d) {
when = d;
}
public int getTimeZone() {
return tz;
}
public void setTimeZone(final int offset) {
tz = offset;
}
}