package org.dcache.webadmin.controller.impl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import diskCacheV111.pools.PoolV2Mode;
import org.dcache.webadmin.controller.PoolSpaceService;
import org.dcache.webadmin.controller.exceptions.PoolSpaceServiceException;
import org.dcache.webadmin.controller.util.BeanDataMapper;
import org.dcache.webadmin.model.businessobjects.Pool;
import org.dcache.webadmin.model.dataaccess.DAOFactory;
import org.dcache.webadmin.model.dataaccess.DomainsDAO;
import org.dcache.webadmin.model.dataaccess.PoolsDAO;
import org.dcache.webadmin.model.exceptions.DAOException;
import org.dcache.webadmin.view.beans.PoolSpaceBean;
/**
* Invokes the needed dataaccessmethods and does the mapping
* between modelobjects and viewobjects.
* @author jans
*/
public class StandardPoolSpaceService implements PoolSpaceService {
private static final Logger _log = LoggerFactory.getLogger(StandardPoolSpaceService.class);
private DAOFactory _daoFactory;
public StandardPoolSpaceService(DAOFactory DAOFactory) {
_daoFactory = DAOFactory;
}
@Override
public List<PoolSpaceBean> getPoolBeans() throws PoolSpaceServiceException {
try {
Set<Pool> pools = getPoolsDAO().getPools();
_log.debug("returned pools: " + pools.size());
List<PoolSpaceBean> poolBeans = new ArrayList<>(pools.size());
Map<String, List<String>> domainMap = getDomainsDAO().getDomainsMap();
for (Pool currentPool : pools) {
PoolSpaceBean newPoolBean = createPoolBean(currentPool, domainMap);
poolBeans.add(newPoolBean);
}
_log.debug("returned PoolBeans: " + poolBeans.size());
Collections.sort(poolBeans);
return poolBeans;
} catch (DAOException e) {
throw new PoolSpaceServiceException(e);
}
}
public void setDAOFactory(DAOFactory daoFactory) {
_daoFactory = daoFactory;
}
private PoolSpaceBean createPoolBean(Pool pool,
Map<String, List<String>> domainMap) {
return BeanDataMapper.poolModelToView(pool, domainMap);
}
private PoolsDAO getPoolsDAO() {
return _daoFactory.getPoolsDAO();
}
private DomainsDAO getDomainsDAO() {
return _daoFactory.getDomainsDAO();
}
@Override
public void changePoolMode(List<PoolSpaceBean> pools, PoolV2Mode poolMode,
String userName) throws PoolSpaceServiceException {
_log.debug("Change Pool mode called: {}", poolMode);
Set<String> poolIds = getSelectedIds(pools);
try {
getPoolsDAO().changePoolMode(poolIds, poolMode, userName);
} catch (DAOException ex) {
throw new PoolSpaceServiceException(ex);
}
for (PoolSpaceBean pool: pools) {
if (poolIds.contains(pool.getName())) {
pool.setPoolMode(poolMode);
/*
* deselect the current object for consistency
* (since refreshing of the pool objects is not
* called immediately after this form submission)
*/
pool.setSelected(false);
pool.setStatePending(true);
}
}
}
private Set<String> getSelectedIds(List<PoolSpaceBean> pools) {
Set<String> poolIds = new HashSet<>();
for (PoolSpaceBean pool : pools) {
if (pool.isSelected()) {
poolIds.add(pool.getName());
}
}
return poolIds;
}
}