/** * */ package com.hundsun.ares.studio.jres.service.ui.wizard; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.plugin.AbstractUIPlugin; import com.google.common.collect.LinkedHashMultimap; import com.google.common.collect.Multimap; import com.hundsun.ares.studio.biz.constants.IBizConstants; import com.hundsun.ares.studio.biz.constants.IBizResType; import com.hundsun.ares.studio.biz.ui.excel.ExcelStructCreateor; import com.hundsun.ares.studio.biz.ui.excel.ExportExcelEntity; import com.hundsun.ares.studio.biz.ui.wizard.ExportExcelWizard; import com.hundsun.ares.studio.core.IARESModule; import com.hundsun.ares.studio.core.IARESModuleRoot; import com.hundsun.ares.studio.core.IARESProject; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.model.ICommonModel; import com.hundsun.ares.studio.core.model.ModuleProperty; import com.hundsun.ares.studio.core.service.DataServiceManager; import com.hundsun.ares.studio.core.util.ARESElementUtil; import com.hundsun.ares.studio.jres.metadata.service.IMetadataService; import com.hundsun.ares.studio.jres.service.ui.ServiceUI; /** * @author yanwj06282 * */ public class ExportServiceWizard extends ExportExcelWizard { public ExportServiceWizard() { super("");//zhuyf:�������Ҫ����""�����Ĺ��캯��������ᱨ��ָ�����⣬����ԭ��δ̽���� setWindowTitle("����ҵ���߼�"); } /* (non-Javadoc) * @see org.eclipse.jface.wizard.Wizard#createPageControls(org.eclipse.swt.widgets.Composite) */ @Override public void createPageControls(Composite pageContainer) { super.createPageControls(pageContainer); page.getShell().setImage(AbstractUIPlugin.imageDescriptorFromPlugin(ServiceUI.PLUGIN_ID, "icons/full/obj16/Service.gif").createImage()); } @Override public void addPages() { IFolder rootFolder = ARESElementUtil.getModuleRootFolder(this.project,IBizConstants.BIZ_ROOT); if (rootFolder == null) { rootFolder = ARESElementUtil.getModuleRootFolder(this.project,IBizConstants.BIZ_ROOT2); } if( rootFolder != null){ setModuleRootName(rootFolder.getName());//�������ͨ����չ��õ��ļ�������δ����business addPage(page = new ServiceExportWizardPage("", selection ,moduleRootName));//����ʾ�����򵼽���ʱ��������ָ��һ��ģ���Ŀ¼ return; } MessageDialog.openError(getShell(), "��������", "��ǰ���̲�����ҵ���߼�ģ�����"); } @Override public IWorkspaceRunnable createExportOperation(final IARESProject project, final List<IARESResource> results, final String file) { IWorkspaceRunnable runnable = new IWorkspaceRunnable() { @Override public void run(IProgressMonitor monitor) throws CoreException { monitor.beginTask("��Դ��������", 4); Map<String , Multimap<IARESModule ,IARESResource>> serviceGroup = new LinkedHashMap<String , Multimap<IARESModule ,IARESResource>>(); Map<String , Multimap<IARESModule ,IARESResource>> objectGroup = new LinkedHashMap<String , Multimap<IARESModule ,IARESResource>>(); IARESModuleRoot root = null; if (results.size() > 0) { root = results.get(0).getRoot(); } groupResByModule(serviceGroup ,objectGroup , results); Set<String> keySets = new HashSet<String>(); keySets.addAll(serviceGroup.keySet()); keySets.addAll(objectGroup.keySet()); monitor.worked(1); monitor.subTask("��ʼ����..."); if (((ServiceExportWizardPage)page).getSplitdocStatus()) { List<String> fileNames = new ArrayList<String>(); String fileName = file; for (Iterator<String> subsysNames = keySets.iterator(); subsysNames.hasNext();) { String subsysName = subsysNames.next(); Multimap<IARESModule, IARESResource> sm = serviceGroup.get(subsysName); Multimap<IARESModule, IARESResource> om =objectGroup.get(subsysName); String prefix = StringUtils.substringBeforeLast(file, "."); prefix += "-"+subsysName; if (root != null) { IARESModule module = root.getModule(subsysName); if (module != null) { IARESResource moduleRes= module.getARESResource(IARESModule.MODULE_PROPERTY_FILE); if (moduleRes != null && moduleRes.exists()) { ModuleProperty modulePro = moduleRes.getInfo(ModuleProperty.class); if (modulePro != null) { Object obj = modulePro.getValue(ICommonModel.CNAME); if (obj instanceof String) { prefix += "("+obj.toString()+")"; } } } } } fileName = prefix + "." + StringUtils.substringAfterLast(file, "."); fileNames.add(fileName); setFileName(fileNames); exportExcel(sm ,om,fileName, monitor); } }else { Multimap<IARESModule ,IARESResource> serviceMap = LinkedHashMultimap.<IARESModule, IARESResource>create(); Multimap<IARESModule ,IARESResource> objectMap = LinkedHashMultimap.<IARESModule, IARESResource>create(); for(Multimap<IARESModule, IARESResource> s : serviceGroup.values()){ serviceMap.putAll(s); } for(Multimap<IARESModule, IARESResource> o : objectGroup.values()){ objectMap.putAll(o); } exportExcel(serviceMap ,objectMap, file , monitor); } monitor.done(); } }; return runnable; } public void exportExcel(Multimap<IARESModule ,IARESResource> serviceMap , Multimap<IARESModule ,IARESResource> objectMap ,String fileName , IProgressMonitor monitor) { IMetadataService metadataService = DataServiceManager.getInstance().getService(project, IMetadataService.class); DataStructCreateor.metadataService = metadataService; DataStructCreateor.devValueStatus = ((ServiceExportWizardPage) page).getDefValueStatus(); DataStructCreateor.multStatus = ((ServiceExportWizardPage) page).getMultStatus(); DataStructCreateor.project = project; ExportExcelEntity entity = new ExportExcelEntity(); if (objectMap != null) { monitor.subTask("������Դ����..."); ExportExcelEntity entity2 = DataStructCreateor.createObjectExcelEntity(objectMap); entity.getMenuList().addAll(entity2.getMenuList()); entity.getSheetList().addAll(entity2.getSheetList()); monitor.worked(1); } if (serviceMap != null) { monitor.subTask("������Դ����..."); ExportExcelEntity entity1 = DataStructCreateor.createServiceExcelEntity(serviceMap); entity.getMenuList().addAll(entity1.getMenuList()); entity.getSheetList().addAll(entity1.getSheetList()); monitor.worked(1); } monitor.subTask("�����ĵ�..."); ExcelStructCreateor.createExcelStruts(project, entity, fileName); monitor.worked(1); } /** * ģ�����Դ�����ݴ�����ҵ���߼���Դ���������� * * @param reses */ private void groupResByModule(Map<String , Multimap<IARESModule ,IARESResource>> serviceGroup ,Map<String , Multimap<IARESModule ,IARESResource>> objectGroup ,List<IARESResource> reses){ for (IARESResource res : reses) { IARESModule module = res.getModule(); String subsysKey = StringUtils.substringBefore(module.getElementName(), "."); if (StringUtils.equals(res.getType(), IBizResType.Object)) { if (objectGroup.get(subsysKey) == null) { objectGroup.put(subsysKey, LinkedHashMultimap.<IARESModule, IARESResource>create()); } objectGroup.get(subsysKey).put(module, res); }else if (StringUtils.equals(res.getType(), IBizResType.Service)) { if (serviceGroup.get(subsysKey) == null) { serviceGroup.put(subsysKey, LinkedHashMultimap.<IARESModule, IARESResource>create()); } serviceGroup.get(subsysKey).put(module, res); } } } }