source code formatting.
[utils] / system / general / src / main / java / org / wamblee / system / core / Component.java
index 9409e44f6b0cb9a1c2eef2d95cc6ce9ebd3c5e3b..e70baa23d2f9b0a5b5da13bc1adeaed30bb35211 100644 (file)
 /*
  * Copyright 2007 the original author or authors.
- * 
+ *
  * 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.wamblee.system.core;
 
+import java.util.List;
+
+
 /**
  * A component represents a part of a system that requires a 
- * number of interfaces and provides a number of interfaces. 
+ * number of interfaces and provides a number of interfaces.
+ * 
+ * The component interface provides the meta-data for a component. 
+ * After calling {@link #start(Scope)}, an actual runtime representation of the
+ * component can be created which is independent of this component. 
+ * As a special case, the runtime representation may be identical to the 
+ * component instance but in general it is not. This allows a component to be 
+ * used as a factory for creating objects. 
+ * 
  *
  * @author Erik Brakkee
  */
-public interface Component {
-       
-       enum Status { 
-               NOT_STARTED, RUNNING, STOPPED
-       }
-       
-       /**
-        * Gets the status of the component. 
-        * @return Status. 
-        */
-       Status getStatus();
-       
-       /**
-        * Gets the name of the subsystem.
-        * @return Subsystem name. 
-        */
-       String getName();
-       
-       /**
-        * Prepends the context with a super context. 
-        */
-       void addContext(String aContext);
-       
-       /**
-        * Gets the fully qualified name of the component which includes
-        * the context of the component.  
-        * This method can only be used after the component has started.
-        * @return Qualified name. 
-        */
-       String getQualifiedName(); 
+public interface Component<Type> {
+    /**
+     * Gets the name of the subsystem.
+     *
+     * @return Subsystem name.
+     */
+    String getName();
+
+    /**
+     * Prepends the context with a super context.
+     *
+     * @param aContext DOCUMENT ME!
+     */
+    void addContext(String aContext);
+
+    /**
+     * Getst the context.
+     *
+     * @return Context or null if not set.
+     */
+    String getContext();
+
+    /**
+     * Gets the fully qualified name of the component which includes
+     * the context of the component.   This method can only be used after the
+     * component has started.
+     *
+     * @return Qualified name.
+     */
+    String getQualifiedName();
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+/**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+/**
+         * Gets a description of the provided interfaces. 
+         * @return Provided interfaces. 
+         */
+    List<ProvidedInterface> getProvidedInterfaces();
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+/**
+     * DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+/**
+         * Gets a description of the required interfaces. 
+         * @return Required interfaces. 
+         */
+    List<RequiredInterface> getRequiredInterfaces();
 
-       /**
-        * Gets a description of the provided interfaces. 
-        * @return Provided interfaces. 
-        */
-       ProvidedInterface[] getProvidedInterfaces();
-       
-       /**
-        * Gets a description of the required interfaces. 
-        * @return Required interfaces. 
-        */
-       RequiredInterface[] getRequiredInterfaces();
+    /**
+     * Initialises the subsystem by starting all the services that it
+     * described as provided.
+     *
+     * @param aScope Scope with external interface implementations that are
+     *        available. The component  must publish its runtime and its
+     *        provided interfaces in this scope.
+     *
+     * @return Gets an object representing the runtime of the component.
+     */
+    Type start(Scope aScope);
 
-       
-       /**
-        * Initialises the subsytem by starting all the services that
-        * it described as provided. 
-        */
-       void start();
-       
-       /**
-        * Gets the list of running services in the subsystem. 
-        * 
-        * This method may only be called after the
-        * {@link #initialize(String, Service[])} has been called. 
-        * @return
-        */
-       ProvidedInterface[] getRunningServices();
-       
-       /**
-        * Stops a subsystem. 
-        */
-       void stop(); 
+    /**
+     * Stops a component.
+     *
+     * @param aRuntime THe runtime part of the component.
+     */
+    void stop(Type aRuntime);
 }