From: Benjamin B. <bg...@us...> - 2005-07-07 15:43:28
|
Update of /cvsroot/sblim/ecute/Plugin/com/ibm/ecute/rsa/core/internal/properties In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6635/Plugin/com/ibm/ecute/rsa/core/internal/properties Modified Files: QualifiersPropertySection.java Added Files: FlavorsHelper.java Log Message: FlavorsHelper added --- NEW FILE: FlavorsHelper.java --- /* * Created on 04.07.2005 */ package com.ibm.ecute.rsa.core.internal.properties; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.uml2.AssociationClass; import org.eclipse.uml2.Class; import org.eclipse.uml2.Constraint; import org.eclipse.uml2.Model; import org.eclipse.uml2.NamedElement; import org.eclipse.uml2.OpaqueExpression; import org.eclipse.uml2.Operation; import org.eclipse.uml2.Package; import org.eclipse.uml2.Property; import org.eclipse.uml2.Stereotype; import org.eclipse.uml2.UML2Package; import com.ibm.ecute.EcuteEclipsePlugin; import com.ibm.ecute.Qualifiers.QualifiersList; import com.ibm.ecute.utils.License; import com.ibm.xtools.emf.msl.EditingDomain; import com.ibm.xtools.emf.msl.ResourceSetModifyOperation; import com.ibm.xtools.modeler.UMLModeler; /** * Copyright (c) 2003, International Business Machines * * THIS FILE IS PROVIDED UNDER THE TERMS OF THE COMMON PUBLIC LICENSE * ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE CONSTITUTES * RECIPIENTS ACCEPTANCE OF THE AGREEMENT. * * You can obtain a current copy of the Common Public License from * http://oss.software.ibm.com/developerworks/opensource/license-cpl.html * * @author Benjamin Bender <be...@de...> */ public class FlavorsHelper { // Copyright private static final String COPYRIGHT = License.COPYRIGHT; private static String QUALIFIERS_CONSTRAINT_NAME = "QualifiersList"; Model model; QualifiersList qualifiersList; public FlavorsHelper(Model model){ this.model = model; if(!this.existsQualifierListConstraint()){ this.createQualifiersListConstraint(); } this.qualifiersList = this.getQualifiersList(); } public void setModelFlavors(){ ArrayList modelSubClasses = getAllModelSubClasses(); for(int i = 0; i < modelSubClasses.size(); i++){ Class modelSubClass = (Class)modelSubClasses.get(i); setClassFlavors(modelSubClass); } } private void setClassFlavors(Class class_){ ArrayList overrideAttributes = getOverrideAttributes(class_); ArrayList overrideMethods = getOverrideMethods(class_); ArrayList overrideReferences = getOverrideReferences(class_); System.out.println("Juhuu!!!"); } private boolean existsQualifierListConstraint(){ Constraint qualifiersConstraint = model.getOwnedRule(QUALIFIERS_CONSTRAINT_NAME); if(qualifiersConstraint == null){ return false; } else { return true; } } private void createQualifiersListConstraint() { EditingDomain editingDomain = UMLModeler.getEditingDomain(); try { editingDomain.run(new ResourceSetModifyOperation("EditQualifier") { protected void execute(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { Constraint qualifiersListConstraint = model.createOwnedRule(UML2Package.eINSTANCE.getConstraint()); qualifiersListConstraint.setName(QUALIFIERS_CONSTRAINT_NAME); qualifiersListConstraint.getConstrainedElements().add(model); // create specification qualifiersListConstraint.createSpecification(UML2Package.eINSTANCE.getOpaqueExpression()); // set constraint body String qualifierListTXTcontent = null; try { String filename = EcuteEclipsePlugin.getDefault().getQualifierListDestination(); File f = new File(filename); byte buffer[] = new byte[(int)f.length()]; FileInputStream in = null; String str = null; try { in = new FileInputStream(f); int len = in.read( buffer, 0, (int)f.length() ); str = new String( buffer, 0, len ); } catch ( IOException e ) { e.printStackTrace(); } finally { try { if ( in != null ) in.close(); } catch (IOException e) {} } if(str != null){ while(str.startsWith("#")){ int index = str.indexOf("\n"); str = str.substring(index + 1); } } qualifierListTXTcontent = str; } catch (Exception e) { e.printStackTrace(); } if(qualifierListTXTcontent != null){ ((OpaqueExpression)qualifiersListConstraint.getSpecification()).setBody(qualifierListTXTcontent); } } }, new NullProgressMonitor()); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } private QualifiersList getQualifiersList(){ QualifiersList list = null; try { list = EcuteEclipsePlugin.getDefault().getQualifiersList(model, QUALIFIERS_CONSTRAINT_NAME); } catch (Exception e) { e.printStackTrace(); } return list; } private boolean isNativeMappedQualifier(String qualifierName){ String[] nativeQualifiers = {"Abstract", "Aggregate", "Aggregation", "Association", "Composition", "ArrayType", "Deprecated", "Description", "In", "Out", "Key", "Max", "Min", "Octetstring", "Static", "Write"}; for(int i = 0; i < nativeQualifiers.length; i++){ if(qualifierName.equalsIgnoreCase(nativeQualifiers[i])) return true; } return false; } private ArrayList getAllParentClasses(Class class_){ ArrayList parentClasses = new ArrayList(); Class currentClass = class_; //parentClasses.add(class_); while(currentClass.getGenerals().size() > 0){ currentClass = (Class)currentClass.getGenerals().get(0); parentClasses.add(currentClass); } parentClasses.trimToSize(); return parentClasses; } // public ArrayList getAllParentClasses(UMLClass class_){ // // ArrayList parentClasses = new ArrayList(); // UMLClass currentClass = class_; // // parentClasses.add(class_); // // while(currentClass.getBaseClass() != null){ // currentClass = currentClass.getBaseUMLClass(); // parentClasses.add(currentClass); // } // // parentClasses.trimToSize(); // return parentClasses; // } private ArrayList getAllChildClasses(Class class_){ ArrayList childClasses = new ArrayList(); // get model classes ArrayList modelClasses = getAllModelClasses((NamedElement)class_); if(modelClasses.size() <= 0){ return null; } ArrayList currentChildren = new ArrayList(); currentChildren.add(class_); while(currentChildren.size() > 0){ //int m = currentChildren.size(); //for(int i = 0; i < m; i++){ String childClassName = ((Class)currentChildren.get(0)).getName(); int n = modelClasses.size(); for(int j = 0; j < n; j++){ if(((Class)modelClasses.get(j)).getGenerals().size() > 0 && (Class)((Class)modelClasses.get(j)).getGenerals().get(0) != null){ String className = ((Class)((Class)modelClasses.get(j)).getGenerals().get(0)).getName(); if(className.equalsIgnoreCase(childClassName)){ currentChildren.add(modelClasses.get(j)); childClasses.add(modelClasses.get(j)); //m++; modelClasses.remove(j); j--; n--; } } } currentChildren.remove(0); // i--; m--; //} } childClasses.trimToSize(); return childClasses; } // public ArrayList getAllChildClasses(UMLClass class_){ // // ArrayList childClasses = new ArrayList(); // // // get model classes // ArrayList modelClasses = getAllModelClasses((NamedElement)class_); // if(modelClasses.size() <= 0){ // return null; // } // // ArrayList currentChildren = new ArrayList(); // currentChildren.add(class_); // // while(currentChildren.size() > 0){ // for(int i = 0; i < currentChildren.size(); i++){ // String childClassName = ((UMLClass)currentChildren.get(i)).getName(); // for(int j = 0; j < modelClasses.size(); j++){ // String className = ((UMLClass)modelClasses.get(j)).getBaseClass(); // if(className.equalsIgnoreCase(childClassName)){ // currentChildren.add(modelClasses.get(j)); // modelClasses.remove(modelClasses.get(j)); // break; // } // } // } // } // // childClasses.trimToSize(); // return childClasses; // } private ArrayList getAllModelClasses(NamedElement element){ ArrayList classes = new ArrayList(); Model model; // goto the model while(!(element instanceof Model)){ element = (NamedElement)element.getOwner(); } if(!(element instanceof Model)){ return null; } else { model = (Model)element; } // get all owned packages List packagesList = model.getOwnedMembers(); // get classes from packages and add to list for(int i = 0; i < packagesList.size(); i++){ Package currentPackage = (Package)packagesList.get(i); List packageMembersList = currentPackage.getOwnedElements(); for(int j = 0; j < packageMembersList.size(); j++){ if(packageMembersList.get(j) instanceof Class){ classes.add(packageMembersList.get(j)); } } } classes.trimToSize(); return classes; } private ArrayList getAllModelSubClasses(){ ArrayList modelClasses = getAllModelClasses(this.model); ArrayList modelSubClasses = new ArrayList(); for(int i = 0; i < modelClasses.size(); i++){ Class modelClass = (Class)modelClasses.get(i); if(modelClass.getGenerals().size() > 0){ modelSubClasses.add(modelClass); } } modelSubClasses.trimToSize(); return modelSubClasses; } private ArrayList getOverrideAttributes(Class class_){ ArrayList overrideAttributes = new ArrayList(); List classAttributes = class_.getAttributes(); for(int i = 0; i < classAttributes.size(); i++){ Property classAttribute = (Property)classAttributes.get(i); if(overrides(classAttribute) != null){ overrideAttributes.add(classAttribute); } } if(overrideAttributes.size() > 0){ return overrideAttributes; } else { return null; } } private ArrayList getOverrideMethods(Class class_){ ArrayList overrideMethods = new ArrayList(); List classMethods = class_.getOwnedOperations(); for(int i = 0; i < classMethods.size(); i++){ Operation classMethod = (Operation)classMethods.get(i); if(overrides(classMethod) != null){ overrideMethods.add(classMethod); } } if(overrideMethods.size() > 0){ return overrideMethods; } else { return null; } } private ArrayList getOverrideReferences(Class class_){ if(!(class_ instanceof AssociationClass)){ return null; } ArrayList overrideReferences = new ArrayList(); List associationclassReferences = ((AssociationClass)class_).getOwnedEnds(); for(int i = 0; i < associationclassReferences.size(); i++){ Property reference = (Property)associationclassReferences.get(i); if(overrides(reference) != null){ overrideReferences.add(reference); } } if(overrideReferences.size() > 0){ return overrideReferences; } else { return null; } } private String overrides(NamedElement namedElement){ Stereotype cimStereotype = namedElement.getAppliedStereotype("CIM::Qualifiers"); List qualifierNames = (List) namedElement.getValue(cimStereotype, "QualifierName"); List qualifierValues = (List) namedElement.getValue(cimStereotype, "QualifierValue"); int index = -1; for(int i = 0; i < qualifierNames.size(); i++){ String qualifierName = (String)qualifierNames.get(i); if(qualifierName.equalsIgnoreCase("Override")){ index = i; break; } } if(index > -1){ return (String)qualifierValues.get(index); } return null; } } Index: QualifiersPropertySection.java =================================================================== RCS file: /cvsroot/sblim/ecute/Plugin/com/ibm/ecute/rsa/core/internal/properties/QualifiersPropertySection.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- QualifiersPropertySection.java 15 Jun 2005 09:41:47 -0000 1.18 +++ QualifiersPropertySection.java 7 Jul 2005 15:42:49 -0000 1.19 @@ -857,146 +857,6 @@ return true; } -// private ArrayList getInheritedQualifers(NamedElement element, ArrayList allAvailableQualifiers){ -// //TODO BB -// ArrayList inheritedList = new ArrayList(); -// -// // get applicable qualifiers for the element -// ArrayList applicableQualifiers = new ArrayList(); -// for(int i = 0; i < allAvailableQualifiers.size(); i++){ -// -// Qualifier qualifier = (Qualifier)allAvailableQualifiers.get(i); -// if(element instanceof Class && qualifier.classScope && !qualifier.RestrictedFlavor){ -// applicableQualifiers.add(qualifier); -// } else if(element instanceof AssociationClass && qualifier.associationScope && !qualifier.RestrictedFlavor){ -// applicableQualifiers.add(qualifier); -// } else if(element instanceof Property && qualifier.propertyScope && !qualifier.RestrictedFlavor){ -// applicableQualifiers.add(qualifier); -// } else if(element instanceof Property && qualifier.referenceScope && !qualifier.RestrictedFlavor){ -// applicableQualifiers.add(qualifier); -// } else if(element instanceof Operation && qualifier.methodScope && !qualifier.RestrictedFlavor){ -// applicableQualifiers.add(qualifier); -// } else if(element instanceof Parameter && qualifier.parameterScope && !qualifier.RestrictedFlavor){ -// applicableQualifiers.add(qualifier); -// } -// } -// applicableQualifiers.trimToSize(); -// -// if(element instanceof Class && applicableQualifiers.size() > 0){ -// Class thisClass = (Class)element; -// // get parent classes -// ArrayList parents = new ArrayList(); -// List generals = thisClass.getGenerals(); -// while (generals.size() > 0){ -// Class class_ = (Class)generals.get(0); -// parents.add(class_); -// generals = class_.getGenerals(); -// } -// -// if(parents.size() > 0){ -// for(int i = 0; i < applicableQualifiers.size(); i++){ -// boolean lastParent = false; -// for(int j = 0; j < parents.size(); j++){ -// if(j == parents.size()-1) lastParent = true; -// QualifierValueObject isInherited = checkIfInherited((Qualifier)applicableQualifiers.get(i), (Class)parents.get(j), lastParent); -// if(isInherited != null){ -// inheritedList.add(isInherited); -// allAvailableQualifiers.remove((Qualifier)applicableQualifiers.get(i)); -// break; -// } -// } -// } -// } -// } -// -// return inheritedList; -// } -// -// private QualifierValueObject checkIfInherited(Qualifier qualifier, Class class_, boolean lastParent){ -// QualifierValueObject returnQualifierObject = null; -// String classQualifierValue = null; -// -// if(qualifier.name.equalsIgnoreCase("Abstract")){ -// if(class_.isAbstract()){ -// classQualifierValue = "true"; -// } else { -// classQualifierValue = "false"; -// } -// } else if (qualifier.name.equalsIgnoreCase("Description")){ -// EList list = class_.getOwnedComments(); -// Iterator it = list.iterator(); -// while (it.hasNext()){ -// Comment comment = (Comment)it.next(); -// Stereotype stereo = comment.getApplicableStereotype("Default::Documentation"); -// if(stereo != null){ -// classQualifierValue = comment.getBody(); -// } -// } -// } else if (qualifier.name.equalsIgnoreCase("Deprecated")){ -// Stereotype stereo = class_.getAppliedStereotype("CIM::Deprecated"); -// if(stereo != null){ -// classQualifierValue = (String)class_.getValue(stereo, "Value"); -// } -// } else if (!(class_ instanceof AssociationClass) && qualifier.name.equalsIgnoreCase("OCL")){ -// String oclValue = existsOCL(class_); -// if(oclValue != null) -// classQualifierValue = oclValue; -// } else if (class_ instanceof AssociationClass && qualifier.name.equalsIgnoreCase("Aggregation")){ -// AssociationClass aClass = (AssociationClass)class_; -// EList ends = aClass.getOwnedEnds(); -// Iterator iter = ends.iterator(); -// while(iter.hasNext()){ -// Property prop = (Property)iter.next(); -// if(prop.getAggregation().getValue()== AggregationKind.SHARED || -// prop.getAggregation().getValue()== AggregationKind.COMPOSITE){ -// classQualifierValue = "true"; -// break; -// } -// } -// -// } else if (class_ instanceof AssociationClass && qualifier.name.equalsIgnoreCase("Composition")){ -// AssociationClass aClass = (AssociationClass)class_; -// EList ends = aClass.getOwnedEnds(); -// Iterator iter = ends.iterator(); -// while(iter.hasNext()){ -// Property prop = (Property)iter.next(); -// if(prop.getAggregation().getValue()== AggregationKind.COMPOSITE){ -// classQualifierValue = "true"; -// break; -// } -// } -// } else { -// -// //get all qualifiers witch are set in the Qualifiers-Stereotype -// Stereotype cimStereotype = class_.getAppliedStereotype("CIM::Qualifiers"); -// List qualifierNames = (List) class_.getValue(cimStereotype, "QualifierName"); -// List qualifierValues = (List) class_.getValue(cimStereotype, "QualifierValue"); -// -// for(int i=0; i<qualifierNames.size(); i++){ -// String qualifierName = (String)qualifierNames.get(i); -// String qualifierValue = (String)qualifierValues.get(i); -// -// if(qualifierName.equalsIgnoreCase(qualifier.name)){ -// classQualifierValue = qualifierValue; -// break; -// } -// } -// -// } -// -// if(classQualifierValue != null && !classQualifierValue.equalsIgnoreCase(qualifier.defaultValue)){ -// returnQualifierObject = new QualifierValueObject(qualifier.name, -// classQualifierValue, class_.getName() + " (" + -// class_.getNearestPackage().getName() + ")" , -1); -// } -//// if (classQualifierValue == null && lastParent){ -//// // set default value and definedIn emptyString -//// returnQualifierObject = new QualifierValueObject(qualifier.name, -//// qualifier.defaultValue, "", -1); -//// } -// -// return returnQualifierObject; -// } private void packColumns() { |