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}