package edu.ualberta.med.biobank.common.wrappers; import gov.nih.nci.system.applicationservice.ApplicationException; import gov.nih.nci.system.applicationservice.WritableApplicationService; import gov.nih.nci.system.query.hibernate.HQLCriteria; import java.text.MessageFormat; import java.util.Arrays; import java.util.Collections; import java.util.List; class HQLAccessor { private static final String GET_COLLECTION_HQL = "SELECT e FROM {0} e WHERE e.{1} = ?"; //$NON-NLS-1$ /** * Get a {@link List} of {@link ModelWrapper}-s that wrap a collection of * * @param <W1> * @param <M1> * @param <W2> * @param <M2> * @param wrapper * @param property * @param elementClass * @param elementWrapperClass * @param sort * @return * @throws ApplicationException */ public static <W1 extends ModelWrapper<? extends M1>, M1, W2 extends ModelWrapper<? extends M2>, M2> List<W2> getCachedCollection( W1 wrapper, Property<? extends M1, M2> property, Class<M2> elementClass, Class<W2> elementWrapperClass, boolean sort) throws ApplicationException { @SuppressWarnings("unchecked") List<W2> list = (List<W2>) wrapper.cache.get(property); if (list == null) { WritableApplicationService service = wrapper.appService; String hqlString = MessageFormat.format(GET_COLLECTION_HQL, elementClass.getName(), property.getName()); HQLCriteria hqlCriteria = new HQLCriteria(hqlString, Arrays.asList((Object) wrapper.wrappedObject)); List<M2> models = service.query(hqlCriteria); list = ModelWrapper.wrapModelCollection(service, models, elementWrapperClass); } if (sort) { Collections.sort(list); } return list; } }