/* * Initial version copyright 2008 Lockheed Martin Corporation, except * as stated in the file entitled Licensing-Information. * * All modifications copyright 2009-2012 Data Access Technologies, Inc. * * Licensed under the Academic Free License version 3.0 * (http://www.opensource.org/licenses/afl-3.0.php), except as stated * in the file entitled Licensing-Information. */ package org.modeldriven.fuml.test.builtin.environment; import fUML.Debug; import fUML.Syntax.Classes.Kernel.*; import fUML.Syntax.CommonBehaviors.BasicBehaviors.*; import fUML.Syntax.CommonBehaviors.Communications.*; public class ClassifierFactory { public TestEnvironment environment = null; public ClassifierFactory(org.modeldriven.fuml.test.builtin.environment.TestEnvironment environment) { this.environment = environment; } // ClassifierFactory public void createEnumerationType(String typeName, int numberOfLiterals) { Enumeration type = new Enumeration(); type.setName(typeName); for (int i = 0; i < numberOfLiterals; i++) { EnumerationLiteral literal = new EnumerationLiteral(); literal.setName(typeName + "_" + String.valueOf(i)); type.addOwnedLiteral(literal); } environment.addElement(type); } // createEnumerationType public void createDataType(String name) { DataType dataType = new DataType(); dataType.setName(name); environment.addElement(dataType); } // createDataType public void createClass(String name) { Class_ class_ = new Class_(); class_.setName(name); environment.addElement(class_); } // createClass public void createSignal(String name) { Signal signal = new Signal(); signal.setName(name); this.environment.addElement(signal); } // createSignal public void createAssociation(String name) { Association association = new Association(); association.setName(name); environment.addElement(association); } // createAssociation public void addAttribute(String classifierName, String attributeName, String attributeTypeName, boolean isComposite) { Classifier type = environment.getType(classifierName); if (type == null) { Debug.println("[addAttribute] " + classifierName + " not found or not a classifier."); return; } Classifier attributeType = environment.getType(attributeTypeName); if (attributeType == null) { Debug.println("[addAttribute] " + attributeTypeName + " not found or not a classifier."); return; } Property attribute = new Property(); attribute.setName(attributeName); attribute.setType(attributeType); attribute.setIsOrdered(false); attribute.setIsUnique(true); attribute.setLower(1); attribute.setUpper(1); if (isComposite) { attribute.setAggregation(AggregationKind.composite); } else { attribute.setAggregation(AggregationKind.none); } if (type instanceof DataType) { // Debug.println("[addAttribute] " + type.name + // " is a data type."); ((DataType) type).addOwnedAttribute(attribute); } else if (type instanceof Class_) { // Debug.println("[addAttribute] " + type.name + " is a class."); ((Class_) type).addOwnedAttribute(attribute); } else if (type instanceof Signal) { ((Signal) type).addOwnedAttribute(attribute); } } // addAttribute public void addEnd(String associationName, String endName, String endTypeName, boolean isComposite) { Classifier type = environment.getType(associationName); if (type == null || !(type instanceof Association)) { Debug.println("[addEnd] " + associationName + " not found or not an association."); return; } Association association = (Association) type; Classifier endType = environment.getType(endTypeName); if (endType == null) { Debug.println("[addEnd] " + endTypeName + " not found or not a classifier."); return; } Property end = new Property(); end.setName(endName); end.setType(endType); end.setIsOrdered(false); end.setIsUnique(true); end.setLower(1); end.setUpper(1); if (isComposite) { end.setAggregation(AggregationKind.composite); } else { end.setAggregation(AggregationKind.none); } association.addOwnedEnd(end); } // addEnd public void addClassifierBehavior(String className, String behaviorName) { NamedElement element = this.environment.getElement(className); if (element == null || !(element instanceof Class_)) { Debug.println("[addClassifierBehavior] " + className + " not found or not a class."); return; } Class_ classifier = (Class_) element; element = this.environment.getElement(behaviorName); if (element == null || !(element instanceof Behavior)) { Debug.println("[addClassifierBehavior] " + behaviorName + " not found or not a behavior."); return; } Behavior behavior = (Behavior) element; this.environment.removeElement(element); classifier.addOwnedBehavior(behavior); classifier.setClassifierBehavior(behavior); } // addClassifierBehavior public void addOperation(String className, String baseClassName, String operationName, String methodName) { NamedElement element = this.environment.getElement(className); if (element == null || !(element instanceof Class_)) { Debug.println("[addOperation] " + className + " not found or not a class."); return; } Class_ classifier = (Class_) element; Operation operation = new Operation(); operation.setName(operationName); if (!baseClassName.equals("")) { element = this.environment.getElement(baseClassName); if (element == null || !(element instanceof Class_)) { Debug.println("[addOperation] " + baseClassName + " not found or not a class."); return; } Class_ baseClass = (Class_) element; Operation redefinedOperation = this.getOperation(baseClass, operationName); if (redefinedOperation == null) { Debug.println("[addOperation] " + operationName + " is not an operation of " + baseClassName + "."); return; } operation.addRedefinedOperation(redefinedOperation); } if (methodName.equals("")) { operation.setIsAbstract(true); } else { element = this.environment.getElement(methodName); if (element == null || !(element instanceof Behavior)) { Debug.println("[addOperation] " + methodName + " not found or not a behavior."); return; } Behavior behavior = (Behavior) element; this.environment.removeElement(element); classifier.addOwnedBehavior(behavior); operation.addMethod(behavior); } classifier.addOwnedOperation(operation); } // addOperation public void addGeneralization(String subtypeName, String supertypeName) { Classifier subtype = this.environment.getType(subtypeName); if (subtype == null) { Debug.println("[addGeneralization] " + subtypeName + " not found or not a classifier."); return; } Classifier supertype = this.environment.getType(supertypeName); if (supertype == null) { Debug.println("[addGeneralization] " + supertypeName + " not found or not a classifier."); return; } Generalization generalization = new Generalization(); generalization.setGeneral(supertype); subtype.addGeneralization(generalization); } // addGeneralization protected fUML.Syntax.Classes.Kernel.Operation getOperation( fUML.Syntax.Classes.Kernel.Class_ class_, String operationName) { for (int i = 0; i < class_.member.size(); i++) { NamedElement member = class_.member.getValue(i); if (member.name.equals(operationName)) { if (!(member instanceof Operation)) { return null; } return (Operation) member; } } return null; } // getOperation } // ClassifierFactory