diff --git a/src/main/java/org/caosdb/server/database/DatabaseUtils.java b/src/main/java/org/caosdb/server/database/DatabaseUtils.java index d5910eb9a93003106369f87f50bec1c0013a61bf..4f6a58a4fc50fa91170fad6139384bccb413fa81 100644 --- a/src/main/java/org/caosdb/server/database/DatabaseUtils.java +++ b/src/main/java/org/caosdb/server/database/DatabaseUtils.java @@ -216,10 +216,7 @@ public class DatabaseUtils { ret.fileSize = rs.getLong("FileSize"); ret.fileHash = bytes2UTF8(rs.getBytes("FileHash")); - ret.version = bytes2UTF8(rs.getBytes("Version")); - ret.versionSeconds = rs.getLong("VersionSeconds"); - ret.versionNanos = rs.getInt("VersionNanos"); - + ret.versionId = bytes2UTF8(rs.getBytes("Version")); return ret; } diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java index 1f1f32c69a260d374ea930ba4e1be63e34cf9ca9..1b945acf566db938f12847f758636dbfddeac3d1 100644 --- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java +++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java @@ -57,7 +57,7 @@ public class MySQLInsertSparseEntity extends MySQLTransaction implements InsertS try (final ResultSet rs = insertEntityStmt.executeQuery()) { if (rs.next()) { entity.id = rs.getInt("EntityID"); - entity.version = DatabaseUtils.bytes2UTF8(rs.getBytes("Version")); + entity.versionId = DatabaseUtils.bytes2UTF8(rs.getBytes("Version")); } else { throw new TransactionException("Didn't get new EntityID back."); } diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveVersionHistory.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveVersionHistory.java index a3c87ae6e97d3b26a99126b61d1d29db1ef6206a..7ecfbfb7ac70a4a5ec248eb0e2be2c590f0676aa 100644 --- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveVersionHistory.java +++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveVersionHistory.java @@ -61,12 +61,16 @@ public class MySQLRetrieveVersionHistory extends MySQLTransaction String parentId = DatabaseUtils.bytes2UTF8(rs.getBytes("parent")); Long childSeconds = rs.getLong("child_seconds"); Integer childNanos = rs.getInt("child_nanos"); + String childUsername = DatabaseUtils.bytes2UTF8(rs.getBytes("child_username")); + String childRealm = DatabaseUtils.bytes2UTF8(rs.getBytes("child_realm")); VersionHistoryItem v = result.get(childId); if (v == null) { v = new VersionHistoryItem(); v.id = childId; v.seconds = childSeconds; v.nanos = childNanos; + v.username = childUsername; + v.realm = childRealm; result.put(childId, v); } diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java index 18b59ef9121bd2f488efcb657a3bf158b6e14308..1c8039253b4c5e74a8054dfa937fec23c55440e8 100644 --- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java +++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java @@ -80,7 +80,7 @@ public class MySQLUpdateSparseEntity extends MySQLTransaction implements UpdateS ResultSet rs = updateEntityStmt.executeQuery(); if (rs.next()) { - spe.version = DatabaseUtils.bytes2UTF8(rs.getBytes("Version")); + spe.versionId = DatabaseUtils.bytes2UTF8(rs.getBytes("Version")); } } catch (final SQLIntegrityConstraintViolationException e) { 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 1800168ebd2cd6ef4180e23046f95066597086e5..7e95d1c2012d00df0e6081583d21dc718fc65e12 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 @@ -69,6 +69,6 @@ public class InsertSparseEntity extends BackendTransaction { public void cleanUp() {} }); this.entity.setId(e.id); - this.entity.setVersion(new Version(e.version)); + this.entity.setVersion(new Version(e.versionId)); } } 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 632ce20cfe71d0e116bbe3987a60c45b11085eec..d013b296ba5fe4a747a07af448b167f225a9166f 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 @@ -1,59 +1,59 @@ /* - * ** header v3.0 - * This file is a part of the CaosDB Project. + * ** header v3.0 This file is a part of the CaosDB Project. * - * Copyright (C) 2018 Research Group Biomedical Physics, - * Max-Planck-Institute for Dynamics and Self-Organization Göttingen - * Copyright (C) 2019 IndiScale GmbH - * Copyright (C) 2019 Timm Fitschen (t.fitschen@indiscale.com) + * Copyright (C) 2020 IndiScale GmbH <info@indiscale.com> + * Copyright (C) 2020 Timm Fitschen <t.fitschen@indiscale.com> * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see <https://www.gnu.org/licenses/>. * * ** end header */ package org.caosdb.server.database.backend.transaction; -import java.util.ArrayList; +import java.util.HashMap; import org.caosdb.datetime.UTCDateTime; -import org.caosdb.server.database.BackendTransaction; -import org.caosdb.server.database.backend.interfaces.RetrieveTransactionHistoryImpl; import org.caosdb.server.database.exceptions.TransactionException; -import org.caosdb.server.database.proto.ProtoTransactionLogMessage; +import org.caosdb.server.database.proto.VersionHistoryItem; import org.caosdb.server.entity.EntityInterface; -import org.caosdb.server.utils.TransactionLogMessage; +import org.caosdb.server.entity.Version; -public class RetrieveTransactionHistory extends BackendTransaction { +public class RetrieveTransactionHistory extends RetrieveVersionHistory { - private final EntityInterface entity; - - public RetrieveTransactionHistory(final EntityInterface entity) { - this.entity = entity; + public RetrieveTransactionHistory(EntityInterface e) { + super(e); } @Override - protected void execute() { - final RetrieveTransactionHistoryImpl t = - getImplementation(RetrieveTransactionHistoryImpl.class); - process(t.execute(entity.getId())); + protected void process(HashMap<String, VersionHistoryItem> map) throws TransactionException { + super.process(map); + if (!map.isEmpty()) getEntity().setVersion(getHistory()); } - private void process(final ArrayList<ProtoTransactionLogMessage> l) throws TransactionException { - for (final ProtoTransactionLogMessage t : l) { - final UTCDateTime dateTime = UTCDateTime.UTCSeconds(t.seconds, t.nanos); - - this.entity.addTransactionLog( - new TransactionLogMessage(t.transaction, this.entity, t.username, dateTime)); + @Override + protected Version getVersion(String id) { + Version v = new Version(id); + VersionHistoryItem i = getHistoryItems().get(v.getId()); + if (i != null) { + v.setDate(UTCDateTime.UTCSeconds(i.seconds, i.nanos)); + v.setUsername(i.username); + v.setRealm(i.realm); } + return v; + } + + private Version getHistory() { + Version v = getVersion(getEntity().getVersion().getId()); + v.setSuccessors(getSuccessors(v.getId(), true)); + v.setPredecessors(getPredecessors(v.getId(), true)); + return v; } } diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveVersionHistory.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveVersionHistory.java index 6077d6491fda93b96262b48783092578af37f4f8..53ff3a0858616a0915639cf1dd29a707d55e5eca 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveVersionHistory.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveVersionHistory.java @@ -22,29 +22,34 @@ */ package org.caosdb.server.database.backend.transaction; -import java.util.Collection; import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import org.apache.commons.jcs.access.behavior.ICacheAccess; +import org.caosdb.server.caching.Cache; import org.caosdb.server.database.CacheableBackendTransaction; import org.caosdb.server.database.backend.interfaces.RetrieveVersionHistoryImpl; import org.caosdb.server.database.exceptions.TransactionException; import org.caosdb.server.database.proto.VersionHistoryItem; import org.caosdb.server.entity.EntityInterface; +import org.caosdb.server.entity.Version; public abstract class RetrieveVersionHistory extends CacheableBackendTransaction<Integer, HashMap<String, VersionHistoryItem>> { - // TODO - // private static final ICacheAccess<String, Version> cache = - // Cache.getCache("BACKEND_RetrieveVersionHistory"); + private static final ICacheAccess<Integer, HashMap<String, VersionHistoryItem>> cache = + Cache.getCache("BACKEND_RetrieveVersionHistory"); private EntityInterface entity; - private HashMap<String, VersionHistoryItem> map; + + /** A map of all history items which belong to this entity. The keys are the version ids. */ + private HashMap<String, VersionHistoryItem> historyItems; public static void removeCached(Integer entityId) { - // TODO + cache.remove(entityId); } public RetrieveVersionHistory(EntityInterface e) { - super(null); // TODO caching + super(cache); this.entity = e; } @@ -57,7 +62,7 @@ public abstract class RetrieveVersionHistory /** After this method call, the version map is available to the object. */ @Override protected void process(HashMap<String, VersionHistoryItem> map) throws TransactionException { - this.map = map; + this.historyItems = map; } @Override @@ -65,15 +70,48 @@ public abstract class RetrieveVersionHistory return entity.getId(); } - public HashMap<String, VersionHistoryItem> getMap() { - return this.map; + public HashMap<String, VersionHistoryItem> getHistoryItems() { + return this.historyItems; } public EntityInterface getEntity() { return this.entity; } - public Collection<VersionHistoryItem> getList() { - return this.map.values(); + /** Return a list of direct predecessors which have their direct predecessors attached */ + protected List<Version> getPredecessors(String id, boolean transitive) { + LinkedList<Version> result = new LinkedList<>(); + if (getHistoryItems().containsKey(id) && getHistoryItems().get(id).parents != null) + for (String p : getHistoryItems().get(id).parents) { + Version predecessor = getVersion(p); + if (transitive) { + predecessor.setPredecessors(getPredecessors(p, transitive)); + } + result.add(predecessor); + } + return result; + } + + protected abstract Version getVersion(String version); + + /** Return a list of direct successors which have their direct successors attached */ + protected List<Version> getSuccessors(String id, boolean transitive) { + LinkedList<Version> result = new LinkedList<>(); + + outer: + for (VersionHistoryItem i : getHistoryItems().values()) { + if (i.parents != null) + for (String p : i.parents) { + if (id.equals(p)) { + Version successor = getVersion(i.id); + result.add(successor); + if (transitive) { + successor.setSuccessors(getSuccessors(i.id, transitive)); + } + continue outer; + } + } + } + return result; } } 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 7d9fe5fd7ea42cf3d6aa29a127a7f82f7ec1764c..e2218b1dc1190bc07796b462c0d7f2b5dab54538 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 @@ -23,8 +23,6 @@ package org.caosdb.server.database.backend.transaction; import java.util.HashMap; -import java.util.LinkedList; -import org.caosdb.datetime.UTCDateTime; import org.caosdb.server.database.exceptions.TransactionException; import org.caosdb.server.database.proto.VersionHistoryItem; import org.caosdb.server.entity.EntityInterface; @@ -39,46 +37,18 @@ public class RetrieveVersionInfo extends RetrieveVersionHistory { @Override protected void process(HashMap<String, VersionHistoryItem> map) throws TransactionException { super.process(map); // Make the map available to the object. - if (!map.isEmpty()) getVersion(); + if (!map.isEmpty()) getEntity().setVersion(getVersion()); } - public Version getVersion() { - Version v = getEntity().getVersion(); - VersionHistoryItem i = getMap().get(v.getId()); - if (i != null) v.setDate(UTCDateTime.UTCSeconds(i.seconds, i.nanos)); - - v.setPredecessors(getPredecessors(v.getId())); - v.setSuccessors(getSuccessors(v.getId())); - return v; - } - - /** Return a list of direct children. */ - private LinkedList<Version> getSuccessors(String id) { - LinkedList<Version> result = new LinkedList<>(); - - outer: - for (VersionHistoryItem i : getList()) { - if (i.parents != null) - for (String p : i.parents) { - if (id.equals(p)) { - Version successor = new Version(i.id, i.seconds, i.nanos); - result.add(successor); - continue outer; - } - } - } - return result; + @Override + protected Version getVersion(String id) { + return new Version(id); } - /** Return a list of direct parents. */ - private LinkedList<Version> getPredecessors(String id) { - LinkedList<Version> result = new LinkedList<>(); - if (getMap().containsKey(id) && getMap().get(id).parents != null) - for (String p : getMap().get(id).parents) { - VersionHistoryItem i = getMap().get(p); - Version predecessor = new Version(i.id, i.seconds, i.nanos); - result.add(predecessor); - } - return result; + public Version getVersion() { + Version v = getVersion(getEntity().getVersion().getId()); + v.setPredecessors(getPredecessors(v.getId(), false)); + v.setSuccessors(getSuccessors(v.getId(), false)); + return v; } } diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/UpdateEntity.java b/src/main/java/org/caosdb/server/database/backend/transaction/UpdateEntity.java index 9c20cb1d2d112e8d64ce5be2cfa8a7f8da20fe10..60fd34c77f1e70184dfc50c1a5644f3503ac9630 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/UpdateEntity.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/UpdateEntity.java @@ -54,6 +54,7 @@ public class UpdateEntity extends BackendTransaction { execute(new InsertEntityProperties(e)); + RetrieveVersionHistory.removeCached(e.getId()); execute(new RetrieveVersionInfo(e)); } } diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/UpdateSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/transaction/UpdateSparseEntity.java index 2385ec843a3d499d1184b58eca06f8ae05cbe4f8..8548fb0477de9d8b52b18b8132af15295dbc9353 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/UpdateSparseEntity.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/UpdateSparseEntity.java @@ -52,6 +52,6 @@ public class UpdateSparseEntity extends BackendTransaction { t.execute(spe); - this.entity.setVersion(new Version(spe.version)); + this.entity.setVersion(new Version(spe.versionId)); } } diff --git a/src/main/java/org/caosdb/server/database/proto/SparseEntity.java b/src/main/java/org/caosdb/server/database/proto/SparseEntity.java index 3d5a29c9c4a69670d49347864b7ed885e758192f..d2292c58825ac6807e24f3ad3d086b29dd8a6e7e 100644 --- a/src/main/java/org/caosdb/server/database/proto/SparseEntity.java +++ b/src/main/java/org/caosdb/server/database/proto/SparseEntity.java @@ -38,9 +38,7 @@ public class SparseEntity extends VerySparseEntity { public String filePath = null; public Long fileSize = null; public Long fileChecked = null; - public String version = null; - public Long versionSeconds = null; - public Integer versionNanos = null; + public String versionId = null; @Override public String toString() { @@ -54,9 +52,7 @@ public class SparseEntity extends VerySparseEntity { .append(this.fileHash) .append(this.filePath) .append(this.fileSize) - .append(this.version) - .append(this.versionSeconds) - .append(this.versionNanos) + .append(this.versionId) .toString(); } } diff --git a/src/main/java/org/caosdb/server/database/proto/VersionHistoryItem.java b/src/main/java/org/caosdb/server/database/proto/VersionHistoryItem.java index 26109760ecde53ea20405bd02095cd951818677d..f76b3bc61b3c92ad0639cf265d8283cd48f5373b 100644 --- a/src/main/java/org/caosdb/server/database/proto/VersionHistoryItem.java +++ b/src/main/java/org/caosdb/server/database/proto/VersionHistoryItem.java @@ -5,9 +5,16 @@ import java.util.LinkedList; public class VersionHistoryItem implements Serializable { - private static final long serialVersionUID = 6319362462701459355L; + private static final long serialVersionUID = 428030617967255942L; public String id = null; public LinkedList<String> parents = null; public Long seconds = null; public Integer nanos = null; + public String username = null; + public String realm = null; + + @Override + public String toString() { + return id; + } } diff --git a/src/main/java/org/caosdb/server/entity/Entity.java b/src/main/java/org/caosdb/server/entity/Entity.java index 8578191c40c229ae1b9f0e873d35690c55cf2bfc..845bb25a3cee665fd8f0985c6969f53dfc868025 100644 --- a/src/main/java/org/caosdb/server/entity/Entity.java +++ b/src/main/java/org/caosdb/server/entity/Entity.java @@ -34,7 +34,6 @@ import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.AuthorizationException; import org.apache.shiro.authz.Permission; import org.apache.shiro.subject.Subject; -import org.caosdb.datetime.UTCDateTime; import org.caosdb.server.CaosDBException; import org.caosdb.server.database.proto.SparseEntity; import org.caosdb.server.database.proto.VerySparseEntity; @@ -1079,11 +1078,9 @@ public class Entity extends AbstractObservable implements EntityInterface { setId(spe.id); this.setRole(spe.role); setEntityACL(spe.acl); - UTCDateTime versionDate = null; - if (spe.versionSeconds != null) { - versionDate = UTCDateTime.UTCSeconds(spe.versionSeconds, spe.versionNanos); + if (spe.versionId != null) { + this.version = new Version(spe.versionId); } - this.version = new Version(spe.version, versionDate); if (!isNameOverride()) { setName(spe.name); diff --git a/src/main/java/org/caosdb/server/entity/Version.java b/src/main/java/org/caosdb/server/entity/Version.java index 3f9e148583686887fab39038aa427bccf1c69b25..693e912eab13d80412a11a3bf3284424bfd5d55a 100644 --- a/src/main/java/org/caosdb/server/entity/Version.java +++ b/src/main/java/org/caosdb/server/entity/Version.java @@ -20,7 +20,7 @@ package org.caosdb.server.entity; -import java.util.LinkedList; +import java.util.List; import org.caosdb.datetime.UTCDateTime; /** @@ -31,25 +31,33 @@ import org.caosdb.datetime.UTCDateTime; public class Version { private String id = null; - private LinkedList<Version> predecessors = null; - private LinkedList<Version> successors = null; + private String username = null; + private String realm = null; + private List<Version> predecessors = null; + private List<Version> successors = null; private UTCDateTime date = null; public Version(String id, long seconds, int nanos) { - this(id, UTCDateTime.UTCSeconds(seconds, nanos)); + this(id, UTCDateTime.UTCSeconds(seconds, nanos), null, null); } - public Version(String id, UTCDateTime date) { + public Version(String id, UTCDateTime date, String username, String realm) { this.id = id; this.date = date; + this.username = username; + this.realm = realm; } public Version(String id) { - this(id, null); + this(id, null, null, null); } public Version() {} + public Version(String id, UTCDateTime timestamp) { + this(id, timestamp, null, null); + } + public UTCDateTime getDate() { return date; } @@ -66,19 +74,39 @@ public class Version { this.id = id; } - public LinkedList<Version> getSuccessors() { + public List<Version> getSuccessors() { return successors; } - public void setSuccessors(LinkedList<Version> successors) { + public void setSuccessors(List<Version> successors) { this.successors = successors; } - public LinkedList<Version> getPredecessors() { + public List<Version> getPredecessors() { return predecessors; } - public void setPredecessors(LinkedList<Version> predecessors) { + public void setPredecessors(List<Version> predecessors) { this.predecessors = predecessors; } + + public String getRealm() { + return realm; + } + + public void setRealm(String realm) { + this.realm = realm; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public void setDate(Long timestamp) { + this.date = UTCDateTime.SystemMillisToUTCDateTime(timestamp); + } } 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 65ec9880dfef43a4e460bba692ece6c9f87faa7e..d43fe378b47996c22f6caa5f0e244ae58c8d5eb2 100644 --- a/src/main/java/org/caosdb/server/entity/xml/VersionXMLSerializer.java +++ b/src/main/java/org/caosdb/server/entity/xml/VersionXMLSerializer.java @@ -30,28 +30,37 @@ import org.jdom2.Element; * @author Timm Fitschen <t.fitschen@indiscale.com> */ class VersionXMLSerializer { + public Element toElement(Version version) { - Element result = new Element("Version"); - result.setAttribute("id", version.getId()); - if (version.getDate() != null) { - result.setAttribute("date", version.getDate().toDateTimeString(TimeZone.getDefault())); - } + return toElement(version, "Version"); + } + + private Element toElement(Version version, String tag) { + Element element = new Element(tag); + setAttributes(version, element); if (version.getPredecessors() != null) { for (Version p : version.getPredecessors()) { - Element predecessor = new Element("Predecessor"); - predecessor.setAttribute("id", p.getId()); - predecessor.setAttribute("date", p.getDate().toDateTimeString(TimeZone.getDefault())); - result.addContent(predecessor); + element.addContent(toElement(p, "Predecessor")); } } if (version.getSuccessors() != null) { for (Version s : version.getSuccessors()) { - Element successor = new Element("Successor"); - successor.setAttribute("id", s.getId()); - successor.setAttribute("date", s.getDate().toDateTimeString(TimeZone.getDefault())); - result.addContent(successor); + element.addContent(toElement(s, "Successor")); } } - return result; + return element; + } + + private void setAttributes(Version version, Element element) { + element.setAttribute("id", version.getId()); + if (version.getUsername() != null) { + element.setAttribute("username", version.getUsername()); + } + if (version.getRealm() != null) { + element.setAttribute("realm", version.getRealm()); + } + if (version.getDate() != null) { + element.setAttribute("date", version.getDate().toDateTimeString(TimeZone.getDefault())); + } } } diff --git a/src/main/java/org/caosdb/server/jobs/core/History.java b/src/main/java/org/caosdb/server/jobs/core/History.java index a7c58979f49b2a7abdc313924dc8fb6b86bbffd4..87e9f69d0de18779268b8fc43b228d604dfe5133 100644 --- a/src/main/java/org/caosdb/server/jobs/core/History.java +++ b/src/main/java/org/caosdb/server/jobs/core/History.java @@ -24,6 +24,7 @@ package org.caosdb.server.jobs.core; import org.apache.shiro.authz.AuthorizationException; import org.caosdb.server.database.backend.transaction.RetrieveTransactionHistory; +import org.caosdb.server.database.backend.transaction.RetrieveVersionHistory; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.jobs.FlagJob; import org.caosdb.server.jobs.JobAnnotation; @@ -42,7 +43,7 @@ public class History extends FlagJob { if (entity.getId() != null && entity.getId() > 0) { try { entity.checkPermission(EntityPermission.RETRIEVE_HISTORY); - final RetrieveTransactionHistory t = new RetrieveTransactionHistory(entity); + final RetrieveVersionHistory t = new RetrieveTransactionHistory(entity); execute(t); } catch (final AuthorizationException e) { entity.setEntityStatus(EntityStatus.UNQUALIFIED); diff --git a/src/main/java/org/caosdb/server/transaction/Insert.java b/src/main/java/org/caosdb/server/transaction/Insert.java index f60fc1286ae909eb7fd999aa3af1f8379dd331ff..d37f7ce516f36252466555ea18fe249f2730fea1 100644 --- a/src/main/java/org/caosdb/server/transaction/Insert.java +++ b/src/main/java/org/caosdb/server/transaction/Insert.java @@ -27,7 +27,6 @@ import org.caosdb.server.database.access.Access; import org.caosdb.server.database.backend.transaction.InsertEntity; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.FileProperties; -import org.caosdb.server.entity.Version; import org.caosdb.server.entity.container.InsertContainer; import org.caosdb.server.entity.container.TransactionContainer; import org.caosdb.server.permissions.EntityACL; @@ -104,10 +103,6 @@ public class Insert extends WriteTransaction<InsertContainer> { public void insert(final TransactionContainer container, final Access access) throws Exception { if (container.getStatus().ordinal() >= EntityStatus.QUALIFIED.ordinal()) { execute(new InsertEntity(container), access); - for (EntityInterface e : container) { - // TODO move to InsertEntity transaction - e.setVersion(new Version(e.getVersion().getId(), this.getTimestamp())); - } } }