2018-05-17 12:51:56 +02:00
|
|
|
package org.gcube.data.access.storagehub.handlers;
|
|
|
|
|
2018-06-29 16:59:24 +02:00
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.List;
|
|
|
|
|
2018-05-17 12:51:56 +02:00
|
|
|
import javax.inject.Singleton;
|
|
|
|
import javax.jcr.Node;
|
|
|
|
import javax.jcr.Session;
|
|
|
|
import javax.jcr.version.Version;
|
2018-06-05 15:33:36 +02:00
|
|
|
import javax.jcr.version.VersionHistory;
|
|
|
|
import javax.jcr.version.VersionIterator;
|
2018-05-17 12:51:56 +02:00
|
|
|
import javax.jcr.version.VersionManager;
|
|
|
|
|
|
|
|
import org.apache.jackrabbit.JcrConstants;
|
2018-07-12 15:44:11 +02:00
|
|
|
import org.gcube.common.storagehub.model.NodeConstants;
|
2018-05-17 12:51:56 +02:00
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
@Singleton
|
|
|
|
public class VersionHandler {
|
|
|
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(VersionHandler.class);
|
|
|
|
|
|
|
|
public void makeVersionableContent(Node node, Session session){
|
|
|
|
try {
|
2018-07-12 15:44:11 +02:00
|
|
|
Node contentNode = node.getNode(NodeConstants.CONTENT_NAME);
|
2018-05-17 12:51:56 +02:00
|
|
|
contentNode.addMixin(JcrConstants.MIX_VERSIONABLE);
|
2019-02-14 12:01:59 +01:00
|
|
|
}catch(Throwable e ) {
|
2018-05-17 12:51:56 +02:00
|
|
|
logger.warn("cannot create versioned content node",e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void checkinContentNode(Node node, Session session){
|
|
|
|
try {
|
2018-07-12 15:44:11 +02:00
|
|
|
Node contentNode = node.getNode(NodeConstants.CONTENT_NAME);
|
2018-05-17 12:51:56 +02:00
|
|
|
VersionManager versionManager = session.getWorkspace().getVersionManager();
|
2018-06-05 15:33:36 +02:00
|
|
|
versionManager.checkin(contentNode.getPath());
|
2018-05-17 12:51:56 +02:00
|
|
|
}catch(Exception e ) {
|
|
|
|
logger.warn("cannotcheckinNode content node",e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-05 15:33:36 +02:00
|
|
|
public void checkoutContentNode(Node node, Session session){
|
|
|
|
try {
|
2018-07-12 15:44:11 +02:00
|
|
|
Node contentNode = node.getNode(NodeConstants.CONTENT_NAME);
|
2018-06-05 15:33:36 +02:00
|
|
|
VersionManager versionManager = session.getWorkspace().getVersionManager();
|
|
|
|
versionManager.checkout(contentNode.getPath());
|
|
|
|
}catch(Exception e ) {
|
|
|
|
logger.warn("cannot checkoutNode content node",e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-29 16:59:24 +02:00
|
|
|
public List<Version> getContentVersionHistory(Node node, Session session) {
|
2018-06-05 15:33:36 +02:00
|
|
|
try {
|
2018-07-12 15:44:11 +02:00
|
|
|
Node contentNode = node.getNode(NodeConstants.CONTENT_NAME);
|
2018-06-05 15:33:36 +02:00
|
|
|
VersionManager versionManager = session.getWorkspace().getVersionManager();
|
|
|
|
VersionHistory history = versionManager.getVersionHistory(contentNode.getPath());
|
|
|
|
VersionIterator iterator = history.getAllVersions();
|
2018-06-20 16:59:41 +02:00
|
|
|
iterator.skip(1);
|
2018-06-29 16:59:24 +02:00
|
|
|
List<Version> versions = new ArrayList<>();
|
2018-06-05 15:33:36 +02:00
|
|
|
while (iterator.hasNext()) {
|
|
|
|
Version version = iterator.nextVersion();
|
2018-06-29 16:59:24 +02:00
|
|
|
versions.add(version);
|
2018-06-05 15:33:36 +02:00
|
|
|
logger.debug("version name {} with nodeType {}",version.getName(),version.getPrimaryNodeType().getName());
|
|
|
|
}
|
2018-06-29 16:59:24 +02:00
|
|
|
return versions;
|
2018-06-05 15:33:36 +02:00
|
|
|
}catch(Exception e ) {
|
|
|
|
logger.warn("cannot get version history content node",e);
|
2018-06-29 16:59:24 +02:00
|
|
|
return Collections.emptyList();
|
2018-06-05 15:33:36 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-05-17 12:51:56 +02:00
|
|
|
}
|