package com.joe.utilities.core.lookup;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.joe.utilities.core.configuration.admin.domain.IApplicationConfiguration;
import com.joe.utilities.core.configuration.admin.facade.IApplicationConfigurationFacade;
import com.joe.utilities.core.hibernate.repository.ApplicationConfigurationRepository;
import com.joe.utilities.core.serviceLocator.ServiceLocator;
import com.joe.utilities.core.util.EvaluationException;
import com.joe.utilities.core.util.ILookupProfile;
@Transactional(readOnly = true)
public class ApplicationConfigurationFacadeImpl implements IApplicationConfigurationFacade, ApplicationContextAware {
private Log log = LogFactory.getLog(ApplicationConfigurationFacadeImpl.class);
private ApplicationConfigurationRepository applicationConfigurationRepo;
private ApplicationContext appContext;
private LookupManager lookupManager;
/*
* Default constructor
*/
public ApplicationConfigurationFacadeImpl() {
super();
}
public List<IApplicationConfiguration> getListApplicationConfigurations(String filter, Long startIndex, Long maxResults) {
log.trace("Entering getListApplicationConfigurations facade method");
ApplicationConfigurationRepository acr = getApplicationConfigRepository();
List<IApplicationConfiguration> l;
if (filter == null) {
l= acr.listApplicationConfigurations();
} else {
l = acr.listApplicationConfigurationsByCategoryCode(filter);
}
return l;
}
public IApplicationConfiguration getApplicationConfiguration(String key) {
log.trace("Entering getApplicationConfiguration facade method");
return lookupManager.getApplicationConfiguration(key);
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED, rollbackFor = { EvaluationException.class })
public void saveApplicationConfiguration(IApplicationConfiguration appConfig) {
log.trace("Entering saveApplicationConfiguration facade method");
ApplicationConfigurationRepository acr = getApplicationConfigRepository();
IApplicationConfiguration ac = acr.saveApplicationConfiguration(appConfig);
if (ac == null)
throw new UnsupportedOperationException("Unable to save ApplicationConfiguration to database.");
}
/**
* @return
*/
private ApplicationConfigurationRepository getApplicationConfigRepository() {
/*
* hack: if this bean wasn't wired by spring, use ServiceLocator
*/
if(this.appContext == null)
{
return (ApplicationConfigurationRepository) ServiceLocator.getInstance().getBean("applicationConfigRepository");
}
return this.applicationConfigurationRepo;
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED, rollbackFor = { EvaluationException.class })
public void deleteApplicationConfiguration(IApplicationConfiguration appConfig) {
ApplicationConfigurationRepository acr = getApplicationConfigRepository();
acr.removeApplicationConfigProperty(appConfig);
}
@Required
public void setApplicationConfigurationRepo(ApplicationConfigurationRepository applicationConfigurationRepo) {
this.applicationConfigurationRepo = applicationConfigurationRepo;
}
@Required
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.appContext = applicationContext;
}
@Required
public void setLookupManager(LookupManager lookupManager) {
this.lookupManager = lookupManager;
}
@Override
public Long retrieveDBTimeInMilliseconds() {
return applicationConfigurationRepo.retrieveDBTimeInMilliseconds();
}
@Override
public Long retrieveDBTimeOffsetInMilliseconds() {
return applicationConfigurationRepo.retrieveDBTimeOffsetInMilliseconds();
}
}