package org.alfresco.rest.api.model;
import java.io.Serializable;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Map;
import org.alfresco.model.ContentModel;
import org.alfresco.rest.framework.resource.UniqueId;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.EqualsHelper;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.data.Properties;
import org.apache.chemistry.opencmis.commons.data.PropertyData;
/**
* Concrete class carrying general information for alf_node data
*
* @author steveglover
* @author Gethin James
*/
public class Node implements Comparable
{
protected NodeRef nodeRef;
protected String name;
protected String title;
protected NodeRef guid;
protected String description;
protected Date createdAt;
protected Date modifiedAt;
protected String createdBy;
protected String modifiedBy;
public Node(NodeRef nodeRef, Map nodeProps)
{
if(nodeRef == null)
{
throw new IllegalArgumentException();
}
this.nodeRef = nodeRef;
mapProperties(nodeProps);
}
protected Object getValue(Map> props, String name)
{
PropertyData> prop = props.get(name);
Object value = (prop != null ? prop.getFirstValue() : null);
return value;
}
public Node(NodeRef nodeRef, Properties properties)
{
this.nodeRef = nodeRef;
Map> props = properties.getProperties();
this.name = (String)getValue(props, PropertyIds.NAME);
this.title = (String)getValue(props, ContentModel.PROP_TITLE.toString());
this.guid = nodeRef;
GregorianCalendar cal = (GregorianCalendar)getValue(props, PropertyIds.CREATION_DATE);
this.createdAt = cal.getTime();
cal = (GregorianCalendar)getValue(props, PropertyIds.LAST_MODIFICATION_DATE);
this.modifiedAt = cal.getTime();
this.createdBy = (String)getValue(props, PropertyIds.CREATED_BY);
this.modifiedBy = (String)getValue(props, PropertyIds.LAST_MODIFIED_BY);
}
public Node()
{
}
protected void mapProperties(Map nodeProps)
{
this.name = (String)nodeProps.get(ContentModel.PROP_NAME);
this.guid = nodeRef;
this.title = (String)nodeProps.get(ContentModel.PROP_TITLE);
this.createdAt = (Date)nodeProps.get(ContentModel.PROP_CREATED);
this.createdBy = (String)nodeProps.get(ContentModel.PROP_CREATOR);
this.modifiedAt = (Date)nodeProps.get(ContentModel.PROP_MODIFIED);
this.modifiedBy = (String)nodeProps.get(ContentModel.PROP_MODIFIER);
this.description = (String)nodeProps.get(ContentModel.PROP_DESCRIPTION);
}
public void setGuid(NodeRef guid)
{
this.guid = guid;
}
public NodeRef getGuid()
{
return guid;
}
public String getTitle()
{
return title;
}
@UniqueId
public NodeRef getNodeRef()
{
return nodeRef;
}
public void setNodeRef(NodeRef nodeRef)
{
// if(nodeRef == null)
// {
// throw new IllegalArgumentException();
// }
this.nodeRef = nodeRef;
}
public Date getCreatedAt()
{
return this.createdAt;
}
public void setCreated(Date createdAt)
{
this.createdAt = createdAt;
}
public Date getModifiedAt()
{
return modifiedAt;
}
public String getModifiedBy()
{
return modifiedBy;
}
public String getDescription()
{
return description;
}
public String getName()
{
return this.name;
}
public void setName(String name)
{
this.name = name;
}
public String getCreatedBy()
{
return this.createdBy;
}
public void setCreatedBy(String createdBy)
{
this.createdBy = createdBy;
}
public boolean equals(Object other)
{
if(this == other)
{
return true;
}
if(!(other instanceof Node))
{
return false;
}
Node node = (Node)other;
return EqualsHelper.nullSafeEquals(getNodeRef(), node.getNodeRef());
}
@Override
public int compareTo(Node node)
{
return getNodeRef().toString().compareTo(node.getNodeRef().toString());
}
@Override
public String toString()
{
return "Node [nodeRef=" + nodeRef + ", name=" + name + ", title="
+ title + ", description=" + description + ", createdAt="
+ createdAt + ", modifiedAt=" + modifiedAt + ", createdBy=" + createdBy + ", modifiedBy="
+ modifiedBy + "]";
}
}