/**
* Դ�������ƣ�EMFExtendModelConverter.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.ui
* ����˵����$desc
* ����ĵ���
* ���ߣ���Ҷ��
*/
package com.hundsun.ares.studio.jres.modelconvert;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import org.apache.log4j.Logger;
import org.dom4j.Element;
import org.eclipse.core.runtime.Assert;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.xmi.XMLResource;
import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl;
import com.hundsun.ares.studio.core.model.CorePackage;
import com.hundsun.ares.studio.core.model.converter.IExtendModelConverter;
/**
* @author gongyf
* @author sundl ��UI����ƶ���ModelConverter���
*/
public class EMFExtendModelConverter implements IExtendModelConverter {
private Logger logger = Logger.getLogger(getClass());
/* (non-Javadoc)
* @see com.hundsun.ares.studio.core.model.converter.IExtendModelConverter#writeExtendModel(java.lang.Object, org.dom4j.Element)
*/
@Override
public void writeExtendModel(Object extendModel, Element valueRoot) {
Assert.isTrue(extendModel instanceof EObject);
try {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
EObject eObj = (EObject) extendModel;
if (eObj.eResource() == null) {
XMLResource resource = new XMLResourceImpl();
resource.getContents().add(eObj);
}
eObj.eResource().save(outputStream, ModelConverterUtils.EMF_SAVE_OPTIONS);
String tmp = outputStream.toString(ModelConverterUtils.CODING_TYPE_UTF_8);
valueRoot.addCDATA(tmp);
} catch (Exception e) {
logger.error("��������չģ��д��ʱ��������", e);
}
}
protected void prepareEPackageRegistry() {
EPackage.Registry.INSTANCE.put(CorePackage.eNS_URI, CorePackage.eINSTANCE);
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.core.model.converter.IExtendModelConverter#readExtendModel(org.dom4j.Element)
*/
@Override
public Object readExtendModel(Element element) {
String content = element.getText();
if(null == content|| "".equals(content)){
return null;
}
prepareEPackageRegistry();
Resource resource = new XMLResourceImpl(URI.createURI(getClass().getName()));
try {
ByteArrayInputStream inputStream = new ByteArrayInputStream(content.getBytes(ModelConverterUtils.CODING_TYPE_UTF_8));
resource.load(inputStream, ModelConverterUtils.EMF_LOAD_OPTIONS);
return resource.getContents().get(0);
} catch (Exception e) {
logger.error("��������չģ�Ͷ���ʱ��������", e);
}
return null;
}
}