Now the component provides read-only access to the interfaces.
[utils] / system / general / src / main / java / org / wamblee / system / core / AbstractComponent.java
index 9000f4ae5234a1bc8e2b54536fdd20d29f15c0a2..38df3bc4c9bc297874834eaf1953fd3083e8962d 100644 (file)
@@ -35,8 +35,8 @@ public abstract class AbstractComponent<Type> implements Component<Type> {
 
        private String _context;
        private String _name;
-       private List<ProvidedInterface> _provided;
-       private List<RequiredInterface> _required;
+       private ReadWriteProvidedInterfaces _provided;
+       private ReadWriteRequiredInterfaces _required;
 
        /**
         * Constructs the subsystem.
@@ -53,10 +53,8 @@ public abstract class AbstractComponent<Type> implements Component<Type> {
                _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));
+               _provided = new ReadWriteProvidedInterfaces(aProvided);
+               _required = new ReadWriteRequiredInterfaces(aRequired);
        }
        
        protected AbstractComponent(String aName) {
@@ -101,20 +99,20 @@ public abstract class AbstractComponent<Type> implements Component<Type> {
        }
 
        @Override
-       public final ProvidedInterface[] getProvidedInterfaces() {
-               return _provided.toArray(new ProvidedInterface[0]);
+       public final ProvidedInterfaces getProvidedInterfaces() {
+               return _provided.readOnlyView();
        }
 
        @Override
-       public final RequiredInterface[] getRequiredInterfaces() {
-               return _required.toArray(new RequiredInterface[0]);
+       public final RequiredInterfaces getRequiredInterfaces() {
+               return _required.readOnlyView();
        }
 
        @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())));
+               _remaining.set(new ArrayList<ProvidedInterface>(Arrays.asList(getProvidedInterfaces().toArray())));
                try {
                        Type runtime = doStart(aScope);
                        checkNotStartedInterfaces();