/** * Updates the given {@link IEObjectContainer} with the given {@link Resource}. * * @param container * the {@link ILocationContainer} * @param eObjectContainer * the {@link IEObjectContainer} * @param newResource * the {@link Resource} * @throws Exception * if the XMI serialization failed */ public void updateEObjectContainer(ILocationContainer container, IEObjectContainer eObjectContainer, Resource newResource) throws Exception { if (eObjectContainer.getXMIContent() != null && !eObjectContainer.getXMIContent().isEmpty()) { final XMIResourceImpl oldResource = new XMIResourceImpl(URI.createURI("")); oldResource.load(new ByteArrayInputStream(eObjectContainer.getXMIContent().getBytes(UTF_8)), new HashMap<Object, Object>()); final IComparisonScope scope = new DefaultComparisonScope(oldResource, newResource, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); for (ILocation child : new ArrayList<ILocation>(eObjectContainer.getContents())) { if (child instanceof IEObjectLocation && !child.isMarkedAsDeleted()) { final IEObjectLocation location = (IEObjectLocation)child; updateEObjectLocation(oldResource, comparison, location, needSavedURIFragment( newResource)); } } } eObjectContainer.getSavedURIFragments().clear(); if (needSavedURIFragment(newResource)) { updateSavedURIFragment(container, eObjectContainer, newResource); } final String newXMIContent = XMLHelperImpl.saveString(new HashMap<Object, Object>(), newResource .getContents(), UTF_8, null); eObjectContainer.setXMIContent(newXMIContent); }