Implemented optinality of interfaces.
[utils] / system / general / src / main / java / org / wamblee / system / core / AbstractComponent.java
index 5d89e4a46f839078c7adc5876bae684a3d2cdb8f..b202f285412040a8a42b13bc9aba4a3684f26636 100644 (file)
@@ -89,12 +89,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]);
        }
 
@@ -124,7 +124,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 +132,39 @@ public abstract class AbstractComponent implements Component {
        }
 
        @Override
-       public ProvidedInterface[] getRunningServices() {
+       public ProvidedInterface[] getRunningInterfaces() {
                return _running.toArray(new ProvidedInterface[0]);
        }
        
        @Override
        public void stop() {
-               doStop();       
+               doStop();
+               if ( _running.size() > 0 ) { 
+                       // programming error.
+                       throw new RuntimeException(getQualifiedName() + ": still services running after the stop call.");
+               }
                _status = Status.STOPPED;
        }
        
-       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();
        }
 
 }