private static Set<? extends EObject> checkCrossReferences(ResourceSet resourceSet, URI uri) {
    Set<EObject> result = new HashSet<EObject>();

    Resource resource = resourceSet.getResource(uri, false);
    if (resource != null) {
      EList<EObject> contents = resource.getContents();
      if (!contents.isEmpty()) {
        EObject eObject = contents.get(0);
        for (EObject eCrossReference : eObject.eCrossReferences()) {
          Resource eResource = eCrossReference.eResource();
          if (eResource != null) {
            for (EObject content : eResource.getContents()) {
              EObject eContainer = content.eContainer();
              if (eContainer != null) {
                result.add(eContainer);
              }
            }

            eResource.unload();
          }
        }
      }
    }

    return result;
  }
Example #2
0
 private void setCrossReferenceLinks(EObject eObject) {
   for (EContentsEList.FeatureIterator<EObject> featureIterator =
           (EContentsEList.FeatureIterator<EObject>) eObject.eCrossReferences().iterator();
       featureIterator.hasNext(); ) {
     EObject referencedEObject = (EObject) featureIterator.next();
     EReference eReference = (EReference) featureIterator.feature();
     int position = getPosition(eObject, eReference, referencedEObject);
     addLink(eObject, referencedEObject, eReference, position);
   }
 }
Example #3
0
 /**
  * This iterates over the entire contents and checks whether dangling references exist. If some
  * are found, they are printed to the console (disabled) and the call returns the number of
  * dangling references found.
  *
  * @param resource A resource.
  * @return The number of dangling references.
  */
 public static int checkDanglingReferences(Resource resource) {
   int counter = 0;
   final TreeIterator<EObject> iter = resource.getAllContents();
   while (iter.hasNext()) {
     final EObject obj = iter.next();
     for (EObject ref : obj.eCrossReferences()) {
       if (ref.eResource() == null) {
         counter++;
         // System.out.println("Dangling refrence found: " + ref);
       }
     }
   }
   return counter;
 }
Example #4
0
 /**
  * Resolved all proxies within the given resource set.
  *
  * @param resourceSet the resource set to resolve.
  */
 private void resolveAll(ResourceSet resourceSet) {
   if (resourceSet != null) {
     final List<Resource> resources = resourceSet.getResources();
     for (int i = 0; i < resources.size(); ++i) {
       final Iterator<EObject> resourceContent = resources.get(i).getAllContents();
       while (resourceContent.hasNext()) {
         final EObject eObject = resourceContent.next();
         final Iterator<EObject> objectChildren = eObject.eCrossReferences().iterator();
         while (objectChildren.hasNext()) {
           // Resolves cross references by simply visiting them.
           objectChildren.next();
         }
         resourcesInScope.add(eObject.eResource());
       }
     }
   }
 }
  private List<ModelUnit> getUnusedWiths(PropertySet propertySet) {
    List<ModelUnit> importedUnits = propertySet.getImportedUnits();
    List<ModelUnit> unusedWiths = new ArrayList<ModelUnit>();
    ImportedUnitsLoop:
    for (ModelUnit nextImportedUnit : importedUnits) {
      if (nextImportedUnit.equals(propertySet.eContainer())) {
        unusedWiths.add(nextImportedUnit);
        continue ImportedUnitsLoop;
      }
      if (AadlUtil.isPredeclaredPropertySet(nextImportedUnit.getName())) {
        unusedWiths.add(nextImportedUnit);
        continue ImportedUnitsLoop;
      }

      TreeIterator<EObject> packageContents = propertySet.eAllContents();
      while (packageContents.hasNext()) {
        EObject nextObject = packageContents.next();
        EList<EObject> crossReferences = nextObject.eCrossReferences();
        for (EObject crossReference : crossReferences) {
          EObject container = crossReference.eContainer();
          if (nextImportedUnit.equals(container)) {
            continue ImportedUnitsLoop;
          } else {
            while (container != null
                && !(container instanceof AadlPackage)
                && !(container instanceof PropertySet)) {
              container = container.eContainer();
              if (container.equals(nextImportedUnit)) {
                continue ImportedUnitsLoop;
              }
            }
          }
        }
      }
      unusedWiths.add(nextImportedUnit);
    }
    return unusedWiths;
  }
 private List<ModelUnit> findMissingWiths(PropertySet propertySet) {
   List<ModelUnit> currentWiths = propertySet.getImportedUnits();
   List<ModelUnit> missingWiths = new ArrayList<ModelUnit>();
   TreeIterator<EObject> packageContents = propertySet.eAllContents();
   while (packageContents.hasNext()) {
     EObject nextObject = packageContents.next();
     EList<EObject> crossReferences = nextObject.eCrossReferences();
     for (EObject crossReference : crossReferences) {
       EObject container = crossReference.eContainer();
       while (container != null) {
         if ((container instanceof PropertySet || container instanceof AadlPackage)
             && (!AadlUtil.isPredeclaredPropertySet(((ModelUnit) container).getName()))
             && (!((ModelUnit) container).equals(propertySet))) {
           if (!currentWiths.contains(container) && !missingWiths.contains(container)) {
             missingWiths.add((ModelUnit) container);
           }
         }
         container = container.eContainer();
       }
     }
   }
   return missingWiths;
 }
 public void initializeUsedGenPackages(final GenModel genModel) {
   this.genModelInitializer.initialize(genModel, true);
   HashSet<EPackage> _hashSet = new HashSet<EPackage>();
   final HashSet<EPackage> referencedEPackages = _hashSet;
   UniqueEList<EPackage> _uniqueEList = new UniqueEList<EPackage>();
   final List<EPackage> ePackages = _uniqueEList;
   EList<GenPackage> _genPackages = genModel.getGenPackages();
   for (final GenPackage genPackage : _genPackages) {
     EPackage _ecorePackage = genPackage.getEcorePackage();
     ePackages.add(_ecorePackage);
   }
   int i = 0;
   int _size = ePackages.size();
   boolean _lessThan = (i < _size);
   boolean _while = _lessThan;
   while (_while) {
     {
       final EPackage ePackage = ePackages.get(i);
       int _plus = (i + 1);
       i = _plus;
       final TreeIterator<EObject> allContents = ePackage.eAllContents();
       boolean _hasNext = allContents.hasNext();
       boolean _while_1 = _hasNext;
       while (_while_1) {
         {
           final EObject eObject = allContents.next();
           if ((eObject instanceof EPackage)) {
             allContents.prune();
           } else {
             EList<EObject> _eCrossReferences = eObject.eCrossReferences();
             for (final EObject eCrossReference : _eCrossReferences) {
               boolean _matched = false;
               if (!_matched) {
                 if (eCrossReference instanceof EClassifier) {
                   final EClassifier _eClassifier = (EClassifier) eCrossReference;
                   _matched = true;
                   final EPackage referencedEPackage = _eClassifier.getEPackage();
                   ePackages.add(referencedEPackage);
                   referencedEPackages.add(referencedEPackage);
                 }
               }
               if (!_matched) {
                 if (eCrossReference instanceof EStructuralFeature) {
                   final EStructuralFeature _eStructuralFeature =
                       (EStructuralFeature) eCrossReference;
                   _matched = true;
                   EClass _eContainingClass = _eStructuralFeature.getEContainingClass();
                   final EPackage referencedEPackage = _eContainingClass.getEPackage();
                   ePackages.add(referencedEPackage);
                   referencedEPackages.add(referencedEPackage);
                 }
               }
             }
           }
         }
         boolean _hasNext_1 = allContents.hasNext();
         _while_1 = _hasNext_1;
       }
     }
     int _size_1 = ePackages.size();
     boolean _lessThan_1 = (i < _size_1);
     _while = _lessThan_1;
   }
   for (final EPackage referencedEPackage : referencedEPackages) {
     GenPackage _findGenPackage = genModel.findGenPackage(referencedEPackage);
     boolean _equals = Objects.equal(_findGenPackage, null);
     if (_equals) {
       ToXcoreMapping _toXcoreMapping = this.mapper.getToXcoreMapping(referencedEPackage);
       XNamedElement _xcoreElement = _toXcoreMapping.getXcoreElement();
       GenBase _gen = this.mapper.getGen(_xcoreElement);
       GenPackage usedGenPackage = ((GenPackage) _gen);
       boolean _equals_1 = Objects.equal(usedGenPackage, null);
       if (_equals_1) {
         GenPackage _findLocalGenPackage = this.findLocalGenPackage(referencedEPackage);
         usedGenPackage = _findLocalGenPackage;
       }
       boolean _notEquals = (!Objects.equal(usedGenPackage, null));
       if (_notEquals) {
         EList<GenPackage> _usedGenPackages = genModel.getUsedGenPackages();
         _usedGenPackages.add(usedGenPackage);
       } else {
         Resource _eResource = genModel.eResource();
         ResourceSet _resourceSet = _eResource.getResourceSet();
         final EList<Resource> resources = _resourceSet.getResources();
         i = 0;
         boolean found = false;
         boolean _and = false;
         int _size_1 = resources.size();
         boolean _lessThan_1 = (i < _size_1);
         if (!_lessThan_1) {
           _and = false;
         } else {
           boolean _not = (!found);
           _and = (_lessThan_1 && _not);
         }
         boolean _while_1 = _and;
         while (_while_1) {
           {
             final Resource resource = resources.get(i);
             boolean _and_1 = false;
             URI _uRI = resource.getURI();
             String _fileExtension = _uRI.fileExtension();
             boolean _equals_2 = "genmodel".equals(_fileExtension);
             if (!_equals_2) {
               _and_1 = false;
             } else {
               EList<EObject> _contents = resource.getContents();
               boolean _isEmpty = _contents.isEmpty();
               boolean _not_1 = (!_isEmpty);
               _and_1 = (_equals_2 && _not_1);
             }
             if (_and_1) {
               EList<EObject> _contents_1 = resource.getContents();
               EObject _get = _contents_1.get(0);
               GenPackage _findGenPackage_1 = ((GenModel) _get).findGenPackage(referencedEPackage);
               usedGenPackage = _findGenPackage_1;
               boolean _notEquals_1 = (!Objects.equal(usedGenPackage, null));
               if (_notEquals_1) {
                 EList<GenPackage> _usedGenPackages_1 = genModel.getUsedGenPackages();
                 _usedGenPackages_1.add(usedGenPackage);
                 found = true;
               }
             }
             int _plus = (i + 1);
             i = _plus;
           }
           boolean _and_1 = false;
           int _size_2 = resources.size();
           boolean _lessThan_2 = (i < _size_2);
           if (!_lessThan_2) {
             _and_1 = false;
           } else {
             boolean _not_1 = (!found);
             _and_1 = (_lessThan_2 && _not_1);
           }
           _while_1 = _and_1;
         }
         boolean _not_1 = (!found);
         if (_not_1) {
           String _plus = ("No GenPackage found for " + referencedEPackage);
           RuntimeException _runtimeException = new RuntimeException(_plus);
           throw _runtimeException;
         }
       }
     }
   }
 }
  @Override
  public org.edna.datamodel.datamodel.Model transform(org.eclipse.uml2.uml.Model sourceModel) {
    this.sourceModel = sourceModel;
    this.targetModel = DatamodelFactory.eINSTANCE.createModel();

    targetModel.setTargetNamespace(nsUri);

    new UMLSwitch<EObject>() {
      private Stack<org.edna.datamodel.datamodel.Package> packageStack =
          new Stack<org.edna.datamodel.datamodel.Package>();

      public EObject caseModel(org.eclipse.uml2.uml.Model object) {
        List<PackageableElement> packagedElements =
            Lists.newArrayList(object.getPackagedElements());
        Collections.sort(packagedElements, Comparators.namedElementComparator);
        for (EObject obj : packagedElements) {
          doSwitch(obj);
        }
        return object;
      };

      public EObject caseClass(Class object) {
        if (monitor.isCanceled()) return null;
        monitor.subTask(object.getName());
        ComplexType type = createComplexType.apply(object);
        org.edna.datamodel.datamodel.Package currentPackage =
            packageStack.isEmpty() ? null : packageStack.peek();
        if (currentPackage != null) {
          currentPackage.getTypes().add(type);
        } else {
          targetModel.getTypes().add(type);
        }
        monitor.worked(1);
        return object;
      };

      public EObject casePackage(org.eclipse.uml2.uml.Package object) {
        org.edna.datamodel.datamodel.Package target = createPackage.apply(object);
        org.edna.datamodel.datamodel.Package currentPackage =
            packageStack.isEmpty() ? null : packageStack.peek();
        if (currentPackage != null) {
          currentPackage.getPackages().add(target);
        } else {
          targetModel.getPackages().add(target);
        }
        packageStack.push(target);
        List<PackageableElement> packagedElements =
            Lists.newArrayList(object.getPackagedElements());
        Collections.sort(packagedElements, Comparators.namedElementComparator);
        for (EObject obj : packagedElements) {
          if (monitor.isCanceled()) return null;
          doSwitch(obj);
        }
        packageStack.pop();
        return object;
      };
    }.doSwitch(sourceModel);
    if (monitor.isCanceled()) return null;

    Set<String> importedNamespaces = Sets.newTreeSet();
    for (Iterator<EObject> i = targetModel.eAllContents(); i.hasNext(); ) {
      EObject obj = i.next();
      for (EObject referenced : obj.eCrossReferences()) {
        if (referenced.eResource() != null) {
          importedNamespaces.add(nameProvider.getFullyQualifiedName(referenced).toString());
        }
      }
    }

    for (String elem : importedNamespaces) {
      Import imported = DatamodelFactory.eINSTANCE.createImport();
      imported.setImportedNamespace(elem);
      targetModel.getImports().add(imported);
    }

    return targetModel;
  }