X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.repo%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Frepo%2Fosgi%2FArgeoOsgiDistribution.java;h=f0ab4e2e487d5e6a87f17d5d7dd66ef4ab9d19c8;hb=706b98df2c68382d7bd501fa05cb128f329087ee;hp=c81126e0d18202decd116af7ee4c3b3551bdc3ac;hpb=a0a0f0b074c867a73dabca20b28767a2f7475745;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/ArgeoOsgiDistribution.java b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/ArgeoOsgiDistribution.java index c81126e0d..f0ab4e2e4 100644 --- a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/ArgeoOsgiDistribution.java +++ b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/osgi/ArgeoOsgiDistribution.java @@ -1,23 +1,28 @@ package org.argeo.slc.repo.osgi; -import java.util.HashSet; -import java.util.Set; -import java.util.TreeSet; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.argeo.slc.DefaultNameVersion; +import org.argeo.slc.CategorizedNameVersion; +import org.argeo.slc.ModuleSet; import org.argeo.slc.NameVersion; import org.argeo.slc.build.Distribution; import org.argeo.slc.build.ModularDistribution; +import org.argeo.slc.execution.ExecutionFlow; import org.argeo.slc.repo.ArtifactDistribution; +import org.sonatype.aether.artifact.Artifact; +import org.sonatype.aether.util.artifact.DefaultArtifact; +/** A consistent and versioned OSGi distribution, which can be built and tested. */ public class ArgeoOsgiDistribution extends ArtifactDistribution implements ModularDistribution { private final static Log log = LogFactory .getLog(ArgeoOsgiDistribution.class); - private Set modules = new HashSet(); + private List modules = new ArrayList(); public ArgeoOsgiDistribution(String coords) { super(coords); @@ -25,29 +30,75 @@ public class ArgeoOsgiDistribution extends ArtifactDistribution implements public void init() { if (log.isDebugEnabled()) { - log.debug("## " + toString()); - for (NameVersion nv : listModulesNameVersions()) { - log.debug(nv); + Iterator nvIt = nameVersions(); + while (nvIt.hasNext()) { + log.debug(nvIt.next()); + } } } + // private static void print(ModuleSet moduleSet, Integer depth) { + // StringBuilder prefix = new StringBuilder(); + // for (int i = 0; i < depth; i++) { + // prefix.append(' '); + // } + // String p = prefix.toString(); + // prefix.setLength(0); + // log.debug(p + "## " + moduleSet.toString()); + // Iterator nvIt = moduleSet.nameVersions(); + // while (nvIt.hasNext()) { + // NameVersion nv = nvIt.next(); + // if (nv instanceof ModuleSet) + // print((ModuleSet) nv, depth + 1); + // else + // log.debug(p + nv); + // + // } + // } + public void destroy() { } public Distribution getModuleDistribution(String moduleName, String moduleVersion) { - NameVersion searched = new DefaultNameVersion(moduleName, moduleVersion); - for (ArtifactDistribution ad : modules) { - if (ad.equals(searched)) - return ad; - } + // NameVersion searched = new DefaultNameVersion(moduleName, + // moduleVersion); + // for (Distribution ad : modules) { + // if (ad.equals(searched)) + // return ad; + // } return null; } - public Set listModulesNameVersions() { - return new TreeSet(modules); + public Iterator nameVersions() { + List nameVersions = new ArrayList(); + for (Object module : modules) { + // extract runnable from execution flow + if (module instanceof ExecutionFlow) + module = ((ExecutionFlow) module).getRunnable(); + + if (module instanceof ModuleSet) + addNameVersions(nameVersions, (ModuleSet) module); + else if (module instanceof NameVersion) { + NameVersion nv = (NameVersion) module; + if (!nameVersions.contains(nv)) + nameVersions.add(nv); + } else + log.warn("Ignored " + module); + } + return nameVersions.iterator(); + } + + private void addNameVersions(List nameVersions, + ModuleSet moduleSet) { + Iterator it = moduleSet.nameVersions(); + while (it.hasNext()) { + NameVersion nv = it.next(); + if (!nameVersions.contains(nv)) + nameVersions.add(nv); + } } public Object getModulesDescriptor(String descriptorType) { @@ -55,7 +106,7 @@ public class ArgeoOsgiDistribution extends ArtifactDistribution implements return null; } - public void setModules(Set modules) { + public void setModules(List modules) { this.modules = modules; }