(no commit message)
[utils] / system / general / src / main / java / org / wamblee / system / core / AbstractComponent.java
index 5d89e4a46f839078c7adc5876bae684a3d2cdb8f..01eff741ac362aa13e6b0d3280c9ae9975b001d6 100644 (file)
@@ -31,7 +31,6 @@ public abstract class AbstractComponent implements Component {
 
        private static final Log LOG = LogFactory.getLog(AbstractComponent.class);
 
-       private Status _status;
        private String _context; 
        private String _name; 
        private List<ProvidedInterface> _provided;
@@ -50,7 +49,6 @@ public abstract class AbstractComponent implements Component {
         */
        protected AbstractComponent(String aName, ProvidedInterface[] aProvided,
                        RequiredInterface[] aRequired) {
-               _status = Status.NOT_STARTED;
                _context = null; 
                _name = aName;
                _provided = new ArrayList<ProvidedInterface>();
@@ -59,11 +57,6 @@ public abstract class AbstractComponent implements Component {
                _required.addAll(Arrays.asList(aRequired));
                _running = new HashSet<ProvidedInterface>();
        }
-       
-       @Override
-       public Status getStatus() {
-               return _status; 
-       }
 
        @Override
        public final String getName() {
@@ -89,12 +82,12 @@ public abstract class AbstractComponent implements Component {
        }
 
        @Override
-       public final ProvidedInterface[] getProvidedServices() {
+       public final ProvidedInterface[] getProvidedInterfaces() {
                return _provided.toArray(new ProvidedInterface[0]);
        }
 
        @Override
-       public final RequiredInterface[] getRequiredServices() {
+       public final RequiredInterface[] getRequiredInterfaces() {
                return _required.toArray(new RequiredInterface[0]);
        }
 
@@ -102,7 +95,6 @@ public abstract class AbstractComponent implements Component {
        public final void start() {
                LOG.info("Initializing '" + getQualifiedName() + "'");
                doStart();
-               _status = Status.RUNNING;
                if ( _running.size() != _provided.size()) { 
                        List<ProvidedInterface> remaining = 
                                new ArrayList<ProvidedInterface>(_provided);
@@ -124,7 +116,7 @@ public abstract class AbstractComponent implements Component {
         * @param aService
         *            Service.
         */
-       protected final void addService(
+       protected final void addInterface(
                        ProvidedInterface aDescriptor, Object aService) {
                LOG.info("Interface '" + getQualifiedName() + "." + aDescriptor.getName() + "' started.");
                _running.add(aDescriptor);
@@ -132,21 +124,38 @@ public abstract class AbstractComponent implements Component {
        }
 
        @Override
-       public ProvidedInterface[] getRunningServices() {
+       public ProvidedInterface[] getRunningInterfaces() {
                return _running.toArray(new ProvidedInterface[0]);
        }
        
        @Override
        public void stop() {
-               doStop();       
-               _status = Status.STOPPED;
+               doStop();
+               if ( _running.size() > 0 ) { 
+                       // programming error.
+                       throw new RuntimeException(getQualifiedName() + ": still services running after the stop call.");
+               }
        }
        
-       protected abstract void doStop(); 
+       protected abstract void doStop();
+       
+       /**
+        * Implementations must call this method to indicate that a running service has
+        * been stopped.
+        * 
+        * @param aService
+        *            Service.
+        */
+       protected final void removeInterface(
+                       ProvidedInterface aDescriptor) {
+               LOG.info("Interface '" + getQualifiedName() + "." + aDescriptor.getName() + "' stopped.");
+               _running.remove(aDescriptor);
+               aDescriptor.publish(null);
+       }
 
        @Override
        public String toString() {
-               return _name;
+               return getQualifiedName();
        }
 
 }