001/* 002 * ModeShape (http://www.modeshape.org) 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.modeshape.cmis; 017 018import java.util.HashSet; 019import java.util.Set; 020import javax.jcr.Node; 021import javax.jcr.RepositoryException; 022import javax.jcr.version.Version; 023import org.apache.chemistry.opencmis.commons.data.ObjectData; 024import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException; 025import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectDataImpl; 026import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl; 027import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl; 028import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler; 029import org.apache.chemistry.opencmis.jcr.JcrTypeManager; 030import org.apache.chemistry.opencmis.jcr.PathManager; 031import org.apache.chemistry.opencmis.jcr.type.JcrTypeHandlerManager; 032 033/** 034 * 035 * @author kulikov 036 */ 037public class JcrMsVersionNode extends JcrMsVersion { 038 039 private final Version version; 040 041 public JcrMsVersionNode(Node node, Version version, JcrTypeManager typeManager, PathManager pathManager, 042 JcrTypeHandlerManager typeHandlerManager) { 043 044 super(node, version, typeManager, pathManager, typeHandlerManager); 045 this.version = version; 046 } 047 048 @Override 049 protected String getVersionSeriesId() { 050 try { 051 return version.getIdentifier(); 052 } catch (RepositoryException e) { 053 return null; 054 } 055 } 056 057 @Override 058 protected boolean isLatestVersion() throws RepositoryException { 059 return true; 060 } 061 062 @Override 063 protected String getBaseNodeId() throws RepositoryException { 064 return this.version.getIdentifier(); 065 } 066 067 @Override 068 public boolean isVersionable() { 069 return false; 070 } 071 /** 072 * Compile the 073 * <code>ObjectData</code> for this node 074 */ 075 @Override 076 public ObjectData compileObjectType(Set<String> filter, Boolean includeAllowableActions, 077 ObjectInfoHandler objectInfos, boolean requiresObjectInfo) { 078 079 try { 080 ObjectDataImpl result = new ObjectDataImpl(); 081 ObjectInfoImpl objectInfo = new ObjectInfoImpl(); 082 083 PropertiesImpl properties = new PropertiesImpl(); 084 filter = filter == null ? null : new HashSet<>(filter); 085 compileProperties(properties, filter, objectInfo); 086 result.setProperties(properties); 087 088 if (Boolean.TRUE.equals(includeAllowableActions)) { 089 result.setAllowableActions(getAllowableActions()); 090 } 091 092 if (requiresObjectInfo) { 093 objectInfo.setObject(result); 094 objectInfos.addObjectInfo(objectInfo); 095 } 096 097 return result; 098 } catch (RepositoryException e) { 099 throw new CmisRuntimeException(e.getMessage(), e); 100 } 101 } 102}