package org.archstudio.myx.fw; import java.util.Collection; import java.util.Collections; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; public class MyxContainer implements IMyxContainer { protected Set<IMyxBrick> internalBricks = Collections.synchronizedSet(new CopyOnWriteArraySet<IMyxBrick>()); protected IMyxBrickItems brickItems = null; protected final IMyxProvidedServiceProvider providedServiceProvider; protected final Set<? extends IMyxLifecycleProcessor> lifecycleProcessors = Collections.synchronizedSet(Collections .singleton(new MyxContainerLifecycleProcessor(this))); public MyxContainer() { providedServiceProvider = new MyxBasicProvidedServiceProvider(); } @Override public void setMyxBrickItems(IMyxBrickItems brickItems) { this.brickItems = brickItems; } @Override public IMyxBrickItems getMyxBrickItems() { return this.brickItems; } @Override public void addInternalBrick(IMyxBrick brick) { internalBricks.add(brick); } @Override public void removeInternalBrick(IMyxBrick brick) { internalBricks.remove(brick); } @Override public Collection<? extends IMyxBrick> getInternalBricks() { return Collections.unmodifiableSet(internalBricks); } @Override public Collection<? extends IMyxLifecycleProcessor> getLifecycleProcessors() { return lifecycleProcessors; } @Override public IMyxProvidedServiceProvider getProvidedServiceProvider() { return providedServiceProvider; } @Override public IMyxBrick getInternalBrick(IMyxName brickName) { for (IMyxBrick brick : getInternalBricks()) { IMyxBrickItems brickItems = brick.getMyxBrickItems(); if (brickItems != null) { IMyxName brickName2 = brickItems.getBrickName(); if (brickName2 != null) { if (brickName2.equals(brickName)) { return brick; } } } } return null; } static class MyxContainerLifecycleProcessor implements IMyxLifecycleProcessor { private final MyxContainer c; private MyxContainerLifecycleProcessor(MyxContainer c) { this.c = c; } @Override public void init() { op(Operation.INIT); } @Override public void begin() { op(Operation.BEGIN); } @Override public void end() { op(Operation.END); } @Override public void destroy() { op(Operation.DESTROY); } private void op(Operation op) { for (IMyxBrick brick : c.getInternalBricks()) { Collection<? extends IMyxLifecycleProcessor> lps = brick.getLifecycleProcessors(); if (lps != null) { for (IMyxLifecycleProcessor lp : lps) { switch (op) { case INIT: lp.init(); break; case BEGIN: lp.begin(); break; case END: lp.end(); break; case DESTROY: lp.destroy(); break; } } } } } } }