Allow preservation of previously set XMI IDs when using useIDs/removeIDs
diff --git a/plugins/org.eclipse.m2m.atl.drivers.emf4atl/src/org/eclipse/m2m/atl/drivers/emf4atl/EMFModelLoader.java b/plugins/org.eclipse.m2m.atl.drivers.emf4atl/src/org/eclipse/m2m/atl/drivers/emf4atl/EMFModelLoader.java index 36ec2a9..9a9b262 100644 --- a/plugins/org.eclipse.m2m.atl.drivers.emf4atl/src/org/eclipse/m2m/atl/drivers/emf4atl/EMFModelLoader.java +++ b/plugins/org.eclipse.m2m.atl.drivers.emf4atl/src/org/eclipse/m2m/atl/drivers/emf4atl/EMFModelLoader.java
@@ -307,19 +307,8 @@ if (href != null) { r.setURI(URI.createURI(href)); } - - if(useIDs || removeIDs) { - XMIResource xr = (XMIResource)r; - int id = 1; - Set alreadySet = new HashSet(); - for (Iterator i = r.getAllContents(); i.hasNext();) { - EObject eo = (EObject)i.next(); - if (alreadySet.contains(eo)) { - continue; // because sometimes a single element gets processed twice - } - xr.setID(eo, removeIDs ? null : ("a" + (id++))); - alreadySet.add(eo); - } + if (r instanceof XMIResource) { + processIDs((XMIResource)r); } try { r.save(saveOptions); @@ -345,19 +334,8 @@ */ public void save(ASMModel model, OutputStream out) throws IOException { Resource r = ((ASMEMFModel)model).getExtent(); - - if(useIDs || removeIDs) { - XMIResource xr = (XMIResource)r; - int id = 1; - Set alreadySet = new HashSet(); - for (Iterator i = r.getAllContents(); i.hasNext();) { - EObject eo = (EObject)i.next(); - if (alreadySet.contains(eo)) { - continue; // because sometimes a single element gets processed twice - } - xr.setID(eo, removeIDs ? null : ("a" + (id++))); - alreadySet.add(eo); - } + if (r instanceof XMIResource) { + processIDs((XMIResource)r); } try { r.save(out, saveOptions); @@ -368,6 +346,27 @@ } /** + * Processes XMI IDs for xr + * @param xr + */ + protected void processIDs(XMIResource xr) { + if (useIDs || removeIDs) { + int id = 1; + Set alreadySet = new HashSet(); + for (Iterator i = xr.getAllContents(); i.hasNext();) { + EObject eo = (EObject)i.next(); + if (alreadySet.contains(eo)) { + continue; // because sometimes a single element gets processed twice + } + String idStr = xr.getID(eo); // reuse existing IDs + String newId = removeIDs ? null : (idStr == null) ? "a" + (id++) : idStr; + xr.setID(eo, newId); + alreadySet.add(eo); + } + } + } + + /** * Adapts model if its metamodel is MOF, such that its NsURI is registered * and primitive datatypes are mapped to Java types. * @param model