e32532bc2e287d3affacec9bf8db76816aa733e3
[aaf/authz.git] / misc / env / src / main / java / org / onap / aaf / misc / env / jaxb / JAXBDF.java
1 /**\r
2  * ============LICENSE_START====================================================\r
3  * org.onap.aaf\r
4  * ===========================================================================\r
5  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.\r
6  * ===========================================================================\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * \r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  * ============LICENSE_END====================================================\r
19  *\r
20  */\r
21 \r
22 package org.onap.aaf.misc.env.jaxb;\r
23 \r
24 import java.io.InputStream;\r
25 import java.io.OutputStream;\r
26 import java.io.Reader;\r
27 import java.io.StringWriter;\r
28 import java.io.Writer;\r
29 \r
30 import javax.xml.bind.JAXBException;\r
31 import javax.xml.namespace.QName;\r
32 import javax.xml.validation.Schema;\r
33 \r
34 import org.onap.aaf.misc.env.APIException;\r
35 import org.onap.aaf.misc.env.BaseDataFactory;\r
36 import org.onap.aaf.misc.env.Data;\r
37 import org.onap.aaf.misc.env.Env;\r
38 import org.onap.aaf.misc.env.EnvJAXB;\r
39 import org.onap.aaf.misc.env.TimeTaken;\r
40 import org.onap.aaf.misc.env.old.IOObjectifier;\r
41 import org.onap.aaf.misc.env.old.IOStringifier;\r
42 import org.onap.aaf.misc.env.old.OldDataFactory;\r
43 \r
44 public class JAXBDF<T> extends BaseDataFactory implements OldDataFactory<T>,IOObjectifier<T>, IOStringifier<T> {\r
45         // Package on purpose\r
46         EnvJAXB primaryEnv;\r
47         JAXBumar jumar;\r
48         JAXBmar jmar;\r
49 \r
50         public JAXBDF(EnvJAXB env, Class<?> ... classes) throws APIException {\r
51                 try {\r
52                         primaryEnv = env;\r
53                         jumar = new JAXBumar(classes);\r
54                         jmar = new JAXBmar(classes) ;\r
55                 } catch (JAXBException e) {\r
56                         throw new APIException(e);\r
57                 }\r
58         }\r
59         \r
60         public JAXBDF(EnvJAXB env, Schema schema, Class<?> ... classes) throws APIException {\r
61                 try {\r
62                         primaryEnv = env;\r
63                         jumar = new JAXBumar(schema, classes);\r
64                         jmar = new JAXBmar(classes);\r
65                 } catch (JAXBException e) {\r
66                         throw new APIException(e);\r
67                 }\r
68         }\r
69         \r
70         public JAXBDF(EnvJAXB env, QName qname, Class<?> ... classes) throws APIException {\r
71                 try {\r
72                         primaryEnv = env;\r
73                         jumar = new JAXBumar(classes);\r
74                         jmar = new JAXBmar(qname, classes);\r
75                 } catch (JAXBException e) {\r
76                         throw new APIException(e);\r
77                 }\r
78         }\r
79 \r
80         public JAXBDF(EnvJAXB env, Schema schema, QName qname, Class<?> ... classes) throws APIException {\r
81                 try {\r
82                         primaryEnv = env;\r
83                         jumar = new JAXBumar(schema, classes);\r
84                         jmar = new JAXBmar(qname, classes);\r
85                 } catch (JAXBException e) {\r
86                         throw new APIException(e);\r
87                 }\r
88         }\r
89         \r
90         // @Override\r
91         public T newInstance() throws APIException {\r
92                 try {\r
93                         return jumar.newInstance();\r
94                 } catch (Exception e) {\r
95                         throw new APIException(e);\r
96                 }\r
97         }\r
98 \r
99         // @Override\r
100         public IOStringifier<T> pretty(boolean pretty) {\r
101                 jmar.pretty(pretty);\r
102                 return this;\r
103         }\r
104 \r
105         // @Override\r
106         public IOStringifier<T> asFragment(boolean fragment) {\r
107                 jmar.asFragment(fragment);\r
108                 return this;\r
109         }\r
110 \r
111         // @Override\r
112         public void servicePrestart(Env env) throws APIException {\r
113         }\r
114 \r
115         // @Override\r
116         public void threadPrestart(Env env) throws APIException {\r
117         }\r
118 \r
119         // @Override\r
120         public void refresh(Env env) throws APIException {\r
121         }\r
122 \r
123         // @Override\r
124         public void threadDestroy(Env env) throws APIException {\r
125         }\r
126 \r
127         // @Override\r
128         public void serviceDestroy(Env env) throws APIException {\r
129         }\r
130 \r
131         @SuppressWarnings("unchecked")\r
132         // @Override\r
133         public Data<T> newData() {\r
134                 return new JAXBData<T>(primaryEnv, this, new JAXBStringifier<T>(jmar), new JAXBObjectifier<T>(jumar),"",(Class<T>)jmar.getMarshalClass());\r
135         }\r
136 \r
137         @SuppressWarnings("unchecked")\r
138         // @Override\r
139         public Data<T> newData(Env env) {\r
140                 return new JAXBData<T>(env, this,new JAXBStringifier<T>(jmar), new JAXBObjectifier<T>(jumar),"",(Class<T>)jmar.getMarshalClass());\r
141         }\r
142 \r
143         // @Override\r
144         public Data<T> newData(T type) {\r
145                 return new JAXBData<T>(primaryEnv, this, new JAXBStringifier<T>(jmar), new JAXBObjectifier<T>(jumar), type);\r
146         }\r
147 \r
148         // @Override\r
149         public Data<T> newDataFromStream(Env env, InputStream input) throws APIException {\r
150                 //TODO Write an unvalidated String using STAX checking for end of Doc?\r
151                 // perhaps key evaluation as well.\r
152                 try {\r
153                         T t = jumar.unmarshal(env.debug(), input);\r
154                         return new JAXBData<T>(primaryEnv, this, new JAXBStringifier<T>(jmar), new JAXBObjectifier<T>(jumar),t);\r
155                 } catch(JAXBException e) {\r
156                         throw new APIException(e);\r
157                 }\r
158         }\r
159 \r
160         @SuppressWarnings("unchecked")\r
161         // @Override\r
162         public Data<T> newDataFromString(String string) {\r
163                 return new JAXBData<T>(primaryEnv, this,new JAXBStringifier<T>(jmar), new JAXBObjectifier<T>(jumar), string,(Class<T>)jmar.getMarshalClass());\r
164         }\r
165 \r
166         /////////// Old DataFactory Interface \r
167         // @Override\r
168         public String stringify(T type) throws APIException {\r
169                 try {\r
170                         StringWriter sw = new StringWriter();\r
171                         jmar.marshal(primaryEnv.debug(), type, sw);\r
172                         return sw.toString();\r
173                 } catch (JAXBException e) {\r
174                         throw new APIException(e);\r
175                 }       \r
176         }\r
177 \r
178         // @Override\r
179         public void stringify(T type, Writer writer) throws APIException {\r
180                 try {\r
181                         jmar.marshal(primaryEnv.debug(), type, writer);\r
182                 } catch (JAXBException e) {\r
183                         throw new APIException(e);\r
184                 }       \r
185         }\r
186 \r
187         // @Override\r
188         public void stringify(T type, OutputStream os) throws APIException {\r
189                 try {\r
190                         jmar.marshal(primaryEnv.debug(), type, os);\r
191                 } catch (JAXBException e) {\r
192                         throw new APIException(e);\r
193                 }       \r
194         }\r
195 \r
196         /////////// New DataFactory Interface \r
197         // @Override\r
198         public String stringify(Env env, T input, boolean ... options) throws APIException {\r
199                 try {\r
200                         StringWriter sw = new StringWriter();\r
201                         TimeTaken tt = env.start("JAXB Stringify", Env.XML);\r
202                         try {\r
203                                 jmar.marshal(env.debug(), input, sw, options);\r
204                         } finally {\r
205                                 tt.done();\r
206                         }\r
207                         String str = sw.toString();\r
208                         tt.size(str.getBytes().length);\r
209                         return str;\r
210                 } catch (JAXBException e) {\r
211                         throw new APIException(e);\r
212                 }\r
213         }\r
214 \r
215         // @Override\r
216         public void stringify(Env env, T input, Writer writer, boolean ... options) throws APIException {\r
217                 TimeTaken tt = env.start("JAXB Stringify", Env.XML);\r
218                 try {\r
219                         jmar.marshal(env.debug(), input, writer, options);\r
220                 } catch (JAXBException e) {\r
221                         throw new APIException(e);\r
222                 } finally {\r
223                         tt.done();\r
224                 }\r
225         }\r
226 \r
227         // @Override\r
228         public void stringify(Env env, T input, OutputStream os, boolean ... options) throws APIException {\r
229                 TimeTaken tt = env.start("JAXB Stringify", Env.XML);\r
230                 try {\r
231                         jmar.marshal(env.debug(), input, os, options);\r
232                 } catch (JAXBException e) {\r
233                         throw new APIException(e);\r
234                 } finally {\r
235                         tt.done();\r
236                 }\r
237         }\r
238 \r
239         // @Override\r
240         public T objectify(Env env, Reader rdr) throws APIException {\r
241                 TimeTaken tt = env.start("JAXB Objectify", Env.XML);\r
242                 try {\r
243                         return jumar.unmarshal(env.debug(), rdr);\r
244                 } catch (JAXBException e) {\r
245                         throw new APIException(e);\r
246                 } finally {\r
247                         tt.done();\r
248                 }\r
249         }\r
250 \r
251         // @Override\r
252         public T objectify(Reader rdr) throws APIException {\r
253                 try {\r
254                         return jumar.unmarshal(primaryEnv.debug(), rdr);\r
255                 } catch (JAXBException e) {\r
256                         throw new APIException(e);\r
257                 }       \r
258         }\r
259 \r
260         // @Override\r
261         public T objectify(Env env, InputStream is) throws APIException {\r
262                 TimeTaken tt = env.start("JAXB Objectify", Env.XML);\r
263                 try {\r
264                         return jumar.unmarshal(env.debug(), is);\r
265                 } catch (JAXBException e) {\r
266                         throw new APIException(e);\r
267                 } finally {\r
268                         tt.done();\r
269                 }\r
270         }\r
271 \r
272         // @Override\r
273         public T objectify(InputStream is) throws APIException {\r
274                 try {\r
275                         return jumar.unmarshal(primaryEnv.debug(), is);\r
276                 } catch (JAXBException e) {\r
277                         throw new APIException(e);\r
278                 }       \r
279         }\r
280 \r
281         // @Override\r
282         public T objectify(Env env, String input) throws APIException {\r
283                 TimeTaken tt = env.start("JAXB Objectify", Env.XML);\r
284                 tt.size(input.getBytes().length);\r
285                 try {\r
286                         return jumar.unmarshal(env.debug(), input);\r
287                 } catch (JAXBException e) {\r
288                         throw new APIException(e);\r
289                 } finally {\r
290                         tt.done();\r
291                 }\r
292         }\r
293 \r
294         // @Override\r
295         public T objectify(String text) throws APIException {\r
296                 try {\r
297                         return jumar.unmarshal(primaryEnv.debug(), text);\r
298                 } catch (JAXBException e) {\r
299                         throw new APIException(e);\r
300                 }       \r
301         }\r
302 \r
303         @SuppressWarnings("unchecked")\r
304         // @Override\r
305         public Class<T> getTypeClass() {\r
306                 return (Class<T>)jmar.getMarshalClass();\r
307         }\r
308 \r
309 }\r