/******************************************************************************* * Copyright 2010 Simon Mieth * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package org.kabeja.ui.impl; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.kabeja.Application; import org.kabeja.processing.ProcessingManager; import org.kabeja.tools.Component; import org.kabeja.ui.ApplicationMenuBar; import org.kabeja.ui.ProcessingUIComponent; import org.kabeja.ui.ServiceManager; import org.kabeja.ui.Serviceable; import org.kabeja.ui.Startable; public class ServiceContainer implements ServiceManager, Application { protected List components = new ArrayList(); protected ProcessingManager manager; public ServiceContainer() { this.addComponent(this); } public void addComponent(Component c) { this.components.add(c); } public Component[] getServiceComponents(String service) { List l = this.getServiceComponentsByServiceField(service); return (Component[])l.toArray(new Component[l.size()]); } protected List getServiceComponentsByServiceField(String service) { List list = new ArrayList(); Iterator i = this.components.iterator(); try { Class serviceClass = this.getClass().getClassLoader() .loadClass(service); while (i.hasNext()) { Object obj = i.next(); if (serviceClass.isInstance(obj)) { list.add(obj); } } } catch (ClassNotFoundException e) { e.printStackTrace(); } return list; } public void setupComponents() { Iterator i = this.components.iterator(); while (i.hasNext()) { Object obj = i.next(); if (obj instanceof Serviceable) { ((Serviceable) obj).setServiceManager(this); } } ApplicationMenuBar mbar = ((ApplicationMenuBar) this.getServiceComponents(ApplicationMenuBar.SERVICE)[0]); mbar.setAction(ApplicationMenuBar.MENU_ID_FILE, new OpenProcessingAction(this)); } public void start(Map properties) { this.setupComponents(); Iterator i = this.components.iterator(); while (i.hasNext()) { Object obj = i.next(); if (obj instanceof Startable) { ((Startable) obj).start(); } } } public void stop() { Iterator i = this.components.iterator(); while (i.hasNext()) { Object obj = i.next(); if (obj instanceof Startable) { ((Startable) obj).stop(); } } System.exit(0); } public void setProcessingManager(ProcessingManager manager) { this.manager = manager; Iterator i = this.components.iterator(); while (i.hasNext()) { Object obj = i.next(); if (obj instanceof ProcessingUIComponent) { ((ProcessingUIComponent) obj).setProcessingManager(manager); } } } }