summaryrefslogtreecommitdiffstats
path: root/rosetta/src/main/java/org/onap/aaf/rosetta/env
diff options
context:
space:
mode:
Diffstat (limited to 'rosetta/src/main/java/org/onap/aaf/rosetta/env')
-rw-r--r--rosetta/src/main/java/org/onap/aaf/rosetta/env/RosettaDF.java266
-rw-r--r--rosetta/src/main/java/org/onap/aaf/rosetta/env/RosettaData.java313
-rw-r--r--rosetta/src/main/java/org/onap/aaf/rosetta/env/RosettaEnv.java89
3 files changed, 668 insertions, 0 deletions
diff --git a/rosetta/src/main/java/org/onap/aaf/rosetta/env/RosettaDF.java b/rosetta/src/main/java/org/onap/aaf/rosetta/env/RosettaDF.java
new file mode 100644
index 0000000..4005e81
--- /dev/null
+++ b/rosetta/src/main/java/org/onap/aaf/rosetta/env/RosettaDF.java
@@ -0,0 +1,266 @@
+/*******************************************************************************
+ * ============LICENSE_START====================================================
+ * * org.onap.aaf
+ * * ===========================================================================
+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * * ===========================================================================
+ * * Licensed under the Apache License, Version 2.0 (the "License");
+ * * you may not use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License.
+ * * ============LICENSE_END====================================================
+ * *
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * *
+ ******************************************************************************/
+package org.onap.aaf.rosetta.env;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.Writer;
+
+import javax.xml.bind.JAXBException;
+import javax.xml.namespace.QName;
+import javax.xml.validation.Schema;
+
+import org.onap.aaf.inno.env.APIException;
+import org.onap.aaf.inno.env.BaseDataFactory;
+import org.onap.aaf.inno.env.Data;
+import org.onap.aaf.inno.env.DataFactory;
+import org.onap.aaf.inno.env.Env;
+import org.onap.aaf.inno.env.TimeTaken;
+import org.onap.aaf.inno.env.Trans;
+import org.onap.aaf.inno.env.Data.TYPE;
+import org.onap.aaf.inno.env.jaxb.JAXBmar;
+import org.onap.aaf.inno.env.jaxb.JAXBumar;
+import org.onap.aaf.rosetta.InJson;
+import org.onap.aaf.rosetta.InXML;
+import org.onap.aaf.rosetta.JaxInfo;
+import org.onap.aaf.rosetta.Marshal;
+import org.onap.aaf.rosetta.Out;
+import org.onap.aaf.rosetta.OutJson;
+import org.onap.aaf.rosetta.OutRaw;
+import org.onap.aaf.rosetta.OutXML;
+import org.onap.aaf.rosetta.Parse;
+import org.onap.aaf.rosetta.ParseException;
+import org.onap.aaf.rosetta.marshal.DocMarshal;
+
+public class RosettaDF<T> extends BaseDataFactory implements DataFactory<T> {
+
+ static InJson inJSON = new InJson();
+ InXML inXML;
+
+ static OutJson outJSON = new OutJson();
+ OutXML outXML;
+ static OutRaw outRAW = new OutRaw();
+
+ // Temporary until we write JAXB impl...
+ JAXBmar jaxMar;
+ JAXBumar jaxUmar;
+
+ private Parse<Reader,?> defaultIn;
+ private Out defaultOut;
+ private RosettaEnv env;
+ private TYPE inType;
+ private TYPE outType;
+ private int defOption;
+ Marshal<T> marshal = null;
+
+
+ /**
+ * Private constructor to setup Type specific data manipulators
+ * @param schema
+ * @param rootNs
+ * @param cls
+ * @throws SecurityException
+ * @throws NoSuchFieldException
+ * @throws ClassNotFoundException
+ * @throws ParseException
+ * @throws JAXBException
+ */
+ // package on purpose
+ RosettaDF(RosettaEnv env, Schema schema, String rootNs, Class<T> cls) throws APIException {
+ this.env = env;
+ try {
+ // Note: rootNs can be null, in order to derive content from Class.
+ JaxInfo ji = rootNs==null?JaxInfo.build(cls):JaxInfo.build(cls,rootNs);
+ // Note: JAXBmar sets qname to null if not exists
+ jaxMar = new JAXBmar(rootNs==null?null:new QName("xmlns",rootNs),cls);
+ // Note: JAXBumar sets schema to null if not exists
+ jaxUmar = new JAXBumar(schema, cls);
+
+ defaultIn = inXML = new InXML(ji);
+ defaultOut = outXML = new OutXML(ji);
+ inType=outType=Data.TYPE.XML;
+ defOption = 0;
+ } catch (Exception e) {
+ throw new APIException(e);
+ }
+ }
+
+
+ // @Override
+ public RosettaData<T> newData() {
+ RosettaData<T> data = new RosettaData<T>(env, this)
+ .in(inType)
+ .out(outType)
+ .option(defOption);
+ return data;
+ }
+
+ // @Override
+ public RosettaData<T> newData(Env trans) {
+ RosettaData<T> data = new RosettaData<T>(trans, this)
+ .in(inType)
+ .out(outType)
+ .option(defOption);
+ return data;
+ }
+
+ @SuppressWarnings("unchecked")
+ // @Override
+ public Class<T> getTypeClass() {
+ return (Class<T>)jaxMar.getMarshalClass();
+ }
+
+ public RosettaDF<T> in(Data.TYPE type) {
+ inType = type;
+ defaultIn=getIn(type==Data.TYPE.DEFAULT?Data.TYPE.JSON:type);
+ return this;
+ }
+
+ /**
+ * If exists, first option is "Pretty", second is "Fragment"
+ *
+ * @param options
+ * @return
+ */
+ public RosettaDF<T> out(Data.TYPE type) {
+ outType = type;
+ defaultOut = getOut(type==Data.TYPE.DEFAULT?Data.TYPE.JSON:type);
+ return this;
+ }
+
+ public Parse<Reader,?> getIn(Data.TYPE type) {
+ switch(type) {
+ case DEFAULT:
+ return defaultIn;
+ case JSON:
+ return inJSON;
+ case XML:
+ return inXML;
+ default:
+ return defaultIn;
+ }
+ }
+
+ public Out getOut(Data.TYPE type) {
+ switch(type) {
+ case DEFAULT:
+ return defaultOut;
+ case JSON:
+ return outJSON;
+ case XML:
+ return outXML;
+ case RAW:
+ return outRAW;
+ default:
+ return defaultOut;
+ }
+ }
+
+ public int logType(org.onap.aaf.inno.env.Data.TYPE ot) {
+ switch(ot) {
+ case JSON:
+ return Env.JSON;
+ default:
+ return Env.XML;
+ }
+ }
+
+
+ public RosettaEnv getEnv() {
+ return env;
+ }
+
+
+ public Data.TYPE getInType() {
+ return inType;
+ }
+
+ public Data.TYPE getOutType() {
+ return outType;
+ }
+
+ public RosettaDF<T> option(int option) {
+ defOption = option;
+
+ return this;
+ }
+
+ /**
+ * Assigning Root Marshal Object
+ *
+ * Will wrap with DocMarshal Object if not already
+ *
+ * @param marshal
+ * @return
+ */
+ public RosettaDF<T> rootMarshal(Marshal<T> marshal) {
+ if(marshal instanceof DocMarshal) {
+ this.marshal = marshal;
+ } else {
+ this.marshal = DocMarshal.root(marshal);
+ }
+ return this;
+ }
+
+ public void direct(Trans trans, T t, OutputStream os, boolean ... options) throws APIException, IOException {
+ Out out = getOut(outType);
+ TimeTaken tt = trans.start(out.logName(),logType(outType)); // determine from Out.. without dependency on Env?
+ try {
+ if(marshal==null) { // Unknown marshaller... do working XML marshal/extraction
+ StringWriter sw = new StringWriter();
+ jaxMar.marshal(trans.debug(), t, sw, options);
+ out.extract(new StringReader(sw.toString()), new OutputStreamWriter(os), inXML,options);
+ } else {
+ out.extract(t, new OutputStreamWriter(os), marshal,options);
+ }
+ } catch (Exception e) {
+ throw new APIException(e);
+ } finally {
+ tt.done();
+ }
+ }
+
+ public void direct(Trans trans, T t, Writer writer, boolean ... options) throws APIException, IOException {
+ Out out = getOut(outType);
+ TimeTaken tt = trans.start(out.logName(),logType(outType)); // determine from Out.. without dependency on Env?
+ try {
+ if(marshal==null) { // Unknown marshaller... do working XML marshal/extraction
+ StringWriter sw = new StringWriter();
+ jaxMar.marshal(trans.debug(), t, sw, options);
+ out.extract(new StringReader(sw.toString()), writer, inXML,options);
+ } else {
+ out.extract(t, writer, marshal,options);
+ }
+ } catch (Exception e) {
+ throw new APIException(e);
+ } finally {
+ tt.done();
+ }
+ }
+
+
+}
diff --git a/rosetta/src/main/java/org/onap/aaf/rosetta/env/RosettaData.java b/rosetta/src/main/java/org/onap/aaf/rosetta/env/RosettaData.java
new file mode 100644
index 0000000..55c4b29
--- /dev/null
+++ b/rosetta/src/main/java/org/onap/aaf/rosetta/env/RosettaData.java
@@ -0,0 +1,313 @@
+/*******************************************************************************
+ * ============LICENSE_START====================================================
+ * * org.onap.aaf
+ * * ===========================================================================
+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * * ===========================================================================
+ * * Licensed under the Apache License, Version 2.0 (the "License");
+ * * you may not use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License.
+ * * ============LICENSE_END====================================================
+ * *
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * *
+ ******************************************************************************/
+package org.onap.aaf.rosetta.env;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.Writer;
+
+import org.onap.aaf.inno.env.APIException;
+import org.onap.aaf.inno.env.Data;
+import org.onap.aaf.inno.env.Env;
+import org.onap.aaf.inno.env.TimeTaken;
+import org.onap.aaf.rosetta.Out;
+import org.onap.aaf.rosetta.Parse;
+import org.onap.aaf.rosetta.Saved;
+
+public class RosettaData<T> implements Data<T>{
+ private Env trans;
+ private RosettaDF<T> df;
+ private Saved saved;
+ private TYPE inType, outType;
+ // Note: This is an array of boolean in order to pass into other methods
+ private boolean options[] = new boolean[] {false, false};
+ // Temp Storage of XML. Only when we must use JAXB to read in Objects
+ private String xml,json;
+
+ // package on purpose
+ RosettaData(Env env, RosettaDF<T> rosettaDF) {
+ df = rosettaDF;
+ saved = new Saved(); // Note: Saved constructs storage as needed...
+ trans = env;
+ inType = df.getInType();
+ outType = df.getOutType(); // take defaults
+ }
+
+// // @Override
+ public RosettaData<T> in(TYPE rosettaType) {
+ inType = rosettaType;
+ return this;
+ }
+
+// // @Override
+ public RosettaData<T> out(TYPE rosettaType) {
+ outType = rosettaType;
+ return this;
+ }
+
+// // @Override
+ public RosettaData<T> load(Reader rdr) throws APIException {
+ Parse<Reader,?> in = df.getIn(inType);
+ TimeTaken tt = in.start(trans);
+ try {
+ saved.extract(rdr, (Writer)null, in);
+ xml=json=null;
+ } catch (Exception e) {
+ throw new APIException(e);
+ } finally {
+ tt.done();
+ }
+ return this;
+ }
+
+ // @Override
+ public RosettaData<T> load(InputStream is) throws APIException {
+ Parse<Reader,?> in = df.getIn(inType);
+ TimeTaken tt = in.start(trans);
+ try {
+ saved.extract(new InputStreamReader(is), (Writer)null, in);
+ xml=json=null;
+ } catch (Exception e) {
+ throw new APIException(e);
+ } finally {
+ tt.done();
+ }
+ return this;
+ }
+
+ // @Override
+ public RosettaData<T> load(String str) throws APIException {
+ Parse<Reader,?> in = df.getIn(inType);
+ TimeTaken tt = in.start(trans);
+ try {
+ saved.extract(new StringReader(str), (Writer)null, in);
+ switch(inType) {
+ case XML:
+ xml = str;
+ break;
+ case JSON:
+ json = str;
+ break;
+ default:
+
+ }
+ } catch (Exception e) {
+ throw new APIException(e);
+ } finally {
+ tt.done();
+ }
+ return this;
+ }
+
+ // @Override
+ public RosettaData<T> load(T t) throws APIException {
+ Parse<?,?> in = df.getIn(inType);
+ TimeTaken tt = in.start(trans);
+ try {
+ if(df.marshal==null) { // Unknown marshaller... do working XML marshal/extraction
+ StringWriter sw = new StringWriter();
+ df.jaxMar.marshal(trans.debug(), t, sw, options);
+ saved.extract(new StringReader(xml = sw.toString()), (Writer)null, df.inXML);
+ } else {
+ saved.extract(t, (Writer)null, df.marshal);
+ }
+ } catch (Exception e) {
+ throw new APIException(e);
+ } finally {
+ tt.done();
+ }
+ return this;
+ }
+
+ public Saved getEvents() {
+ return saved;
+ }
+
+ // @Override
+ public T asObject() throws APIException {
+ Out out = df.getOut(TYPE.XML);
+ TimeTaken tt = trans.start(out.logName(),df.logType(outType)); // determine from Out.. without dependency on Env?
+ try {
+ //TODO Replace JAXB with Direct Object method!!!
+ StringWriter sw = new StringWriter();
+ out.extract(null, sw, saved);
+ return df.jaxUmar.unmarshal(trans.debug(), sw.toString());
+ } catch (Exception e) {
+ throw new APIException(e);
+ } finally {
+ tt.done();
+ }
+ }
+
+ // @Override
+ public String asString() throws APIException {
+ Out out = df.getOut(outType);
+ TimeTaken tt = trans.start(out.logName(),df.logType(outType)); // determine from Out.. without dependency on Env?
+ try {
+ if(outType==TYPE.XML) {
+ if(xml==null) {
+ StringWriter sw = new StringWriter();
+ out.extract(null, sw, saved, options);
+ xml = sw.toString();
+ }
+ return xml;
+ } else { // is JSON
+ if(json==null) {
+ StringWriter sw = new StringWriter();
+ out.extract(null, sw, saved, options);
+ json = sw.toString();
+ }
+ return json;
+ }
+ } catch (Exception e) {
+ throw new APIException(e);
+ } finally {
+ tt.done();
+ }
+ }
+
+
+ // @Override
+ public RosettaData<T> to(OutputStream os) throws APIException, IOException {
+ Out out = df.getOut(outType);
+ TimeTaken tt = trans.start(out.logName(),df.logType(outType)); // determine from Out.. without dependency on Env?
+ try {
+ if(outType==TYPE.XML && xml!=null) {
+ os.write(xml.getBytes());
+ } else if(outType==TYPE.JSON && json!=null) {
+ os.write(json.getBytes());
+ } else {
+ out.extract(null, os, saved, options);
+ }
+ } catch (Exception e) {
+ throw new APIException(e);
+ } finally {
+ tt.done();
+ }
+ return this;
+ }
+
+ // @Override
+ public RosettaData<T> to(Writer writer) throws APIException, IOException {
+ Out out = df.getOut(outType);
+ TimeTaken tt = trans.start(out.logName(),df.logType(outType)); // determine from Out.. without dependency on Env?
+ try {
+ if(outType==TYPE.XML && xml!=null) {
+ writer.append(xml);
+ } else if(outType==TYPE.JSON && json!=null) {
+ writer.append(json);
+ } else {
+ out.extract(null, writer, saved, options);
+ }
+ } catch (Exception e) {
+ throw new APIException(e);
+ } finally {
+ tt.done();
+ }
+ return this;
+ }
+
+ // @Override
+ public Class<T> getTypeClass() {
+ return df.getTypeClass();
+ }
+
+ private static final boolean[] emptyOption = new boolean[0];
+
+ public void direct(InputStream is, OutputStream os) throws APIException, IOException {
+ direct(is,os,emptyOption);
+ }
+
+ public void direct(Reader reader, Writer writer, boolean ... options) throws APIException, IOException {
+ Parse<Reader,?> in = df.getIn(inType);
+ Out out = df.getOut(outType);
+ TimeTaken tt = trans.start(out.logName(),df.logType(outType)); // determine from Out.. without dependency on Env?
+ try {
+ out.extract(reader, writer, in,options);
+ } catch (Exception e) {
+ throw new APIException(e);
+ } finally {
+ tt.done();
+ }
+ }
+
+ public void direct(T t, Writer writer, boolean ... options) throws APIException, IOException {
+ Out out = df.getOut(outType);
+ TimeTaken tt = trans.start(out.logName(),df.logType(outType)); // determine from Out.. without dependency on Env?
+ try {
+ if(df.marshal==null) { // Unknown marshaller... do working XML marshal/extraction
+ StringWriter sw = new StringWriter();
+ df.jaxMar.marshal(trans.debug(), t, sw, options);
+ out.extract(new StringReader(xml = sw.toString()), writer, df.inXML,options);
+ } else {
+ out.extract(t, writer, df.marshal,options);
+ }
+ } catch (Exception e) {
+ throw new APIException(e);
+ } finally {
+ tt.done();
+ }
+ }
+
+ public void direct(T t, OutputStream os, boolean ... options) throws APIException, IOException {
+ Out out = df.getOut(outType);
+ TimeTaken tt = trans.start(out.logName(),df.logType(outType)); // determine from Out.. without dependency on Env?
+ try {
+ if(df.marshal==null) { // Unknown marshaller... do working XML marshal/extraction
+ if(outType.equals(TYPE.XML)) {
+ df.jaxMar.marshal(trans.debug(), t, os, options);
+ } else {
+ StringWriter sw = new StringWriter();
+ df.jaxMar.marshal(trans.debug(), t, sw, options);
+ out.extract(new StringReader(xml = sw.toString()), new OutputStreamWriter(os), df.inXML,options);
+ }
+ } else {
+ out.extract(t, new OutputStreamWriter(os), df.marshal,options);
+ }
+
+ } catch (Exception e) {
+ throw new APIException(e);
+ } finally {
+ tt.done();
+ }
+ }
+
+
+ public void direct(InputStream is, OutputStream os, boolean ... options) throws APIException, IOException {
+ direct(new InputStreamReader(is),new OutputStreamWriter(os), options);
+ }
+
+ // // @Override
+ public RosettaData<T> option(int option) {
+ options[0] = (option&Data.PRETTY)==Data.PRETTY;
+ options[1] = (option&Data.FRAGMENT)==Data.FRAGMENT;
+ return this;
+ }
+
+}
diff --git a/rosetta/src/main/java/org/onap/aaf/rosetta/env/RosettaEnv.java b/rosetta/src/main/java/org/onap/aaf/rosetta/env/RosettaEnv.java
new file mode 100644
index 0000000..8138d47
--- /dev/null
+++ b/rosetta/src/main/java/org/onap/aaf/rosetta/env/RosettaEnv.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * ============LICENSE_START====================================================
+ * * org.onap.aaf
+ * * ===========================================================================
+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * * ===========================================================================
+ * * Licensed under the Apache License, Version 2.0 (the "License");
+ * * you may not use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License.
+ * * ============LICENSE_END====================================================
+ * *
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * *
+ ******************************************************************************/
+package org.onap.aaf.rosetta.env;
+
+import java.applet.Applet;
+import java.util.Properties;
+
+import javax.xml.namespace.QName;
+import javax.xml.validation.Schema;
+
+import org.onap.aaf.inno.env.APIException;
+
+/**
+ * An essential Implementation of Env, which will fully function, without any sort
+ * of configuration.
+ *
+ * Use as a basis for Group level Env, just overriding where needed.
+ *
+ */
+public class RosettaEnv extends org.onap.aaf.inno.env.impl.BasicEnv {
+
+ public RosettaEnv() {
+ super();
+ }
+
+ public RosettaEnv(Applet applet, String... tags) {
+ super(applet, tags);
+ }
+
+ public RosettaEnv(String[] args) {
+ super(args);
+ }
+
+ public RosettaEnv(String tag, String[] args) {
+ super(tag, args);
+ }
+
+ public RosettaEnv(String tag, Properties props) {
+ super(tag, props);
+ }
+
+ public RosettaEnv(Properties props) {
+ super(props);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T> RosettaDF<T> newDataFactory(Class<?>... classes) throws APIException {
+ return new RosettaDF<T>(this, null, null, (Class<T>)classes[0]);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T> RosettaDF<T> newDataFactory(Schema schema, Class<?>... classes) throws APIException {
+ return new RosettaDF<T>(this, schema, null, (Class<T>)classes[0]);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public<T> RosettaDF<T> newDataFactory(QName qName, Class<?> ... classes) throws APIException {
+ return new RosettaDF<T>(this, null, qName.getNamespaceURI(),(Class<T>)classes[0]);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public<T> RosettaDF<T> newDataFactory(Schema schema, QName qName, Class<?> ... classes) throws APIException {
+ return new RosettaDF<T>(this, schema,qName.getNamespaceURI(),(Class<T>)classes[0]);
+ }
+}