1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.waarp.gateway.kernel;
21
22 import com.fasterxml.jackson.core.JsonGenerationException;
23 import com.fasterxml.jackson.core.JsonParseException;
24 import com.fasterxml.jackson.databind.JsonMappingException;
25 import org.waarp.common.exception.InvalidArgumentException;
26 import org.waarp.common.json.JsonHandler;
27 import org.waarp.common.logging.WaarpLogger;
28 import org.waarp.common.logging.WaarpLoggerFactory;
29 import org.waarp.gateway.kernel.AbstractHttpField.FieldPosition;
30 import org.waarp.gateway.kernel.AbstractHttpField.FieldRole;
31 import org.waarp.gateway.kernel.HttpPage.PageRole;
32 import org.waarp.gateway.kernel.exception.HttpIncorrectRequestException;
33
34 import java.io.File;
35 import java.io.IOException;
36 import java.util.ArrayList;
37 import java.util.HashMap;
38 import java.util.LinkedHashMap;
39 import java.util.List;
40
41
42
43
44 public class HttpJsonDefinition {
45 private static final String CANNOT_WRITE_FILE = "Cannot write file: ";
46 private static final String UNABLE_TO_READ_JSON_FILE =
47 "Unable to read JSON file: ";
48 private static final String UNABLE_TO_READ_THE_JSON_CONFIG_FILE =
49 "Unable to read the JSON Config file: ";
50
51
52
53 private static final WaarpLogger logger =
54 WaarpLoggerFactory.getLogger(HttpJsonDefinition.class);
55
56 private HttpJsonDefinition() {
57 }
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 private static final class ConfigHttpField {
73
74 public String FIELDNAME;
75 public FieldRole FIELDTYPE;
76 public String FIELDINFO;
77 public String FIELDVALUE;
78 public boolean FIELDVISIBILITY;
79 public boolean FIELDMANDATORY;
80 public boolean FIELDCOOKIESET;
81 public boolean FIELDTOVALIDATE;
82 public FieldPosition FIELDPOSITION;
83 public int FIELDRANK;
84 }
85
86
87
88
89 private static final class ConfigHttpPage {
90
91 public String PAGENAME;
92 public String FILEFORM;
93 public String HEADER;
94 public String FOOTER;
95 public String BEGINFORM;
96 public String ENDFORM;
97 public String NEXTINFORM;
98 public String URI;
99 public PageRole PAGEROLE;
100 public String ERRORPAGE;
101 public String CLASSNAME;
102
103 public List<ConfigHttpField> FIELD;
104 }
105
106
107
108
109
110
111 private static final class ConfigHttpPages {
112
113 public List<ConfigHttpPage> PAGE;
114 }
115
116 protected static AbstractHttpField loadHttpPage(
117 final ConfigHttpField fieldValue) throws InvalidArgumentException {
118 return new DefaultHttpField(fieldValue.FIELDNAME, fieldValue.FIELDTYPE,
119 fieldValue.FIELDINFO, fieldValue.FIELDVALUE,
120 fieldValue.FIELDVISIBILITY,
121 fieldValue.FIELDMANDATORY,
122 fieldValue.FIELDCOOKIESET,
123 fieldValue.FIELDTOVALIDATE,
124 fieldValue.FIELDPOSITION, fieldValue.FIELDRANK);
125 }
126
127 protected static HttpPage loadHttpConfiguration(final ConfigHttpPage cpage)
128 throws InvalidArgumentException, ClassNotFoundException,
129 InstantiationException, IllegalAccessException {
130 List<ConfigHttpField> list = cpage.FIELD;
131 final LinkedHashMap<String, AbstractHttpField> linkedHashMap =
132 new LinkedHashMap<String, AbstractHttpField>(list.size());
133
134 for (final ConfigHttpField fieldValue : list) {
135 final AbstractHttpField field = loadHttpPage(fieldValue);
136 linkedHashMap.put(field.getFieldname(), field);
137 }
138 list.clear();
139 list = null;
140 return new HttpPage(cpage.PAGENAME, cpage.FILEFORM, cpage.HEADER,
141 cpage.FOOTER, cpage.BEGINFORM, cpage.ENDFORM,
142 cpage.NEXTINFORM, cpage.URI, cpage.PAGEROLE,
143 cpage.ERRORPAGE, cpage.CLASSNAME, linkedHashMap);
144 }
145
146
147
148
149
150
151
152
153
154
155
156
157
158 public static HttpPageHandler setConfigurationHttpServerFromJson(
159 final String filename)
160 throws InvalidArgumentException, ClassNotFoundException,
161 InstantiationException, IllegalAccessException {
162 final File file = new File(filename);
163 final ConfigHttpPages cpages;
164 try {
165 cpages = JsonHandler.mapper.readValue(file, ConfigHttpPages.class);
166 } catch (final JsonParseException e) {
167 logger.error(UNABLE_TO_READ_THE_JSON_CONFIG_FILE + filename + ": {}",
168 e.getMessage());
169 throw new InvalidArgumentException(UNABLE_TO_READ_JSON_FILE + filename,
170 e);
171 } catch (final JsonMappingException e) {
172 logger.error(UNABLE_TO_READ_THE_JSON_CONFIG_FILE + filename + ": {}",
173 e.getMessage());
174 throw new InvalidArgumentException(UNABLE_TO_READ_JSON_FILE + filename,
175 e);
176 } catch (final IOException e) {
177 logger.error(UNABLE_TO_READ_THE_JSON_CONFIG_FILE + filename + ": {}",
178 e.getMessage());
179 throw new InvalidArgumentException(UNABLE_TO_READ_JSON_FILE + filename,
180 e);
181 }
182 final HashMap<String, HttpPage> pages =
183 new HashMap<String, HttpPage>(cpages.PAGE.size());
184
185 for (final ConfigHttpPage cpage : cpages.PAGE) {
186 final HttpPage page = loadHttpConfiguration(cpage);
187 pages.put(page.getUri(), page);
188 }
189 cpages.PAGE.clear();
190 return new HttpPageHandler(pages);
191 }
192
193 protected static void addToField(final List<ConfigHttpField> fields,
194 final AbstractHttpField field) {
195 final ConfigHttpField cfield = new ConfigHttpField();
196 cfield.FIELDNAME = field.getFieldname();
197 cfield.FIELDTYPE = field.getFieldtype();
198 cfield.FIELDINFO = field.getFieldinfo();
199 cfield.FIELDVALUE = field.fieldvalue;
200 cfield.FIELDVISIBILITY = field.isFieldvisibility();
201 cfield.FIELDMANDATORY = field.isFieldmandatory();
202 cfield.FIELDCOOKIESET = field.isFieldcookieset();
203 cfield.FIELDTOVALIDATE = field.isFieldtovalidate();
204 cfield.FIELDPOSITION = field.getFieldposition();
205 cfield.FIELDRANK = field.getFieldrank();
206 fields.add(cfield);
207 }
208
209 protected static void addToElement(final List<ConfigHttpPage> pages,
210 final HttpPage page) {
211 final ConfigHttpPage cpage = new ConfigHttpPage();
212 cpage.PAGENAME = page.getPagename();
213 cpage.FILEFORM = page.getFileform();
214 cpage.HEADER = page.getHeader();
215 cpage.FOOTER = page.getFooter();
216 cpage.BEGINFORM = page.getBeginform();
217 cpage.ENDFORM = page.getEndform();
218 cpage.NEXTINFORM = page.getNextinform();
219 cpage.URI = page.getUri();
220 cpage.PAGEROLE = page.getPagerole();
221 cpage.ERRORPAGE = page.getErrorpage();
222 cpage.CLASSNAME = page.getClassname();
223 cpage.FIELD = new ArrayList<ConfigHttpField>();
224 for (final AbstractHttpField field : page.getFields().values()) {
225 addToField(cpage.FIELD, field);
226 }
227 pages.add(cpage);
228 }
229
230 public static void exportConfiguration(final HttpPageHandler httpPageHandler,
231 final String filename)
232 throws HttpIncorrectRequestException {
233 final ConfigHttpPages cpages = new ConfigHttpPages();
234 cpages.PAGE = new ArrayList<ConfigHttpPage>();
235 for (final HttpPage page : httpPageHandler.getHashmap().values()) {
236 addToElement(cpages.PAGE, page);
237 }
238 final File file = new File(filename);
239 try {
240 JsonHandler.mapper.writerWithDefaultPrettyPrinter()
241 .writeValue(file, cpages);
242 } catch (final JsonGenerationException e) {
243 throw new HttpIncorrectRequestException(CANNOT_WRITE_FILE + filename, e);
244 } catch (final JsonMappingException e) {
245 throw new HttpIncorrectRequestException(CANNOT_WRITE_FILE + filename, e);
246 } catch (final IOException e) {
247 throw new HttpIncorrectRequestException(CANNOT_WRITE_FILE + filename, e);
248 }
249 }
250 }