package edu.ualberta.med.biobank.common.wrappers;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import edu.ualberta.med.biobank.common.wrappers.base.PrincipalBaseWrapper;
import edu.ualberta.med.biobank.model.Domain;
import edu.ualberta.med.biobank.model.Principal;
import gov.nih.nci.system.applicationservice.WritableApplicationService;
public abstract class PrincipalWrapper<T extends Principal> extends
PrincipalBaseWrapper<T> {
private static final String WORKING_CENTERS_KEY = "workingCenters"; //$NON-NLS-1$
public PrincipalWrapper(WritableApplicationService appService,
T wrappedObject) {
super(appService, wrappedObject);
}
public PrincipalWrapper(WritableApplicationService appService) {
super(appService);
}
protected Set<CenterWrapper<?>> getAllCentersInvolved() throws Exception {
Set<CenterWrapper<?>> centers = new HashSet<CenterWrapper<?>>();
for (MembershipWrapper ms : getMembershipCollection(false)) {
Domain domain = ms.getWrappedObject().getDomain();
if (domain.isAllCenters())
centers.addAll(CenterWrapper.getCenters(appService));
else {
List<CenterWrapper<?>> wrappedCenters =
ModelWrapper.wrapModelCollection(
appService, domain.getCenters(), null);
centers.addAll(wrappedCenters);
}
}
return centers;
}
@SuppressWarnings("unchecked")
public List<CenterWrapper<?>> getWorkingCenters() throws Exception {
List<CenterWrapper<?>> workingCenters = (List<CenterWrapper<?>>) cache
.get(WORKING_CENTERS_KEY);
if (workingCenters == null) {
workingCenters = new ArrayList<CenterWrapper<?>>();
Set<CenterWrapper<?>> setOfWorkingCenter =
getAllCentersInvolved();
workingCenters.addAll(setOfWorkingCenter);
cache.put(WORKING_CENTERS_KEY, workingCenters);
}
return workingCenters;
}
}