package com.hundsun.ares.studio.jres.database.ui.wizard; import java.io.File; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.plugin.AbstractUIPlugin; import com.hundsun.ares.studio.core.ARESCore; import com.hundsun.ares.studio.core.IARESElement; 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.registry.ModuleRootType2ResTypeMap; import com.hundsun.ares.studio.core.util.ArrayUtil; import com.hundsun.ares.studio.internal.core.ProjectProperty; import com.hundsun.ares.studio.jres.database.pdm.PDMImport; import com.hundsun.ares.studio.jres.database.ui.DatabaseUI; import com.hundsun.ares.studio.jres.database.ui.pages.TableImportWizardTwo; import com.hundsun.ares.studio.ui.ARESElementWizard; import com.hundsun.ares.studio.ui.AresResourceCategoryFilter; import com.hundsun.ares.studio.ui.AresResourceFilter; import com.hundsun.ares.studio.ui.LibFilter; import com.hundsun.ares.studio.ui.wizard.ARESResourceWizardPage; /** * ����PDM�ļ� * * @author maxh * */ public class TableImportWizard extends ARESElementWizard { private static Logger logger = Logger.getLogger(TableImportWizard.class); public static String DATABASE_MODULE_ROOT = "database"; ARESResourceWizardPage page; TableImportWizardTwo page2; IARESModule module ; String resType = "table"; /** * */ public TableImportWizard() { setWindowTitle("����PDM"); } @Override public void addPages() { page = new ARESResourceWizardPage("����PDM", workbench, selectedElement, resType) { @Override public boolean canFlipToNextPage() { if (selection instanceof IARESModule) { return true; } return false; } @Override protected void createText(Composite composite) { //����ҪĬ�ϵ��ı������ } @Override public boolean validate() { if (!(selection instanceof IARESModule)) { setErrorMessage("��ѡ��һ����ϵͳ"); return false; } boolean status = super.validate(); if (status) { setErrorMessage(null); } return status; } @Override protected void addFilter() { if(viewer != null){ viewer.addFilter(new ViewerFilter(){ @Override public boolean select(Viewer viewer, Object parentElement, Object element) { if(element instanceof IARESModuleRoot){ if(resType == null || resType.length() == 0){ return true; } String[] allowType = ModuleRootType2ResTypeMap.getInstance().getAllowedResTypes(((IARESModuleRoot) element).getType()); if(ArrayUtil.findInArray(allowType, resType) < 0){ return false; } } //���˹��������ļ� if(element instanceof ProjectProperty){ return false; } //����ģ��,��Ϊģ���²��ܴ����ļ��У�����ֻ������ϵͳ if(element instanceof IARESModule){ IARESModule module = (IARESModule)element; IResource resource = module.getResource(); if (resource.getType() == IResource.FOLDER) { IFolder folder = (IFolder)module.getResource(); IFile file = folder.getFile(".bm"); return !(file.exists()); } } return true; } }); viewer.addFilter(new LibFilter()); viewer.addFilter(new AresResourceCategoryFilter()); viewer.addFilter(new AresResourceFilter()); } } }; page.setNewName("notUsed"); page.setTitle("�����ļ�"); page.setDescription("��PDM�ļ��еı�,��ͼ���뵽��Ŀ��,��������ص����ݿ��,��ͼ,��׼�ֶ�,ҵ����������."); addPage(page); IARESElement element = page.getSelectedElement(); //�ڵ�����֮ǰ��ȡ��Ĭ��ѡ�еĽڵ� module = getModuleFromElement(element); page2 = new TableImportWizardTwo("����PDM",module); page2.setDescription("ѡ����Ҫ����PDM�ļ�"); addPage(page2); super.addPages(); } /* (non-Javadoc) * @see org.eclipse.jface.wizard.Wizard#createPageControls(org.eclipse.swt.widgets.Composite) */ @Override public void createPageControls(Composite pageContainer) { super.createPageControls(pageContainer); getShell().setImage(AbstractUIPlugin.imageDescriptorFromPlugin(DatabaseUI.PLUGIN_ID, "icons/pdm.gif").createImage()); } @Override public boolean canFinish() { if (page2 == null) { return false; } if(StringUtils.isBlank(page2.getFile())){//���û��ѡ��pdm�ļ� return false; } File file = new File(page2.getFile()); if (!file.exists()) { return false; } return super.canFinish(); } @Override public boolean performFinish() { Job job = new Job("����") { @Override protected IStatus run(IProgressMonitor monitor) { try { IARESModule module = (IARESModule) page.getSelectedElement(); PDMImport pdmImport = new PDMImport(); pdmImport.importPDM(page2.getFile(),page2.getTargetDir() , monitor,module); } catch (final RuntimeException e) { Display.getDefault().syncExec(new Runnable() { @Override public void run() { MessageDialog.openError(null, "PDM�����쳣", e.getMessage()); } }); logger.error(e); } return Status.OK_STATUS; } }; job.setUser(true); job.schedule(); return true; } private IARESModule getModuleFromElement(IARESElement element){ try{ if (element instanceof IARESResource) { module = (IARESModule)element.getParent(); }else if(element instanceof IARESModule){ module = (IARESModule)element; }else{ IARESProject project = null; if (element instanceof IARESProject) { project = (IARESProject)element; }else{ IFolder folder = (IFolder) element.getResource(); project = ARESCore.create(folder.getProject()); } IARESModuleRoot[] roots = null; IARESModule[] modules = null; roots = project.getModuleRoots(); IARESModuleRoot root = null; for(IARESModuleRoot r : roots){ String modulePath = r.getPath().lastSegment().toString(); if(DATABASE_MODULE_ROOT.equals(modulePath)){ root = r; break; } } if (root == null) { return null; } modules = root.getModules(); for (IARESModule md:modules) { module = md; break; } } }catch(Exception e){ logger.error(e); } return module; } }