]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.repo/src/org/argeo/slc/repo/osgi/ArgeoOsgiDistributionImpl.java
7d74856047292af610decc1760b17962c7c99f50
[gpl/argeo-slc.git] / org.argeo.slc.repo / src / org / argeo / slc / repo / osgi / ArgeoOsgiDistributionImpl.java
1 package org.argeo.slc.repo.osgi;
2
3 import java.util.ArrayList;
4 import java.util.Iterator;
5 import java.util.List;
6 import java.util.SortedSet;
7 import java.util.TreeSet;
8
9 import org.apache.commons.logging.Log;
10 import org.apache.commons.logging.LogFactory;
11 import org.argeo.slc.ModuleSet;
12 import org.argeo.slc.NameVersion;
13 import org.argeo.slc.build.Distribution;
14 import org.argeo.slc.execution.ExecutionFlow;
15 import org.argeo.slc.repo.ArgeoOsgiDistribution;
16 import org.argeo.slc.repo.ArtifactDistribution;
17
18 /**
19 * A consistent and versioned OSGi distribution, which can be built and tested.
20 */
21 public class ArgeoOsgiDistributionImpl extends ArtifactDistribution implements ArgeoOsgiDistribution {
22 private final static Log log = LogFactory.getLog(ArgeoOsgiDistributionImpl.class);
23
24 private List<Object> modules = new ArrayList<Object>();
25
26 public ArgeoOsgiDistributionImpl(String coords) {
27 super(coords);
28 }
29
30 public void init() {
31 if (log.isDebugEnabled())
32 log.debug(describe());
33 }
34
35 public void destroy() {
36
37 }
38
39 public String describe() {
40 SortedSet<String> sort = new TreeSet<String>();
41 Iterator<? extends NameVersion> nvIt = nameVersions();
42 while (nvIt.hasNext()) {
43 NameVersion nv = nvIt.next();
44 String str = nv.toString();
45 if (nv instanceof MavenWrapper)
46 str = str + "\t(Maven)";
47 else if (nv instanceof UriWrapper)
48 str = str + "\t(URI)";
49 else if (nv instanceof OsgiCategorizedNV)
50 str = str + "\t(OSGi from archive)";
51 else if (nv instanceof BndWrapper)
52 str = str + "\t(Plain BND from archive)";
53 else
54 str = str + "\t(UNKNOWN??)";
55 sort.add(str);
56 }
57
58 StringBuffer buf = new StringBuffer("## DISTRIBUTION " + toString() + " ##\n");
59 for (String str : sort) {
60 buf.append(str).append('\n');
61 }
62 return buf.toString();
63 }
64
65 public Iterator<NameVersion> nameVersions() {
66 List<NameVersion> nameVersions = new ArrayList<NameVersion>();
67 for (Object module : modules) {
68 // extract runnable from execution flow
69 if (module instanceof ExecutionFlow) {
70 for (Iterator<Runnable> it = ((ExecutionFlow) module).runnables(); it.hasNext();) {
71 processModule(nameVersions, it.next());
72 }
73 } else {
74 processModule(nameVersions, module);
75 }
76 }
77 return nameVersions.iterator();
78 }
79
80 private void processModule(List<NameVersion> nameVersions, Object module) {
81 if (module instanceof ModuleSet)
82 addNameVersions(nameVersions, (ModuleSet) module);
83 else if (module instanceof NameVersion) {
84 NameVersion nv = (NameVersion) module;
85 addNameVersion(nameVersions, nv);
86 } else
87 log.warn("Ignored " + module);
88 }
89
90 private void addNameVersions(List<NameVersion> nameVersions, ModuleSet moduleSet) {
91 Iterator<? extends NameVersion> it = moduleSet.nameVersions();
92 while (it.hasNext()) {
93 NameVersion nv = it.next();
94 addNameVersion(nameVersions, nv);
95 }
96 }
97
98 protected void addNameVersion(List<NameVersion> nameVersions, NameVersion nv) {
99 if (!nameVersions.contains(nv)) {
100 nameVersions.add(nv);
101 }
102 }
103
104 // Modular distribution interface methods. Not yet used.
105 public Distribution getModuleDistribution(String moduleName, String moduleVersion) {
106 throw new UnsupportedOperationException();
107 }
108
109 public Object getModulesDescriptor(String descriptorType) {
110 throw new UnsupportedOperationException();
111 }
112
113 /* DEPENDENCY INJECTION */
114 public void setModules(List<Object> modules) {
115 this.modules = modules;
116 }
117 }