This project has retired. For details please refer to its Attic page.
DefaultFolderTypeHandler xref

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.chemistry.opencmis.jcr.impl;
20  
21  import org.apache.chemistry.opencmis.commons.data.Properties;
22  import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
23  import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
24  import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
25  import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;
26  import org.apache.chemistry.opencmis.jcr.JcrFolder;
27  import org.apache.chemistry.opencmis.jcr.JcrTypeManager;
28  import org.apache.chemistry.opencmis.jcr.query.IdentifierMap;
29  import org.apache.chemistry.opencmis.jcr.type.JcrFolderTypeHandler;
30  import org.apache.commons.logging.Log;
31  import org.apache.commons.logging.LogFactory;
32  
33  import javax.jcr.Node;
34  import javax.jcr.RepositoryException;
35  import javax.jcr.nodetype.NodeType;
36  
37  /**
38   * Type handler that provides cmis:folder.
39   */
40  public class DefaultFolderTypeHandler extends AbstractJcrTypeHandler implements JcrFolderTypeHandler {
41  
42      private static final Log log = LogFactory.getLog(DefaultFolderTypeHandler.class);
43  
44      private static class FolderIdentifierMap extends DefaultIdentifierMapBase {
45  
46          public FolderIdentifierMap() {
47              super("nt:folder");
48              // xxx not supported: PARENT_ID, ALLOWED_CHILD_OBJECT_TYPE_IDS, PATH
49          }
50      }
51  
52      public String getTypeId() {
53          return BaseTypeId.CMIS_FOLDER.value();
54      }
55  
56      public TypeDefinition getTypeDefinition() {
57          FolderTypeDefinitionImpl folderType = new FolderTypeDefinitionImpl();
58          folderType.setBaseTypeId(BaseTypeId.CMIS_FOLDER);
59          folderType.setIsControllableAcl(false);
60          folderType.setIsControllablePolicy(false);
61          folderType.setIsCreatable(true);
62          folderType.setDescription("Folder");
63          folderType.setDisplayName("Folder");
64          folderType.setIsFileable(true);
65          folderType.setIsFulltextIndexed(false);
66          folderType.setIsIncludedInSupertypeQuery(true);
67          folderType.setLocalName("Folder");
68          folderType.setLocalNamespace(JcrTypeManager.NAMESPACE);
69          folderType.setIsQueryable(true);
70          folderType.setQueryName(JcrTypeManager.FOLDER_TYPE_ID);
71          folderType.setId(JcrTypeManager.FOLDER_TYPE_ID);
72  
73          JcrTypeManager.addBasePropertyDefinitions(folderType);
74          JcrTypeManager.addFolderPropertyDefinitions(folderType);
75  
76          return folderType;
77      }
78  
79      public IdentifierMap getIdentifierMap() {
80          return new FolderIdentifierMap();
81      }
82  
83      public JcrFolder getJcrNode(Node node) {
84          return new JcrFolder(node, typeManager, pathManager, typeHandlerManager);
85      }
86  
87      public boolean canHandle(Node node) throws RepositoryException {
88          return node.isNodeType(NodeType.NT_FOLDER) || node.getDepth() == 0;
89      }
90  
91      public JcrFolder createFolder(JcrFolder parentFolder, String name, Properties properties) {
92          try {
93              Node node = parentFolder.getNode().addNode(name, NodeType.NT_FOLDER);
94              node.addMixin(NodeType.MIX_CREATED);
95              node.addMixin(NodeType.MIX_LAST_MODIFIED);
96  
97              // compile the properties
98              JcrFolder.setProperties(node, getTypeDefinition(), properties);
99  
100             node.getSession().save();
101             return getJcrNode(node);
102         }
103         catch (RepositoryException e) {
104             log.debug(e.getMessage(), e);
105             throw new CmisStorageException(e.getMessage(), e);
106         }
107     }
108 }