package br.uff.ic.oceano.core.tools.metrics.extractors.dependometer.util;
import br.uff.ic.oceano.core.tools.metrics.util.XMLUtil;
import com.valtech.source.dependometer.app.controller.compilationunit.CompilationUnitCycleParticipantsCollectedEvent;
import com.valtech.source.dependometer.app.controller.compilationunit.CompilationUnitCycleParticipationCollectedEvent;
import com.valtech.source.dependometer.app.controller.compilationunit.CompilationUnitLevelCollectedEvent;
import com.valtech.source.dependometer.app.controller.compilationunit.CompilationUnitManager;
import com.valtech.source.dependometer.app.controller.compilationunit.CompilationUnitTangleCollectedEvent;
import com.valtech.source.dependometer.app.controller.compilationunit.HandleCompilationUnitCycleParticipantsCollectedEventIf;
import com.valtech.source.dependometer.app.controller.compilationunit.HandleCompilationUnitCycleParticipationCollectedEventIf;
import com.valtech.source.dependometer.app.controller.compilationunit.HandleCompilationUnitLevelCollectedEventIf;
import com.valtech.source.dependometer.app.controller.compilationunit.HandleCompilationUnitTangleCollectedEventIf;
import com.valtech.source.dependometer.app.controller.compilationunit.HandleMultiplePackageCompilationUnitCycleCollectedEventIf;
import com.valtech.source.dependometer.app.controller.compilationunit.HandleSinglePackageCompilationUnitCycleCollectedEventIf;
import com.valtech.source.dependometer.app.controller.compilationunit.MultiplePackageCompilationUnitCycleCollectedEvent;
import com.valtech.source.dependometer.app.controller.compilationunit.SinglePackageCompilationUnitCycleCollectedEvent;
import com.valtech.source.dependometer.app.controller.layer.HandleLayerCycleCollectedEventIf;
import com.valtech.source.dependometer.app.controller.layer.HandleLayerCycleParticipantsCollectedEventIf;
import com.valtech.source.dependometer.app.controller.layer.HandleLayerCycleParticipationCollectedEventIf;
import com.valtech.source.dependometer.app.controller.layer.HandleLayerLevelCollectedEventIf;
import com.valtech.source.dependometer.app.controller.layer.HandleLayerTangleCollectedEventIf;
import com.valtech.source.dependometer.app.controller.layer.LayerCycleCollectedEvent;
import com.valtech.source.dependometer.app.controller.layer.LayerCycleParticipantsCollectedEvent;
import com.valtech.source.dependometer.app.controller.layer.LayerCycleParticipationCollectedEvent;
import com.valtech.source.dependometer.app.controller.layer.LayerLevelCollectedEvent;
import com.valtech.source.dependometer.app.controller.layer.LayerManager;
import com.valtech.source.dependometer.app.controller.layer.LayerTangleCollectedEvent;
import com.valtech.source.dependometer.app.controller.main.DependometerContext;
import com.valtech.source.dependometer.app.controller.pack.HandlePackageCycleCollectedEventIf;
import com.valtech.source.dependometer.app.controller.pack.HandlePackageCycleParticipantsCollectedEventIf;
import com.valtech.source.dependometer.app.controller.pack.HandlePackageCycleParticipationCollectedEventIf;
import com.valtech.source.dependometer.app.controller.pack.HandlePackageLevelCollectedEventIf;
import com.valtech.source.dependometer.app.controller.pack.HandlePackageTangleCollectedEventIf;
import com.valtech.source.dependometer.app.controller.pack.PackageCycleCollectedEvent;
import com.valtech.source.dependometer.app.controller.pack.PackageCycleParticipantsCollectedEvent;
import com.valtech.source.dependometer.app.controller.pack.PackageCycleParticipationCollectedEvent;
import com.valtech.source.dependometer.app.controller.pack.PackageLevelCollectedEvent;
import com.valtech.source.dependometer.app.controller.pack.PackageManager;
import com.valtech.source.dependometer.app.controller.pack.PackageTangleCollectedEvent;
import com.valtech.source.dependometer.app.controller.project.AnalysisFinishedEvent;
import com.valtech.source.dependometer.app.controller.project.CycleCollectedEvent;
import com.valtech.source.dependometer.app.controller.project.HandleAnalysisFinishedEventIf;
import com.valtech.source.dependometer.app.controller.project.HandleProjectInfoCollectedEventIf;
import com.valtech.source.dependometer.app.controller.project.ProjectInfoCollectedEvent;
import com.valtech.source.dependometer.app.controller.project.ProjectManager;
import com.valtech.source.dependometer.app.controller.subsystem.HandleSubsystemCycleCollectedEventIf;
import com.valtech.source.dependometer.app.controller.subsystem.HandleSubsystemCycleParticipantsCollectedEventIf;
import com.valtech.source.dependometer.app.controller.subsystem.HandleSubsystemCycleParticipationCollectedEventIf;
import com.valtech.source.dependometer.app.controller.subsystem.HandleSubsystemLevelCollectedEventIf;
import com.valtech.source.dependometer.app.controller.subsystem.HandleSubsystemTangleCollectedEventIf;
import com.valtech.source.dependometer.app.controller.subsystem.SubsystemCycleCollectedEvent;
import com.valtech.source.dependometer.app.controller.subsystem.SubsystemCycleParticipantsCollectedEvent;
import com.valtech.source.dependometer.app.controller.subsystem.SubsystemCycleParticipationCollectedEvent;
import com.valtech.source.dependometer.app.controller.subsystem.SubsystemLevelCollectedEvent;
import com.valtech.source.dependometer.app.controller.subsystem.SubsystemManager;
import com.valtech.source.dependometer.app.controller.subsystem.SubsystemTangleCollectedEvent;
import com.valtech.source.dependometer.app.controller.type.HandleMultiplePackageTypeCycleCollectedEventIf;
import com.valtech.source.dependometer.app.controller.type.HandleSingleCompilationUnitTypeCycleCollectedEventIf;
import com.valtech.source.dependometer.app.controller.type.HandleSinglePackageTypeCycleCollectedEventIf;
import com.valtech.source.dependometer.app.controller.type.HandleTypeCycleParticipantsCollectedEventIf;
import com.valtech.source.dependometer.app.controller.type.HandleTypeCycleParticipationCollectedEventIf;
import com.valtech.source.dependometer.app.controller.type.HandleTypeLevelCollectedEventIf;
import com.valtech.source.dependometer.app.controller.type.HandleTypeTangleCollectedEventIf;
import com.valtech.source.dependometer.app.controller.type.MultiplePackageTypeCycleCollectedEvent;
import com.valtech.source.dependometer.app.controller.type.SingleCompilationUnitTypeCycleCollectedEvent;
import com.valtech.source.dependometer.app.controller.type.SinglePackageTypeCycleCollectedEvent;
import com.valtech.source.dependometer.app.controller.type.TypeCycleParticipantsCollectedEvent;
import com.valtech.source.dependometer.app.controller.type.TypeCycleParticipationCollectedEvent;
import com.valtech.source.dependometer.app.controller.type.TypeLevelCollectedEvent;
import com.valtech.source.dependometer.app.controller.type.TypeManager;
import com.valtech.source.dependometer.app.controller.type.TypeTangleCollectedEvent;
import com.valtech.source.dependometer.app.controller.verticalslice.HandleVerticalSliceCycleCollectedEventIf;
import com.valtech.source.dependometer.app.controller.verticalslice.HandleVerticalSliceCycleParticipantsCollectedEventIf;
import com.valtech.source.dependometer.app.controller.verticalslice.HandleVerticalSliceCycleParticipationCollectedEventIf;
import com.valtech.source.dependometer.app.controller.verticalslice.HandleVerticalSliceLevelCollectedEventIf;
import com.valtech.source.dependometer.app.controller.verticalslice.HandleVerticalSliceTangleCollectedEventIf;
import com.valtech.source.dependometer.app.controller.verticalslice.VerticalSliceCycleCollectedEvent;
import com.valtech.source.dependometer.app.controller.verticalslice.VerticalSliceCycleParticipantsCollectedEvent;
import com.valtech.source.dependometer.app.controller.verticalslice.VerticalSliceCycleParticipationCollectedEvent;
import com.valtech.source.dependometer.app.controller.verticalslice.VerticalSliceLevelCollectedEvent;
import com.valtech.source.dependometer.app.controller.verticalslice.VerticalSliceManager;
import com.valtech.source.dependometer.app.controller.verticalslice.VerticalSliceTangleCollectedEvent;
import com.valtech.source.dependometer.app.core.elements.EntityTypeEnum;
import com.valtech.source.dependometer.app.core.elements.NotParsedCompilationUnit;
import com.valtech.source.dependometer.app.core.elements.NotParsedPackage;
import com.valtech.source.dependometer.app.core.elements.NotParsedType;
import com.valtech.source.dependometer.app.core.elements.ParsedClass;
import com.valtech.source.dependometer.app.core.elements.ParsedCompilationUnit;
import com.valtech.source.dependometer.app.core.elements.ParsedInterface;
import com.valtech.source.dependometer.app.core.elements.ParsedPackage;
import com.valtech.source.dependometer.app.core.elements.Type;
import com.valtech.source.dependometer.app.core.provider.DependencyElementIf;
import com.valtech.source.dependometer.app.core.provider.MetricIf;
import com.valtech.source.dependometer.app.core.provider.ProjectIf;
import com.valtech.source.dependometer.ui.console.Dependometer;
import java.io.IOException;
import java.util.List;
import org.jdom2.DocType;
import org.jdom2.Document;
import org.jdom2.Element;
/**
* Based on com.valtech.source.dependometer.ui.console.output.XMLWriter class
* from oliver.rohr.
*
* @author Daniel
*/
public class DependomenterListener implements HandleProjectInfoCollectedEventIf,
HandlePackageCycleCollectedEventIf, HandleLayerCycleCollectedEventIf, HandleVerticalSliceCycleCollectedEventIf,
HandleSubsystemCycleCollectedEventIf, HandleSinglePackageCompilationUnitCycleCollectedEventIf,
HandleMultiplePackageCompilationUnitCycleCollectedEventIf, HandleSinglePackageTypeCycleCollectedEventIf,
HandleMultiplePackageTypeCycleCollectedEventIf, HandleSingleCompilationUnitTypeCycleCollectedEventIf,
HandleLayerLevelCollectedEventIf, HandleVerticalSliceLevelCollectedEventIf, HandleSubsystemLevelCollectedEventIf,
HandlePackageLevelCollectedEventIf, HandleCompilationUnitLevelCollectedEventIf, HandleTypeLevelCollectedEventIf,
HandleLayerCycleParticipationCollectedEventIf, HandleVerticalSliceCycleParticipationCollectedEventIf,
HandleSubsystemCycleParticipationCollectedEventIf, HandlePackageCycleParticipationCollectedEventIf,
HandleCompilationUnitCycleParticipationCollectedEventIf, HandleTypeCycleParticipationCollectedEventIf,
HandleLayerCycleParticipantsCollectedEventIf, HandleVerticalSliceCycleParticipantsCollectedEventIf,
HandleSubsystemCycleParticipantsCollectedEventIf, HandlePackageCycleParticipantsCollectedEventIf,
HandleCompilationUnitCycleParticipantsCollectedEventIf, HandleTypeCycleParticipantsCollectedEventIf,
HandleAnalysisFinishedEventIf, HandleVerticalSliceTangleCollectedEventIf, HandleLayerTangleCollectedEventIf,
HandleSubsystemTangleCollectedEventIf, HandlePackageTangleCollectedEventIf,
HandleCompilationUnitTangleCollectedEventIf, HandleTypeTangleCollectedEventIf {
public static final String XML_ROOT = "dependometer-results";
public static final String XML_CYCLES = "cycles";
public static final String XML_CYCLE = "cycle";
public static final String XML_LEVEL = "level";
public static final String XML_PARTICIPANT = "participant";
public static final String XML_PROJECT = "Project";
public static final String XML_METRIC = "metric";
public static final String XML_NAME = "name";
public static final String XML_TYPES = "Types";
public static final String XML_TYPE = "type";
public static final String XML_COMPILATIONUNITS = "CompilationUnits";
public static final String XML_COMPILATIONUNIT = "compilationUnit";
public static final String XML_PACKAGES = "Packages";
public static final String XML_PACKAGE = "package";
public static final String XML_SUBSYSTEMS = "subsystems";
public static final String XML_SUBSYSTEM = "subsystem";
public static final String XML_LAYERS = "layers";
public static final String XML_LAYER = "layer";
public static final String XML_VERTICALSLICES = "verticalSlices";
public static final String XML_VERTICALSLICE = "verticalSlice";
private Element root;
private String xmlPath;
public DependomenterListener(String[] arguments) {
attachToDependometerInstance();
if (arguments.length < 1) {
throw new IllegalArgumentException("Need at least one argument - output file path");
}
this.xmlPath = arguments[0];
this.root = new Element(XML_ROOT);
}
private void attachToDependometerInstance() {
DependometerContext context = Dependometer.getContext();
ProjectManager projectManager = context.getProjectManager();
projectManager.attach((HandleProjectInfoCollectedEventIf) this);
projectManager.attach((HandleAnalysisFinishedEventIf) this);
VerticalSliceManager verticalSliceManager = context.getVerticalSliceManager();
verticalSliceManager.attach((HandleVerticalSliceCycleCollectedEventIf) this);
verticalSliceManager.attach((HandleVerticalSliceLevelCollectedEventIf) this);
verticalSliceManager.attach((HandleVerticalSliceCycleParticipationCollectedEventIf) this);
verticalSliceManager.attach((HandleVerticalSliceCycleParticipantsCollectedEventIf) this);
verticalSliceManager.attach((HandleVerticalSliceTangleCollectedEventIf) this);
LayerManager layerManager = context.getLayerManager();
layerManager.attach((HandleLayerCycleCollectedEventIf) this);
layerManager.attach((HandleLayerLevelCollectedEventIf) this);
layerManager.attach((HandleLayerCycleParticipationCollectedEventIf) this);
layerManager.attach((HandleLayerCycleParticipantsCollectedEventIf) this);
layerManager.attach((HandleLayerTangleCollectedEventIf) this);
SubsystemManager subsystemManager = context.getSubsystemManager();
subsystemManager.attach((HandleSubsystemCycleCollectedEventIf) this);
subsystemManager.attach((HandleSubsystemLevelCollectedEventIf) this);
subsystemManager.attach((HandleSubsystemCycleParticipationCollectedEventIf) this);
subsystemManager.attach((HandleSubsystemCycleParticipantsCollectedEventIf) this);
subsystemManager.attach((HandleSubsystemTangleCollectedEventIf) this);
PackageManager packageManager = context.getPackageManager();
packageManager.attach((HandlePackageCycleCollectedEventIf) this);
packageManager.attach((HandlePackageLevelCollectedEventIf) this);
packageManager.attach((HandlePackageCycleParticipationCollectedEventIf) this);
packageManager.attach((HandlePackageCycleParticipantsCollectedEventIf) this);
packageManager.attach((HandlePackageTangleCollectedEventIf) this);
CompilationUnitManager compilationUnitManager = context.getCompilationUnitManager();
compilationUnitManager.attach((HandleSinglePackageCompilationUnitCycleCollectedEventIf) this);
compilationUnitManager.attach((HandleMultiplePackageCompilationUnitCycleCollectedEventIf) this);
compilationUnitManager.attach((HandleCompilationUnitLevelCollectedEventIf) this);
compilationUnitManager.attach((HandleCompilationUnitCycleParticipationCollectedEventIf) this);
compilationUnitManager.attach((HandleCompilationUnitCycleParticipantsCollectedEventIf) this);
compilationUnitManager.attach((HandleCompilationUnitTangleCollectedEventIf) this);
TypeManager typeManager = context.getTypeManager();
typeManager.attach((HandleSinglePackageTypeCycleCollectedEventIf) this);
typeManager.attach((HandleMultiplePackageTypeCycleCollectedEventIf) this);
typeManager.attach((HandleSingleCompilationUnitTypeCycleCollectedEventIf) this);
typeManager.attach((HandleTypeLevelCollectedEventIf) this);
typeManager.attach((HandleTypeCycleParticipationCollectedEventIf) this);
typeManager.attach((HandleTypeCycleParticipantsCollectedEventIf) this);
typeManager.attach((HandleTypeTangleCollectedEventIf) this);
}
public void writeXML() throws IOException {
DocType docType = new DocType("result");
XMLUtil.writeXML(new Document(root, docType), xmlPath);
}
public void handleEvent(LayerCycleCollectedEvent event) {
}
public void handleEvent(VerticalSliceCycleCollectedEvent event) {
}
public void handleEvent(LayerLevelCollectedEvent event) {
}
public void handleEvent(VerticalSliceLevelCollectedEvent event) {
}
public void handleEvent(SubsystemLevelCollectedEvent event) {
}
public void handleEvent(PackageLevelCollectedEvent event) {
}
public void handleEvent(CompilationUnitLevelCollectedEvent event) {
}
public void handleEvent(TypeLevelCollectedEvent event) {
}
public void handleEvent(LayerCycleParticipationCollectedEvent event) {
}
public void handleEvent(VerticalSliceCycleParticipationCollectedEvent event) {
}
public void handleEvent(SubsystemCycleParticipationCollectedEvent event) {
}
public void handleEvent(PackageCycleParticipationCollectedEvent event) {
}
public void handleEvent(CompilationUnitCycleParticipationCollectedEvent event) {
}
public void handleEvent(TypeCycleParticipationCollectedEvent event) {
}
public void handleEvent(LayerCycleParticipantsCollectedEvent event) {
}
public void handleEvent(VerticalSliceCycleParticipantsCollectedEvent event) {
}
public void handleEvent(SubsystemCycleParticipantsCollectedEvent event) {
}
public void handleEvent(PackageCycleParticipantsCollectedEvent event) {
}
public void handleEvent(CompilationUnitCycleParticipantsCollectedEvent event) {
}
public void handleEvent(TypeCycleParticipantsCollectedEvent event) {
}
public void handleEvent(VerticalSliceTangleCollectedEvent event) {
}
public void handleEvent(LayerTangleCollectedEvent event) {
}
public void handleEvent(SubsystemTangleCollectedEvent event) {
}
public void handleEvent(PackageTangleCollectedEvent event) {
}
public void handleEvent(CompilationUnitTangleCollectedEvent event) {
}
public void handleEvent(TypeTangleCollectedEvent event) {
}
public void handleEvent(SingleCompilationUnitTypeCycleCollectedEvent event) {
writeCycleEvent(EntityTypeEnum.TYPE.name(), event);
}
public void handleEvent(SinglePackageTypeCycleCollectedEvent event) {
writeCycleEvent(EntityTypeEnum.TYPE.name(), event);
}
public void handleEvent(MultiplePackageTypeCycleCollectedEvent event) {
writeCycleEvent(EntityTypeEnum.TYPE.name(), event);
}
public void handleEvent(SinglePackageCompilationUnitCycleCollectedEvent event) {
writeCycleEvent(EntityTypeEnum.COMPILATION_UNIT.name(), event);
}
public void handleEvent(MultiplePackageCompilationUnitCycleCollectedEvent event) {
writeCycleEvent(EntityTypeEnum.COMPILATION_UNIT.name(), event);
}
public void handleEvent(PackageCycleCollectedEvent event) {
writeCycleEvent(EntityTypeEnum.PACKAGE.name(), event);
}
public void handleEvent(SubsystemCycleCollectedEvent event) {
writeCycleEvent(EntityTypeEnum.SUBSYSTEM.name(), event);
}
/**
* This is not the moment to collect all metrics
*
* @param event
*/
public void handleEvent(AnalysisFinishedEvent event) {
try {
ProjectIf projectIf = event.getProject();
writeProjectMetrics(projectIf);
writeMetrics(projectIf.getTypes(), EntityTypeEnum.TYPE);
writeMetrics(projectIf.getCompilationUnits(), EntityTypeEnum.COMPILATION_UNIT);
writeMetrics(projectIf.getPackages(), EntityTypeEnum.PACKAGE);
writeXML();
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
/**
* Happens before AnalysisFinishedEvent
*
* @param event
*/
public void handleEvent(ProjectInfoCollectedEvent event) {
try {
ProjectIf projectIf = event.getProject();
writeProjectMetrics(projectIf);
writeMetrics(projectIf.getTypes(), EntityTypeEnum.TYPE);
writeMetrics(projectIf.getCompilationUnits(), EntityTypeEnum.COMPILATION_UNIT);
writeMetrics(projectIf.getPackages(), EntityTypeEnum.PACKAGE);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
private void writeCycleEvent(String entityTypeName, CycleCollectedEvent cycleEvent) {
Element cycle = new Element(XML_CYCLE).setAttribute(XML_LEVEL, entityTypeName);
for (DependencyElementIf el : cycleEvent.getCycle()) {
Element participant = new Element(XML_PARTICIPANT);
participant.setText(el.getFullyQualifiedName());
cycle.setContent(participant);
}
root.addContent(cycle);
}
private void writeProjectMetrics(ProjectIf projectIf) throws Exception {
Element project = root.getChild(XML_PROJECT);
if (project == null) {
project = new Element(XML_PROJECT);
root.addContent(project);
}
for (MetricIf metricIf : projectIf.getMetrics()) {
String metricName = MetricHelper.getMetricName(metricIf);
Element metric = project.getChild(metricName);
if (metric == null) {
metric = new Element(metricName);
project.addContent(metric);
}
metric.setText(metricIf.getValueAsString());
}
}
private void writeMetrics(DependencyElementIf[] elements, EntityTypeEnum element) throws Exception {
String name = MetricHelper.buildID(element.getXmlName());
Element elementsRoot = root.getChild(name + "s");
if (elementsRoot == null) {
elementsRoot = new Element(name + "s");
root.addContent(elementsRoot);
}
for (DependencyElementIf depElementIf : elements) {
Element elementRoot = getChildByAttributeName(elementsRoot, name, depElementIf.getFullyQualifiedName());
if (elementRoot == null) {
elementRoot = new Element(name);
elementsRoot.addContent(elementRoot);
elementRoot.setAttribute(XML_NAME, depElementIf.getFullyQualifiedName());
}
//Details
String typeName = "";
String absoluteSourcePath = "";
if (depElementIf instanceof ParsedPackage) {
typeName = "Package";
} else if (depElementIf instanceof ParsedClass) {
typeName = "Class";
absoluteSourcePath = depElementIf.getAbsoluteSourcePath().getAbsolutePath();
} else if (depElementIf instanceof ParsedCompilationUnit) {
typeName = "CompilationUnit";
absoluteSourcePath = depElementIf.getAbsoluteSourcePath().getAbsolutePath();
} else if (depElementIf instanceof ParsedInterface) {
typeName = "Interface";
absoluteSourcePath = depElementIf.getAbsoluteSourcePath().getAbsolutePath();
} else if (depElementIf instanceof NotParsedCompilationUnit) {
typeName = "NotParsedCompilationUnit";
} else if (depElementIf instanceof NotParsedPackage) {
typeName = "NotParsedPackage";
} else if (depElementIf instanceof NotParsedType) {
typeName = "NotParsedType";
} else {
throw new Exception("Unsupported type for:" + depElementIf);
}
if (elementRoot.getChild("ElementType") == null) {
Element elementType = new Element("ElementType");
elementType.setText(typeName);
elementRoot.addContent(elementType);
}
if (elementRoot.getChild("AbsoluteSourcePath") == null) {
Element elementAbsoluteSourcePath = new Element("AbsoluteSourcePath");
elementAbsoluteSourcePath.setText(absoluteSourcePath);
elementRoot.addContent(elementAbsoluteSourcePath);
}
if (elementRoot.getChild("FullyQualifiedName") == null) {
Element fullyQualifiedName = new Element("FullyQualifiedName");
fullyQualifiedName.setText(depElementIf.getFullyQualifiedName());
elementRoot.addContent(fullyQualifiedName);
}
if (elementRoot.getChild("FullyQualifiedContainmentName") == null) {
Element fullyQualifiedContainmentName = new Element("FullyQualifiedContainmentName");
fullyQualifiedContainmentName.setText(depElementIf.getFullyQualifiedContainmentName());
elementRoot.addContent(fullyQualifiedContainmentName);
}
if (depElementIf instanceof Type) {
Type tp = (Type) depElementIf;
if (elementRoot.getChild("PackageName") == null) {
Element newElement = new Element("PackageName");
newElement.setText(tp.getPackageName());
elementRoot.addContent(newElement);
}
// newElement = new Element("Info");
// newElement.setText(tp.getInfo());
// elementRoot.addContent(newElement);
// newElement = new Element("Description");
// newElement.setText(tp.getDescription());
// elementRoot.addContent(newElement);
// newElement = new Element("Source");
// newElement.setText(String.valueOf(tp.getSource()));
// elementRoot.addContent(newElement);
}
//Metrics
for (MetricIf metric : depElementIf.getMetrics()) {
String metricName = MetricHelper.getMetricName(metric);
Element metricElement = elementRoot.getChild(metricName);
if (metricElement == null) {
metricElement = new Element(metricName);
metricElement.setText(metric.getValueAsString());
elementRoot.addContent(metricElement);
}
}
}
}
private Element getChildByAttributeName(Element elementsRoot, String name, String fullyQualifiedName) {
List<Element> children = elementsRoot.getChildren(name);
if (children == null || children.isEmpty()) {
return null;
}
for (Element element : children) {
if (element.getAttributeValue(XML_NAME).contentEquals(fullyQualifiedName)) {
return element;
}
}
return null;
}
}