1 package org
.argeo
.slc
.repo
.osgi
;
3 import java
.util
.ArrayList
;
4 import java
.util
.Iterator
;
6 import java
.util
.SortedSet
;
7 import java
.util
.TreeSet
;
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
;
19 * A consistent and versioned OSGi distribution, which can be built and tested.
21 public class ArgeoOsgiDistributionImpl
extends ArtifactDistribution
implements ArgeoOsgiDistribution
{
22 private final static Log log
= LogFactory
.getLog(ArgeoOsgiDistributionImpl
.class);
24 private List
<Object
> modules
= new ArrayList
<Object
>();
26 public ArgeoOsgiDistributionImpl(String coords
) {
31 if (log
.isDebugEnabled())
32 log
.debug(describe());
35 public void destroy() {
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)";
54 str
= str
+ "\t(UNKNOWN??)";
58 StringBuffer buf
= new StringBuffer("## DISTRIBUTION " + toString() + " ##\n");
59 for (String str
: sort
) {
60 buf
.append(str
).append('\n');
62 return buf
.toString();
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());
74 processModule(nameVersions
, module
);
77 return nameVersions
.iterator();
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
);
87 log
.warn("Ignored " + module
);
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
);
98 protected void addNameVersion(List
<NameVersion
> nameVersions
, NameVersion nv
) {
99 if (!nameVersions
.contains(nv
)) {
100 nameVersions
.add(nv
);
104 // Modular distribution interface methods. Not yet used.
105 public Distribution
getModuleDistribution(String moduleName
, String moduleVersion
) {
106 throw new UnsupportedOperationException();
109 public Object
getModulesDescriptor(String descriptorType
) {
110 throw new UnsupportedOperationException();
113 /* DEPENDENCY INJECTION */
114 public void setModules(List
<Object
> modules
) {
115 this.modules
= modules
;