package org.dcache.webadmin.model.dataaccess.impl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.dcache.webadmin.model.dataaccess.DAOFactory;
import org.dcache.webadmin.model.dataaccess.DomainsDAO;
import org.dcache.webadmin.model.dataaccess.LogEntryDAO;
import org.dcache.webadmin.model.dataaccess.InfoDAO;
import org.dcache.webadmin.model.dataaccess.LinkGroupsDAO;
import org.dcache.webadmin.model.dataaccess.MoverDAO;
import org.dcache.webadmin.model.dataaccess.PoolsDAO;
import org.dcache.webadmin.model.dataaccess.communication.CommandSenderFactory;
import org.dcache.webadmin.model.dataaccess.communication.impl.PageInfoCache;
/**
* Factory class for the DAOs. The whole design with an factory is mainly
* introduced for better testablility with Unittests
*
* @author jans
*/
public class DAOFactoryImpl implements DAOFactory {
private Logger _log = LoggerFactory.getLogger(DAOFactory.class);
private CommandSenderFactory _defaultCommandSenderFactory;
private PageInfoCache _pageCache;
private LogEntryDAO _logEntryDAO;
@Override
public synchronized LogEntryDAO getLogEntryDAO() {
return _logEntryDAO;
}
@Override
public DomainsDAO getDomainsDAO() {
checkDefaultsSet();
return new StandardDomainsDAO(_pageCache, _defaultCommandSenderFactory);
}
@Override
public InfoDAO getInfoDAO() {
checkDefaultsSet();
return new StandardInfoDAO(_defaultCommandSenderFactory);
}
@Override
public LinkGroupsDAO getLinkGroupsDAO() {
checkDefaultsSet();
return new StandardLinkGroupsDAO(_pageCache,
_defaultCommandSenderFactory);
}
@Override
public MoverDAO getMoverDAO() {
checkDefaultsSet();
return new StandardMoverDAO(_pageCache, _defaultCommandSenderFactory);
}
@Override
public PoolsDAO getPoolsDAO() {
checkDefaultsSet();
return new StandardPoolsDAO(_pageCache, _defaultCommandSenderFactory);
}
@Override
public void setDefaultCommandSenderFactory(
CommandSenderFactory commandSenderFactory) {
_log.trace("DefaultCommandSenderFactory set {}",
commandSenderFactory.toString());
_defaultCommandSenderFactory = commandSenderFactory;
}
public void setLogEntryDAO(LogEntryDAO alarmDAO) {
_logEntryDAO = alarmDAO;
}
public void setPageCache(PageInfoCache pageCache) {
_log.trace("PageCache set {}", pageCache);
_pageCache = pageCache;
}
private void checkDefaultCommandSenderSet() {
if (_defaultCommandSenderFactory == null) {
throw new IllegalStateException("DefaultPoolCommandSender not set");
}
}
private void checkDefaultsSet() {
checkDefaultCommandSenderSet();
checkPageCacheSet();
}
private void checkPageCacheSet() {
if (_pageCache == null) {
throw new IllegalStateException("PageCache not set");
}
}
}