sascha@403: package de.intevation.artifactdatabase.state; sascha@403: sascha@403: import de.intevation.artifacts.Artifact; sascha@403: sascha@405: import java.util.ArrayList; sascha@403: import java.util.HashMap; sascha@405: import java.util.List; sascha@403: import java.util.Map; sascha@403: felix@436: felix@436: /** Magical system. */ sascha@403: public interface FacetActivity sascha@403: { felix@436: /** Static 'activity' that lets all facets be active. */ sascha@403: public static final FacetActivity ACTIVE = new FacetActivity() { sascha@403: @Override sascha@405: public Boolean isInitialActive( sascha@403: Artifact artifact, sascha@403: Facet facet, sascha@403: String output sascha@403: ) { sascha@405: return Boolean.TRUE; sascha@403: } sascha@403: }; sascha@403: felix@436: /** Static 'activity' that lets all facets be inactive. */ sascha@403: public static final FacetActivity INACTIVE = new FacetActivity() { sascha@403: @Override sascha@405: public Boolean isInitialActive( sascha@403: Artifact artifact, sascha@403: Facet facet, sascha@403: String output sascha@403: ) { sascha@405: return Boolean.FALSE; sascha@403: } sascha@403: }; sascha@403: sascha@405: Boolean isInitialActive(Artifact artifact, Facet facet, String output); sascha@403: felix@436: /** Singleton registry, that maps artifact names to the activities, which felix@436: * decide whether or not a facet should be (initially) active. */ sascha@403: public static final class Registry { sascha@403: felix@436: /** Singleton instance. */ sascha@403: private static final Registry INSTANCE = new Registry(); sascha@403: sascha@405: private Map> activities; sascha@403: felix@436: /** Private singleton constructor for the Facet-Activity-Registry. */ sascha@403: private Registry() { sascha@405: activities = new HashMap>(); sascha@403: } sascha@403: felix@436: /** Access Singleton instance. */ sascha@404: public static Registry getInstance() { sascha@403: return INSTANCE; sascha@403: } sascha@403: felix@436: /** Queries whether a given facet should be active or not. */ sascha@405: public synchronized boolean isInitialActive( sascha@405: String key, sascha@405: Artifact artifact, sascha@405: Facet facet, sascha@405: String output sascha@405: ) { sascha@405: List activityList = activities.get(key); sascha@405: if (activityList == null) { sascha@405: return true; sascha@405: } sascha@405: for (FacetActivity activity: activityList) { sascha@405: Boolean isActive = sascha@405: activity.isInitialActive(artifact, facet, output); sascha@405: if (isActive != null) { sascha@405: return isActive; sascha@405: } sascha@405: } sascha@405: return true; sascha@403: } sascha@403: sascha@403: public synchronized void register(String key, FacetActivity activity) { sascha@405: List activityList = activities.get(key); sascha@405: if (activityList == null) { sascha@405: activityList = new ArrayList(3); sascha@405: activities.put(key, activityList); sascha@405: } sascha@405: activityList.add(activity); sascha@403: } sascha@403: } sascha@403: } sascha@403: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :