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 TrackFilterFactory can be used to create TrackFilter-instances based on * the TrackFilter-name. */ public class TrackFilterFactory { private static TrackFilterFactory instance = new TrackFilterFactory(); private Map<String, Class<? extends TrackFilter>> mTrackFilterClasses = new HashMap<>(); private TrackFilterFactory() { registerBuiltInTrackFilters(); } /** * Register the built-in TrackFilter-classes. */ private void registerBuiltInTrackFilters() { registerTrackFilterClass(LimitPerClassTrackFilter.class); } /** * Returns the TrackFilterFactory-instance. * * @return */ public static TrackFilterFactory getFactory() { return instance; } /** * Register a TrackFilter-class with the given name. * * @param name * @param trackFilterClass */ public void registerTrackFilterClass(String name, Class<? extends TrackFilter> trackFilterClass) { mTrackFilterClasses.put(name, trackFilterClass); } /** * Register a TrackFilter-class. The TrackFilter's identifier will be used * as name. * * @param trackFilterClass */ public void registerTrackFilterClass(Class<? extends TrackFilter> trackFilterClass) { mTrackFilterClasses.put(TrackFilter.getTrackFilterIdentifier(trackFilterClass), trackFilterClass); } /** * Get the TrackFilter-class for the given name. * * @param name * @return */ public Class<? extends TrackFilter> getTrackFilterClass(String name) { return mTrackFilterClasses.get(name); } /** * Return a new TrackFilter-instance for the given TrackFilter-name. * * @param name * @return */ public TrackFilter newTrackFilter(String name) { TrackFilter trackFilter = null; Class<? extends TrackFilter> trackFilterClass = mTrackFilterClasses.get(name); if (trackFilterClass != null) { try { trackFilter = trackFilterClass.newInstance(); } catch (InstantiationException | IllegalAccessException ex) { Logger.getLogger(TrackFilterFactory.class.getName()).log(Level.SEVERE, null, ex); } } return trackFilter; } }