import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashSet;
+import java.util.Collections;
import java.util.List;
-import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
private static final Log LOG = LogFactory.getLog(AbstractComponent.class);
- private ThreadLocal<List<ProvidedInterface>> _remaining;
+ private ThreadLocal<List<ProvidedInterface>> remaining;
- private String _context;
- private String _name;
- private List<ProvidedInterface> _provided;
- private List<RequiredInterface> _required;
+ private String context;
+ private String name;
+ private List<ProvidedInterface> provided;
+ private List<RequiredInterface> required;
/**
* Constructs the subsystem.
* @param aRequired
* Required services.
*/
- protected AbstractComponent(String aName, ProvidedInterface[] aProvided,
- RequiredInterface[] aRequired) {
- _remaining = new ThreadLocal<List<ProvidedInterface>>();
- _context = null;
- _name = aName;
- _provided = new ArrayList<ProvidedInterface>();
- _provided.addAll(Arrays.asList(aProvided));
- _required = new ArrayList<RequiredInterface>();
- _required.addAll(Arrays.asList(aRequired));
+ protected AbstractComponent(String aName, List<ProvidedInterface> aProvided,
+ List<RequiredInterface> aRequired) {
+ remaining = new ThreadLocal<List<ProvidedInterface>>();
+ context = null;
+ name = aName;
+ provided = new ArrayList<ProvidedInterface>(aProvided);
+ required = new ArrayList<RequiredInterface>(aRequired);
}
+ /**
+ * Constructs the subsystem.
+ *
+ * @param aName
+ * Name of the system.
+ * @param aProvided
+ * Provided services.
+ * @param aRequired
+ * Required services.
+ */
+ protected AbstractComponent(String aName, ProvidedInterface[] aProvided,
+ RequiredInterface[] aRequired) {
+ this(aName, Arrays.asList(aProvided), Arrays.asList(aRequired));
+ }
+
protected AbstractComponent(String aName) {
this(aName, new ProvidedInterface[0], new RequiredInterface[0]);
}
- public AbstractComponent addProvidedInterface(ProvidedInterface aProvided) {
- _provided.add(aProvided);
+ public AbstractComponent<Type> addProvidedInterface(ProvidedInterface aProvided) {
+ provided.add(aProvided);
return this;
}
- public AbstractComponent addRequiredInterface(RequiredInterface aRequired) {
- _required.add(aRequired);
+ public AbstractComponent<Type> addRequiredInterface(RequiredInterface aRequired) {
+ required.add(aRequired);
return this;
}
@Override
public final String getName() {
- return _name;
+ return name;
}
@Override
public void addContext(String aContext) {
- if (_context == null) {
- _context = aContext;
+ if (context == null) {
+ context = aContext;
} else {
- _context = aContext + "." + _context;
+ context = aContext + "." + context;
}
}
@Override
public String getContext() {
- return _context;
+ return context;
}
@Override
public String getQualifiedName() {
- if (_context == null) {
+ if (context == null) {
return getName();
}
- return _context + "." + getName();
+ return context + "." + getName();
}
@Override
- public final ProvidedInterface[] getProvidedInterfaces() {
- return _provided.toArray(new ProvidedInterface[0]);
+ public final List<ProvidedInterface> getProvidedInterfaces() {
+ return Collections.unmodifiableList(provided);
}
@Override
- public final RequiredInterface[] getRequiredInterfaces() {
- return _required.toArray(new RequiredInterface[0]);
+ public final List<RequiredInterface> getRequiredInterfaces() {
+ return Collections.unmodifiableList(required);
}
@Override
public final Type start(Scope aScope) {
LOG.info("Initialization starting '" + getQualifiedName() + "'");
- List<ProvidedInterface> oldRemaining = _remaining.get();
- _remaining.set(new ArrayList<ProvidedInterface>(Arrays.asList(getProvidedInterfaces())));
+ List<ProvidedInterface> oldRemaining = remaining.get();
+ remaining.set(new ArrayList<ProvidedInterface>(getProvidedInterfaces()));
try {
Type runtime = doStart(aScope);
checkNotStartedInterfaces();
LOG.info("Initialization finished '" + getQualifiedName() + "'");
return runtime;
} finally {
- _remaining.set(oldRemaining);
+ remaining.set(oldRemaining);
}
}
private void checkNotStartedInterfaces() {
- if (_remaining.get().size() > 0) {
+ if (remaining.get().size() > 0) {
String notProvided = "";
- for (ProvidedInterface provided : _remaining.get()) {
+ for (ProvidedInterface provided : remaining.get()) {
notProvided += "\nComponent " + getQualifiedName()
+ " did not start interface " + provided;
}
/**
* Must be implemented for initializing the subsystem. The implementation
- * must call {@link #addService(Service)} for each service that is started.
+ * must call {@link #addInterface(ProvidedInterface, Object, Scope)} for each service that is started.
*
* @return Returns the runtime of the component.
*/
Object aService, Scope aScope) {
LOG.info("Interface '" + getQualifiedName() + "."
+ aDescriptor.getName() + "' started.");
- if ( !_remaining.get().remove(aDescriptor) ) {
+ if ( !remaining.get().remove(aDescriptor) ) {
throw new SystemAssemblyException("Component '" + getQualifiedName() + "' started an unexpected interface '" +
aDescriptor + "' that was not registerd as a provided interface before");
}