package de.fub.agg2graph.gpseval.data.filter; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; /** * The WaypointFilterFactory can be used to create WaypointFilter-instances * based on the WaypointFilter-name. */ public class WaypointFilterFactory { private static WaypointFilterFactory instance = new WaypointFilterFactory(); private Map<String, Class<? extends WaypointFilter>> mWaypointFilterClasses = new HashMap<>(); private WaypointFilterFactory() { registerBuiltInWaypointFilters(); } /** * Register the built-in WaypointFilter-classes. */ private void registerBuiltInWaypointFilters() { registerWaypointFilterClass(LimitWaypointFilter.class); registerWaypointFilterClass(MinDistanceWaypointFilter.class); registerWaypointFilterClass(MinTimeDiffWaypointFilter.class); } /** * Returns the WaypointFilterFactory-instance. * * @return */ public static WaypointFilterFactory getFactory() { return instance; } /** * Register a WaypointFilter-class with the given name. * * @param name * @param waypointFilterClass */ public void registerWaypointFilterClass(String name, Class<? extends WaypointFilter> waypointFilterClass) { mWaypointFilterClasses.put(name, waypointFilterClass); } /** * Register a WaypointFilter-class. The WaypointFilter's identifier will be * used as name. * * @param waypointFilterClass */ public void registerWaypointFilterClass(Class<? extends WaypointFilter> waypointFilterClass) { mWaypointFilterClasses.put(WaypointFilter.getWaypointFilterIdentifier(waypointFilterClass), waypointFilterClass); } /** * Get the WaypointFilter-class for the given name. * * @param name * @return */ public Class<? extends WaypointFilter> getWaypointFilterClass(String name) { return mWaypointFilterClasses.get(name); } /** * Return a new WaypointFilter-instance for the given WaypointFilter-name. * * @param name * @return */ public WaypointFilter newWaypointFilter(String name) { WaypointFilter waypointFilter = null; Class<? extends WaypointFilter> waypointFilterClass = mWaypointFilterClasses.get(name); if (waypointFilterClass != null) { try { waypointFilter = waypointFilterClass.newInstance(); } catch (InstantiationException | IllegalAccessException ex) { Logger.getLogger(WaypointFilterFactory.class.getName()).log(Level.SEVERE, null, ex); } } return waypointFilter; } }