blob: 0036e100d6ea5a724e5c0d5daadd3216733c7b88 [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.library.tester.impl.testcommands;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.epf.importing.services.ConfigurationImportData;
import org.eclipse.epf.importing.services.ConfigurationImportService;
import org.eclipse.epf.importing.services.ElementDiffTree;
import org.eclipse.epf.library.edit.util.TngUtil;
import org.eclipse.epf.library.services.SafeUpdateController;
import org.eclipse.epf.library.tester.iface.TCExeReply;
import org.eclipse.epf.library.tester.impl.TestCommandImpl;
import org.eclipse.epf.library.tester.impl.TestCommandMgr;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.MethodLibrary;
import org.eclipse.epf.uma.MethodPackage;
import org.eclipse.epf.uma.ProcessComponent;
import org.w3c.dom.Element;
/**
* A test command class
*
* @author Weiping Lu
* @since 1.0
*
*/
public class TCImportConfiguration extends TestCommandImpl {
public void parse(Element element) {
super.parse(element);
setAttribute(AT_ImportFolderName, element.getAttribute(AT_ImportFolderName));
}
public TCExeReply execute() {
final TestCommandMgr owner = getOwner();
String importFolderName = getAttribute(AT_ImportFolderName);
File file = owner.getImportFile(importFolderName);
if (file == null) {
return null;
}
ConfigurationImportData data = new ConfigurationImportData();
data.llData.setLibName(importFolderName);
data.llData.setParentFolder(file.getAbsolutePath());
final ConfigurationImportService importService = new ConfigurationImportService(data);
importService.analyze(new NullProgressMonitor());
Object[] elements = getElements(importService.getDiffTree());
data.importList.clear();
for ( int i = 0; i < elements.length; i++ ) {
data.importList.add(elements[i]);
}
SafeUpdateController.syncExec(new Runnable() {
public void run() {
try {
importService.performImport(new NullProgressMonitor());
MethodLibrary lib = org.eclipse.epf.library.LibraryService.getInstance().getCurrentMethodLibrary();
owner.setCurrentBaseLib(lib);
} catch (Throwable e) {
e.printStackTrace();
}
}
});
return null;
}
private boolean selectable(ElementDiffTree node) {
if (node instanceof ProcessComponent) {
return false;
}
if (node.isOldOnly()) {
return false;
}
MethodElement base = node.getBaseElement();
if ( (base instanceof MethodPackage)
&& TngUtil.isRootCutomCategoryPackage((MethodPackage)base) ) {
return false;
}
return true;
}
private void selectNodes(ElementDiffTree node, ArrayList selectedNodes) {
if (! selectable(node)) {
return;
}
selectedNodes.add(node);
List cnodes = node.getChildren();
int sz = cnodes == null ? 0 : cnodes.size();
for (int i=0; i<sz; i++) {
ElementDiffTree cnode = (ElementDiffTree) cnodes.get(i);
selectNodes(cnode, selectedNodes);
}
}
private Object[] getElements(ElementDiffTree root) {
ArrayList selectedNodes = new ArrayList();
selectNodes(root, selectedNodes);
return selectedNodes.toArray();
}
}