package com.delcyon.capo.resourcemanager.types; import java.util.ArrayList; import java.util.Arrays; import java.util.EnumSet; import java.util.List; import javax.jcr.Node; import javax.jcr.version.Version; import javax.jcr.version.VersionManager; import com.delcyon.capo.resourcemanager.ResourceParameter; import com.delcyon.capo.resourcemanager.ResourceURI; import com.delcyon.capo.server.jackrabbit.CapoJcrServer; /** * This is basically a compound jcr content meta data class. The Root should always be the Version Node, The child will always be the the frozenNode * @author jeremiah * */ public class JcrVersionContentMetaData extends JcrContentMetaData { public enum Attributes { versionName, versionTimeStamp, versionLabel, versionNote, isBaseVersion } private JcrContentMetaData frozenNodeContentMetaData = null; public JcrVersionContentMetaData(ResourceURI resourceURI,ResourceParameter... resourceParameters) throws Exception { super(resourceURI, resourceParameters); Version version = (Version) getNode(); frozenNodeContentMetaData = new JcrContentMetaData(new ResourceURI("repo:"+version.getFrozenNode().getPath())); } @Override public List<String> getSupportedAttributes() { List<String> supportedAtrributes = super.getSupportedAttributes(); EnumSet.allOf(Attributes.class).forEach(attr -> supportedAtrributes.add(attr.toString())); supportedAtrributes.addAll(frozenNodeContentMetaData.getSupportedAttributes()); return supportedAtrributes; } @Override public String getValue(String name) { try { if(Attributes.versionLabel.toString().equals(name)) { return ((Version) getNode()).getContainingHistory().getVersionLabels((Version) getNode()).toString(); //TODO turn this into a string array } else if(Attributes.versionName.toString().equals(name)) { return ((Version) getNode()).getName(); } else if(Attributes.versionTimeStamp.toString().equals(name)) { return ((Version) getNode()).getCreated().getTime().toString(); } else if(Attributes.isBaseVersion.toString().equals(name)) { return ((Version) getNode()).isSame(CapoJcrServer.getSession().getWorkspace().getVersionManager().getBaseVersion(getResourceURI().getPath()))+""; } // else if(Attributes.versionNote.toString().equals(name)) // { // return ((Version) getNode()).getFrozenNode().getProperty("versionNote").getString(); // } String value = super.getValue(name); if(value != null) { return value; } return frozenNodeContentMetaData.getValue(name); } catch (Exception exception) { exception.printStackTrace(); } return super.getValue(name); } @Override protected Node getNode() { try { VersionManager versionManager = CapoJcrServer.getSession().getWorkspace().getVersionManager(); return versionManager.getVersionHistory(getResourceURI().getPath()).getVersion(getResourceURI().getParameterMap().get("version")); } catch (Exception exception) { exception.printStackTrace(); } return null; } }