package com.hundsun.ares.studio.emfadapter; import java.util.HashMap; import java.util.Map; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.xmi.XMIResource; import org.eclipse.emf.ecore.xmi.XMLHelper; import org.eclipse.emf.ecore.xmi.impl.XMISaveImpl; import com.hundsun.ares.studio.core.model.extendable.IExtendAbleModel; public class AresXMLSaveImpl extends XMISaveImpl { public AresXMLSaveImpl(XMLHelper helper) { super(helper); } public AresXMLSaveImpl(Map<?, ?> options, XMLHelper helper, String encoding) { super(getExtendSaveOptions(options), helper, encoding); } public AresXMLSaveImpl(Map<?, ?> options, XMLHelper helper, String encoding, String xmlVersion) { super(getExtendSaveOptions(options), helper, encoding, xmlVersion); } /** * ʹ�ñ����ļ�ʱʹ��CDATA * @param options * @return */ static protected Map getExtendSaveOptions(Map options) { if (options == null) { options = new HashMap(); } //options.put(XMIResource.OPTION_ESCAPE_USING_CDATA, Boolean.TRUE); return options; } protected void endSaveFeatures(EObject o, int elementType, String content) { if (o == root && (o instanceof IExtendAbleModel)) { Map map = ((IExtendAbleModel) o).getMap(); if(map != null && !map.isEmpty()){ elementType = CONTENT_ELEMENT; if (content == null) { content = ""; } content = content + EmfExtendModelConverter.getDefault().writeExtendMap( (IExtendAbleModel) o); } } if (processElementExtensions(o)) { if (!toDOM) { doc.endElement(); } } else { switch (elementType) { case EMPTY_ELEMENT: { if (!toDOM) { doc.endEmptyElement(); } break; } case CONTENT_ELEMENT: { if (!toDOM) { doc.endContentElement(content); } break; } default: { if (!toDOM) { doc.endElement(); } break; } } } if (toDOM) { currentNode = currentNode.getParentNode(); } } }