summaryrefslogtreecommitdiffstats
path: root/sca-java-1.x/tags/java-stable-20060304/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ComponentImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-1.x/tags/java-stable-20060304/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ComponentImpl.java')
-rw-r--r--sca-java-1.x/tags/java-stable-20060304/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ComponentImpl.java222
1 files changed, 222 insertions, 0 deletions
diff --git a/sca-java-1.x/tags/java-stable-20060304/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ComponentImpl.java b/sca-java-1.x/tags/java-stable-20060304/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ComponentImpl.java
new file mode 100644
index 0000000000..2033ebe7f7
--- /dev/null
+++ b/sca-java-1.x/tags/java-stable-20060304/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ComponentImpl.java
@@ -0,0 +1,222 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.model.assembly.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tuscany.model.assembly.AssemblyFactory;
+import org.apache.tuscany.model.assembly.AssemblyModelContext;
+import org.apache.tuscany.model.assembly.AssemblyModelVisitor;
+import org.apache.tuscany.model.assembly.Component;
+import org.apache.tuscany.model.assembly.ComponentImplementation;
+import org.apache.tuscany.model.assembly.ConfiguredProperty;
+import org.apache.tuscany.model.assembly.ConfiguredReference;
+import org.apache.tuscany.model.assembly.ConfiguredService;
+import org.apache.tuscany.model.assembly.Property;
+import org.apache.tuscany.model.assembly.Reference;
+import org.apache.tuscany.model.assembly.Service;
+
+/**
+ * An implementation of Component.
+ */
+public abstract class ComponentImpl extends AggregatePartImpl implements Component {
+
+ private List<ConfiguredReference> configuredReferences=new ArrayList<ConfiguredReference>();
+ private Map<String, ConfiguredReference> configuredReferencesMap;
+ private List<ConfiguredService> configuredServices=new ArrayList<ConfiguredService>();
+ private Map<String, ConfiguredService> configuredServicesMap;
+ private List<ConfiguredProperty> configuredProperties=new ArrayList<ConfiguredProperty>();
+ private Map<String, ConfiguredProperty> configuredPropertiesMap;
+ private ComponentImplementation implementation;
+
+ /**
+ * @see org.apache.tuscany.model.assembly.Component#getComponentImplementation()
+ */
+ public ComponentImplementation getComponentImplementation() {
+ return implementation;
+ }
+
+ /**
+ * @see org.apache.tuscany.model.assembly.Component#setComponentImplementation(org.apache.tuscany.model.assembly.ComponentImplementation)
+ */
+ public void setComponentImplementation(ComponentImplementation value) {
+ checkNotFrozen();
+ implementation=value;
+ }
+
+ /**
+ * @see org.apache.tuscany.model.assembly.Component#getConfiguredServices()
+ */
+ public List<ConfiguredService> getConfiguredServices() {
+ return configuredServices;
+ }
+
+ public ConfiguredService getConfiguredService(String name) {
+ checkInitialized();
+ return configuredServicesMap.get(name);
+ }
+
+ /**
+ * @see org.apache.tuscany.model.assembly.Component#getConfiguredReferences()
+ */
+ public List<ConfiguredReference> getConfiguredReferences() {
+ return configuredReferences;
+ }
+
+ /**
+ * @see org.apache.tuscany.model.assembly.Component#getConfiguredReference(java.lang.String)
+ */
+ public ConfiguredReference getConfiguredReference(String name) {
+ checkInitialized();
+ return configuredReferencesMap.get(name);
+ }
+
+ /**
+ * @see org.apache.tuscany.model.assembly.Component#getConfiguredProperties()
+ */
+ public List<ConfiguredProperty> getConfiguredProperties() {
+ return configuredProperties;
+ }
+
+ /**
+ * @see org.apache.tuscany.model.assembly.Component#getConfiguredProperty(java.lang.String)
+ */
+ public ConfiguredProperty getConfiguredProperty(String name) {
+ checkInitialized();
+ return configuredPropertiesMap.get(name);
+ }
+
+ /**
+ * @see org.apache.tuscany.model.assembly.AssemblyModelObject#initialize(org.apache.tuscany.model.assembly.AssemblyModelContext)
+ */
+ public void initialize(AssemblyModelContext modelContext) {
+ if (isInitialized())
+ return;
+ super.initialize(modelContext);
+
+ // Initialize the implementation
+ ComponentImplementation implementation = getComponentImplementation();
+ if (implementation != null) {
+ implementation.initialize(modelContext);
+ }
+
+ // Derive the configured services, references and properties from the component implementation
+ //FIXME we have two options here: either just index the configured services, references and properties
+ // that we find in the corresponding lists, or derive them from the services, references and properties on
+ // the component type, for now just check if the lists are empty or not to determine which option to go with
+ configuredServicesMap = new HashMap<String, ConfiguredService>();
+ configuredReferencesMap = new HashMap<String, ConfiguredReference>();
+ configuredPropertiesMap = new HashMap<String, ConfiguredProperty>();
+ if (configuredServices.isEmpty() && configuredReferences.isEmpty() && configuredProperties.isEmpty()) {
+ if (implementation != null) {
+ AssemblyFactory factory = modelContext.getAssemblyFactory();
+ for (Service service : implementation.getComponentType().getServices()) {
+ ConfiguredService configuredService = factory.createConfiguredService();
+ configuredService.setPort(service);
+ configuredServices.add(configuredService);
+ configuredServicesMap.put(service.getName(), configuredService);
+ ((ConfiguredPortImpl)configuredService).setAggregatePart(this);
+ configuredService.initialize(modelContext);
+ }
+
+ for (Reference reference : implementation.getComponentType().getReferences()) {
+ ConfiguredReference configuredReference = factory.createConfiguredReference();
+ configuredReference.setPort(reference);
+ configuredReferences.add(configuredReference);
+ configuredReferencesMap.put(reference.getName(), configuredReference);
+ ((ConfiguredPortImpl)configuredReference).setAggregatePart(this);
+ configuredReference.initialize(modelContext);
+ }
+
+ // Derive configured properties from the properties on the component type
+ for (Property property : implementation.getComponentType().getProperties()) {
+ ConfiguredProperty configuredProperty = factory.createConfiguredProperty();
+ configuredProperty.setProperty(property);
+ configuredProperties.add(configuredProperty);
+ configuredPropertiesMap.put(property.getName(), configuredProperty);
+ configuredProperty.initialize(modelContext);
+ }
+
+ }
+ } else {
+
+ // Just populate the maps of services, references and properties from the contents of
+ // the corresponding lists
+ for (ConfiguredService configuredService : configuredServices) {
+ configuredServicesMap.put(configuredService.getService().getName(), configuredService);
+ ((ConfiguredPortImpl)configuredService).setAggregatePart(this);
+ configuredService.initialize(modelContext);
+ }
+
+ for (ConfiguredReference configuredReference : configuredReferences) {
+ configuredReferencesMap.put(configuredReference.getReference().getName(), configuredReference);
+ ((ConfiguredPortImpl)configuredReference).setAggregatePart(this);
+ configuredReference.initialize(modelContext);
+ }
+
+ for (ConfiguredProperty configuredProperty : configuredProperties) {
+ configuredPropertiesMap.put(configuredProperty.getProperty().getName(), configuredProperty);
+ configuredProperty.initialize(modelContext);
+ }
+ }
+ }
+
+ /**
+ * @see org.apache.tuscany.model.assembly.AssemblyModelObject#freeze()
+ */
+ public void freeze() {
+ if (isFrozen())
+ return;
+ super.freeze();
+
+ // Freeze configured services, references and properties
+ configuredServices=Collections.unmodifiableList(configuredServices);
+ freeze(configuredServices);
+ configuredReferences=Collections.unmodifiableList(configuredReferences);
+ freeze(configuredReferences);
+ configuredProperties=Collections.unmodifiableList(configuredProperties);
+ freeze(configuredProperties);
+ if (implementation!=null)
+ implementation.freeze();
+ }
+
+ /**
+ * @see org.apache.tuscany.model.assembly.impl.AssemblyModelObjectImpl#accept(org.apache.tuscany.model.assembly.AssemblyModelVisitor)
+ */
+ public boolean accept(AssemblyModelVisitor visitor) {
+ if (!super.accept(visitor))
+ return false;
+
+ if (!accept(configuredServices, visitor))
+ return false;
+ if (!accept(configuredReferences, visitor))
+ return false;
+ if (!accept(configuredProperties, visitor))
+ return false;
+ if (implementation!=null) {
+ if (!implementation.accept(visitor))
+ return false;
+ }
+
+ return true;
+ }
+
+}