import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.wamblee.system.Component.Status;
/**
* Abstract subsystem class making it easy to implement new subsystems.
private static final Log LOG = LogFactory.getLog(AbstractComponent.class);
+ private Status _status;
private String _name;
private ServiceRegistry _registry;
- private List<InterfaceDescriptor> _provided;
- private List<InterfaceDescriptor> _required;
- private Map<InterfaceDescriptor, Service> _running;
+ private List<ProvidedInterface> _provided;
+ private List<RequiredInterface> _required;
+ private Map<ProvidedInterface, Service> _running;
/**
* Constructs the subsystem.
* @param aRequired
* Required services.
*/
- protected AbstractComponent(String aName, ServiceRegistry aRegistry, InterfaceDescriptor[] aProvided,
- InterfaceDescriptor[] aRequired) {
+ protected AbstractComponent(String aName, ServiceRegistry aRegistry, ProvidedInterface[] aProvided,
+ RequiredInterface[] aRequired) {
+ _status = Status.NOT_STARTED;
_name = aName;
_registry = aRegistry;
- _provided = new ArrayList<InterfaceDescriptor>();
+ _provided = new ArrayList<ProvidedInterface>();
_provided.addAll(Arrays.asList(aProvided));
- _required = new ArrayList<InterfaceDescriptor>();
+ _required = new ArrayList<RequiredInterface>();
_required.addAll(Arrays.asList(aRequired));
- _running = new HashMap<InterfaceDescriptor, Service>();
+ _running = new HashMap<ProvidedInterface, Service>();
+ }
+
+ @Override
+ public Status getStatus() {
+ return _status;
}
@Override
}
@Override
- public final ProvidedInterfaceDescriptor[] getProvidedServices() {
- return _provided.toArray(new ProvidedInterfaceDescriptor[0]);
+ public final ProvidedInterface[] getProvidedServices() {
+ return _provided.toArray(new ProvidedInterface[0]);
}
@Override
- public final RequiredInterfaceDescriptor[] getRequiredServices() {
- return _required.toArray(new RequiredInterfaceDescriptor[0]);
+ public final RequiredInterface[] getRequiredServices() {
+ return _required.toArray(new RequiredInterface[0]);
}
@Override
LOG.info("Initializing '" + aContext + "." + _name + "' with "
+ Arrays.asList(aRequiredServices));
doStart(aContext + "." + getName(), aRequiredServices);
+ _status = Status.RUNNING;
return _running.values().toArray(new Service[0]);
}
* Service.
*/
protected final void addService(String aContext,
- ProvidedInterfaceDescriptor aDescriptor, Object aService) {
+ ProvidedInterface aDescriptor, Object aService) {
LOG.info(aContext + ": service '" + aService + "' started.");
Service svc = getRegistry().register(aDescriptor, aService);
_running.put(svc.getDescriptor(), svc);
for (Service svc: _running.values()) {
getRegistry().remove(svc);
}
+ _status = Status.STOPPED;
}
protected abstract void doStop();