Save a copy of a Resource - xmi:id missing [message #1694619] |
Wed, 06 May 2015 17:10 |
|
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 17:24] Report message to a moderator
|
|
|
Re: Save a copy of a Resource - xmi:id missing [message #1694649 is a reply to message #1694619] |
Wed, 06 May 2015 19:40 |
|
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,
|
|
|
Powered by
FUDForum. Page generated in 0.02910 seconds