private static void addOrUpdateArtifact(URI uri, boolean update) {
   if (!IndexUtil.INSTANCE.isArtifact(uri)) {
     IndexUtil.INSTANCE.addArtifact(uri);
   } else if (update) {
     IndexUtil.INSTANCE.updateArtifact(uri);
   }
 }
  private void reloadReuseExtensionActivator(Resource resource, ResourceSet resourceSet) {
    if (resource.getContents().isEmpty()) {
      return;
    }
    if (!(resource.getContents().get(0) instanceof ReuseExtension)) {
      return;
    }
    URI rexURI = resource.getURI();
    List<Constraint> constraints =
        FacetUtil.buildConstraints(
            IndexConstants.COLUMN_CM_ACTIVATED_REUSE_EXTENSION,
            ResourceUtil.idString(ResourceUtil.idFrom(rexURI)));
    FacetedRequest request = FacetUtil.buildFacetedRequest(constraints);
    List<IndexRow> response = IndexUtil.INSTANCE.getIndex(request);
    for (IndexRow row : response) {
      URI rexActivatorURI = ResourceUtil.uriFrom(row.getPhyURI());
      if (rexActivatorURI != null) {
        reload(rexActivatorURI, resourceSet);
      }
    }

    constraints =
        FacetUtil.buildConstraints(
            IndexConstants.COLUMN_CL_ACTIVATED_REUSE_EXTENSION,
            ResourceUtil.idString(ResourceUtil.idFrom(rexURI)));
    request = FacetUtil.buildFacetedRequest(constraints);
    response = IndexUtil.INSTANCE.getIndex(request);
    for (IndexRow row : response) {
      URI rexActivatorURI = ResourceUtil.uriFrom(row.getPhyURI());
      if (rexActivatorURI != null) {
        reload(rexActivatorURI, resourceSet);
      }
    }
  }
  private void reloadReuseExtension(Resource resource, ResourceSet resourceSet) {
    if (resource.getContents().isEmpty()) {
      return;
    }
    if (!(resource.getContents().get(0) instanceof FragmentCollaboration)) {
      return;
    }
    URI fracolURI = resource.getURI();
    List<Constraint> constraints =
        FacetUtil.buildConstraints(
            IndexConstants.COLUMN_CM_IMPLEMENTED_FRAGMENT_COLLABORATION,
            ResourceUtil.idString(ResourceUtil.idFrom(fracolURI)));
    FacetedRequest request = FacetUtil.buildFacetedRequest(constraints);
    List<IndexRow> response = IndexUtil.INSTANCE.getIndex(request);
    for (IndexRow row : response) {
      URI rexURI = ResourceUtil.uriFrom(row.getPhyURI());
      if (rexURI != null) {
        reload(rexURI, resourceSet);
      }
    }

    constraints =
        FacetUtil.buildConstraints(
            IndexConstants.COLUMN_CL_IMPLEMENTED_FRAGMENT_COLLABORATION,
            ResourceUtil.idString(ResourceUtil.idFrom(fracolURI)));
    request = FacetUtil.buildFacetedRequest(constraints);
    response = IndexUtil.INSTANCE.getIndex(request);
    for (IndexRow row : response) {
      URI rexURI = ResourceUtil.uriFrom(row.getPhyURI());
      if (rexURI != null) {
        reload(rexURI, resourceSet);
      }
    }
  }
 private static void removeOldArtifacts(List<URI> existingURIs) {
   for (IndexRow row : IndexUtil.INSTANCE.getIndex()) {
     URI rowURI = URI.createURI(row.getPhyURI());
     if (rowURI != null && rowURI.isPlatformPlugin()) {
       if (!existingURIs.contains(rowURI)) {
         IndexUtil.INSTANCE.removeArtifact(rowURI);
       }
     }
   }
 }
 /**
  * Runs the action.
  *
  * @param action the action proxy that handles the presentation portion of the action
  */
 public void run(IAction action) {
   for (IndexRow row : IndexUtil.INSTANCE.getIndex()) {
     URI uri = ResourceUtil.uriFrom(row.getPhyURI());
     IFile file = ResourceUtil.fileFor(uri);
     if (file == null || !file.exists()) {
       IndexUtil.INSTANCE.removeArtifact(row);
     }
   }
   IndexUtil.INSTANCE.commitIndex();
 }
  private void computeAndCacheCompositionInterface(
      List<String> ufi,
      Resource fragmentResource,
      List<ReuseExtensionActivator> rexActivatorList,
      ResourceSet resourceSet,
      IndexMetaData metaData) {
    Fragment fragment = null;

    // physical or composed?
    List<Constraint> constraints =
        FacetUtil.buildConstraints(
            IndexConstants.COLUMN_COMPOSED_FRAGMENT, ResourceUtil.idString(ufi));
    FacetedRequest request = FacetUtil.buildFacetedRequest(constraints);
    List<IndexRow> response = IndexUtil.INSTANCE.getIndex(request);

    if (response.isEmpty()) {
      fragment = FragmentFactory.eINSTANCE.createPhysicalFragment();
    } else {
      fragment = FragmentFactory.eINSTANCE.createComposedFragment();
    }

    // load
    fragment.getUFI().addAll(ufi);
    fragment.getContents().addAll(fragmentResource.getContents());

    // find reuse extension activators
    for (ReuseExtensionActivator rexActivator : rexActivatorList) {
      if (rexActivator.getReuseExtension() instanceof ComponentModelSpecification) {
        if (influencesFragment(rexActivator, fragment)) {
          fragment.getComponentModelActivators().add(rexActivator);
        }
      }
    }

    // compute composition interface (post processors might need diagrams)
    if (!fragment.getContents().isEmpty()) {
      for (URI fragmentDiagramURI : ReuseResources.INSTANCE.getDiagramURIs(ufi)) {
        Resource fragmentDiagramResource = null;
        try {
          fragmentDiagramResource = resourceSet.getResource(fragmentDiagramURI, true);
        } catch (Exception e) {
          // ok
        }
        if (fragmentDiagramResource != null) {
          fragment.getDiagrams().addAll(fragmentDiagramResource.getContents());
        }
      }
    }
    CompositionInterfaceComputerUtil.compute(fragment);

    // index (cache)
    Resource tempXMIResource = resourceSet.createResource(URI.createURI("temp:/temp.xmi"));
    tempXMIResource.getContents().add(fragment);
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    try {
      tempXMIResource.save(outputStream, resourceSet.getLoadOptions());
      metaData.putSingle(IndexConstants.COLUMN_FRAGMENT, outputStream.toString("UTF-8"));
    } catch (IOException e) {
      e.printStackTrace();
    }
    resourceSet.getResources().remove(tempXMIResource);

    // are there external computers registered?
    // TODO #1656: test this
    DerivedCompositionProgram derivedCp = CompositionProgramExtractorUtil.extract(fragment);
    if (derivedCp != null && derivedCp.getUCPI() != null && !derivedCp.getUCPI().isEmpty()) {
      URI derivedCpURI =
          SokanReuseResourceUtil.getDerivedCompositionProgramURI(
              derivedCp.getUCPI(), fragment.getUFI(), null);
      Resource resource =
          createResourceForDerivedCompositionProgram(derivedCp, derivedCpURI, resourceSet);
      ReuseResourcesUtil.completeCompositionProgram(resource);
    }
  }