/** * <p>Copyright: Copyright (c) 2012</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.jres.basicdata.manage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import org.apache.commons.lang.StringUtils; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.NullProgressMonitor; import com.hundsun.ares.studio.core.ARESCore; import com.hundsun.ares.studio.core.IARESProject; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.model.converter.IModelConverter; import com.hundsun.ares.studio.core.model.converter.IModelConverter2; import com.hundsun.ares.studio.core.registry.ARESResRegistry; import com.hundsun.ares.studio.core.registry.IResDescriptor; import com.hundsun.ares.studio.core.util.ARESElementUtil; import com.hundsun.ares.studio.jres.basicdata.constant.IBasicDataRestypes; import com.hundsun.ares.studio.jres.basicdata.core.basicdata.BasicdataFactory; import com.hundsun.ares.studio.jres.basicdata.core.basicdata.EpacakgeDefineList; import com.hundsun.ares.studio.jres.basicdata.core.basicdata.PackageDefine; /** * @author lvgao * */ public class BasicdataDefineManageUtil { //private static String BasicdataModueRoot = getBasicdataModuleRoot; //private static String EpacakgeFilePath = BasicdataModueRoot + "/" +IBasicDataRestypes.PackageDefineResorceName; private static String getEpacakgeFilePath(IARESProject project){ return getBascicdataModuleRoot(project) + "/" +IBasicDataRestypes.PackageDefineResorceName; } private static String getBascicdataModuleRoot(IARESProject project){ IFolder root = ARESElementUtil.getModuleRootFolder(project,"com.hundsun.ares.studio.jres.moduleroot.commondata"); return root.getName(); } /** * ����PackageDefine * @param project * @param define * @throws Exception */ public static void savePackageDefine(IARESProject project,PackageDefine define) throws Exception{ try { IARESResource resource = getDefineResource(project,true); EpacakgeDefineList defineList = resource.getInfo(EpacakgeDefineList.class); //����Ѵ��ڴ�·����Ӧ��ɾ�� for(int i = defineList.getItems().size() - 1; i >= 0; i--){ if(StringUtils.equals(defineList.getItems().get(i).getUrl(), define.getUrl())){ defineList.getItems().remove(i); } } defineList.getItems().add(define); resource.save(defineList, true, new NullProgressMonitor()); } catch (Exception e) { String mesage = String.format("������������������Ϣʧ��,��ϸ��Ϣ:%s", e.getMessage()); throw new Exception(mesage); } } /** * ��ȡ������������ * @param project * @param create �Ƿ�ǿ�ƴ��� * @return * @throws Exception */ public static IARESResource getDefineResource(IARESProject project,boolean create)throws Exception{ //�������������ļ� IFile file = project.getProject().getFile(getEpacakgeFilePath(project)); if (!file.exists() && create) { //��������ھʹ��� createEpacakgeDefineResource(project); } return (IARESResource) ARESCore.create(file); } /** * �����������ݶ����ļ� * @return */ private static IResource createEpacakgeDefineResource(IARESProject project) { IResDescriptor resDescriptor = ARESResRegistry.getInstance() .getResDescriptor(IBasicDataRestypes.PackageDefine); IModelConverter converter = resDescriptor.getConverter(); Object info = BasicdataFactory.eINSTANCE.createEpacakgeDefineList(); IFolder folder = project.getProject().getFolder(getBascicdataModuleRoot(project) + "/"); String name = IBasicDataRestypes.PackageDefineResorceName; IFile file = folder.getFile(name); if (!file.exists()) { if (converter instanceof IModelConverter2) { try { IARESResource resource = (IARESResource) ARESCore .create(file); file.create( new ByteArrayInputStream( ((IModelConverter2) converter).write( resource, info)), true, null); } catch (Exception e) { e.printStackTrace(); } } else { try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); converter.write(bos, info); file.create(new ByteArrayInputStream(bos.toByteArray()), true, null); } catch (Exception e) { e.printStackTrace(); } } } return file; } }