Changeset 1528 for trunk/modelicaml


Ignore:
Timestamp:
05/31/12 20:24:47 (12 years ago)
Author:
wschamai
Message:

BUG FIX: recursive collecting of imported elements

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/modelicaml/org.openmodelica.modelicaml.common/src/org/openmodelica/modelicaml/common/services/ElementsCollector.java

    r1060 r1528  
    4141import org.eclipse.emf.common.util.EList;
    4242import org.eclipse.emf.ecore.EObject;
    43 import org.eclipse.uml2.uml.Class;
    4443import org.eclipse.uml2.uml.Element;
    4544import org.eclipse.uml2.uml.Namespace;
     45import org.eclipse.uml2.uml.Package;
    4646import org.eclipse.uml2.uml.PackageableElement;
    4747
     
    7474           
    7575            Namespace element = (Namespace)umlRootElement;
    76             EList<PackageableElement> importedElements = getImportedMembers(element);
    77             if (importedElements != null && importedElements.size() > 0) {
    78                 for (PackageableElement packageableElement : importedElements) {
    79                    
    80                     // check if the imported member is an element
    81                     if (packageableElement instanceof Element) {
    82                         collectElements(packageableElement, true);
    83                     }
    84                    
    85                     // go to the contents of the imported member
    86                     collectFromImportedMember(packageableElement);
    87                 }
    88             }
     76           
     77            // collect imported packages
     78            for (Package importedPackage : element.getImportedPackages()) {
     79                collectElement(importedPackage, true);
     80               
     81                // go to the contents of the imported package
     82                collectFromImportedMember(importedPackage);
     83            }
     84           
     85//          EList<PackageableElement> importedElements = getImportedMembers(element);
     86//          if (importedElements != null && importedElements.size() > 0) {
     87//              for (PackageableElement packageableElement : importedElements) {
     88//                 
     89//                  // check if the imported member is an element
     90//                  if (packageableElement instanceof Element) {
     91//                      collectElements(packageableElement, true);
     92//                  }
     93//                 
     94//                  // go to the contents of the imported member
     95//                  collectFromImportedMember(packageableElement);
     96//              }
     97//          }
     98           
    8999        }
    90100        else {
     
    102112            if (object instanceof Namespace) {
    103113               
    104                 EList<PackageableElement> importedElements = getImportedMembers((Namespace)object);
     114                Namespace element = (Namespace)object;
     115               
     116                // collect imported packages
     117                for (Package importedPackage : element.getImportedPackages()) {
     118                    collectElement(importedPackage, true);
     119                   
     120                    // go to the contents of the imported package
     121                    collectFromImportedMember(importedPackage);
     122                }
     123               
     124                EList<PackageableElement> importedElements = getImportedMembers(element);
    105125                if (importedElements != null && importedElements.size() > 0) {
    106126                    for (PackageableElement packageableElement2 : importedElements) {
     
    108128                        // check if the imported member is an element
    109129                        if (packageableElement2 instanceof Element) {
    110                             collectElements(packageableElement2, true);
     130                            collectElement(packageableElement2, true);
    111131                        }
    112132                       
     
    119139            // collect elements.
    120140            if (object instanceof Element) {
    121                 collectElements((Element)object, false);
    122             }
    123         }
    124     }
    125    
    126    
    127    
    128    
    129 //  public void collectElementsFromModel(EObject umlRootElement, String stereotypeQName){
    130 //     
    131 //      //set the stereotype
    132 //      this.stereotypeQName = stereotypeQName;
    133 //     
    134 //      // clear lists in order to enable the call of the this method multiple times using the same object.
    135 //      importedMembers.clear();
    136 //      importedElements.clear();
    137 //      elements.clear();
    138 //     
    139 //      if (umlRootElement != null) {
    140 //          // collect elements that are imported by the selected root element
    141 //          if (umlRootElement instanceof Namespace) {
    142 //             
    143 //              Namespace element = (Namespace)umlRootElement;
    144 //              EList<PackageableElement> importedElements = getImportedMembers(element);
    145 //              if (importedElements != null && importedElements.size() > 0) {
    146 //                  for (PackageableElement packageableElement : importedElements) {
    147 //                     
    148 //                      // check if the imported member is an element
    149 //                      if (packageableElement instanceof Element) {
    150 //                          collectElements(packageableElement, true);
    151 //                      }
    152 //                     
    153 //                      // go to the contents of the imported member
    154 //                      collectFromImportedMember(packageableElement);
    155 //                  }
    156 //              }
    157 //          }
    158 //         
    159 //          // get all direct contents of the selected root element
    160 //          Iterator<EObject> i = umlRootElement.eAllContents();
    161 //
    162 //          while (i.hasNext()) {
    163 //              EObject object = i.next() ;
    164 //             
    165 //              // collect all imported elements
    166 //              if (object instanceof Namespace) {
    167 //                 
    168 //                  EList<PackageableElement> importedElements = getImportedMembers((Namespace)object);
    169 //                  if (importedElements != null && importedElements.size() > 0) {
    170 //                      for (PackageableElement packageableElement2 : importedElements) {
    171 //                         
    172 //                          // check if the imported member is an element
    173 //                          if (packageableElement2 instanceof Element) {
    174 //                              collectElements(packageableElement2, true);
    175 //                          }
    176 //                         
    177 //                          // go to the contents of the imported member
    178 //                          collectFromImportedMember(packageableElement2);
    179 //                      }
    180 //                  }
    181 //              }
    182 //             
    183 //              // collect elements.
    184 //              if (object instanceof Element) {
    185 //                  collectElements((Element)object, false);
    186 //              }
    187 //          }
    188 //      }
    189 //      else {
    190 ////            System.err.println("Cannot access the root ModelicaML model for searching for value binding containers.");
    191 //      }
    192 //  }
     141                collectElement((Element)object, false);
     142            }
     143        }
     144    }
    193145   
    194146   
     
    197149        // get imported members from itself
    198150        if (importedMember instanceof Namespace) {
     151           
    199152            Namespace element = (Namespace) importedMember;
     153           
     154            // collect imported packages
     155            for (Package importedPackage : element.getImportedPackages()) {
     156                collectElement(importedPackage, true);
     157            }
     158           
    200159            EList<PackageableElement> importedElements = getImportedMembers(element);
    201160           
     
    205164                importedMembers.addAll(importedElements);
    206165                for (PackageableElement packageableElement : importedElements) {
     166                   
    207167                    // collect elements
    208168                    if (packageableElement instanceof Element) {
    209                         collectElements((Element)packageableElement, true);
     169                        collectElement((Element)packageableElement, true);
    210170                    }
    211171                    // not yet considered -> recursively call
     
    219179        }
    220180
    221         // iterate over all contained elements, collect requirements, and recursively collect requirements from all imported members
     181        // iterate over all contained elements
    222182        Iterator<EObject> i = importedMember.eAllContents();
    223183        while (i.hasNext()) {
     
    226186            // collect elements
    227187            if (object instanceof Element) {
    228                 collectElements((Element)object, true);
    229             }
     188                collectElement((Element)object, true);
     189            }
     190           
    230191            // not yet considered -> recursively call
    231192            if (!importedMembers.contains(object)) {
     
    241202     *  This method can be overridden for specific collections
    242203     */
    243     protected void collectElements(Element element, boolean isImported){
     204    protected void collectElement(Element element, boolean isImported){
    244205        // collect elements
    245206        // avoid duplicates that can occur due to the multiple imports of the same elements
    246207       
    247         if (element instanceof Class
     208        if (element instanceof Element
    248209                && ((Element)element).getAppliedStereotype(this.stereotypeQName) != null
    249210                && !elements.contains(element)) {
     
    258219    }
    259220   
     221
    260222    private EList<PackageableElement> getImportedMembers(Namespace element){
    261223        if (element != null) {
Note: See TracChangeset for help on using the changeset viewer.