Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/Recommendations.java @ 1030:c586b6220f35
Datacage: Added a development mode for recommendations
flys-artifacts/trunk@2490 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 11 Aug 2011 15:08:24 +0000 |
parents | 3f3988bb6284 |
children | 0a5eff5511b1 |
comparison
equal
deleted
inserted
replaced
1029:3f3988bb6284 | 1030:c586b6220f35 |
---|---|
38 | 38 |
39 public class Recommendations | 39 public class Recommendations |
40 { | 40 { |
41 private static Logger log = Logger.getLogger(Recommendations.class); | 41 private static Logger log = Logger.getLogger(Recommendations.class); |
42 | 42 |
43 private static final boolean DEVELOPMENT_MODE = | |
44 Boolean.getBoolean("flys.datacage.recommendations.development"); | |
45 | |
43 public static final String XPATH_SYSTEM_TEMPLATE = | 46 public static final String XPATH_SYSTEM_TEMPLATE = |
44 "/artifact-database/metadata/system/@template"; | 47 "/artifact-database/metadata/system/@template"; |
45 | 48 |
46 public static final String XPATH_USER_TEMPLATE = | 49 public static final String XPATH_USER_TEMPLATE = |
47 "/artifact-database/metadata/user/@template"; | 50 "/artifact-database/metadata/user/@template"; |
48 | 51 |
49 private static Recommendations INSTANCE; | 52 private static Recommendations INSTANCE; |
50 | 53 |
51 protected Builder systemBuilder; | 54 public static class BuilderProvider |
52 protected Builder userBuilder; | 55 { |
56 protected Builder builder; | |
57 | |
58 public BuilderProvider() { | |
59 } | |
60 | |
61 public BuilderProvider(Builder builder) { | |
62 this.builder = builder; | |
63 } | |
64 | |
65 public Builder getBuilder() { | |
66 return builder; | |
67 } | |
68 } // class BuilderProvider | |
69 | |
70 public static class FileBuilderProvider | |
71 extends BuilderProvider | |
72 { | |
73 protected File file; | |
74 protected long lastModified; | |
75 | |
76 public FileBuilderProvider() { | |
77 } | |
78 | |
79 public FileBuilderProvider(File file) { | |
80 this.file = file; | |
81 lastModified = Long.MIN_VALUE; | |
82 } | |
83 | |
84 @Override | |
85 public synchronized Builder getBuilder() { | |
86 long modified = file.lastModified(); | |
87 if (modified > lastModified) { | |
88 lastModified = modified; | |
89 try { | |
90 Document template = loadTemplate(file); | |
91 builder = new Builder(template); | |
92 } | |
93 catch (IOException ioe) { | |
94 log.error(ioe); | |
95 } | |
96 } | |
97 return builder; | |
98 } | |
99 | |
100 public BuilderProvider toStaticProvider() { | |
101 return new BuilderProvider(builder); | |
102 } | |
103 } // class BuilderProvider | |
104 | |
105 protected BuilderProvider systemBuilderProvider; | |
106 protected BuilderProvider userBuilderProvider; | |
53 | 107 |
54 public Recommendations() { | 108 public Recommendations() { |
55 } | 109 } |
56 | 110 |
57 public Recommendations(Builder systemBuilder, Builder userBuilder) { | 111 public Recommendations( |
58 this.systemBuilder = systemBuilder; | 112 BuilderProvider systemBuilderProvider, |
59 this.userBuilder = userBuilder; | 113 BuilderProvider userBuilderProvider) { |
114 this.systemBuilderProvider = systemBuilderProvider; | |
115 this.userBuilderProvider = userBuilderProvider; | |
60 } | 116 } |
61 | 117 |
62 public Builder getUserBuilder() { | 118 public Builder getUserBuilder() { |
63 return userBuilder; | 119 return userBuilderProvider.getBuilder(); |
64 } | 120 } |
65 | 121 |
66 public Builder getSystemBuilder() { | 122 public Builder getSystemBuilder() { |
67 return systemBuilder; | 123 return systemBuilderProvider.getBuilder(); |
68 } | 124 } |
69 | 125 |
70 protected static void artifactToParameters( | 126 protected static void artifactToParameters( |
71 FLYSArtifact artifact, | 127 FLYSArtifact artifact, |
72 Map<String, Object> parameters | 128 Map<String, Object> parameters |
124 final Map<String, Object> parameters, | 180 final Map<String, Object> parameters, |
125 final String userId, | 181 final String userId, |
126 final Node result, | 182 final Node result, |
127 Session session | 183 Session session |
128 ) { | 184 ) { |
129 if (systemBuilder == null || userBuilder == null) { | |
130 log.error("builder not configured properly."); | |
131 return; | |
132 } | |
133 | |
134 session.doWork(new Work() { | 185 session.doWork(new Work() { |
135 @Override | 186 @Override |
136 public void execute(Connection systemConnection) | 187 public void execute(Connection systemConnection) |
137 throws SQLException | 188 throws SQLException |
138 { | 189 { |
152 Builder.CONNECTION_USER, userConnection, false)); | 203 Builder.CONNECTION_USER, userConnection, false)); |
153 | 204 |
154 connections.add(new Builder.NamedConnection( | 205 connections.add(new Builder.NamedConnection( |
155 Builder.CONNECTION_SYSTEM, systemConnection, true)); | 206 Builder.CONNECTION_SYSTEM, systemConnection, true)); |
156 | 207 |
157 userBuilder.build(connections, result, parameters); | 208 getUserBuilder().build(connections, result, parameters); |
158 } | 209 } |
159 finally { | 210 finally { |
160 userConnection.close(); | 211 userConnection.close(); |
161 } | 212 } |
162 } | 213 } |
163 else { // Use system template only. | 214 else { // Use system template only. |
164 connections.add(new Builder.NamedConnection( | 215 connections.add(new Builder.NamedConnection( |
165 Builder.CONNECTION_SYSTEM, systemConnection, true)); | 216 Builder.CONNECTION_SYSTEM, systemConnection, true)); |
166 | 217 |
167 systemBuilder.build(connections, result, parameters); | 218 getSystemBuilder().build(connections, result, parameters); |
168 } | 219 } |
169 } | 220 } |
170 }); | 221 }); |
171 } | 222 } |
172 | 223 |
216 if (!userFile.isFile() || !userFile.canRead()) { | 267 if (!userFile.isFile() || !userFile.canRead()) { |
217 log.error("Cannot open template file '" + userFile + "'"); | 268 log.error("Cannot open template file '" + userFile + "'"); |
218 return null; | 269 return null; |
219 } | 270 } |
220 | 271 |
221 try { | 272 FileBuilderProvider ufbp = new FileBuilderProvider(userFile); |
222 Document systemTemplate = loadTemplate(systemFile); | 273 FileBuilderProvider sfbp = new FileBuilderProvider(systemFile); |
223 Document userTemplate = loadTemplate(userFile); | 274 |
224 return new Recommendations( | 275 if (ufbp.getBuilder() == null || sfbp.getBuilder() == null) { |
225 new Builder(systemTemplate), | 276 log.error("failed loading builder"); |
226 new Builder(userTemplate)); | |
227 } | |
228 catch (IOException ioe) { | |
229 log.error(ioe); | |
230 return null; | 277 return null; |
231 } | 278 } |
279 | |
280 BuilderProvider ubp; | |
281 BuilderProvider sbp; | |
282 | |
283 if (DEVELOPMENT_MODE) { | |
284 ubp = ufbp; | |
285 sbp = sfbp; | |
286 } | |
287 else { | |
288 ubp = ufbp.toStaticProvider(); | |
289 sbp = sfbp.toStaticProvider(); | |
290 } | |
291 | |
292 return new Recommendations(sbp, ubp); | |
232 } | 293 } |
233 | 294 |
234 protected static Recommendations createRecommendations() { | 295 protected static Recommendations createRecommendations() { |
235 log.debug("Recommendations.createRecommendations"); | 296 log.debug("Recommendations.createRecommendations"); |
236 | 297 |