001 package org.cumulus4j.store.model;
002
003 import java.util.Date;
004
005 import javax.jdo.annotations.Column;
006 import javax.jdo.annotations.IdGeneratorStrategy;
007 import javax.jdo.annotations.IdentityType;
008 import javax.jdo.annotations.NullValue;
009 import javax.jdo.annotations.PersistenceCapable;
010 import javax.jdo.annotations.Persistent;
011 import javax.jdo.annotations.PrimaryKey;
012 import javax.jdo.annotations.Unique;
013 import javax.jdo.annotations.Uniques;
014
015 import org.cumulus4j.store.datastoreversion.DatastoreVersionCommand;
016 import org.cumulus4j.store.datastoreversion.DatastoreVersionManager;
017
018 @PersistenceCapable(identityType=IdentityType.APPLICATION, detachable="true")
019 @Uniques({
020 @Unique(members={"keyStoreRefID", "commandID"})
021 })
022 public class DatastoreVersion {
023
024 @PrimaryKey
025 @Persistent(valueStrategy=IdGeneratorStrategy.NATIVE, sequence="DatastoreVersionSequence")
026 private Long datastoreVersionID;
027
028 @Persistent(nullValue=NullValue.EXCEPTION)
029 @Column(length=255)
030 private String commandID;
031
032 private int keyStoreRefID;
033
034 @Persistent(nullValue=NullValue.EXCEPTION)
035 private Date applyTimestamp;
036
037 private int managerVersion;
038
039 private int commandVersion;
040
041 private Integer workInProgressManagerVersion;
042
043 private Integer workInProgressCommandVersion;
044
045 @Persistent(nullValue=NullValue.EXCEPTION)
046 @Column(jdbcType="CLOB")
047 private String workInProgressStateProperties;
048
049 protected DatastoreVersion() { }
050
051 public DatastoreVersion(String commandID, int keyStoreRefID) {
052 if (commandID == null)
053 throw new IllegalArgumentException("commandID == null");
054
055 this.commandID = commandID;
056 this.keyStoreRefID = keyStoreRefID;
057 }
058
059 public String getCommandID() {
060 return commandID;
061 }
062
063 public Integer getKeyStoreRefID() {
064 return keyStoreRefID;
065 }
066
067 /**
068 * Get the timestamp of the last time, the corresponding {@link DatastoreVersionCommand} was applied.
069 * It is measured, when the command either completed or threw a
070 * @return
071 */
072 public Date getApplyTimestamp() {
073 return applyTimestamp;
074 }
075 public void setApplyTimestamp(Date executedTimestamp) {
076 this.applyTimestamp = executedTimestamp;
077 }
078
079 /**
080 * Get the version of the {@link DatastoreVersionManager manager} by whom this object was written.
081 * @return the version of the {@link DatastoreVersionManager manager} by whom this object was written.
082 */
083 public int getManagerVersion() {
084 return managerVersion;
085 }
086
087 public void setManagerVersion(int version) {
088 this.managerVersion = version;
089 }
090
091 public int getCommandVersion() {
092 return commandVersion;
093 }
094
095 public void setCommandVersion(int commandVersion) {
096 this.commandVersion = commandVersion;
097 }
098
099 public Integer getWorkInProgressManagerVersion() {
100 return workInProgressManagerVersion;
101 }
102 public void setWorkInProgressManagerVersion(Integer workInProgressManagerVersion) {
103 this.workInProgressManagerVersion = workInProgressManagerVersion;
104 }
105
106 public String getWorkInProgressStateProperties() {
107 return workInProgressStateProperties;
108 }
109 public void setWorkInProgressStateProperties(String workInPrgressStateProperties) {
110 this.workInProgressStateProperties = workInPrgressStateProperties;
111 }
112
113 public Integer getWorkInProgressCommandVersion() {
114 return workInProgressCommandVersion;
115 }
116 public void setWorkInProgressCommandVersion(Integer newCommandVersion) {
117 this.workInProgressCommandVersion = newCommandVersion;
118 }
119 }