package org.dcache.webadmin.model.dataaccess.impl;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import diskCacheV111.poolManager.PoolPreferenceLevel;
import diskCacheV111.poolManager.PoolSelectionUnit.DirectionType;
import diskCacheV111.poolManager.PoolSelectionUnit.SelectionLink;
import diskCacheV111.poolManager.PoolSelectionUnit.SelectionPoolGroup;
import diskCacheV111.poolManager.PoolSelectionUnit.SelectionUnit;
import diskCacheV111.poolManager.PoolSelectionUnit.SelectionUnitGroup;
import diskCacheV111.pools.PoolV2Mode;
import org.dcache.poolmanager.Partition;
import org.dcache.webadmin.model.businessobjects.Pool;
import org.dcache.webadmin.model.dataaccess.PoolsDAO;
import org.dcache.webadmin.model.exceptions.DAOException;
/**
* This class is the PoolsDAO for most unit tests, so that there is no need to
* have a running dcache to run the Unittests. It is possible to add customized
* pools.
* @author jans
*/
public class PoolsDAOImplHelper implements PoolsDAO {
private Set<String> _poolGroups = new HashSet<>();
private boolean _alwaysThrowsDaoException = false;
private Set<Pool> _pools = new HashSet();
public PoolsDAOImplHelper() {
_pools = XMLDataGathererHelper.getExpectedPools();
_poolGroups.add(XMLDataGathererHelper.POOL1_POOLGROUP1);
_poolGroups.add("testgroup1");
}
@Override
public Set<String> getPoolGroupNames() throws DAOException {
if (_alwaysThrowsDaoException) {
throw new DAOException("you are a bad boy!");
}
return _poolGroups;
}
public void setAlwaysThrowsDaoException(boolean alwaysThrowsDaoException) {
_alwaysThrowsDaoException = alwaysThrowsDaoException;
}
@Override
public Set<Pool> getPools() {
return _pools;
}
public void resetPools() {
_pools.clear();
}
public void addPool(Pool pool) {
_pools.add(pool);
}
@Override
public void changePoolMode(Set<String> poolIds, PoolV2Mode poolMode, String userName) throws DAOException {
for (String id : poolIds) {
if (getAvailableIds().contains(id)) {
for (Pool pool : _pools) {
if (pool.getName().equals(id)) {
pool.getSelectionPool().setPoolMode(poolMode);
break;
}
}
} else {
throw new IllegalArgumentException(id + " not a preconfigured Pool");
}
}
}
private Set<String> getAvailableIds() {
Set<String> ids = new HashSet<>();
for (Pool pool : _pools) {
ids.add(pool.getName());
}
return ids;
}
@Override
public Set<Pool> getPoolsOfPoolGroup(String poolGroup) throws DAOException {
// always return all for now
return _pools;
}
@Override
public Set<SelectionLink> getLinksPointingToPoolGroup(String poolGroup) throws DAOException {
return Collections.emptySet();
}
@Override
public Set<SelectionLink> getLinks() throws DAOException {
return Collections.emptySet();
}
@Override
public Set<SelectionPoolGroup> getPoolGroupsOfPool(String poolName) throws DAOException {
return Collections.emptySet();
}
@Override
public Set<SelectionUnitGroup> getUnitGroups() throws DAOException {
return Collections.emptySet();
}
@Override
public Set<SelectionUnit> getUnits() throws DAOException {
return Collections.emptySet();
}
@Override
public Set<SelectionPoolGroup> getPoolGroups() throws DAOException {
return Collections.emptySet();
}
@Override
public PoolPreferenceLevel[] match(DirectionType type, String netUnitName,
String protocolUnitName, String hsm,
String storageClass, String linkGroupName) throws DAOException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Map<String, Partition> getPartitions() throws DAOException {
return Collections.emptyMap();
}
}