package com.hundsun.ares.studio.ui.wizard; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IExportWizard; import org.eclipse.ui.IWorkbench; import com.hundsun.ares.studio.core.ARESCore; import com.hundsun.ares.studio.core.IARESElement; import com.hundsun.ares.studio.core.IARESProject; import com.hundsun.ares.studio.internal.core.ReferencedLibraryInfo; import com.hundsun.ares.studio.internal.core.ReferencedLibrayUtil; import com.hundsun.ares.studio.ui.GenerateReferencedLibOperation; /** * �������ð�����,һ��������Ҫ��չ�������б�Ҫ�Ķ��ƺ�ʹ�á� * @author sundl */ public class AresLibExportWizard extends Wizard implements IExportWizard { protected IARESProject project; protected AresLibExportWizardPage page; protected IWorkbench workbench; public void init(IWorkbench workbench, IStructuredSelection selection) { this.workbench = workbench; Object obj = selection.getFirstElement(); if (obj instanceof IARESProject) { this.project = (IARESProject)obj; } else if (obj instanceof IARESElement) { this.project = ((IARESElement) obj).getARESProject(); } else if (obj instanceof IProject) { this.project = ARESCore.create((IProject)obj); } else if (obj instanceof IResource) { this.project = ARESCore.create(((IResource)obj).getProject()); } else if (obj instanceof IAdaptable) { this.project = (IARESProject) ((IAdaptable)obj).getAdapter(IARESProject.class); } setWindowTitle("����������Դ��"); setNeedsProgressMonitor(true); } @Override public void addPages() { page = new AresLibExportWizardPage("page1", workbench, project); addPage(page); } /** * �������ð���Ҫ��һ��������Ϣ�������������д����������ж��ƣ������������ð������͡� * @return */ protected ReferencedLibraryInfo getRefLibInfo() { IARESProject project = null; IARESElement element = page.getSelectedElement(); if (element != null) project = element.getARESProject(); return ReferencedLibrayUtil.createRefLibInfoObject(project, page.getPublisher()); } @Override public boolean performFinish() { ReferencedLibraryInfo info = getRefLibInfo(); if (info != null) { IRunnableWithProgress op = createExportOperation(info); try { getContainer().run(false, false, op); return true; } catch (InvocationTargetException e) { openMessageBox(e); e.printStackTrace(); } catch (InterruptedException e) { openMessageBox(e); e.printStackTrace(); } } return false; } protected IRunnableWithProgress createExportOperation(ReferencedLibraryInfo info) { return new GenerateReferencedLibOperation(project, info, page.getPath()); } private void openMessageBox(Exception e){ String msg = null; if(null == e.getMessage()){ if(null != e.getCause()){ msg = e.getCause().getMessage(); } }else{ msg = e.getMessage(); } MessageBox box = new MessageBox(new Shell()); box.setText("���ɴ���"); box.setMessage(String.format("����������Դ��ʧ�ܣ���ϸ��Ϣ:%s", msg)); box.open(); } }