private void unloadCompositionPrograms(URI artifactURI, ResourceSet resourceSet) { for (List<String> ucpi : ReuseResources.INSTANCE.getInfluencedComposingCompositionProgramIDsFragment( ResourceUtil.idFrom(artifactURI).getSegments())) { URI cpURI = ResourceUtil.uriFrom(ResourceUtil.idFrom(ucpi)); if (cpURI != null) { unload(cpURI, resourceSet); } } }
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); } }