/*
* Copyright (c) 2006, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.wso2.carbon.registry.cmis.impl;
import org.apache.chemistry.opencmis.commons.data.Properties;
import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.wso2.carbon.registry.cmis.RegistryFolder;
import org.wso2.carbon.registry.cmis.RegistryTypeManager;
import org.wso2.carbon.registry.cmis.util.CommonUtil;
import org.wso2.carbon.registry.core.Collection;
import org.wso2.carbon.registry.core.Registry;
import org.wso2.carbon.registry.core.Resource;
import org.wso2.carbon.registry.core.exceptions.RegistryException;
import org.wso2.carbon.registry.cmis.PathManager;
/**
* Type handler that provides cmis:folder.
*/
public class FolderTypeHandler extends AbstractTypeHandler {
public FolderTypeHandler(Registry repository, PathManager pathManager,
RegistryTypeManager typeManager) {
super(repository, pathManager, typeManager);
}
private static final Logger log = LoggerFactory.getLogger(FolderTypeHandler.class);
/*private static class FolderIdentifierMap extends DefaultIdentifierMapBase {
public FolderIdentifierMap() {
super("nt:folder");
// xxx not supported: PARENT_ID, ALLOWED_CHILD_OBJECT_TYPE_IDS, PATH
}
}*/
public String getTypeId() {
return BaseTypeId.CMIS_FOLDER.value();
}
public TypeDefinition getTypeDefinition() {
FolderTypeDefinitionImpl folderType = new FolderTypeDefinitionImpl();
folderType.setBaseTypeId(BaseTypeId.CMIS_FOLDER);
folderType.setIsControllableAcl(false);
folderType.setIsControllablePolicy(false);
folderType.setIsCreatable(true);
folderType.setDescription("Folder");
folderType.setDisplayName("Folder");
folderType.setIsFileable(true);
folderType.setIsFulltextIndexed(false);
folderType.setIsIncludedInSupertypeQuery(true);
folderType.setLocalName("Folder");
folderType.setLocalNamespace(RegistryTypeManager.NAMESPACE);
folderType.setIsQueryable(true);
folderType.setQueryName(RegistryTypeManager.FOLDER_TYPE_ID);
folderType.setId(RegistryTypeManager.FOLDER_TYPE_ID);
RegistryTypeManager.addBasePropertyDefinitions(folderType);
RegistryTypeManager.addFolderPropertyDefinitions(folderType);
return folderType;
}
public RegistryFolder getGregNode(Resource node) {
return new RegistryFolder(repository, node, typeManager, pathManager);
}
public RegistryFolder createFolder(RegistryFolder parentFolder, String name, Properties properties) {
try {
Collection node = repository.newCollection();
String destinationPath = CommonUtil.getTargetPathOfNode(parentFolder, name);
repository.put(destinationPath, node);
Resource resource = repository.get(destinationPath);
// compile the properties
RegistryFolder.setProperties(repository, resource, getTypeDefinition(), properties);
return getGregNode(resource);
}
catch (RegistryException e) {
log.debug(e.getMessage(), e);
throw new CmisStorageException(e.getMessage(), e);
}
}
}