/**
* Sencha GXT 3.0.0b - Sencha for GWT
* Copyright(c) 2007-2012, Sencha, Inc.
* licensing@sencha.com
*
* http://www.sencha.com/products/gxt/license/
*/
package com.sencha.gxt.desktopapp.client.servicebus;
import java.util.HashMap;
public class ServiceBus {
private HashMap<Object, Object> serviceProviders = new HashMap<Object, Object>();
public ServiceBus() {
}
@SuppressWarnings("unchecked")
public <T extends ServiceRequest> T invoke(T serviceRequest) {
ServiceProvider<T> serviceProvider = (ServiceProvider<T>) serviceProviders.get(serviceRequest.getClass());
if (serviceProvider == null) {
throw new IllegalStateException("No service provider, serviceRequest=" + serviceRequest.getClass().getName());
}
serviceProvider.onServiceRequest(serviceRequest);
return serviceRequest; // for one step access to getters
}
public <T extends ServiceRequest> void registerServiceProvider(Class<T> serviceRequestClass,
ServiceProvider<T> serviceProvider) {
Object previousServiceProvider = serviceProviders.put(serviceRequestClass, serviceProvider);
if (previousServiceProvider != null) {
throw new IllegalStateException("Provider already defined, serviceRequest=" + serviceRequestClass.getName()
+ ", serviceProvider=" + serviceProvider.getClass().getName());
}
}
public <T extends ServiceRequest> void removeServiceProvider(Class<T> serviceRequestClass) {
serviceProviders.remove(serviceRequestClass);
}
}