Skip to main content



      Home
Home » Modeling » EMF » Save a copy of a Resource - xmi:id missing
Save a copy of a Resource - xmi:id missing [message #1694619] Wed, 06 May 2015 13:10 Go to next message
Eclipse UserFriend
Hello there,

I've implemented a multipage editor which combines EMF and xml tabs.
The concept is that the emf model is processed and is exported in the XML tab. (the xml has a custom structure).

However in order to avoid saving before moving to a new tab (so at to get the up-to-date editorinput) I would like to create a copy of the unsaved up-to-date resource and feed that to my exporter.

I have managed to implement this, however when I copy the resource and save it; I believe that I am missing something in the saveOptions which results in the xmi:id attribute missing from the resource model.


XMIResource xmiResource = new XMIResourceImpl(URI.createFileURI(tempFile2.getAbsolutePath())); 
...
//defining the outputstream etc
...
//copy the contents of the original resource to the newly added one
//where re.getContents() the contents of the original resource
xmiResource.getContents().addAll(EcoreUtil.copyAll(re.getContents())); 

final Map<Object, Object> saveOptions = xmiResource.getDefaultSaveOptions();		  
saveOptions.put(XMIResource.OPTION_DECLARE_XML,Boolean.TRUE);		  
saveOptions.put(XMIResource.OPTION_PROCESS_DANGLING_HREF,XMIResource.OPTION_PROCESS_DANGLING_HREF_DISCARD);			  
saveOptions.put(XMIResource.OPTION_SCHEMA_LOCATION,Boolean.TRUE);
saveOptions.put(XMIResource.OPTION_DEFER_IDREF_RESOLUTION,Boolean.TRUE);		 
saveOptions.put(XMIResource.OPTION_SKIP_ESCAPE_URI,Boolean.FALSE);
saveOptions.put(XMIResource.OPTION_ENCODING,"UTF-8");

//save the resource
xmiResource.save(outputStream, saveOptions);	



A resource model example..
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jsxm="jsxm">
 
<jsxm:SXM name="test">
    <state xsi:type="jsxm:State" name="intial" outgoingTransitions="/0/@transition.0"/>
    <state xsi:type="jsxm:State" name="open" incomingTransitions="/0/@transition.0"/>
....
</jsxm:SXM>


How can I force the xmi:id to appear in the copy of the resource model?

Best Regards,

[Updated on: Wed, 06 May 2015 13:24] by Moderator

Re: Save a copy of a Resource - xmi:id missing [message #1694649 is a reply to message #1694619] Wed, 06 May 2015 15:40 Go to previous message
Eclipse UserFriend
Hello again,

I have solved this issue

In case anyone is interested you have to extend XMIResourceImpl like that and override the useUUIDs method like this (the previous code remains the same)

class XMIResourceImpl extends org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl {
        public XMIResourceImpl() { super(); }
        public XMIResourceImpl(URI uri) { super(uri); }
	 
	@Override
	protected boolean useUUIDs() {
		return true;
	}
}


Finally those are the save options that give you the exact result as in the original resource

final Map<Object, Object> saveOptions = xmiResource.getDefaultSaveOptions();
saveOptions.put(XMIResource.OPTION_SCHEMA_LOCATION,Boolean.TRUE);
saveOptions.put(XMIResource.OPTION_ENCODING,"UTF-8");
saveOptions.put(XMIResource.OPTION_USE_XMI_TYPE, Boolean.TRUE);
saveOptions.put(XMIResource.OPTION_SAVE_TYPE_INFORMATION,Boolean.TRUE);



Best Regards,
Previous Topic:Ecore defaultValue for EByteArray or EFloat with multiplicities
Next Topic:Prefix for Enums
Goto Forum:
  


Current Time: Wed Jul 23 14:33:56 EDT 2025

Powered by FUDForum. Page generated in 0.03417 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top