blob: 54bbc81bb7043a62da69ad14687f7c0e2ac0f946 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2007 IBM Corporation and others.
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// which accompanies this distribution, and is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// Contributors:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.importing.services;
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.epf.common.service.utils.CommandLineRunner;
import org.eclipse.epf.common.utils.XMLUtil;
import org.eclipse.epf.importing.services.PluginImportData.PluginInfo;
import org.eclipse.epf.library.xmi.XMILibraryUtil;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* Implementation for importing plugin driven by command line
*
* @author Weiping Lu
* @since 1.2
*/
public class CommandLinePluginImporter extends CommandLineRunner {
private static String ImportPluginsTag = "ImportPlugins"; //$NON-NLS-1$"
private static String SelectedPluginTag = "SelectedPlugin"; //$NON-NLS-1$"
private static String BaseLibraryFolderUriAtt= "baseLibraryFolderUri"; //$NON-NLS-1$"
private static String ImportLibraryFolderUriAtt= "importLibraryFolderUri"; //$NON-NLS-1$"
private static String NameAtt= "name"; //$NON-NLS-1$"
private String baseLibPath;
private String importLibPath;
private Set<String> selectedPlugins;
public boolean execute(String[] args) {
if (! super.execute(args)) {
return false;
}
try {
loadInputFile();
WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
public void execute(IProgressMonitor monitor) {
try {
monitor.setTaskName("Openning base library and preparing import ...");//$NON-NLS-1$"
XMILibraryUtil.openMethodLibrary(baseLibPath);
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 = selectedPlugins.isEmpty() || selectedPlugins.contains(info.name);
}
service.performImport(monitor);
} catch (Exception e) {
e.printStackTrace();
} finally {
monitor.done();
}
}
};
ProgressMonitorDialog pmDialog = new ProgressMonitorDialog(Display.getCurrent().getActiveShell());
pmDialog.run(true, false, operation);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
private void loadInputFile() throws Exception {
Document document = XMLUtil.loadXml(getInputFile());
Element root = document.getDocumentElement();
if (! root.getTagName().equals(ImportPluginsTag)) {
String msg = "The root element must be: " + ImportPluginsTag; //$NON-NLS-1$
throw new RuntimeException(msg);
}
baseLibPath = root.getAttribute(BaseLibraryFolderUriAtt);
importLibPath = root.getAttribute(ImportLibraryFolderUriAtt);
selectedPlugins = new HashSet<String>();
NodeList nodes = root.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 element = (Element) node;
if (element.getTagName().equals(SelectedPluginTag)) {
String name = element.getAttribute(NameAtt);
selectedPlugins.add(name);
}
}
}
}
}