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

http://dive4elements.wald.intevation.org