blob: 302437291eec09662dae666ec37f1e29be50f279 [file] [log] [blame]
/*
* 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());
}
}