comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/templating/NoneUserSpecific.java @ 998:b81626b10cb7

Datacage: Moved templating in a better suited package. flys-artifacts/trunk@2434 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 01 Aug 2011 08:31:09 +0000
parents
children
comparison
equal deleted inserted replaced
997:4c82609824c8 998:b81626b10cb7
1 package de.intevation.flys.artifacts.datacage.templating;
2
3 import java.util.Map;
4 import java.util.HashMap;
5
6 import java.io.InputStream;
7 import java.io.IOException;
8 import java.io.File;
9
10 import java.io.FileInputStream;
11
12 import java.sql.Connection;
13 import java.sql.SQLException;
14
15 import org.apache.log4j.Logger;
16
17 import org.w3c.dom.Document;
18 import org.w3c.dom.Node;
19
20 import org.hibernate.Session;
21
22 import org.hibernate.jdbc.Work;
23
24 import de.intevation.artifacts.common.utils.Config;
25 import de.intevation.artifacts.common.utils.XMLUtils;
26
27 import de.intevation.flys.artifacts.FLYSArtifact;
28
29 import de.intevation.flys.backend.SessionHolder;
30
31 import de.intevation.artifactdatabase.data.StateData;
32
33
34 public class NoneUserSpecific
35 {
36 private static Logger log = Logger.getLogger(NoneUserSpecific.class);
37
38 public static final String XPATH_META_DATA_TEMPLATE =
39 "/artifact-database/metadata/@template";
40
41 private static NoneUserSpecific INSTANCE;
42
43 protected Builder builder;
44
45 public NoneUserSpecific() {
46 }
47
48 public NoneUserSpecific(Builder builder) {
49 this.builder = builder;
50 }
51
52 public Builder getBuilder() {
53 return builder;
54 }
55
56 protected static void artifactToParameters(
57 FLYSArtifact artifact,
58 Map<String, Object> parameters
59 ) {
60 parameters.put("current-state-id", artifact.getCurrentStateId());
61
62 for (StateData sd: artifact.getAllData()) {
63 Object value = sd.getValue();
64 if (value == null) {
65 continue;
66 }
67 String key = sd.getName().replace('.', '-');
68 parameters.put(key, value);
69 }
70 }
71
72 public void recommend(
73 FLYSArtifact artifact,
74 String [] outs,
75 Map<String, Object> extraParameters,
76 Node result
77 ) {
78 Map<String, Object> parameters = new HashMap<String, Object>();
79
80 if (extraParameters != null) {
81 parameters.putAll(extraParameters);
82 }
83
84 if (artifact != null) {
85 artifactToParameters(artifact, parameters);
86 }
87
88 parameters.put("artifact-outs", outs);
89
90 parameters.put("parameters", parameters);
91
92 recommend(parameters, result);
93 }
94
95 public void recommend(
96 final Map<String, Object> parameters,
97 final Node result
98 ) {
99 if (builder == null) {
100 log.error("builder not configured properly.");
101 return;
102 }
103
104 Session session = SessionHolder.HOLDER.get();
105
106 session.doWork(new Work() {
107 @Override
108 public void execute(Connection connection)
109 throws SQLException
110 {
111 builder.build(connection, result, parameters);
112 }
113 });
114 }
115
116 public static synchronized NoneUserSpecific getInstance() {
117 if (INSTANCE == null) {
118 INSTANCE = createNoneUserSpecific();
119 }
120 return INSTANCE;
121 }
122
123 protected static Builder createBuilder(File file) {
124 log.debug("NoneUserSpecific.createBuilder");
125
126 if (!file.isFile() || !file.canRead()) {
127 log.error("Cannot open template file '" + file + "'");
128 return null;
129 }
130
131 InputStream in = null;
132
133 try {
134 in = new FileInputStream(file);
135
136 Document template = XMLUtils.parseDocument(in);
137
138 if (template == null) {
139 log.error("cannot parse meta data template");
140 }
141 else {
142 return new Builder(template);
143 }
144 }
145 catch (IOException ioe) {
146 log.error(ioe);
147 }
148 finally {
149 if (in != null) {
150 try {
151 in.close();
152 }
153 catch (IOException ioe) {
154 log.error(ioe);
155 }
156 }
157 }
158 return null;
159 }
160
161 protected static NoneUserSpecific createNoneUserSpecific() {
162 log.debug("NoneUserSpecific.createNoneUserSpecific");
163
164 String path = Config.getStringXPath(XPATH_META_DATA_TEMPLATE);
165 if (path == null) {
166 log.error("no path to template file given");
167 return null;
168 }
169
170 path = Config.replaceConfigDir(path);
171
172 return new NoneUserSpecific(createBuilder(new File(path)));
173 }
174 }
175 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org