blob: 9282c952d1e5ea95659bccaf93d898554c0ff9e1 [file] [log] [blame]
package org.eclipse.epf.toolbox.batch.commands;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.epf.export.services.PluginExportData;
import org.eclipse.epf.export.services.PluginExportService;
import org.eclipse.epf.library.services.SafeUpdateController;
import org.eclipse.epf.toolbox.batch.C;
import org.eclipse.epf.toolbox.batch.EbcExeReply;
import org.eclipse.epf.uma.MethodLibrary;
import org.eclipse.epf.uma.MethodPlugin;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class EbcExportPlugins extends EpfBatchCommandImpl {
private List<MethodPlugin> selectedPlugins;
public void parse(Element element) {
super.parse(element);
setAttribute(C.ExportAll, element.getAttribute(C.ExportAll));
setAttribute(C.ExportFolderPath, element.getAttribute(C.ExportFolderPath));
}
public void parseAtExecute() {
Element element = getElement();
MethodLibrary lib = getMgr().getCurrentBaseLib();
boolean exportAll = parseBoolean(C.ExportAll, false);
if (exportAll) {
selectedPlugins = new ArrayList<MethodPlugin>(lib.getMethodPlugins());
} else {
Map<String, MethodPlugin> nameMap = new HashMap<String, MethodPlugin>();
for (MethodPlugin plugin : (List<MethodPlugin>) lib.getMethodPlugins()) {
nameMap.put(plugin.getName(), plugin);
}
selectedPlugins = new ArrayList<MethodPlugin>();
NodeList nodes = element.getChildNodes();
int sz = nodes == null ? 0 : nodes.getLength();
if (sz > 0) {
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);
MethodPlugin plugin = nameMap.get(name);
if (plugin != null) {
selectedPlugins.add(plugin);
}
}
}
}
}
}
}
protected void executeBody(final EbcExeReply reply) {
MethodPlugin plugin = (MethodPlugin) selectedPlugins.get(0);
File file = new File(plugin.eResource().getURI().toFileString());
file = file.getParentFile().getParentFile();
String path = getAttribute(C.ExportFolderPath);
String exportFolderPath = getMgr().getRootPath() + File.separator + path;
File exportFolder = new File(exportFolderPath);
final PluginExportData data = new PluginExportData();
data.llData.setLibName(file.getName());
data.llData.setParentFolder(exportFolder.getAbsolutePath());
data.setSelectedPlugins(selectedPlugins);
data.buildAssociatedConfigMap();
SafeUpdateController.syncExec(new Runnable() {
public void run() {
try {
(new PluginExportService(data)).run(new NullProgressMonitor());
} catch (Exception e) {
reply.addStatus(Status.ERROR, e.getMessage(), e);
}
}
});
}
}