Example #1
0
  @Override
  public AttributedFeatureModel parseFile(String fileName) throws Exception {
    Injector injector = new VMStandaloneSetup().createInjectorAndDoEMFRegistration();
    XtextResourceSet resourceSet = injector.getInstance(XtextResourceSet.class);
    resourceSet.addLoadOption(XtextResource.OPTION_RESOLVE_ALL, Boolean.TRUE);
    if (models != null) {
      for (String s : models) {
        resourceSet.getResource(URI.createURI(s), true);
      }
    }

    Resource resource = resourceSet.getResource(URI.createURI(fileName), true);

    Model model = (Model) resource.getContents().get(0);

    fm = new AttributedFeatureModel();

    VmBlock relationships = null;
    VmBlock attsblock = null;
    VmBlock constratins = null;

    EList<VmBlock> bl = model.getBlocks();
    for (VmBlock block : bl) {
      if (block instanceof Relationships) {
        relationships = block;
      } else if (block instanceof Attributes) {
        attsblock = block;
      } else if (block instanceof Constraints) {
        constratins = block;
      } else if (block instanceof PackageDeclaration) {
        for (VmBlock blockinpkg : ((PackageDeclaration) block).getBlocks()) {
          if (blockinpkg instanceof Relationships) {
            relationships = blockinpkg;
          } else if (blockinpkg instanceof Attributes) {
            attsblock = blockinpkg;

          } else if (blockinpkg instanceof Constraints) {
            constratins = blockinpkg;
          }
        }
      }
    }
    if (((Relationships) relationships) != null) {
      FeatureHierarchy fhs = ((Relationships) relationships).getRoot();
      fr.familiar.attributedfm.Feature ffeat =
          new fr.familiar.attributedfm.Feature(fhs.getParent().getName());
      visitFeatureHierarchy(ffeat, fhs);
      fm.setRoot(ffeat);
    }
    if ((Attributes) attsblock != null) {
      visitAttributes(((Attributes) attsblock).getAttrDefs(), fm);
    }
    if ((Constraints) constratins != null) {
      visitConstraints(((Constraints) constratins).getConstraints(), fm);
    }
    return fm;
  }