in plugins/org.apache.geronimo.st.v21.core/src/main/java/org/apache/geronimo/st/v21/core/internal/DependencyHelper.java [245:331]
public List<JAXBElement> reorderJAXBElements( List<JAXBElement> jaxbElements ) {
Trace.tracePoint("Entry", Activator.traceInternal, "DependencyHelper.reorderModules", jaxbElements);
if (jaxbElements.size() == 0) {
Trace.tracePoint("Exit ", Activator.traceInternal, "DependencyHelper.reorderModules", jaxbElements);
return jaxbElements;
}
inputJAXBElements = jaxbElements;
//
// Iterate through all the JAXBElements and register the dependencies
//
for (JAXBElement jaxbElement : jaxbElements) {
Environment environment = getEnvironment(jaxbElement);
if (environment != null) {
Artifact child = environment.getModuleId();
if (child != null) {
Dependencies dependencies = environment.getDependencies();
if (dependencies != null) {
List<Dependency> depList = dependencies.getDependency();
if (depList != null) {
for ( Dependency dep : depList) {
Artifact parent = deploymentFactory.createArtifact();
parent.setGroupId( dep.getGroupId() );
parent.setArtifactId( dep.getArtifactId() );
parent.setVersion( dep.getVersion() );
parent.setType( dep.getType() );
dm.addDependency( child, parent );
}
}
}
}
}
}
//
// Iterate through all the JAXBElements again and reorder as necessary
//
for (JAXBElement jaxbElement : jaxbElements) {
if (!reorderedJAXBElements.contains(jaxbElement)) {
// Not already moved
Environment environment = getEnvironment(jaxbElement);
if (environment != null) {
Artifact artifact = environment.getModuleId();
if (artifact == null) {
// Move if null (nothing can be done)
if (!reorderedJAXBElements.contains(jaxbElement)) {
reorderedJAXBElements.add(jaxbElement);
}
}
else if (dm.getParents(artifact).contains(artifact) ||
dm.getChildren(artifact).contains(artifact)) {
// Move if a tight circular dependency (nothing can be done)
if (!reorderedJAXBElements.contains(jaxbElement)) {
reorderedJAXBElements.add(jaxbElement);
}
}
else if (dm.getParents(artifact).size() == 0) {
// Move if no parents (nothing to do)
if (!reorderedJAXBElements.contains(jaxbElement)) {
reorderedJAXBElements.add(jaxbElement);
}
}
else if (dm.getParents(artifact).size() > 0) {
// Move parents first
processJaxbParents(dm.getParents(artifact), artifact);
// Move self
if (!reorderedJAXBElements.contains(jaxbElement)) {
reorderedJAXBElements.add(jaxbElement);
}
}
}
}
}
//
// Ensure return list is exactly the same size as the input list
//
assert reorderedJAXBElements.size() == jaxbElements.size();
//
// Return List of JAXBElements
//
Trace.tracePoint("Exit ", Activator.traceInternal, "DependencyHelper.reorderModules", reorderedJAXBElements);
return reorderedJAXBElements;
}