package org.tmatesoft.svn.core.wc2;
import java.io.File;
import java.util.Date;
import org.tmatesoft.svn.core.SVNProperties;
import org.tmatesoft.svn.core.SVNRevisionProperty;
import org.tmatesoft.svn.core.internal.util.SVNDate;
/**
* Provides information for annotate item in {@link SvnAnnotate} operation.
*
* @author TMate Software Ltd.
* @version 1.7
*/
public class SvnAnnotateItem {
private long revision;
private SVNProperties revisionProperties;
private SVNProperties mergedRevisionProperties;
private String line;
private long mergedRevision;
private String mergedPath;
private int lineNumber;
private File contents;
private boolean isEof;
private boolean isRevision;
private boolean isLine;
private boolean returnResult;
public SvnAnnotateItem(boolean isEof) {
this.isEof = true;
}
/**
* Constructs and initializes an <b>SvnAnnotateItem</b> object with the
* specified parameters.
*
* @param date modification date
* @param revision modification revision
* @param author author of modification
* @param line modified line
* @param mergedDate date of merge
* @param mergedRevision revision of merge
* @param mergedAuthor author of merge
* @param mergedPath path of merge
* @param lineNumber number of line
*/
public SvnAnnotateItem(Date date, long revision, String author, String line, Date mergedDate,
long mergedRevision, String mergedAuthor, String mergedPath, int lineNumber) {
this.isLine = true;
this.revisionProperties = createRevisionProperties(author, date);
this.revision = revision;
this.line = line;
this.mergedRevisionProperties = createRevisionProperties(mergedAuthor, mergedDate);
this.mergedRevision = mergedRevision;
this.mergedPath = mergedPath;
this.lineNumber = lineNumber;
}
/**
* Constructs and initializes an <b>SvnAnnotateItem</b> object with the
* specified parameters.
*
* @param date modification date
* @param revision revision of modification
* @param author author of modification
* @param contents contents represented in file
*/
public SvnAnnotateItem(Date date, long revision, String author, File contents) {
this.isRevision = true;
this.revisionProperties = createRevisionProperties(author, date);
this.revision = revision;
this.contents = contents;
}
/**
* Gets date of modification.
*
* @return date of modification
*/
public Date getDate() {
return getDate(getRevisionProperties());
}
/**
* Gets modification revision.
*
* @return modification revision
*/
public long getRevision() {
return revision;
}
/**
* Gets the properties of modification revision.
*
* @return revision properties
*/
public SVNProperties getRevisionProperties() {
return revisionProperties;
}
/**
* Gets author of modification.
*
* @return modification author
*/
public String getAuthor() {
return getAuthor(getRevisionProperties());
}
/**
* Gets date of merge.
*
* @return merge date
*/
public Date getMergedDate() {
return getDate(getMergedRevisionProperties());
}
/**
* Gets modified line.
*
* @return modified line
*/
public String getLine() {
return line;
}
/**
* Gets revision of merge.
*
* @return merge revision
*/
public long getMergedRevision() {
return mergedRevision;
}
/**
* Gets properties of merge revision.
*
* @return merge revision properties
*/
public SVNProperties getMergedRevisionProperties() {
return mergedRevisionProperties;
}
/**
* Gets author of merge revision.
*
* @return merge revision author
*/
public String getMergedAuthor() {
return getAuthor(getMergedRevisionProperties());
}
/**
* Gets path of merge revision.
*
* @return merge revision path
*/
public String getMergedPath() {
return mergedPath;
}
/**
* Gets line number of modification
*
* @return line number of modification
*/
public int getLineNumber() {
return lineNumber;
}
/**
* Gets contents of modification in <code>File</code>
*
* @return modification contents
*/
public File getContents() {
return contents;
}
/**
* Gets whether or not end of file reached.
*
* @return <code>true</code> if it is end of file, otherwise <code>false</code>
*/
public boolean isEof() {
return isEof;
}
/**
* Gets whether or not item is line.
*
* @return <code>true</code> if item is line, otherwise <code>false</code>
*/
public boolean isLine() {
return isLine;
}
/**
* Gets whether or not item is revision.
*
* @return <code>true</code> if item is revision, otherwise <code>false</code>
*/
public boolean isRevision() {
return isRevision;
}
/**
* Sets whether or not item was handled.
*
* @param returnResult <code>true</code> if item was handled, otherwise <code>false</code>
*/
public void setReturnResult(boolean returnResult) {
this.returnResult = returnResult;
}
/**
* Gets whether or not item was handled.
*
* @return <code>true</code> if item was handled, otherwise <code>false</code>
*/
public boolean getReturnResult() {
return returnResult;
}
private SVNProperties createRevisionProperties(String author, Date date) {
if (author == null && date == null) {
return null;
}
SVNProperties properties = new SVNProperties();
if (author != null) {
properties.put(SVNRevisionProperty.AUTHOR, author);
}
if (date != null) {
properties.put(SVNRevisionProperty.DATE, SVNDate.fromDate(date).format());
}
return properties;
}
private String getAuthor(SVNProperties revisionProperties) {
if (revisionProperties == null) {
return null;
}
return revisionProperties.getStringValue(SVNRevisionProperty.AUTHOR);
}
private Date getDate(SVNProperties revisionProperties) {
if (revisionProperties == null) {
return null;
}
String dateString = revisionProperties.getStringValue(SVNRevisionProperty.DATE);
if (dateString == null) {
return null;
}
return SVNDate.parseDate(dateString);
}
}