comparison artifact-database/src/main/java/de/intevation/artifactdatabase/state/FacetActivity.java @ 405:e1738650bfca

FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active. artifacts/trunk@5154 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 29 Jul 2012 11:38:40 +0000
parents 4c78c5d2b367
children 15179c77aa1d
comparison
equal deleted inserted replaced
404:4c78c5d2b367 405:e1738650bfca
1 package de.intevation.artifactdatabase.state; 1 package de.intevation.artifactdatabase.state;
2 2
3 import de.intevation.artifacts.Artifact; 3 import de.intevation.artifacts.Artifact;
4 4
5 import java.util.ArrayList;
5 import java.util.HashMap; 6 import java.util.HashMap;
7 import java.util.List;
6 import java.util.Map; 8 import java.util.Map;
7 9
8 public interface FacetActivity 10 public interface FacetActivity
9 { 11 {
10 public static final FacetActivity ACTIVE = new FacetActivity() { 12 public static final FacetActivity ACTIVE = new FacetActivity() {
11 @Override 13 @Override
12 public boolean isInitialActive( 14 public Boolean isInitialActive(
13 Artifact artifact, 15 Artifact artifact,
14 Facet facet, 16 Facet facet,
15 String output 17 String output
16 ) { 18 ) {
17 return true; 19 return Boolean.TRUE;
18 } 20 }
19 }; 21 };
20 22
21 public static final FacetActivity INACTIVE = new FacetActivity() { 23 public static final FacetActivity INACTIVE = new FacetActivity() {
22 @Override 24 @Override
23 public boolean isInitialActive( 25 public Boolean isInitialActive(
24 Artifact artifact, 26 Artifact artifact,
25 Facet facet, 27 Facet facet,
26 String output 28 String output
27 ) { 29 ) {
28 return false; 30 return Boolean.FALSE;
29 } 31 }
30 }; 32 };
31 33
32 boolean isInitialActive(Artifact artifact, Facet facet, String output); 34 Boolean isInitialActive(Artifact artifact, Facet facet, String output);
33 35
34 public static final class Registry { 36 public static final class Registry {
35 37
36 private static final Registry INSTANCE = new Registry(); 38 private static final Registry INSTANCE = new Registry();
37 39
38 private Map<String, FacetActivity> activities; 40 private Map<String, List<FacetActivity>> activities;
39 41
40 private Registry() { 42 private Registry() {
41 activities = new HashMap<String, FacetActivity>(); 43 activities = new HashMap<String, List<FacetActivity>>();
42 } 44 }
43 45
44 public static Registry getInstance() { 46 public static Registry getInstance() {
45 return INSTANCE; 47 return INSTANCE;
46 } 48 }
47 49
48 public synchronized FacetActivity getActivity(String key) { 50 public synchronized boolean isInitialActive(
49 FacetActivity activity = activities.get(key); 51 String key,
50 return activity != null ? activity : ACTIVE; 52 Artifact artifact,
53 Facet facet,
54 String output
55 ) {
56 List<FacetActivity> activityList = activities.get(key);
57 if (activityList == null) {
58 return true;
59 }
60 for (FacetActivity activity: activityList) {
61 Boolean isActive =
62 activity.isInitialActive(artifact, facet, output);
63 if (isActive != null) {
64 return isActive;
65 }
66 }
67 return true;
51 } 68 }
52 69
53 public synchronized void register(String key, FacetActivity activity) { 70 public synchronized void register(String key, FacetActivity activity) {
54 activities.put(key, activity); 71 List<FacetActivity> activityList = activities.get(key);
72 if (activityList == null) {
73 activityList = new ArrayList<FacetActivity>(3);
74 activities.put(key, activityList);
75 }
76 activityList.add(activity);
55 } 77 }
56 } 78 }
57 } 79 }
58 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : 80 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org