diff --git a/conf/core/cache.ccf b/conf/core/cache.ccf index b4e1f93596a6170ef04ec373dc7a8d70e51fedcc..ad73cb86d259a1de8ecd836f8e72de8aa254793e 100644 --- a/conf/core/cache.ccf +++ b/conf/core/cache.ccf @@ -28,8 +28,8 @@ jcs.region.BACKEND_JobRules.cacheattributes.MaxObjects=103 jcs.region.BACKEND_SparseEntities jcs.region.BACKEND_SparseEntities.cacheattributes.MaxObjects=1002 -jcs.region.BACKEND_RetrieveFullVersionInfo -jcs.region.BACKEND_RetrieveFullVersionInfo.cacheattributes.MaxObjects=1006 +jcs.region.BACKEND_RetrieveVersionHistory +jcs.region.BACKEND_RetrieveVersionHistory.cacheattributes.MaxObjects=1006 # PAM UserSource Caching: Cached Items expire after 60 seconds if they are not requested (idle) and after 600 seconds max. # PAM_UnixUserGroups diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/InsertSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/transaction/InsertSparseEntity.java index 7e95d1c2012d00df0e6081583d21dc718fc65e12..22720f836e5cbd4912f3aedccd25398e80a19324 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/InsertSparseEntity.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/InsertSparseEntity.java @@ -70,5 +70,6 @@ public class InsertSparseEntity extends BackendTransaction { }); this.entity.setId(e.id); this.entity.setVersion(new Version(e.versionId)); + this.entity.getVersion().setHead(true); } } diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveTransactionHistory.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveTransactionHistory.java index d013b296ba5fe4a747a07af448b167f225a9166f..28ffbf8a408afb8c10c9e1acdeb37e2eebaf07e4 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveTransactionHistory.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveTransactionHistory.java @@ -54,6 +54,8 @@ public class RetrieveTransactionHistory extends RetrieveVersionHistory { Version v = getVersion(getEntity().getVersion().getId()); v.setSuccessors(getSuccessors(v.getId(), true)); v.setPredecessors(getPredecessors(v.getId(), true)); + v.setHead(v.getSuccessors().isEmpty()); + v.setCompleteHistory(true); return v; } } diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveVersionInfo.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveVersionInfo.java index e2218b1dc1190bc07796b462c0d7f2b5dab54538..26f3f396210eec58144b55d0f7e9d0c469cb7b30 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveVersionInfo.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveVersionInfo.java @@ -49,6 +49,7 @@ public class RetrieveVersionInfo extends RetrieveVersionHistory { Version v = getVersion(getEntity().getVersion().getId()); v.setPredecessors(getPredecessors(v.getId(), false)); v.setSuccessors(getSuccessors(v.getId(), false)); + v.setHead(v.getSuccessors().isEmpty()); return v; } } diff --git a/src/main/java/org/caosdb/server/entity/Version.java b/src/main/java/org/caosdb/server/entity/Version.java index 693e912eab13d80412a11a3bf3284424bfd5d55a..5529c7c5f5e8c83d95ad5afae7c1ae786806df89 100644 --- a/src/main/java/org/caosdb/server/entity/Version.java +++ b/src/main/java/org/caosdb/server/entity/Version.java @@ -36,6 +36,8 @@ public class Version { private List<Version> predecessors = null; private List<Version> successors = null; private UTCDateTime date = null; + private boolean isHead = false; + private boolean isCompleteHistory = false; public Version(String id, long seconds, int nanos) { this(id, UTCDateTime.UTCSeconds(seconds, nanos), null, null); @@ -109,4 +111,20 @@ public class Version { public void setDate(Long timestamp) { this.date = UTCDateTime.SystemMillisToUTCDateTime(timestamp); } + + public boolean isHead() { + return isHead; + } + + public void setHead(boolean isHead) { + this.isHead = isHead; + } + + public boolean isCompleteHistory() { + return isCompleteHistory; + } + + public void setCompleteHistory(boolean isCompleteHistory) { + this.isCompleteHistory = isCompleteHistory; + } } diff --git a/src/main/java/org/caosdb/server/entity/xml/VersionXMLSerializer.java b/src/main/java/org/caosdb/server/entity/xml/VersionXMLSerializer.java index d43fe378b47996c22f6caa5f0e244ae58c8d5eb2..40d19a5f3a0ef6d9448ed8567840e610be712391 100644 --- a/src/main/java/org/caosdb/server/entity/xml/VersionXMLSerializer.java +++ b/src/main/java/org/caosdb/server/entity/xml/VersionXMLSerializer.java @@ -62,5 +62,11 @@ class VersionXMLSerializer { if (version.getDate() != null) { element.setAttribute("date", version.getDate().toDateTimeString(TimeZone.getDefault())); } + if (version.isHead()) { + element.setAttribute("head", "true"); + } + if (version.isCompleteHistory()) { + element.setAttribute("completeHistory", "true"); + } } } diff --git a/src/main/java/org/caosdb/server/utils/Info.java b/src/main/java/org/caosdb/server/utils/Info.java index 19f792cf625765924f02a7b734f2e57849584ffc..3a488a1ca50abcc99932e61901d07046c935f707 100644 --- a/src/main/java/org/caosdb/server/utils/Info.java +++ b/src/main/java/org/caosdb/server/utils/Info.java @@ -202,6 +202,10 @@ public class Info extends AbstractObservable implements Observer, TransactionInt } dropOffBox = new File(FileSystem.getDropOffBox()); final Element info = new Element("Stats"); + if (CaosDBServer.isDebugMode()) { + info.setAttribute("debug", "true"); + } + final Element counts = new Element("counts"); counts.setAttribute("records", Integer.toString(recordsCount)); counts.setAttribute("properties", Integer.toString(propertiesCount)); @@ -209,18 +213,16 @@ public class Info extends AbstractObservable implements Observer, TransactionInt counts.setAttribute("files", Integer.toString(filesCount)); counts.setAttribute("fssize", fssize); counts.setAttribute("tmpfiles", Integer.toString(tmpFilesCount)); - if (CaosDBServer.isDebugMode()) { - counts.setAttribute("debug", "true"); - } - final Element e = new Element("dropOffBox"); + + final Element dropOffBoxElem = new Element("dropOffBox"); if (dropOffBox.isDirectory()) { if (dropOffBox.canRead()) { if (tree) { - e.setAttribute("path", dropOffBox.getAbsolutePath()); - e.addContent(getTree(dropOffBox.listFiles())); + dropOffBoxElem.setAttribute("path", dropOffBox.getAbsolutePath()); + dropOffBoxElem.addContent(getTree(dropOffBox.listFiles())); } else { - e.setAttribute("path", dropOffBox.getAbsolutePath()); - e.addContent(getFlatList(dropOffBox.listFiles())); + dropOffBoxElem.setAttribute("path", dropOffBox.getAbsolutePath()); + dropOffBoxElem.addContent(getFlatList(dropOffBox.listFiles())); } } else { // TODO: return a message that the DropOffBox is not readable. @@ -230,7 +232,7 @@ public class Info extends AbstractObservable implements Observer, TransactionInt // present. } info.addContent(counts); - info.addContent(e); + info.addContent(dropOffBoxElem); return info; }