blob: acf8b453f871dea77a6d786e78036dd5fa9d484e [file] [log] [blame]
// Copyright (C) 2008 The Android Open Source Project
//
// 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.reviewdb.client;
import com.google.gerrit.extensions.client.Comment.Range;
import com.google.gwtorm.client.Column;
import com.google.gwtorm.client.StringKey;
import java.sql.Timestamp;
import java.util.Objects;
/** A comment left by a user on a specific line of a {@link Patch}. */
public final class PatchLineComment {
public static class Key extends StringKey<Patch.Key> {
private static final long serialVersionUID = 1L;
@Column(id = 1, name = Column.NONE)
protected Patch.Key patchKey;
@Column(id = 2, length = 40)
protected String uuid;
protected Key() {
patchKey = new Patch.Key();
}
public Key(final Patch.Key p, final String uuid) {
this.patchKey = p;
this.uuid = uuid;
}
@Override
public Patch.Key getParentKey() {
return patchKey;
}
@Override
public String get() {
return uuid;
}
@Override
protected void set(String newValue) {
uuid = newValue;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("PatchLineComment.Key{");
builder.append("Change.Id=")
.append(getParentKey().getParentKey().getParentKey().get()).append(',');
builder.append("PatchSet.Id=")
.append(getParentKey().getParentKey().get()).append(',');
builder.append("filename=")
.append(getParentKey().getFileName()).append(',');
builder.append("uuid=").append(get());
builder.append("}");
return builder.toString();
}
}
public static final char STATUS_DRAFT = 'd';
public static final char STATUS_PUBLISHED = 'P';
public static enum Status {
DRAFT(STATUS_DRAFT),
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;
}
}
@Column(id = 1, name = Column.NONE)
protected Key key;
/** Line number this comment applies to; it should display after the line. */
@Column(id = 2)
protected int lineNbr;
/** Who wrote this comment. */
@Column(id = 3, name = "author_id")
protected Account.Id author;
/** When this comment was drafted. */
@Column(id = 4)
protected Timestamp writtenOn;
/** Current publication state of the comment; see {@link Status}. */
@Column(id = 5)
protected char status;
/** Which file is this comment; 0 is ancestor, 1 is new version. */
@Column(id = 6)
protected short side;
/** The text left by the user. */
@Column(id = 7, notNull = false, length = Integer.MAX_VALUE)
protected String message;
/**
* The parent of this comment, or null if this is the first comment on this
* line
*/
@Column(id = 8, length = 40, notNull = false)
protected String parentUuid;
@Column(id = 9, notNull = false)
protected CommentRange range;
/**
* The RevId for the commit to which this comment is referring.
*
* Note that this field is not stored in the database. It is just provided
* for users of this class to avoid a lookup when they don't have easy access
* to a ReviewDb.
*/
protected RevId revId;
protected PatchLineComment() {
}
public PatchLineComment(PatchLineComment.Key id, int line, Account.Id a,
String parentUuid, Timestamp when) {
key = id;
lineNbr = line;
author = a;
setParentUuid(parentUuid);
setStatus(Status.DRAFT);
setWrittenOn(when);
}
public PatchLineComment.Key getKey() {
return key;
}
public int getLine() {
return lineNbr;
}
public void setLine(int line) {
lineNbr = line;
}
public Account.Id getAuthor() {
return author;
}
public Timestamp getWrittenOn() {
return writtenOn;
}
public Status getStatus() {
return Status.forCode(status);
}
public void setStatus(final Status s) {
status = s.getCode();
}
public short getSide() {
return side;
}
public void setSide(final short s) {
side = s;
}
public String getMessage() {
return message;
}
public void setMessage(final String s) {
message = s;
}
public void setWrittenOn(Timestamp ts) {
writtenOn = ts;
}
public String getParentUuid() {
return parentUuid;
}
public void setParentUuid(String inReplyTo) {
parentUuid = inReplyTo;
}
public void setRange(Range r) {
if (r != null) {
range = new CommentRange(
r.startLine, r.startCharacter,
r.endLine, r.endCharacter);
} else {
range = null;
}
}
public void setRange(CommentRange r) {
range = r;
}
public CommentRange getRange() {
return range;
}
public void setRevId(RevId rev) {
revId = rev;
}
public RevId getRevId() {
return revId;
}
@Override
public boolean equals(Object o) {
if (o instanceof PatchLineComment) {
PatchLineComment c = (PatchLineComment) o;
return Objects.equals(key, c.getKey())
&& Objects.equals(lineNbr, c.getLine())
&& Objects.equals(author, c.getAuthor())
&& Objects.equals(writtenOn, c.getWrittenOn())
&& Objects.equals(status, c.getStatus().getCode())
&& Objects.equals(side, c.getSide())
&& Objects.equals(message, c.getMessage())
&& Objects.equals(parentUuid, c.getParentUuid())
&& Objects.equals(range, c.getRange())
&& Objects.equals(revId, c.getRevId());
}
return false;
}
@Override
public int hashCode() {
return key.hashCode();
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("PatchLineComment{");
builder.append("key=").append(key).append(',');
builder.append("lineNbr=").append(lineNbr).append(',');
builder.append("author=").append(author.get()).append(',');
builder.append("writtenOn=").append(writtenOn.toString()).append(',');
builder.append("status=").append(status).append(',');
builder.append("side=").append(side).append(',');
builder.append("message=").append(Objects.toString(message, ""))
.append(',');
builder.append("parentUuid=").append(Objects.toString(parentUuid, ""))
.append(',');
builder.append("range=").append(Objects.toString(range, ""))
.append(',');
builder.append("revId=").append(revId != null ? revId.get() : "");
builder.append('}');
return builder.toString();
}
}