You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2007/04/27 11:23:59 UTC
svn commit: r533030 -
/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/assembly/util/CompositeUtil.java
Author: jsdelfino
Date: Fri Apr 27 02:23:58 2007
New Revision: 533030
URL: http://svn.apache.org/viewvc?view=rev&rev=533030
Log:
Check for duplicate components, services and references.
Modified:
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/assembly/util/CompositeUtil.java
Modified: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/assembly/util/CompositeUtil.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/assembly/util/CompositeUtil.java?view=diff&rev=533030&r1=533029&r2=533030
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/assembly/util/CompositeUtil.java (original)
+++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/assembly/util/CompositeUtil.java Fri Apr 27 02:23:58 2007
@@ -55,6 +55,13 @@
private InterfaceContractMapper interfaceContractMapper;
private Composite composite;
+ /**
+ * Constructs a new composite util.
+ *
+ * @param assemblyFactory
+ * @param interfaceContractMapper
+ * @param composite
+ */
public CompositeUtil(AssemblyFactory assemblyFactory,
InterfaceContractMapper interfaceContractMapper,
Composite composite) {
@@ -63,21 +70,32 @@
this.composite = composite;
}
+ /**
+ * Constructs a new composite util.
+ *
+ * @param composite
+ */
public CompositeUtil(Composite composite) {
this(new DefaultAssemblyFactory(),
new DefaultInterfaceContractMapper(), composite);
}
+ /**
+ * Configure a composite.
+ * @param problems
+ */
public void configure(List<Base> problems) {
// Collect and fuse includes
- List<Composite> includes = new ArrayList<Composite>();
- collectIncludes(composite, includes);
- fuseIncludes(composite, includes);
+ fuseIncludes(problems);
+
+ // Configure all components
configureComponents(problems);
+
+ // Wire all references
wireReferences(problems);
}
-
+
/**
* Collect all includes in a graph of includes
* @param composite
@@ -95,7 +113,13 @@
* @param composite
* @param includes
*/
- private void fuseIncludes(Composite composite, List<Composite> includes) {
+ private void fuseIncludes(List<Base> problems) {
+
+ // First collect all includes
+ List<Composite> includes = new ArrayList<Composite>();
+ collectIncludes(composite, includes);
+
+ // Then copy them
for (Composite include : includes) {
include = include.copy();
composite.getComponents().addAll(include.getComponents());
@@ -106,6 +130,8 @@
composite.getPolicySets().addAll(include.getPolicySets());
composite.getRequiredIntents().addAll(include.getRequiredIntents());
}
+
+ // Clear the list of includes
composite.getIncludes().clear();
}
@@ -339,17 +365,27 @@
private void configureComponents(List<Base> problems) {
// Initialize all component services and references
+ Map<String, Component> components = new HashMap<String, Component>();
for (Component component : composite.getComponents()) {
- Map<String, Service> services = new HashMap<String, Service>();
- Map<String, Reference> references = new HashMap<String, Reference>();
- Map<String, Property> properties = new HashMap<String, Property>();
+
+ // Index all components and check for duplicates
+ if (components.containsKey(component.getName())) {
+ problems.add(component);
+ } else {
+ components.put(component.getName(), component);
+ }
// Propagate the autowire flag from the composite to components
if (composite.isAutowire()) {
component.setAutowire(true);
}
+
+ // Index properties, services and references
+ Map<String, Service> services = new HashMap<String, Service>();
+ Map<String, Reference> references = new HashMap<String, Reference>();
+ Map<String, Property> properties = new HashMap<String, Property>();
- // Check that the component has a resolved implementation
+ // First check that the component has a resolved implementation
Implementation implementation = component.getImplementation();
if (implementation == null) {
@@ -360,31 +396,56 @@
// The implementation must be fully resolved
problems.add(implementation);
} else {
-
- // Index properties, services and references
+
+ // Index properties, services and references, also check for duplicates
+ for (Property property : implementation.getProperties()) {
+ if (properties.containsKey(property.getName())) {
+ problems.add(property);
+ } else {
+ properties.put(property.getName(), property);
+ }
+ }
for (Service service : implementation.getServices()) {
- services.put(service.getName(), service);
+ if (services.containsKey(service.getName())) {
+ problems.add(service);
+ } else {
+ services.put(service.getName(), service);
+ }
}
for (Reference reference : implementation.getReferences()) {
- references.put(reference.getName(), reference);
- }
- for (Property property : implementation.getProperties()) {
- properties.put(property.getName(), property);
+ if (references.containsKey(reference.getName())) {
+ problems.add(reference);
+ } else {
+ references.put(reference.getName(), reference);
+ }
}
}
// Index component services, references and properties
+ // Also check for duplicates
Map<String, ComponentService> componentServices = new HashMap<String, ComponentService>();
Map<String, ComponentReference> componentReferences = new HashMap<String, ComponentReference>();
Map<String, ComponentProperty> componentProperties = new HashMap<String, ComponentProperty>();
for (ComponentService componentService : component.getServices()) {
- componentServices.put(componentService.getName(), componentService);
+ if (componentServices.containsKey(componentService.getName())) {
+ problems.add(componentService);
+ } else {
+ componentServices.put(componentService.getName(), componentService);
+ }
}
for (ComponentReference componentReference : component.getReferences()) {
- componentReferences.put(componentReference.getName(), componentReference);
+ if (componentReferences.containsKey(componentReference.getName())) {
+ problems.add(componentReference);
+ } else {
+ componentReferences.put(componentReference.getName(), componentReference);
+ }
}
for (ComponentProperty componentProperty : component.getProperties()) {
- componentProperties.put(componentProperty.getName(), componentProperty);
+ if (componentProperties.containsKey(componentProperty.getName())) {
+ problems.add(componentProperty);
+ } else {
+ componentProperties.put(componentProperty.getName(), componentProperty);
+ }
}
// Reconcile component services/references/properties and implementation
@@ -453,6 +514,7 @@
List<Base> problems) {
for (Service service : composite.getServices()) {
+
CompositeService compositeService = (CompositeService)service;
ComponentService componentService = compositeService.getPromotedService();
if (componentService != null && componentService.isUnresolved()) {
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org