package module.mission.presentationTier.provider; import java.util.Collection; import java.util.Comparator; import java.util.Set; import java.util.TreeSet; import module.mission.domain.MissionItem; import pt.ist.fenixWebFramework.renderers.DataProvider; import pt.ist.fenixWebFramework.renderers.components.converters.Converter; import pt.ist.fenixframework.FenixFramework; import pt.ist.fenixframework.dml.DomainClass; import pt.ist.fenixframework.dml.DomainModel; public class TopLevelMissionItemTypeProvider implements DataProvider { public static Comparator<Class> CLASS_COMPARATOR_BY_NAME = new Comparator<Class>() { @Override public int compare(final Class o1, final Class o2) { return o1.getName().compareTo(o2.getName()); } }; @Override public Converter getConverter() { return null; } @Override public Object provide(final Object source, final Object currentValue) { return getAvailableTopLevelMissionItemTypes(); } public final Collection<Class> getAvailableTopLevelMissionItemTypes() { final Set<Class> missionItemTypes = new TreeSet<Class>(CLASS_COMPARATOR_BY_NAME); final DomainModel domainModel = FenixFramework.getDomainModel(); for (final DomainClass domainClass : domainModel.getDomainClasses()) { if (isMissionItemDirectSubclass(domainClass)) { try { final Class clazz = Class.forName(domainClass.getFullName()); missionItemTypes.add(clazz); } catch (final ClassNotFoundException e) { e.printStackTrace(); throw new Error(e); } } } return missionItemTypes; } private boolean isMissionItemDirectSubclass(final DomainClass domainClass) { return domainClass != null && isMissionItem((DomainClass) domainClass.getSuperclass()); } private boolean isMissionItem(final DomainClass domainClass) { return domainClass != null && domainClass.getFullName().equals(MissionItem.class.getName()); } }