package org.docear.plugin.pdfutilities.features;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.docear.plugin.pdfutilities.map.AnnotationController;
import org.docear.plugin.pdfutilities.pdf.PdfAnnotationImporter;
import org.freeplane.core.util.LogUtils;
public class AnnotationModel implements IAnnotation{
private AnnotationID id;
private AnnotationType annotationType;
private AnnotationModel parent;
private Integer page;
private URI destinationUri;
private String title;
private final long objectID;
private int oldObjectNumber = -1;
private URI uri;
private Object annotationObject;
private List<AnnotationModel> children = new ArrayList<AnnotationModel>();
private boolean isConflicted;
private boolean isNew;
private boolean isInserted;
private boolean isNewID = false;
public AnnotationModel(long id){
this(id, null);
}
public AnnotationModel(long id, AnnotationType type){
this.objectID = id;
this.annotationType = type;
}
public AnnotationID getAnnotationID() {
if(id == null && uri != null){
id = new AnnotationID(uri, objectID);
id.setIsNewID(this.isNewID);
id.setObjectNumber(this.oldObjectNumber);
}
return id;
}
public AnnotationType getAnnotationType() {
return annotationType;
}
public void setAnnotationType(AnnotationType annotationType) {
this.annotationType = annotationType;
}
public Integer getPage() {
return page;
}
public void updatePage() {
try {
IAnnotation annotation = new PdfAnnotationImporter().searchAnnotation(this);
if(annotation != null && annotation.getPage() != null){
this.page = annotation.getPage();
}
else{
LogUtils.warn("Could not update Page!");
}
}
catch (Exception e) {
LogUtils.warn("Could not update Page!", e);
}
}
public void setPage(Integer page) {
this.page = page;
}
public long getObjectID() {
return this.objectID;
}
//
// public void setObjectID(Integer objectNumber) {
// this.objectNumber = objectNumber;
// if(this.uri != null){
// this.id = new AnnotationID(this.getUri(), objectNumber);
// }
// }
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public URI getDestinationUri() {
return destinationUri;
}
public void setDestinationUri(URI uri) {
this.destinationUri = uri;
}
public List<AnnotationModel> getChildren() {
return children;
}
public void setNew(boolean isNew){
this.isNew = isNew;
}
public boolean isNew(){
return this.isNew;
}
public boolean isConflicted() {
return isConflicted;
}
public void setConflicted(boolean isConflicted) {
this.isConflicted = isConflicted;
}
public String toString(){
return this.getTitle();
}
public URI getSource() {
return this.uri;
}
public void setSource(URI absoluteUri){
this.uri = absoluteUri;
if(absoluteUri == null) {
this.id = null;
}
else {
this.id = null;
getAnnotationID();
}
}
public boolean hasNewChildren(){
for(IAnnotation child : this.children){
if(child.isNew() || child.hasNewChildren()){
return true;
}
}
return false;
}
public boolean hasConflictedChildren(){
for(AnnotationModel child : this.children){
if(child.isConflicted() || child.hasConflictedChildren()){
return true;
}
}
return false;
}
public static boolean hasConflicts(Collection<AnnotationModel> annotations){
for(AnnotationModel model : annotations){
if(model.isConflicted || model.hasConflictedChildren()){
return true;
}
}
return false;
}
public Object getAnnotationObject() {
return annotationObject;
}
public void setAnnotationObject(Object annotationObject) {
this.annotationObject = annotationObject;
}
public String getDocumentHash() {
return AnnotationController.getDocumentHash(getSource());
}
public String getDocumentTitle() {
return AnnotationController.getDocumentTitle(getSource());
}
public AnnotationModel getParent() {
return parent;
}
public void setParent(AnnotationModel parent) {
this.parent = parent;
}
public boolean isInserted() {
return isInserted;
}
public void setInserted(boolean isInserted) {
this.isInserted = isInserted;
}
public int getChildIndex(AnnotationModel child){
return this.children.indexOf(child);
}
public void setOldObjectNumber(int number) {
this.oldObjectNumber = number;
if(getAnnotationID() != null) {
id.setObjectNumber(oldObjectNumber);
}
}
public int getOldObjectNumber() {
return oldObjectNumber;
}
public void setIsNewID(boolean isNewID) {
this.isNewID = isNewID;
if(getAnnotationID() != null) {
id.setIsNewID(this.isNewID);
}
}
}