package com.hundsun.ares.studio.emfadapter.io; import java.io.InputStream; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.util.BasicExtendedMetaData; import org.eclipse.emf.ecore.xmi.XMLResource; import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl; import com.hundsun.ares.studio.core.model.converter.IModelConverter; import com.hundsun.ares.studio.emfadapter.AresXMLProcessor; import com.hundsun.ares.studio.emfadapter.AresXMLResourceImpl; public class EmfModelConverter implements IModelConverter { protected AresXMLProcessor processor = new AresXMLProcessor(); protected Map map = new HashMap(); protected BasicExtendedMetaData metaData = new BasicExtendedMetaData(); public EmfModelConverter() { map.put(XMLResource.OPTION_ENCODING, "UTF-8"); map.put(XMLResource.OPTION_EXTENDED_META_DATA, metaData); } public void read(InputStream in, Object info) throws Exception { // System.out.println("read"); // System.out.println(System.currentTimeMillis()); processor.load(in, map,info); // System.out.println(System.currentTimeMillis()); } public Object read(InputStream in) throws Exception { Resource res = processor.load(in, map); if(res != null && res.getContents().size() > 0){ return res.getContents().get(0); } return null; } public void write(OutputStream out, Object info) throws Exception { // System.out.println("write"); // System.out.println(System.currentTimeMillis()); if(info instanceof EObject){ // Resource res = ((EObject) info).eResource(); // if (res == null) { Resource res = new AresXMLResourceImpl(); res.getContents().add((EObject)info); // } if(res instanceof XMLResource){ XMLResource xmlres = (XMLResource)res; String encoding = map.get(XMLResource.OPTION_ENCODING).toString(); if(!encoding.equals(xmlres.getEncoding())){ xmlres.setEncoding(encoding); } } processor.save(out, res, map); } // System.out.println(System.currentTimeMillis()); } }