summaryrefslogtreecommitdiffstats
path: root/java/sca/modules/assembly
diff options
context:
space:
mode:
authorslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2009-08-20 11:08:55 +0000
committerslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2009-08-20 11:08:55 +0000
commit8a5ed3881de2326d9376fe15179069f5bda98f14 (patch)
tree7cb7238b9fa16976c882702df507b742427881e8 /java/sca/modules/assembly
parent263bb5ebd8d47f8c69c4c522a85b7a471db0eb0e (diff)
Process includes within composite implementations (ASM_6026)
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@806120 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/assembly')
-rw-r--r--java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeIncludeBuilderImpl.java81
1 files changed, 48 insertions, 33 deletions
diff --git a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeIncludeBuilderImpl.java b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeIncludeBuilderImpl.java
index 56fd732d86..451c2e0212 100644
--- a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeIncludeBuilderImpl.java
+++ b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeIncludeBuilderImpl.java
@@ -24,7 +24,9 @@ import java.util.Set;
import org.apache.tuscany.sca.assembly.AssemblyFactory;
import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.ComponentReference;
import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.Implementation;
import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException;
import org.apache.tuscany.sca.definitions.Definitions;
@@ -53,51 +55,64 @@ public class CompositeIncludeBuilderImpl implements CompositeBuilder {
fuseIncludes(composite, monitor);
}
- private void warning(Monitor monitor, String message, Object model, String... messageParameters) {
- if (monitor != null) {
- Problem problem =
- monitor.createProblem(this.getClass().getName(),
- "assembly-validation-messages",
- Severity.WARNING,
- model,
- message,
- (Object[])messageParameters);
- monitor.problem(problem);
- }
- }
-
/**
* Copy a list of includes into a composite.
*
* @param composite
*/
private void fuseIncludes(Composite composite, Monitor monitor) {
-
- Set<Composite> visited = new HashSet<Composite>();
- visited.add(composite);
-
- for (Composite included : composite.getIncludes()) {
- Composite fusedComposite = fuseInclude(included, visited, monitor);
- if (fusedComposite != null) {
- composite.getComponents().addAll(fusedComposite.getComponents());
- composite.getServices().addAll(fusedComposite.getServices());
- composite.getReferences().addAll(fusedComposite.getReferences());
- composite.getProperties().addAll(fusedComposite.getProperties());
- composite.getWires().addAll(fusedComposite.getWires());
- composite.getPolicySets().addAll(fusedComposite.getPolicySets());
- composite.getRequiredIntents().addAll(fusedComposite.getRequiredIntents());
+
+ monitor.pushContext("Composite: " + composite.getName().toString());
+
+ try {
+ Set<Composite> visited = new HashSet<Composite>();
+ visited.add(composite);
+
+ for (Composite included : composite.getIncludes()) {
+ Composite fusedComposite = fuseInclude(included, visited, monitor);
+ if (fusedComposite != null) {
+ composite.getComponents().addAll(fusedComposite.getComponents());
+ composite.getServices().addAll(fusedComposite.getServices());
+ composite.getReferences().addAll(fusedComposite.getReferences());
+ composite.getProperties().addAll(fusedComposite.getProperties());
+ composite.getWires().addAll(fusedComposite.getWires());
+ composite.getPolicySets().addAll(fusedComposite.getPolicySets());
+ composite.getRequiredIntents().addAll(fusedComposite.getRequiredIntents());
+ }
}
- }
-
- // Clear the list of includes as all of the included components
- // have now been added into the top level composite
- composite.getIncludes().clear();
+
+ // Clear the list of includes as all of the included components
+ // have now been added into the top level composite
+ composite.getIncludes().clear();
+
+ // process any composites referenced through implementation.composite
+ for (Component component : composite.getComponents()) {
+ monitor.pushContext("Component: " + component.getName());
+
+ try {
+ // recurse for composite implementations
+ Implementation implementation = component.getImplementation();
+ if (implementation instanceof Composite) {
+ fuseIncludes((Composite)implementation, monitor);
+ }
+ } finally {
+ monitor.popContext();
+ }
+ }
+
+ } finally {
+ monitor.popContext();
+ }
}
private Composite fuseInclude(Composite include, Set<Composite> visited, Monitor monitor) {
if (visited.contains(include)) {
- warning(monitor, "CompositeAlreadyIncluded", include, include.getName().toString());
+ Monitor.warning(monitor,
+ this,
+ "assembly-validation-messages",
+ "CompositeAlreadyIncluded",
+ include.getName().toString());
return null;
}