blob: 6265350ba1295ea18861a5228a4c38563c9c753e [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 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.export.services;
import java.io.File;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.epf.library.LibraryService;
import org.eclipse.epf.library.edit.util.MethodElementUtil;
import org.eclipse.epf.uma.MethodPlugin;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/**
* The abstract base class for the Export Service.
*
* @author Jinhua Xi
* @author Weiping Lu
* @since 1.0
*/
public abstract class BaseExportService {
protected static final String exportFile = "export.xmi"; //$NON-NLS-1$
protected static final String libraryFile = "library.xmi"; //$NON-NLS-1$
protected List selectedIds = new ArrayList();
protected List selectedPluginNames = new ArrayList();
protected boolean isIdSelected(String uri) {
for (Iterator it = selectedIds.iterator(); it.hasNext();) {
String id = (String) it.next();
if (uri.indexOf(id) >= 0) {
return true;
}
}
return false;
}
protected boolean isSelectedPluginResource(String uri) {
for (Iterator it = selectedPluginNames.iterator(); it.hasNext();) {
String plugin_name = (String) it.next();
if (uri.startsWith(plugin_name + "/")) //$NON-NLS-1$
{
return true;
}
}
return false;
}
protected boolean isResourceSelected(String uri) {
if (isIdSelected(uri)) {
return true;
}
return isSelectedPluginResource(uri);
}
protected LibraryDocument processLibraryFile(File source, File target) {
try {
LibraryDocument document = new LibraryDocument(source);
// Reload the element mapping.
NodeList nodes = document.getPlugins();
int i = 0;
while (i < nodes.getLength()) {
Element node = (Element) nodes.item(i);
String uri = node.getAttribute(LibraryDocument.ATTR_href);
if (!isIdSelected(uri)) {
document.removePlugin(node);
} else {
i++;
}
}
// Remove the unneeded configurations.
nodes = document.getConfigurations();
i = 0;
while (i < nodes.getLength()) {
Element node = (Element) nodes.item(i);
// 142379 - update plugin importing and exporting to match with the new file format
// configuration is saved as seperate resource since 1.0m3
String uri = node.getAttribute(LibraryDocument.ATTR_href);
if (!isIdSelected(uri)) {
document.removeConfiguration(node);
} else {
i++;
}
}
// Reload the element mapping.
List plugins = LibraryService.getInstance().getCurrentMethodLibrary()
.getMethodPlugins();
Map pluginMap = MethodElementUtil.buildMap(plugins);
nodes = document.getResourceDescriptors();
i = 0;
while (i < nodes.getLength()) {
Element node = (Element) nodes.item(i);
String id = node.getAttribute(LibraryDocument.ATTR_id);
String uri = getPluginResMgrUri(id, node, pluginMap);
if (!isIdSelected(id)
&& !isResourceSelected(URLDecoder.decode(uri, "UTF-8"))) { //$NON-NLS-1$
document.removeResourceDescriptor(node);
} else {
i++;
}
}
nodes = document.getResourceSubManagers();
i = 0;
while (i < nodes.getLength()) {
Element node = (Element) nodes.item(i);
String uri = node.getAttribute(LibraryDocument.ATTR_href);
if (!isResourceSelected(uri)) {
document.removeResourceDescriptor(node);
} else {
i++;
}
}
List pluginList = LibraryService.getInstance().getCurrentMethodLibrary()
.getMethodPlugins();
document.storeExtraInfo(pluginList);
document.saveAs(target.getAbsolutePath());
return document;
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
private String getPluginResMgrUri(String id, Element node, Map<String, MethodPlugin> pluginMap) {
String uri = node.getAttribute(LibraryDocument.ATTR_uri);
MethodPlugin plugin = pluginMap.get(id);
if (plugin != null) {
String newUri = plugin.getName() + "/plugin.xmi"; //$NON-NLS-1$
if (! newUri.equals(uri)) {
node.setAttribute(LibraryDocument.ATTR_uri, newUri);
return newUri;
}
}
return uri;
}
}