/** * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio */ package com.hundsun.ares.studio.jres.basicdata.logic.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import org.eclipse.core.resources.IResource; 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.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl; import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.jres.basicdata.logic.epackage.BasicDataEpackageFactory; import com.hundsun.ares.studio.jres.modelconvert.ModelConverterHandle; import com.hundsun.ares.studio.jres.modelconvert.ModelConverterUtils; /** * @author gongyf * */ public class BaicDataModelConverterHandle extends ModelConverterHandle { protected Resource createEMFResource(URI uri) { return new XMIResourceImpl(uri); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.modelconvert.ModelConverterHandle#handleRead(com.hundsun.ares.studio.core.IARESResource, byte[], java.lang.Class) */ @Override public Object handleRead(IARESResource resource, byte[] contents, Class<?> clazz) throws Exception { Resource emfRes = null; IResource rawRes = resource.getCorrespondingResource(); if (rawRes == null) { emfRes = createEMFResource(null); } else { emfRes = createEMFResource(URI.createPlatformResourceURI(rawRes.getFullPath().toString(), true)); } ResourceSet rsset = new ResourceSetImpl(); rsset.getResources().add(emfRes); //��Ӷ�̬ģ�� EPackage tempPackagae = BasicDataEpackageFactory.eINSTANCE.createEPackage(resource); emfRes.getResourceSet().getPackageRegistry().put(tempPackagae.getNsURI(), tempPackagae); emfRes.load(new ByteArrayInputStream(contents), ModelConverterUtils.EMF_LOAD_OPTIONS); EObject info = emfRes.getContents().get(0); // Set<ExtensibleModel> models = new HashSet<ExtensibleModel>(); // // if (info instanceof ExtensibleModel) { // models.add((ExtensibleModel) info); // } // // for (Iterator<Object> iterator = EcoreUtil.getAllContents(info, true); iterator.hasNext();) { // Object obj = iterator.next(); // if (obj instanceof ExtensibleModel) { // models.add((ExtensibleModel) obj); // } // } // // for (ExtensibleModel extensibleModel : models) { // for (Iterator<Entry<String, EObject>> iterator = extensibleModel.getData2().iterator(); iterator.hasNext();) { // Entry<String, EObject> entry = iterator.next(); // if (entry.getValue() == null) { // iterator.remove(); // } // } // } return info; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.modelconvert.ModelConverterHandle#handleWrite(com.hundsun.ares.studio.core.IARESResource, java.lang.Object) */ @Override public byte[] handleWrite(IARESResource resource, Object info) throws Exception { if (info instanceof EObject) { ByteArrayOutputStream out = new ByteArrayOutputStream(); EObject obj = (EObject) info; if (obj.eResource() == null) { Resource emfRes = new XMLResourceImpl(); emfRes.getContents().add(obj); } obj.eClass().getEPackage(); // BasicExtendedMetaData data =((EPackageImpl)obj.eClass().getEPackage()).getExtendedMetaData(); obj.eResource().save(out, ModelConverterUtils.EMF_SAVE_OPTIONS); return out.toByteArray(); } else { throw new UnsupportedOperationException("info������EObject����"); } } }