package com.bagri.core.system; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.bind.annotation.XmlType; import com.bagri.core.Convertable; import com.bagri.core.Versionable; /** * Represents the basic configurable XDM schema entity. All configuration changes are stored and can be reviewed later on. * * @author Denis Sukhoroslov * */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(propOrder = { "version", "createdAt", "createdBy" }) @XmlSeeAlso({ Node.class, Schema.class, Module.class, Library.class, Collection.class, Fragment.class, Index.class, TriggerDefinition.class, Role.class, User.class, DataFormat.class, DataStore.class }) public abstract class Entity implements Convertable<Map<String, Object>>, Versionable { @XmlElement(required = true) private int version; @XmlElement(required = true) @XmlSchemaType(name = "dateTime") private Date createdAt; @XmlElement(required = true) private String createdBy; /** * default constructor */ public Entity() { // ... } /** * * @param version the version * @param createdAt the date/time of version creation * @param createdBy the user who has created the version */ public Entity(int version, Date createdAt, String createdBy) { this.version = version; // todo: think about other Date implementation, joda date, for instance.. this.createdAt = new Date(createdAt.getTime()); this.createdBy = createdBy; } /** * {@inheritDoc} */ @Override public int getVersion() { return version; } /** * {@inheritDoc} */ @Override public Date getCreatedAt() { return new Date(createdAt.getTime()); } /** * {@inheritDoc} */ @Override public String getCreatedBy() { return createdBy; } /** * {@inheritDoc} */ @Override public Map<String, Object> convert() { Map<String, Object> result = new HashMap<>(); result.put("version", version); result.put("created at", createdAt.toString()); result.put("created by", createdBy); return result; } /** * {@inheritDoc} */ @Override public void updateVersion(String by) { version++; createdAt = new Date(); createdBy = by; } }