/* 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.activiti.workflow.simple.alfresco.model; import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlRootElement(name="model", namespace="http://www.alfresco.org/model/dictionary/1.0") @XmlAccessorType(XmlAccessType.FIELD) @XmlType( propOrder={ "name", "description", "author", "version", "imports", "namespaces", "constraints", "types", "aspects" }) public class M2Model { @XmlAttribute private String name = null; @XmlElement(namespace="http://www.alfresco.org/model/dictionary/1.0") private String description = null; @XmlElement(namespace="http://www.alfresco.org/model/dictionary/1.0") private String author = null; @XmlElement(namespace="http://www.alfresco.org/model/dictionary/1.0") private String version; @XmlElementWrapper(name="namespaces", namespace="http://www.alfresco.org/model/dictionary/1.0") @XmlElement(name="namespace", namespace="http://www.alfresco.org/model/dictionary/1.0") private List<M2Namespace> namespaces; @XmlElementWrapper(name="imports", namespace="http://www.alfresco.org/model/dictionary/1.0") @XmlElement(name="import", namespace="http://www.alfresco.org/model/dictionary/1.0") private List<M2Namespace> imports; @XmlElementWrapper(name="types", namespace="http://www.alfresco.org/model/dictionary/1.0") @XmlElement(name="type", namespace="http://www.alfresco.org/model/dictionary/1.0") private List<M2Type> types; @XmlElementWrapper(name="aspects", namespace="http://www.alfresco.org/model/dictionary/1.0") @XmlElement(name="aspect", namespace="http://www.alfresco.org/model/dictionary/1.0") private List<M2Aspect> aspects; @XmlElementWrapper(name="constraints", namespace="http://www.alfresco.org/model/dictionary/1.0") @XmlElement(name="constraint", namespace="http://www.alfresco.org/model/dictionary/1.0") private List<M2Constraint> constraints; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public List<M2Namespace> getNamespaces() { ensureNamespacesInitialized(); return namespaces; } public void setNamespaces(List<M2Namespace> namespaces) { this.namespaces = namespaces; } public List<M2Namespace> getImports() { ensureImportsInitialized(); return imports; } public void setImports(List<M2Namespace> imports) { this.imports = imports; } public List<M2Type> getTypes() { ensureTypesInitialized(); return types; } public void setTypes(List<M2Type> types) { this.types = types; } public List<M2Aspect> getAspects() { ensureAspectsInitialized(); return aspects; } public void setAspects(List<M2Aspect> aspects) { this.aspects = aspects; } public List<M2Constraint> getConstraints() { ensureConstraintsInitialized(); return constraints; } public void setConstraints(List<M2Constraint> constraints) { this.constraints = constraints; } public M2Aspect getAspect(String aspectName) { if(aspects != null) { for(M2Aspect aspect : aspects) { if(aspect.getName().equals(aspectName)) { return aspect; } } } return null; } public M2Type getType(String typeName) { if(types != null) { for(M2Type type : types) { if(type.getName().equals(typeName)) { return type; } } } return null; } /** * @return true, if a property, aspect or association exists with the given name * in any of the types present in this model. */ public boolean isContainedInModel(String qualifiedName) { boolean found = getAspect(qualifiedName) != null; if(!found) { if(getTypes() != null) { for(M2Type type : getTypes()) { if(found) { break; } if(type.getProperties() != null) { for(M2Property prop : type.getProperties()) { if(qualifiedName.equals(prop.getName())) { found = true; break; } } for(M2ClassAssociation assoc : type.getAssociations()) { if(qualifiedName.equals(assoc.getName())) { found = true; break; } } } } } } return found; } private void ensureNamespacesInitialized() { if(namespaces == null) { namespaces = new ArrayList<M2Namespace>(); } } private void ensureImportsInitialized() { if(imports == null) { imports = new ArrayList<M2Namespace>(); } } private void ensureConstraintsInitialized() { if(constraints == null) { constraints = new ArrayList<M2Constraint>(); } } private void ensureTypesInitialized() { if(types == null) { types = new ArrayList<M2Type>(); } } private void ensureAspectsInitialized() { if(aspects == null) { aspects = new ArrayList<M2Aspect>(); } } }