package org.archstudio.myx.fw; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; class MyxBasicRequiredServiceProvider implements IMyxRequiredServiceProvider { //Maps interface names to Lists of service objects protected Map<IMyxName, List<Object>> serviceMap = Collections .synchronizedMap(new HashMap<IMyxName, List<Object>>()); public MyxBasicRequiredServiceProvider() { } public void addService(IMyxName interfaceName, Object serviceObject) { synchronized (serviceMap) { List<Object> l = serviceMap.get(interfaceName); if (l == null) { l = new ArrayList<Object>(); serviceMap.put(interfaceName, l); } l.add(serviceObject); } } public void removeService(IMyxName interfaceName, Object serviceObject) { synchronized (serviceMap) { List<Object> l = serviceMap.get(interfaceName); if (l == null) { return; } for (int i = 0; i < l.size(); i++) { Object so = l.get(i); if (so.equals(serviceObject)) { l.remove(i); if (l.size() == 0) { serviceMap.remove(interfaceName); } return; } } } } public IMyxName[] getAllInterfaceNames() { return serviceMap.keySet().toArray(new IMyxName[serviceMap.keySet().size()]); } @Override public Collection<? extends Object> getServiceObjects(IMyxName interfaceName) { synchronized (serviceMap) { List<Object> l = serviceMap.get(interfaceName); if (l == null) { return Collections.emptySet(); } else { return Collections.unmodifiableList(new ArrayList<Object>(l)); } } } }