blob: 64ebb52294e90bd95ad2927cf906daaa5144eacd [file] [log] [blame]
package org.eclipse.epf.toolbox.batch.commands;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.epf.toolbox.batch.C;
import org.eclipse.epf.toolbox.batch.EbcExeReply;
import org.eclipse.epf.toolbox.batch.EbcReportMgr;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.MethodLibrary;
import org.w3c.dom.Element;
public class EbcReportMethodElement extends EpfBatchCommandImpl {
EbcReportMgr reportMgr;
public void parse(Element element) {
super.parse(element);
setAttribute(C.ElementType, element.getAttribute(C.ElementType));
setAttribute(C.Recursive, element.getAttribute(C.Recursive));
setAttribute(C.Name, element.getAttribute(C.Name));
reportMgr = getMgr().getReportMgr();
}
protected void executeBody(final EbcExeReply reply) {
boolean recursive = parseBoolean(C.Recursive, false);
for (MethodElement elem: getReportedElements()) {
report(elem, recursive);
}
}
private Collection<MethodElement> getReportedElements() {
MethodLibrary lib = getMgr().getCurrentBaseLib();
String elementType = getAttribute(C.ElementType);
String name = getAttribute(C.Name);
Set<MethodElement> reportedSet = new LinkedHashSet<MethodElement>();
if (elementType.equals("MethodLibrary")) {
reportedSet.add(lib);
} else {
boolean showAll = name.equals("*");
for (Iterator it = lib.eAllContents(); it.hasNext();) {
Object obj = it.next();
if (obj instanceof MethodElement) {
MethodElement me = (MethodElement) obj;
if (showAll || me.getName().equals(name)) {
if (me.getClass().getName().contains(elementType)) {
reportedSet.add(me);
}
}
}
}
}
return reportedSet;
}
private void reportContents(List contents) {
if (contents == null) {
return;
}
for (int i = 0; i < contents.size(); i++) {
report(contents.get(i), true);
}
}
private void report(Object obj, boolean recursive) {
reportMgr.report(obj);
if (recursive) {
if (obj instanceof EObject) {
reportContents(((EObject) obj).eContents());
}
}
}
}