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.List; import java.util.Map; import java.util.Set; import dmg.cells.nucleus.CellAddressCore; import org.dcache.admin.webadmin.datacollector.datatypes.CellStatus; import org.dcache.webadmin.controller.PoolGroupService; import org.dcache.webadmin.controller.exceptions.PoolGroupServiceException; 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.CellServicesBean; import org.dcache.webadmin.view.beans.PoolGroupBean; import org.dcache.webadmin.view.beans.PoolQueueBean; import org.dcache.webadmin.view.beans.PoolSpaceBean; /** * * @author jans */ public class StandardPoolGroupService implements PoolGroupService { private static final Logger _log = LoggerFactory.getLogger(StandardPoolQueuesService.class); private DAOFactory _daoFactory; public StandardPoolGroupService(DAOFactory daoFactory) { _daoFactory = daoFactory; } @Override public List<PoolGroupBean> getPoolGroups() throws PoolGroupServiceException { try { Set<String> poolGroupNames = getPoolsDAO().getPoolGroupNames(); _log.debug("returned poolGroups: {}", poolGroupNames); Map<String, List<String>> domainMap = getDomainsDAO().getDomainsMap(); Set<CellStatus> cellStates = getDomainsDAO().getCellStatuses(); List<PoolGroupBean> poolGroups = new ArrayList<>(); for (String currentPoolGroupName : poolGroupNames) { PoolGroupBean newPoolGroup = createPoolGroupBean( currentPoolGroupName, domainMap, cellStates); poolGroups.add(newPoolGroup); } _log.debug("returned PoolGroupBeans: " + poolGroups.size()); Collections.sort(poolGroups); return poolGroups; } catch (DAOException e) { throw new PoolGroupServiceException(e); } } private PoolsDAO getPoolsDAO() { return _daoFactory.getPoolsDAO(); } private DomainsDAO getDomainsDAO() { return _daoFactory.getDomainsDAO(); } public void setDAOFactory(DAOFactory daoFactory) { _daoFactory = daoFactory; } private PoolGroupBean createPoolGroupBean(String poolGroup, Map<String, List<String>> domainMap, Set<CellStatus> cellStates) throws DAOException { List<PoolSpaceBean> poolSpaces = new ArrayList<>(); List<PoolQueueBean> poolMovers = new ArrayList<>(); List<CellServicesBean> poolStatuses = new ArrayList<>(); for (Pool pool : getPoolsDAO().getPoolsOfPoolGroup(poolGroup)) { poolSpaces.add(createPoolSpaceBean(pool, domainMap)); poolMovers.add(createPoolQueueBean(pool, domainMap)); poolStatuses.add(createCellServiceBean(getMatchingCellStatus( pool, cellStates))); } PoolGroupBean newPoolGroup = new PoolGroupBean(poolGroup, poolSpaces, poolMovers); newPoolGroup.setCellStatuses(poolStatuses); return newPoolGroup; } private PoolSpaceBean createPoolSpaceBean(Pool pool, Map<String, List<String>> domainMap) { return BeanDataMapper.poolModelToView(pool, domainMap); } private PoolQueueBean createPoolQueueBean(Pool pool, Map<String, List<String>> domainMap) { return BeanDataMapper.poolQueueModelToView(pool, domainMap); } private CellServicesBean createCellServiceBean(CellStatus cellStatus) { return BeanDataMapper.cellModelToView(cellStatus); } private CellStatus getMatchingCellStatus(Pool pool, Set<CellStatus> cellStates) { CellStatus result = new CellStatus(new CellAddressCore(pool.getName())); for (CellStatus cell : cellStates) { if (cell.getCellName().equals(pool.getName())) { result = cell; break; } } return result; } }