/** * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio */ package com.hundsun.ares.studio.jres.metadata.ui.wizards; import java.io.FileOutputStream; import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.ArrayUtils; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.window.Window; import org.eclipse.jface.wizard.Wizard; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IExportWizard; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.eclipse.ui.progress.IProgressService; 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.CorePackage; import com.hundsun.ares.studio.jres.metadata.constant.IMetadataResType; import com.hundsun.ares.studio.jres.metadata.ui.Language; import com.hundsun.ares.studio.jres.metadata.ui.LanguageRegister; import com.hundsun.ares.studio.jres.metadata.ui.MetadataUI; import com.hundsun.ares.studio.jres.metadata.ui.wizards.POIUtils.IHeaderSorter; import com.hundsun.ares.studio.jres.model.metadata.BusinessDataTypeList; import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage; import com.hundsun.ares.studio.jres.model.metadata.MetadataResourceData; import com.hundsun.ares.studio.jres.model.metadata.StandardDataTypeList; import com.hundsun.ares.studio.jres.model.metadata.StandardFieldList; import com.hundsun.ares.studio.jres.model.metadata.TypeDefaultValueList; import com.hundsun.ares.studio.ui.util.DialogHelper; /** * @author gongyf * */ public class ExportExcelWizard extends Wizard implements IExportWizard { private IWorkbench workbench; private IStructuredSelection selection; private ExportExcelWizardPage onePage; /** * */ public ExportExcelWizard() { setWindowTitle("����Ԫ����"); setNeedsProgressMonitor(true); } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection) */ @Override public void init(IWorkbench workbench, IStructuredSelection selection) { this.workbench = workbench; this.selection = selection; } @Override public void createPageControls(Composite pageContainer) { // TODO Auto-generated method stub super.createPageControls(pageContainer); onePage.getShell().setImage(AbstractUIPlugin.imageDescriptorFromPlugin(MetadataUI.PLUGIN_ID, "icons/full/obj16/metadataFolder.gif").createImage()); } /* (non-Javadoc) * @see org.eclipse.jface.wizard.Wizard#addPages() */ @Override public void addPages() { addPage(onePage = new ExportExcelWizardPage("one", selection)); } /* (non-Javadoc) * @see org.eclipse.jface.wizard.Wizard#performFinish() */ @Override public boolean performFinish() { IRunnableWithProgress runnable = new IRunnableWithProgress() { @Override public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { monitor.beginTask("��ʼ����������", 4); OutputStream excelStream = null; try { excelStream = new FileOutputStream(onePage.getExcelFile()); Map< String, List< List<String> > > contents = new HashMap<String, List<List<String>>>(); Language[] languages = LanguageRegister.getInstance().getRegisteredLanguages(); String[] languageIds = new String[languages.length]; String[] languageTitles = new String[languages.length]; for (int i = 0; i < languageIds.length; i++) { languageIds[i] = languages[i].getId(); languageTitles[i] = languages[i].getName(); } IARESProject project = ARESCore.create(onePage.getSelectedProject()); IHeaderSorter descriptionLast = new IHeaderSorter() { @Override public void sort(List<String> header) { int index = header.indexOf("˵��"); if (index >= 0) { header.remove(index); header.add("˵��"); } } }; List<List<String>> revHisTotles = new ArrayList<List<String>>(); // ��׼�ֶ� { monitor.subTask("��׼�ֶΡ�����"); IARESResource resource = project.findResource(IMetadataResType.StdField, IMetadataResType.StdField); StandardFieldList list = resource.getInfo(StandardFieldList.class); List<List<String>> stdHises = getRevHises(resource, list); stdHises.remove(0); revHisTotles.addAll(stdHises); List< List<String> > table = POIUtils.exportExcelStringTable(list, MetadataPackage.Literals.METADATA_RESOURCE_DATA__ITEMS,MetadataPackage.Literals.STANDARD_FIELD, new String[]{"�ֶ���","�ֶ�����","�ֶ�����","�ֵ���Ŀ","˵��"}, new EStructuralFeature[]{ MetadataPackage.Literals.NAMED_ELEMENT__NAME, MetadataPackage.Literals.STANDARD_FIELD__DATA_TYPE, MetadataPackage.Literals.NAMED_ELEMENT__CHINESE_NAME, MetadataPackage.Literals.STANDARD_FIELD__DICTIONARY_TYPE, MetadataPackage.Literals.NAMED_ELEMENT__DESCRIPTION}, true, ArrayUtils.EMPTY_STRING_ARRAY, ArrayUtils.EMPTY_STRING_ARRAY, resource, null); contents.put("��׼�ֶ�", table); monitor.worked(1); } // Ĭ��ֵ { monitor.subTask("Ĭ��ֵ������"); IARESResource resource = project.findResource(IMetadataResType.DefValue, IMetadataResType.DefValue); TypeDefaultValueList list = resource.getInfo(TypeDefaultValueList.class); List<List<String>> devHises = getRevHises(resource, list); devHises.remove(0); revHisTotles.addAll(devHises); List< List<String> > table = POIUtils.exportExcelStringTable(list, MetadataPackage.Literals.METADATA_RESOURCE_DATA__ITEMS, MetadataPackage.Literals.TYPE_DEFAULT_VALUE, new String[]{"Ĭ��ֵ��", "����", "˵��"}, new EStructuralFeature[]{MetadataPackage.Literals.NAMED_ELEMENT__NAME, MetadataPackage.Literals.NAMED_ELEMENT__CHINESE_NAME, MetadataPackage.Literals.NAMED_ELEMENT__DESCRIPTION}, true, languageTitles, languageIds, resource, descriptionLast); contents.put("Ĭ��ֵ", table); monitor.worked(1); } // ��׼�������� { monitor.subTask("��׼�������͡�����"); IARESResource resource = project.findResource(IMetadataResType.StdType, IMetadataResType.StdType); StandardDataTypeList list = resource.getInfo(StandardDataTypeList.class); List<List<String>> styHises = getRevHises(resource, list); styHises.remove(0); revHisTotles.addAll(styHises); List< List<String> > table = POIUtils.exportExcelStringTable(list, MetadataPackage.Literals.METADATA_RESOURCE_DATA__ITEMS,MetadataPackage.Literals.STANDARD_DATA_TYPE, new String[]{"������", "����", "˵��"}, new EStructuralFeature[]{MetadataPackage.Literals.NAMED_ELEMENT__NAME, MetadataPackage.Literals.NAMED_ELEMENT__CHINESE_NAME, MetadataPackage.Literals.NAMED_ELEMENT__DESCRIPTION}, true, languageTitles, languageIds, resource, descriptionLast); contents.put("��׼��������", table); monitor.worked(1); } // ҵ���������� { monitor.subTask("ҵ���������͡�����"); IARESResource resource = project.findResource(IMetadataResType.BizType, IMetadataResType.BizType); BusinessDataTypeList list = resource.getInfo(BusinessDataTypeList.class); List<List<String>> bizHises = getRevHises(resource, list); bizHises.remove(0); revHisTotles.addAll(bizHises); List< List<String> > table = POIUtils.exportExcelStringTable(list, MetadataPackage.Literals.METADATA_RESOURCE_DATA__ITEMS,MetadataPackage.Literals.BUSINESS_DATA_TYPE, new String[]{"������","��������","��׼����","����","����","Ĭ��ֵ","˵��"}, new EStructuralFeature[]{ MetadataPackage.Literals.NAMED_ELEMENT__NAME, MetadataPackage.Literals.NAMED_ELEMENT__CHINESE_NAME, MetadataPackage.Literals.BUSINESS_DATA_TYPE__STD_TYPE, MetadataPackage.Literals.BUSINESS_DATA_TYPE__LENGTH, MetadataPackage.Literals.BUSINESS_DATA_TYPE__PRECISION, MetadataPackage.Literals.BUSINESS_DATA_TYPE__DEFAULT_VALUE, MetadataPackage.Literals.NAMED_ELEMENT__DESCRIPTION}, true, ArrayUtils.EMPTY_STRING_ARRAY, ArrayUtils.EMPTY_STRING_ARRAY, resource, null); contents.put("ҵ����������", table); monitor.worked(1); } POIUtils.putExcelString(excelStream, "Ԫ���ݹ淶�ĵ�" ,contents,revHisTotles, new String[]{"��׼�ֶ�", "ҵ����������","��׼��������","Ĭ��ֵ"}, new int[]{1,1,1,1}, new int[]{1,1,1,1}); monitor.done(); } catch (Exception e) { e.printStackTrace(); throw new InvocationTargetException(e); } finally { IOUtils.closeQuietly(excelStream); } } }; try { // getContainer().run(true, false, runnable); MessageDialog msgdialog = null; try { IProgressService progress = MetadataUI.getDefault().getWorkbench() .getProgressService(); progress.run(true, false, runnable); } catch (InvocationTargetException e) { e.printStackTrace(); msgdialog = new MessageDialog(null, "����ʧ��", null, "�����ļ��ѱ��򿪻���д��Ȩ�ޣ�������������رպ��ٵ�����", MessageDialog.WARNING, new String[] { "ȷ��" }, 0); } catch (InterruptedException e) { e.printStackTrace(); } if (null != msgdialog){ msgdialog.open(); }else { String path = onePage.getExcelFile().getPath(); msgdialog = new MessageDialog(null, "�����ɹ�", null, String.format("����·��Ϊ%s,�Ƿ���ļ���", path), MessageDialog.INFORMATION, new String[] { "ȷ��","ȡ��"}, 0); if(Window.OK == msgdialog.open()){ openFile(path); } return true; } } catch (Exception e) { DialogHelper.showErrorMessage(e.getMessage()); } return false; } /** * * ��ȡ�޶���Ϣ * * @param resource * @param info * @return */ private List<List<String>> getRevHises(IARESResource resource , MetadataResourceData info){ List<List<String>> revHises = POIUtils .exportExcelStringTable( info, CorePackage.Literals.JRES_RESOURCE_INFO__HISTORIES, CorePackage.Literals.REVISION_HISTORY, new String[] {"�޸İ汾", "�޶�����","�޸�����","�޸�ԭ��", "�޸ĵ�","������","������","��ע"}, new EStructuralFeature[] { CorePackage.Literals.REVISION_HISTORY__VERSION, CorePackage.Literals.REVISION_HISTORY__MODIFIED_DATE, CorePackage.Literals.REVISION_HISTORY__MODIFIED, CorePackage.Literals.REVISION_HISTORY__MODIFIED_REASON, CorePackage.Literals.REVISION_HISTORY__ORDER_NUMBER, CorePackage.Literals.REVISION_HISTORY__CHARGER, CorePackage.Literals.REVISION_HISTORY__MODIFIED_BY, CorePackage.Literals.REVISION_HISTORY__COMMENT}, false, ArrayUtils.EMPTY_STRING_ARRAY, ArrayUtils.EMPTY_STRING_ARRAY, resource, null); return revHises; } private void openFile(final String path) { Runtime rn = Runtime.getRuntime(); String cmd="cmd.exe /c start \"\" \"" + path + "\""; try { rn.exec(cmd); } catch (Exception e) { e.printStackTrace(); } } }