source code formatting.
[utils] / system / general / src / main / java / org / wamblee / system / core / Component.java
1 /*
2  * Copyright 2007 the original author or authors.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.wamblee.system.core;
17
18 import java.util.List;
19
20
21 /**
22  * A component represents a part of a system that requires a 
23  * number of interfaces and provides a number of interfaces.
24  * 
25  * The component interface provides the meta-data for a component. 
26  * After calling {@link #start(Scope)}, an actual runtime representation of the
27  * component can be created which is independent of this component. 
28  * As a special case, the runtime representation may be identical to the 
29  * component instance but in general it is not. This allows a component to be 
30  * used as a factory for creating objects. 
31  * 
32  *
33  * @author Erik Brakkee
34  */
35 public interface Component<Type> {
36     /**
37      * Gets the name of the subsystem.
38      *
39      * @return Subsystem name.
40      */
41     String getName();
42
43     /**
44      * Prepends the context with a super context.
45      *
46      * @param aContext DOCUMENT ME!
47      */
48     void addContext(String aContext);
49
50     /**
51      * Getst the context.
52      *
53      * @return Context or null if not set.
54      */
55     String getContext();
56
57     /**
58      * Gets the fully qualified name of the component which includes
59      * the context of the component.   This method can only be used after the
60      * component has started.
61      *
62      * @return Qualified name.
63      */
64     String getQualifiedName();
65
66     /**
67      * DOCUMENT ME!
68      *
69      * @return DOCUMENT ME!
70      */
71 /**
72      * DOCUMENT ME!
73      *
74      * @return DOCUMENT ME!
75      */
76 /**
77          * Gets a description of the provided interfaces. 
78          * @return Provided interfaces. 
79          */
80     List<ProvidedInterface> getProvidedInterfaces();
81
82     /**
83      * DOCUMENT ME!
84      *
85      * @return DOCUMENT ME!
86      */
87 /**
88      * DOCUMENT ME!
89      *
90      * @return DOCUMENT ME!
91      */
92 /**
93          * Gets a description of the required interfaces. 
94          * @return Required interfaces. 
95          */
96     List<RequiredInterface> getRequiredInterfaces();
97
98     /**
99      * Initialises the subsystem by starting all the services that it
100      * described as provided.
101      *
102      * @param aScope Scope with external interface implementations that are
103      *        available. The component  must publish its runtime and its
104      *        provided interfaces in this scope.
105      *
106      * @return Gets an object representing the runtime of the component.
107      */
108     Type start(Scope aScope);
109
110     /**
111      * Stops a component.
112      *
113      * @param aRuntime THe runtime part of the component.
114      */
115     void stop(Type aRuntime);
116 }