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 javax.jcr.Node;
019import javax.jcr.RepositoryException;
020import javax.jcr.nodetype.NodeType;
021import javax.jcr.version.Version;
022import javax.jcr.version.VersionManager;
023import org.apache.chemistry.opencmis.commons.PropertyIds;
024import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
025import org.apache.chemistry.opencmis.commons.enums.Cardinality;
026import org.apache.chemistry.opencmis.commons.enums.PropertyType;
027import org.apache.chemistry.opencmis.commons.enums.Updatability;
028import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractTypeDefinition;
029import org.apache.chemistry.opencmis.jcr.JcrDocument;
030import org.apache.chemistry.opencmis.jcr.JcrTypeManager;
031import org.apache.chemistry.opencmis.jcr.impl.DefaultDocumentTypeHandler;
032
033/**
034 *
035 * @author kulikov
036 */
037public class MsDocumentTypeHandler extends DefaultDocumentTypeHandler {
038    
039    @Override
040    public TypeDefinition getTypeDefinition() {
041        AbstractTypeDefinition def = (AbstractTypeDefinition)super.getTypeDefinition();
042        //append cmis:contentStreamHash property definition
043        def.addPropertyDefinition(JcrTypeManager.createPropDef(
044                PropertyIds.CONTENT_STREAM_HASH, 
045                "Content Stream Hash", 
046                "Content Stream Hash",
047                PropertyType.STRING, 
048                Cardinality.SINGLE, 
049                Updatability.READONLY, 
050                false, 
051                true));
052        return def;
053    }
054    
055    @Override
056    public JcrDocument getJcrNode(Node node) throws RepositoryException {
057        if (node.isNodeType(NodeType.NT_VERSION)) {
058            return new JcrMsVersionNode(node, (Version) node, typeManager, pathManager, typeHandlerManager);
059        }
060        VersionManager versionManager = node.getSession().getWorkspace().getVersionManager();
061        Version version = versionManager.getBaseVersion(node.getPath());
062        return new JcrMsVersion(node, version, typeManager, pathManager, typeHandlerManager);
063    }
064
065    @Override
066    public boolean canHandle(Node node) throws RepositoryException {
067        return super.canHandle(node) || node.isNodeType(NodeType.NT_VERSION);
068    }
069}