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()); } } } }