annotate artifact-database/src/main/java/org/dive4elements/artifactdatabase/state/FacetActivity.java @ 570:584591f8203c 3.2.x

Upgrade to Log4j 2
author Tom Gottfried <tom@intevation.de>
date Mon, 28 Feb 2022 17:41:14 +0100
parents 415df0fc4fa1
children
rev   line source
475
415df0fc4fa1 Fixed maven group ids
Sascha L. Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
1 package org.dive4elements.artifactdatabase.state;
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
475
415df0fc4fa1 Fixed maven group ids
Sascha L. Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
3 import org.dive4elements.artifacts.Artifact;
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4
405
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
5 import java.util.ArrayList;
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 import java.util.HashMap;
405
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
7 import java.util.List;
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 import java.util.Map;
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9
570
584591f8203c Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
10 import org.apache.logging.log4j.Logger;
584591f8203c Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
11 import org.apache.logging.log4j.LogManager;
436
15179c77aa1d Documentation, so that readers know a tiny bit more what is going on.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 405
diff changeset
12
438
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
13
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
14 /**
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
15 * System used in practice used by AttributeWriter in flys-artifacts to decide
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
16 * whether a facet is initially active.
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
17 * Provides a singleton Registry into which FacetActivities can be registered
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
18 * under a key (in practice the artifacts name. This Registry is queried for
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
19 * new Facets in order to find whether they are active or inactive.
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
20 */
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 public interface FacetActivity
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 {
436
15179c77aa1d Documentation, so that readers know a tiny bit more what is going on.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 405
diff changeset
23 /** Static 'activity' that lets all facets be active. */
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 public static final FacetActivity ACTIVE = new FacetActivity() {
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 @Override
405
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
26 public Boolean isInitialActive(
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 Artifact artifact,
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 Facet facet,
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 String output
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 ) {
405
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
31 return Boolean.TRUE;
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 }
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 };
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34
436
15179c77aa1d Documentation, so that readers know a tiny bit more what is going on.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 405
diff changeset
35 /** Static 'activity' that lets all facets be inactive. */
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 public static final FacetActivity INACTIVE = new FacetActivity() {
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 @Override
405
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
38 public Boolean isInitialActive(
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 Artifact artifact,
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 Facet facet,
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 String output
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 ) {
405
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
43 return Boolean.FALSE;
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 }
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 };
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46
405
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
47 Boolean isInitialActive(Artifact artifact, Facet facet, String output);
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48
436
15179c77aa1d Documentation, so that readers know a tiny bit more what is going on.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 405
diff changeset
49 /** Singleton registry, that maps artifact names to the activities, which
15179c77aa1d Documentation, so that readers know a tiny bit more what is going on.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 405
diff changeset
50 * decide whether or not a facet should be (initially) active. */
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51 public static final class Registry {
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52
438
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
53 /** The logger for this class. */
570
584591f8203c Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
54 private static Logger logger = LogManager.getLogger(Registry.class);
438
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
55
436
15179c77aa1d Documentation, so that readers know a tiny bit more what is going on.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 405
diff changeset
56 /** Singleton instance. */
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 private static final Registry INSTANCE = new Registry();
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58
438
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
59 /** Map of keys (artifact names) to the activities. */
405
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
60 private Map<String, List<FacetActivity>> activities;
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61
436
15179c77aa1d Documentation, so that readers know a tiny bit more what is going on.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 405
diff changeset
62 /** Private singleton constructor for the Facet-Activity-Registry. */
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 private Registry() {
405
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
64 activities = new HashMap<String, List<FacetActivity>>();
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 }
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66
436
15179c77aa1d Documentation, so that readers know a tiny bit more what is going on.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 405
diff changeset
67 /** Access Singleton instance. */
404
4c78c5d2b367 FacetActivity: Made Registry.getInstance() access static.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 403
diff changeset
68 public static Registry getInstance() {
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 return INSTANCE;
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70 }
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71
436
15179c77aa1d Documentation, so that readers know a tiny bit more what is going on.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 405
diff changeset
72 /** Queries whether a given facet should be active or not. */
405
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
73 public synchronized boolean isInitialActive(
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
74 String key,
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
75 Artifact artifact,
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
76 Facet facet,
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
77 String output
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
78 ) {
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
79 List<FacetActivity> activityList = activities.get(key);
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
80 if (activityList == null) {
443
f503374f516c Make it compile again by syntax fix.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 438
diff changeset
81 logger.debug("FacetActivity.Registry: No activity " +
438
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
82 "registered for " + key);
405
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
83 return true;
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
84 }
438
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
85 if (activityList.size() != 1) {
443
f503374f516c Make it compile again by syntax fix.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 438
diff changeset
86 logger.warn("FacetActivity.Registry: More than one " +
438
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
87 "FacetActivity registered for " + key);
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
88 }
405
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
89 for (FacetActivity activity: activityList) {
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
90 Boolean isActive =
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
91 activity.isInitialActive(artifact, facet, output);
438
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
92 // Nice. Only, in practice they never return NULL.
405
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
93 if (isActive != null) {
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
94 return isActive;
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
95 }
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
96 }
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
97 return true;
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
98 }
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
99
438
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
100
f3bf22423c95 More documentation and debugging output for FacetActivity System.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 436
diff changeset
101 /** Add a FacetActivity under given key (usually artifacts name). */
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
102 public synchronized void register(String key, FacetActivity activity) {
405
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
103 List<FacetActivity> activityList = activities.get(key);
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
104 if (activityList == null) {
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
105 activityList = new ArrayList<FacetActivity>(3);
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
106 activities.put(key, activityList);
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
107 }
e1738650bfca FacetActivity: use Chain-of-responsibility pattern to figure out if facet should be active.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 404
diff changeset
108 activityList.add(activity);
403
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
109 }
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
110 }
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
111 }
bd76529d612b FacetActivity: Added interface and registry to decide if a facet should initially active or not.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
112 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org