/**
*
*/
package com.azwul.api.service;
import java.util.HashMap;
import java.util.Map;
import com.azwul.api.exception.AzwulApiException;
import com.azwul.api.model.HttpConfiguration;
import com.azwul.api.service.impl.AzClicServiceImpl;
import com.azwul.api.service.impl.AzDealServiceImpl;
import com.azwul.api.service.impl.AzRmailServiceImpl;
import com.azwul.api.service.impl.AzSignServiceImpl;
/**
* @author Theotime Jurzak
*
*/
public final class AzServiceFactory {
protected static Map<Class<? extends AzBaseService>, AzBaseService> pool = new HashMap<Class<? extends AzBaseService>, AzBaseService>();
public static AzClicService getAzClicService() {
return (AzClicService) getAzServiceObject(AzClicServiceImpl.class);
}
public static AzClicService getAzClicService(
HttpConfiguration httpConfiguration) {
return (AzClicService) getAzServiceObject(AzClicServiceImpl.class,
httpConfiguration);
}
public static AzSignService getAzSignService() {
return (AzSignService) getAzServiceObject(AzSignServiceImpl.class);
}
public static AzSignService getAzSignService(
HttpConfiguration httpConfiguration) {
return (AzSignService) getAzServiceObject(AzSignServiceImpl.class,
httpConfiguration);
}
public static AzDealService getAzDealService() {
return (AzDealService) getAzServiceObject(AzDealServiceImpl.class);
}
public static AzDealService getAzDealService(
HttpConfiguration httpConfiguration) {
return (AzDealService) getAzServiceObject(AzDealServiceImpl.class,
httpConfiguration);
}
public static AzRmailService getAzRmailService() {
return (AzRmailService) getAzServiceObject(AzRmailServiceImpl.class);
}
public static AzRmailService getAzRmailService(
HttpConfiguration httpConfiguration) {
return (AzRmailService) getAzServiceObject(AzRmailServiceImpl.class,
httpConfiguration);
}
protected static AzBaseService getAzServiceObject(
Class<? extends AzBaseService> clazz,
HttpConfiguration httpConfiguration) {
synchronized (pool) {
if (pool.get(clazz) == null) {
AzBaseService service;
try {
service = clazz.newInstance();
} catch (Exception e) {
throw new AzwulApiException("Error instantiating service "
+ clazz, e);
}
if (httpConfiguration != null) {
service.setHttpConfiguration(httpConfiguration);
} else {
service.setHttpConfiguration(new HttpConfiguration());
}
pool.put(clazz, service);
}
}
return pool.get(clazz);
}
protected static AzBaseService getAzServiceObject(
Class<? extends AzBaseService> clazz) {
return getAzServiceObject(clazz, null);
}
}