package org.atricore.idbus.capabilities.sso.ui.internal;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.atricore.idbus.capabilities.sso.ui.WebBranding;
import org.atricore.idbus.capabilities.sso.ui.spi.WebBrandingEvent;
import org.atricore.idbus.capabilities.sso.ui.spi.WebBrandingEventListener;
import org.atricore.idbus.capabilities.sso.ui.spi.WebBrandingService;
import org.atricore.idbus.capabilities.sso.ui.spi.WebBrandingServiceException;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author <a href=mailto:sgonzalez@atricore.org>Sebastian Gonzalez Oyuela</a>
*/
public class WebBrandingServiceImpl implements WebBrandingService {
private static final Log logger = LogFactory.getLog(WebBrandingServiceImpl.class);
private Map<String, WebBranding> brandings = new ConcurrentHashMap<String, WebBranding>();
private Set<WebBrandingEventListener> listeners = new HashSet<WebBrandingEventListener>();
public WebBrandingServiceImpl() {
}
public void init() {
// Leave this to make easy detecting service startup
logger.info("Web Branding service ACTIVE");
System.out.println("Web Branding service ACTIVE");
}
public WebBranding lookup(String id) {
return brandings.get(id);
}
public void publish(String id, WebBranding branding) throws WebBrandingServiceException {
brandings.put(id, branding);
WebBrandingEvent event = new WebBrandingEvent (WebBrandingEvent.PUBLISH, branding.getId());
for (WebBrandingEventListener listener : listeners) {
try {
listener.handleEvent(event);
} catch (Exception e) {
logger.error("Error notifying publish to listener " + listener + ", " + e.getMessage(), e);
}
}
}
public void remove(String id) throws WebBrandingServiceException {
if (!brandings.containsKey(id))
throw new WebBrandingServiceException("Branding not found for id ["+id+"]");
WebBrandingEvent event = new WebBrandingEvent (WebBrandingEvent.REMOVE, id);
for (WebBrandingEventListener listener : listeners) {
try {
listener.handleEvent(event);
} catch (Exception e) {
logger.error("Error notifying removal to listener " + listener + ", " + e.getMessage(), e);
}
}
brandings.remove(id);
}
public Collection<WebBranding> list() {
return brandings.values();
}
public void register(WebBrandingEventListener listener) {
listeners.add(listener);
}
public void unregister(WebBrandingEventListener listener) {
listeners.remove(listener);
}
}