package com.adaptrex.core.services;
import java.util.HashMap;
import java.util.Map;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.UriInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.adaptrex.core.AdaptrexConfig;
import com.adaptrex.core.persistence.api.ORMPersistenceManager;
import com.adaptrex.core.rest.RestService;
public class AdaptrexServices {
private static Logger log = LoggerFactory.getLogger(AdaptrexServices.class);
private static AdaptrexConfig config;
private static Map<String,ORMPersistenceManager> persistenceManagers
= new HashMap<String,ORMPersistenceManager>();
public static AdaptrexConfig getConfig() {
if (config == null) {
config = new AdaptrexConfig();
}
return config;
}
public static ORMPersistenceManager getPersistenceManager() {
return getPersistenceManager(null);
}
public static ORMPersistenceManager getPersistenceManager(String factoryName) {
if (factoryName == null) factoryName = getConfig().get(AdaptrexConfig.PERSISTENCE_ORM_DEFAULT);
String key = factoryName != null ? factoryName : "_default";
ORMPersistenceManager persistenceManager = persistenceManagers.get(key);
if (persistenceManager == null) {
synchronized(AdaptrexServices.class) {
if (persistenceManagers.get(key) != null) {
return persistenceManagers.get(key);
}
log.debug("Creating Persistence Manager: " + (factoryName == null ? "_default" : factoryName));
String persistenceManagerImplName = config.get(AdaptrexConfig.PERSISTENCE_ORM,
"com.adaptrex.core.persistence.jpa.JPAPersistenceManager");
try {
Class<?> ormClazz = Class.forName(persistenceManagerImplName);
persistenceManager = (ORMPersistenceManager) (factoryName == null
? ormClazz.getDeclaredConstructor().newInstance()
: ormClazz.getDeclaredConstructor(String.class).newInstance(factoryName));
;
} catch (ClassNotFoundException e) {
throw new RuntimeException("Couldn't find ORMPersistenceFactory implementation for your ORM (" +
persistenceManagerImplName + ")", e);
} catch (Exception e) {
throw new RuntimeException(e);
}
persistenceManagers.put(key, persistenceManager);
}
}
return persistenceManager;
}
public static RestService getRestService() {
return new RestService();
}
}