| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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.apache.chemistry.opencmis.inmemory.types; |
| |
| import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition; |
| import org.apache.chemistry.opencmis.commons.definitions.FolderTypeDefinition; |
| import org.apache.chemistry.opencmis.commons.definitions.ItemTypeDefinition; |
| import org.apache.chemistry.opencmis.commons.definitions.PolicyTypeDefinition; |
| import org.apache.chemistry.opencmis.commons.definitions.PropertyBooleanDefinition; |
| import org.apache.chemistry.opencmis.commons.definitions.PropertyDateTimeDefinition; |
| import org.apache.chemistry.opencmis.commons.definitions.PropertyDecimalDefinition; |
| import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition; |
| import org.apache.chemistry.opencmis.commons.definitions.PropertyHtmlDefinition; |
| import org.apache.chemistry.opencmis.commons.definitions.PropertyIdDefinition; |
| import org.apache.chemistry.opencmis.commons.definitions.PropertyIntegerDefinition; |
| import org.apache.chemistry.opencmis.commons.definitions.PropertyStringDefinition; |
| import org.apache.chemistry.opencmis.commons.definitions.PropertyUriDefinition; |
| import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition; |
| import org.apache.chemistry.opencmis.commons.definitions.SecondaryTypeDefinition; |
| import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyDefinition; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.ItemTypeDefinitionImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyTypeDefinitionImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.RelationshipTypeDefinitionImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.SecondaryTypeDefinitionImpl; |
| |
| public final class TypeUtil { |
| |
| private TypeUtil() { |
| } |
| |
| public static TypeDefinition cloneType(TypeDefinition type) { |
| if (type instanceof DocumentTypeDefinition) { |
| return cloneTypeDoc((DocumentTypeDefinition) type); |
| } else if (type instanceof FolderTypeDefinition) { |
| return cloneTypeFolder((FolderTypeDefinition) type); |
| } else if (type instanceof PolicyTypeDefinition) { |
| return cloneTypePolicy((PolicyTypeDefinition) type); |
| } else if (type instanceof ItemTypeDefinition) { |
| return cloneTypeItem((ItemTypeDefinition) type); |
| } else if (type instanceof RelationshipTypeDefinition) { |
| return cloneTypeRelationship((RelationshipTypeDefinition) type); |
| } else if (type instanceof SecondaryTypeDefinition) { |
| return cloneTypeSecondary((SecondaryTypeDefinition) type); |
| } else { |
| return null; |
| } |
| } |
| |
| public static AbstractPropertyDefinition<?> clonePropertyDefinition(PropertyDefinition<?> pd) { |
| if (pd instanceof PropertyBooleanDefinition) { |
| PropertyBooleanDefinitionImpl pdBoolDef = new PropertyBooleanDefinitionImpl(); |
| PropertyBooleanDefinitionImpl pdSrc = (PropertyBooleanDefinitionImpl) pd; |
| initializeAbstractPropertyDefinition(pd, pdBoolDef); |
| pdBoolDef.setChoices(pdSrc.getChoices()); |
| pdBoolDef.setDefaultValue(pdSrc.getDefaultValue()); |
| return pdBoolDef; |
| } else if (pd instanceof PropertyDateTimeDefinition) { |
| PropertyDateTimeDefinitionImpl pdDateDef = new PropertyDateTimeDefinitionImpl(); |
| PropertyDateTimeDefinitionImpl pdSrc = (PropertyDateTimeDefinitionImpl) pd; |
| initializeAbstractPropertyDefinition(pd, pdDateDef); |
| pdDateDef.setChoices(pdSrc.getChoices()); |
| pdDateDef.setDefaultValue(pdSrc.getDefaultValue()); |
| pdDateDef.setDateTimeResolution(pdSrc.getDateTimeResolution()); |
| return pdDateDef; |
| } else if (pd instanceof PropertyDecimalDefinition) { |
| PropertyDecimalDefinitionImpl pdDecDef = new PropertyDecimalDefinitionImpl(); |
| PropertyDecimalDefinitionImpl pdSrc = (PropertyDecimalDefinitionImpl) pd; |
| initializeAbstractPropertyDefinition(pd, pdDecDef); |
| pdDecDef.setChoices(pdSrc.getChoices()); |
| pdDecDef.setDefaultValue(pdSrc.getDefaultValue()); |
| pdDecDef.setMinValue(pdSrc.getMinValue()); |
| pdDecDef.setMaxValue(pdSrc.getMaxValue()); |
| pdDecDef.setPrecision(pdSrc.getPrecision()); |
| return pdDecDef; |
| } else if (pd instanceof PropertyHtmlDefinition) { |
| PropertyHtmlDefinitionImpl pdHtmlDef = new PropertyHtmlDefinitionImpl(); |
| PropertyHtmlDefinitionImpl pdSrc = (PropertyHtmlDefinitionImpl) pd; |
| initializeAbstractPropertyDefinition(pd, pdHtmlDef); |
| pdHtmlDef.setChoices(pdSrc.getChoices()); |
| pdHtmlDef.setDefaultValue(pdSrc.getDefaultValue()); |
| return pdHtmlDef; |
| } else if (pd instanceof PropertyIdDefinition) { |
| PropertyIdDefinitionImpl pdIdDef = new PropertyIdDefinitionImpl(); |
| PropertyIdDefinitionImpl pdSrc = (PropertyIdDefinitionImpl) pd; |
| initializeAbstractPropertyDefinition(pd, pdIdDef); |
| pdIdDef.setChoices(pdSrc.getChoices()); |
| pdIdDef.setDefaultValue(pdSrc.getDefaultValue()); |
| return pdIdDef; |
| } else if (pd instanceof PropertyIntegerDefinition) { |
| PropertyIntegerDefinitionImpl pdIntDef = new PropertyIntegerDefinitionImpl(); |
| PropertyIntegerDefinitionImpl pdSrc = (PropertyIntegerDefinitionImpl) pd; |
| initializeAbstractPropertyDefinition(pd, pdIntDef); |
| pdIntDef.setChoices(pdSrc.getChoices()); |
| pdIntDef.setDefaultValue(pdSrc.getDefaultValue()); |
| pdIntDef.setMinValue(pdSrc.getMinValue()); |
| pdIntDef.setMaxValue(pdSrc.getMaxValue()); |
| return pdIntDef; |
| } else if (pd instanceof PropertyStringDefinition) { |
| PropertyStringDefinitionImpl pdStringDef = new PropertyStringDefinitionImpl(); |
| PropertyStringDefinitionImpl pdSrc = (PropertyStringDefinitionImpl) pd; |
| initializeAbstractPropertyDefinition(pd, pdStringDef); |
| pdStringDef.setChoices(pdSrc.getChoices()); |
| pdStringDef.setDefaultValue(pdSrc.getDefaultValue()); |
| pdStringDef.setMaxLength(pdSrc.getMaxLength()); |
| return pdStringDef; |
| } else if (pd instanceof PropertyUriDefinition) { |
| PropertyUriDefinitionImpl pdUriDef = new PropertyUriDefinitionImpl(); |
| PropertyUriDefinition pdSrc = (PropertyUriDefinition) pd; |
| initializeAbstractPropertyDefinition(pd, pdUriDef); |
| pdUriDef.setChoices(pdSrc.getChoices()); |
| pdUriDef.setDefaultValue(pdSrc.getDefaultValue()); |
| return pdUriDef; |
| } else { |
| return null; |
| } |
| } |
| |
| public static DocumentTypeDefinitionImpl cloneTypeDoc(DocumentTypeDefinition type) { |
| DocumentTypeDefinitionImpl td = new DocumentTypeDefinitionImpl(); |
| td.initialize(type); |
| td.setIsVersionable(type.isVersionable()); |
| td.setContentStreamAllowed(type.getContentStreamAllowed()); |
| return td; |
| } |
| |
| public static FolderTypeDefinitionImpl cloneTypeFolder(FolderTypeDefinition type) { |
| FolderTypeDefinitionImpl td = new FolderTypeDefinitionImpl(); |
| td.initialize(type); |
| return td; |
| } |
| |
| public static RelationshipTypeDefinitionImpl cloneTypeRelationship(RelationshipTypeDefinition type) { |
| RelationshipTypeDefinitionImpl td = new RelationshipTypeDefinitionImpl(); |
| td.initialize(type); |
| td.setAllowedSourceTypes(type.getAllowedSourceTypeIds()); |
| td.setAllowedTargetTypes(type.getAllowedTargetTypeIds()); |
| return td; |
| } |
| |
| public static ItemTypeDefinitionImpl cloneTypeItem(ItemTypeDefinition type) { |
| ItemTypeDefinitionImpl td = new ItemTypeDefinitionImpl(); |
| td.initialize(type); |
| return td; |
| } |
| |
| public static SecondaryTypeDefinitionImpl cloneTypeSecondary(SecondaryTypeDefinition type) { |
| SecondaryTypeDefinitionImpl td = new SecondaryTypeDefinitionImpl(); |
| td.initialize(type); |
| return td; |
| } |
| |
| public static PolicyTypeDefinitionImpl cloneTypePolicy(PolicyTypeDefinition type) { |
| PolicyTypeDefinitionImpl td = new PolicyTypeDefinitionImpl(); |
| td.initialize(td); |
| return null; |
| } |
| |
| public static String getQueryNameFromId(String id) { |
| StringBuilder sb = new StringBuilder(id.length()); |
| for (int i = 0; i < id.length(); i++) { |
| char c = id.charAt(i); |
| if (c == '.' || c == ' ' || c == ',' || c == '\'' || c == '"' || c == '\\' || c == '(' || c == ')') { |
| sb.append('_'); |
| } else { |
| sb.append(c); |
| } |
| } |
| return sb.toString(); |
| } |
| |
| private static void initializeAbstractPropertyDefinition(PropertyDefinition<?> pdSrc, |
| AbstractPropertyDefinition<?> pdTarget) { |
| pdTarget.setCardinality(pdSrc.getCardinality()); |
| pdTarget.setDescription(pdSrc.getDescription()); |
| pdTarget.setDisplayName(pdSrc.getDisplayName()); |
| pdTarget.setExtensions(pdSrc.getExtensions()); |
| pdTarget.setId(pdSrc.getId()); |
| pdTarget.setIsInherited(false); |
| pdTarget.setIsOpenChoice(pdSrc.isOpenChoice()); |
| pdTarget.setIsOrderable(pdSrc.isOrderable()); |
| pdTarget.setIsQueryable(pdSrc.isQueryable()); |
| pdTarget.setIsRequired(pdSrc.isRequired()); |
| pdTarget.setLocalName(pdSrc.getLocalName()); |
| pdTarget.setLocalNamespace(pdSrc.getLocalNamespace()); |
| pdTarget.setPropertyType(pdSrc.getPropertyType()); |
| pdTarget.setQueryName(pdSrc.getQueryName()); |
| pdTarget.setUpdatability(pdSrc.getUpdatability()); |
| } |
| |
| } |