| package org.eclipse.epf.toolbox.batch.commands; |
| |
| import java.io.File; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Set; |
| |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.epf.importing.services.PluginImportData; |
| import org.eclipse.epf.importing.services.PluginImportingService; |
| import org.eclipse.epf.importing.services.PluginImportData.PluginInfo; |
| import org.eclipse.epf.toolbox.batch.C; |
| import org.eclipse.epf.toolbox.batch.EbcExeReply; |
| import org.eclipse.jface.dialogs.ProgressMonitorDialog; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.ui.actions.WorkspaceModifyOperation; |
| import org.w3c.dom.Element; |
| import org.w3c.dom.Node; |
| import org.w3c.dom.NodeList; |
| |
| public class EbcImportPlugins extends EpfBatchCommandImpl { |
| |
| private Set<String> selectedPlugins; |
| |
| public void parse(Element element) { |
| super.parse(element); |
| setAttribute(C.ImportAll, element.getAttribute(C.ImportAll)); |
| setAttribute(C.ImportFolderPath, element |
| .getAttribute(C.ImportFolderPath)); |
| |
| boolean importAll = parseBoolean(C.ImportAll, false); |
| |
| if (!importAll) { |
| selectedPlugins = new HashSet<String>(); |
| NodeList nodes = element.getChildNodes(); |
| int sz = nodes == null ? 0 : nodes.getLength(); |
| for (int i = 0; i < sz; i++) { |
| Node node = nodes.item(i); |
| if (node instanceof Element) { |
| Element cElement = (Element) node; |
| if (cElement.getTagName().equals(C.SelectedPlugin)) { |
| String name = cElement.getAttribute(C.Name); |
| selectedPlugins.add(name); |
| } |
| } |
| } |
| } |
| } |
| |
| protected void executeBody(final EbcExeReply reply) { |
| |
| WorkspaceModifyOperation operation = new WorkspaceModifyOperation() { |
| public void execute(IProgressMonitor monitor) { |
| try { |
| boolean importAll = parseBoolean(C.ImportAll, false); |
| |
| String importLibPath = getAttribute(C.ImportFolderPath); |
| File importLibFolder = new File(importLibPath); |
| |
| PluginImportData data = new PluginImportData(); |
| data.llData.setLibName(importLibFolder.getName()); |
| data.llData.setParentFolder(importLibFolder |
| .getAbsolutePath()); |
| final PluginImportingService service = new PluginImportingService( |
| data); |
| service.validate(null); |
| |
| List importPlugins = data.getPlugins(); |
| for (int i = 0; i < importPlugins.size(); i++) { |
| PluginInfo info = (PluginInfo) importPlugins |
| .get(i); |
| info.selected = importAll || selectedPlugins.contains(info.name); |
| } |
| service.performImport(monitor); |
| } catch (Exception e) { |
| reply.addStatus(Status.ERROR, e.getMessage(), e); |
| } finally { |
| monitor.done(); |
| } |
| } |
| }; |
| |
| try { |
| ProgressMonitorDialog pmDialog = new ProgressMonitorDialog( |
| Display.getCurrent().getActiveShell()); |
| pmDialog.run(true, false, operation); |
| } catch (Exception e) { |
| reply.addStatus(Status.ERROR, e.getMessage(), e); |
| } |
| } |
| } |