/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/kernel/trunk/component-manager/src/main/java/org/sakaiproject/component/impl/SpringCompMgr.java $
* $Id: SpringCompMgr.java 69279 2009-11-27 14:44:01Z stephen.marquard@uct.ac.za $
***********************************************************************************
*
* Copyright (c) 2005, 2006, 2007, 2008 Sakai Foundation
*
* Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.component.impl;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.component.api.ComponentManager;
/**
* This is a totally fake component manager which is just going to pretend to try to find services,
* maybe later this could try to use the sakai mock stuff but for now it is just here to stop the CM from firing up during unit tests
*/
@SuppressWarnings("rawtypes")
public class MockCompMgr implements ComponentManager {
private static Log M_log = LogFactory.getLog(MockCompMgr.class);
/**
* Startup the CM as a mock system for unit tests
*/
public MockCompMgr(boolean loadMocks) {
M_log.warn("LOADING CM in testing mode... this should only ever happen during unit tests");
if (loadMocks) {
// TODO load up mocks of the common services
M_log.info("Created a populated CM mock with "+components.size()+" services loaded");
} else {
M_log.info("Created an empty CM mock (no services loaded)");
}
}
/**
* Not really needed but this allows us to at least put fake ones into this CM for tests if we like
*/
public ConcurrentHashMap<String, Object> components = new ConcurrentHashMap<String, Object>();
boolean closed = false;
public void close() {
components.clear();
closed = true;
}
public boolean hasBeenClosed() {
return closed;
}
public boolean contains(Class iface) {
String key = iface != null ? iface.getName() : "";
return components.contains(key);
}
public boolean contains(String ifaceName) {
String key = ifaceName != null ? ifaceName : "";
return components.contains(key);
}
public Object get(Class iface) {
String key = iface != null ? iface.getName() : "";
return components.get(key);
}
public Object get(String ifaceName) {
String key = ifaceName != null ? ifaceName : "";
return components.get(key);
}
public Properties getConfig() {
return null;
}
public Set<String> getRegisteredInterfaces() {
return new HashSet<String>( components.keySet() );
}
public void loadComponent(Class iface, Object component) {
if (iface == null) {
throw new IllegalArgumentException("Failure while attempting to load component: iface is null");
}
if (component != null) {
components.put(iface.getName(), component);
} else {
components.remove(iface.getName());
}
}
public void loadComponent(String ifaceName, Object component) {
if (ifaceName == null) {
throw new IllegalArgumentException("Failure while attempting to load component: ifaceName is null");
}
if (component != null) {
components.put(ifaceName, component);
} else {
components.remove(ifaceName);
}
}
public void waitTillConfigured() {
// whatever
}
}