storagehub/src/main/java/org/gcube/data/access/storagehub/handlers/VersionHandler.java

78 lines
2.4 KiB
Java

package org.gcube.data.access.storagehub.handlers;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.inject.Singleton;
import javax.jcr.Node;
import javax.jcr.Session;
import javax.jcr.version.Version;
import javax.jcr.version.VersionHistory;
import javax.jcr.version.VersionIterator;
import javax.jcr.version.VersionManager;
import org.apache.jackrabbit.JcrConstants;
import org.gcube.common.storagehub.model.NodeConstants;
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){
try {
Node contentNode = node.getNode(NodeConstants.CONTENT_NAME);
contentNode.addMixin(JcrConstants.MIX_VERSIONABLE);
}catch(Throwable e ) {
logger.warn("cannot create versioned content node",e);
}
}
public void checkinContentNode(Node node){
try {
Session session = node.getSession();
Node contentNode = node.getNode(NodeConstants.CONTENT_NAME);
VersionManager versionManager = session.getWorkspace().getVersionManager();
versionManager.checkin(contentNode.getPath());
}catch(Exception e ) {
logger.warn("cannotcheckinNode content node",e);
}
}
public void checkoutContentNode(Node node){
try {
Session session = node.getSession();
Node contentNode = node.getNode(NodeConstants.CONTENT_NAME);
VersionManager versionManager = session.getWorkspace().getVersionManager();
versionManager.checkout(contentNode.getPath());
}catch(Exception e ) {
logger.warn("cannot checkoutNode content node",e);
}
}
public List<Version> getContentVersionHistory(Node node) {
try {
Session session = node.getSession();
Node contentNode = node.getNode(NodeConstants.CONTENT_NAME);
VersionManager versionManager = session.getWorkspace().getVersionManager();
VersionHistory history = versionManager.getVersionHistory(contentNode.getPath());
VersionIterator iterator = history.getAllVersions();
iterator.skip(1);
List<Version> versions = new ArrayList<>();
while (iterator.hasNext()) {
Version version = iterator.nextVersion();
versions.add(version);
logger.debug("version name {} with nodeType {}",version.getName(),version.getPrimaryNodeType().getName());
}
return versions;
}catch(Exception e ) {
logger.warn("cannot get version history content node",e);
return Collections.emptyList();
}
}
}