package edu.ualberta.med.biobank.common.wrappers;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import edu.ualberta.med.biobank.common.wrappers.base.EntityBaseWrapper;
import edu.ualberta.med.biobank.model.Entity;
import edu.ualberta.med.biobank.model.EntityColumn;
import edu.ualberta.med.biobank.model.EntityFilter;
import edu.ualberta.med.biobank.model.EntityProperty;
import gov.nih.nci.system.applicationservice.ApplicationException;
import gov.nih.nci.system.applicationservice.WritableApplicationService;
import gov.nih.nci.system.query.hibernate.HQLCriteria;
public class EntityWrapper extends EntityBaseWrapper {
public static final Comparator<Entity> ORDER_BY_NAME = new Comparator<Entity>() {
@Override
public int compare(Entity lhs, Entity rhs) {
return lhs.getName().compareToIgnoreCase(rhs.getName());
}
};
private Collection<EntityProperty> properties;
private Collection<EntityFilter> filters;
private Collection<EntityColumn> columns;
public EntityWrapper(WritableApplicationService appService, Entity entity) {
super(appService, entity);
}
public Collection<EntityProperty> getEntityPropertyCollection() {
if (properties == null) {
Collection<EntityProperty> properties = new ArrayList<EntityProperty>();
Collection<EntityProperty> epc = wrappedObject
.getEntityProperties();
if (epc != null) {
properties.addAll(epc);
}
this.properties = properties;
}
return properties;
}
public Collection<EntityFilter> getEntityFilterCollection() {
if (filters == null) {
List<EntityFilter> filters = new ArrayList<EntityFilter>();
for (EntityProperty entityProperty : getEntityPropertyCollection()) {
filters.addAll(getEntityFilterCollection(entityProperty));
}
this.filters = filters;
}
return filters;
}
public Collection<EntityColumn> getEntityColumnCollection() {
if (columns == null) {
List<EntityColumn> columns = new ArrayList<EntityColumn>();
for (EntityProperty entityProperty : getEntityPropertyCollection()) {
columns.addAll(getEntityColumnCollection(entityProperty));
}
this.columns = columns;
}
return columns;
}
private static Collection<EntityColumn> getEntityColumnCollection(
EntityProperty entityProperty) {
Collection<EntityColumn> columns = new ArrayList<EntityColumn>();
Collection<EntityColumn> ecc = entityProperty
.getEntityColumns();
if (ecc != null) {
columns.addAll(ecc);
}
return columns;
}
private static Collection<EntityFilter> getEntityFilterCollection(
EntityProperty entityProperty) {
Collection<EntityFilter> filters = new ArrayList<EntityFilter>();
Collection<EntityFilter> efc = entityProperty
.getEntityFilters();
if (efc != null) {
filters.addAll(efc);
}
return filters;
}
private static final String GET_ENTTITIES_QRY = "from " //$NON-NLS-1$
+ Entity.class.getName();
public static Collection<Entity> getEntities(
WritableApplicationService appService, Comparator<Entity> comparator) {
List<Entity> entities = new ArrayList<Entity>();
HQLCriteria criteria = new HQLCriteria(GET_ENTTITIES_QRY);
try {
List<Entity> results = appService.query(criteria);
entities.addAll(results);
if (comparator != null) {
Collections.sort(entities, comparator);
}
} catch (ApplicationException e) {
e.printStackTrace();
}
return entities;
}
}