package org.dcache.webadmin.controller.impl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import diskCacheV111.services.space.LinkGroup;
import diskCacheV111.services.space.Space;
import org.dcache.webadmin.controller.LinkGroupsService;
import org.dcache.webadmin.controller.exceptions.LinkGroupsServiceException;
import org.dcache.webadmin.controller.util.BeanDataMapper;
import org.dcache.webadmin.model.dataaccess.DAOFactory;
import org.dcache.webadmin.model.dataaccess.LinkGroupsDAO;
import org.dcache.webadmin.model.exceptions.DAOException;
import org.dcache.webadmin.view.pages.spacetokens.beans.LinkGroupBean;
import org.dcache.webadmin.view.pages.spacetokens.beans.SpaceReservationBean;
/**
* Offers services for getting information on LinkGroups and Space Tokens
* @author jans
*/
public class StandardLinkGroupsService implements LinkGroupsService {
private DAOFactory _daoFactory;
private static final Logger _log = LoggerFactory.getLogger(
StandardLinkGroupsService.class);
public StandardLinkGroupsService(DAOFactory daoFactory) {
_daoFactory = daoFactory;
}
@Override
public List<LinkGroupBean> getLinkGroups() throws LinkGroupsServiceException {
try {
Collection<LinkGroup> linkGroups = getLinkGroupsDAO().getLinkGroups();
_log.debug("returned link Groups: {} ", linkGroups.size());
Collection<Space> reservations = getLinkGroupsDAO().getSpaceReservations();
_log.debug("returned spacereservations: {} ", reservations.size());
List<SpaceReservationBean> reservationBeans = createReservations(reservations);
List<LinkGroupBean> linkGroupBeans = createLinkGroups(linkGroups);
mapReservationsToLinkGroups(reservationBeans, linkGroupBeans);
Collections.sort(linkGroupBeans);
_log.debug("returned linkGroupBeans: {}", linkGroupBeans.size());
return linkGroupBeans;
} catch (DAOException e) {
throw new LinkGroupsServiceException(e);
}
}
private List<LinkGroupBean> createLinkGroups(Collection<LinkGroup> linkGroups) {
List<LinkGroupBean> linkGroupBeans = new ArrayList<>();
for (LinkGroup linkGroup : linkGroups) {
LinkGroupBean newBean = BeanDataMapper.linkGroupModelToView(linkGroup);
linkGroupBeans.add(newBean);
}
return linkGroupBeans;
}
private LinkGroupsDAO getLinkGroupsDAO() {
return _daoFactory.getLinkGroupsDAO();
}
public void setDAOFactory(DAOFactory daoFactory) {
_daoFactory = daoFactory;
}
private List<SpaceReservationBean> createReservations(Collection<Space> reservations) {
List<SpaceReservationBean> reservationBeans = new ArrayList<>();
for (Space reservation : reservations) {
SpaceReservationBean newReservation =
BeanDataMapper.spaceReservationModelToView(reservation);
reservationBeans.add(newReservation);
}
return reservationBeans;
}
private void mapReservationsToLinkGroups(List<SpaceReservationBean> reservations,
List<LinkGroupBean> linkGroups) {
// only those reservations that have an linkgroupref set are mapped - others
// get lost -- normally this should not occour anyway, so skipping check,
// if all get mapped!
for (LinkGroupBean linkGroup : linkGroups) {
_log.debug("Linkgroup id: {}", linkGroup.getId());
for (SpaceReservationBean reservation : reservations) {
_log.debug("Reservation linkgroupref: {}", reservation.getLinkGroupRef());
if (reservation.belongsTo(linkGroup)) {
_log.debug("Reservation added to Linkgroup");
linkGroup.addSpaceReservation(reservation);
}
}
}
}
}