package org.archstudio.bna.utils; import static com.google.common.base.Preconditions.checkNotNull; import org.archstudio.bna.IBNAModel; import org.archstudio.bna.IBNAModelListener; import org.archstudio.bna.IBNAWorld; import org.archstudio.bna.IThingLogicManager; import org.archstudio.bna.IThingLogicManagerListener; import org.archstudio.bna.ThingLogicManagerEvent; import org.eclipse.jdt.annotation.Nullable; public class DefaultBNAWorld implements IBNAWorld, IThingLogicManagerListener { protected Object id = null; protected IBNAModel model = null; protected transient IThingLogicManager logics = null; public DefaultBNAWorld(@Nullable Object id, IBNAModel model) { this.id = id != null ? id : new Object(); this.model = checkNotNull(model); this.logics = new DefaultThingLogicManager(this); logics.addThingLogicManagerListener(this); } @Override public IThingLogicManager getThingLogicManager() { return logics; } @Override public void dispose() { logics.dispose(); } @Override public Object getID() { return id; } @Override public IBNAModel getBNAModel() { return model; } @Override public void handleThingLogicManagerEvent(ThingLogicManagerEvent evt) { switch (evt.getEventType()) { case LOGIC_ADDED: if (evt.getLogic() instanceof IBNAModelListener) { model.addBNAModelListener((IBNAModelListener) evt.getLogic()); } break; case LOGIC_REMOVING: if (evt.getLogic() instanceof IBNAModelListener) { model.removeBNAModelListener((IBNAModelListener) evt.getLogic()); } break; default: // do nothing } } @Override public String toString() { return id.toString(); } }