0617e01dacf3f8cafd0beed20f58ef720836cbce
[aaf/authz.git] / misc / rosetta / src / main / java / org / onap / aaf / misc / rosetta / marshal / DataWriter.java
1 /**
2  * ============LICENSE_START====================================================
3  * org.onap.aaf
4  * ===========================================================================
5  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
6  * ===========================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END====================================================
19  *
20  */
21
22 package org.onap.aaf.misc.rosetta.marshal;
23
24 import javax.xml.datatype.XMLGregorianCalendar;
25
26 import org.onap.aaf.misc.env.util.Chrono;
27
28 /**
29  * We make these objects instead of static functions so they can be passed into 
30  * FieldArray.
31  * 
32  * @author Jonathan
33  *
34  * @param <T>
35  */
36 public abstract class DataWriter<T> {
37     public abstract boolean write(T t, StringBuilder sb);
38     
39     public final static DataWriter<String> STRING = new DataWriter<String>() {
40         @Override
41         public boolean write(String s, StringBuilder sb) {
42             sb.append(s);
43             return true;
44         }        
45     };
46     
47     public final static DataWriter<Integer> INTEGER = new DataWriter<Integer>() {
48         @Override
49         public boolean write(Integer i, StringBuilder sb) {
50             sb.append(i);
51             return false;
52         }        
53     };
54     
55     public final static DataWriter<Long> LONG = new DataWriter<Long>() {
56         @Override
57         public boolean write(Long t, StringBuilder sb) {
58             sb.append(t);
59             return false;
60         }        
61     };
62
63     public final static DataWriter<Byte> BYTE = new DataWriter<Byte>() {
64         @Override
65         public boolean write(Byte t, StringBuilder sb) {
66             sb.append(t);
67             return false;
68         }        
69     };
70
71     public final static DataWriter<Character> CHAR = new DataWriter<Character>() {
72         @Override
73         public boolean write(Character t, StringBuilder sb) {
74             sb.append(t);
75             return true;
76         }        
77     };
78
79     public final static DataWriter<Boolean> BOOL = new DataWriter<Boolean>() {
80         @Override
81         public boolean write(Boolean t, StringBuilder sb) {
82             sb.append(t);
83             return true;
84         }        
85     };
86
87
88     /*
89     public final static DataWriter<byte[]> BYTE_ARRAY = new DataWriter<byte[]>() {
90         @Override
91         public boolean write(byte[] ba, StringBuilder sb) {
92             ByteArrayInputStream bais = new ByteArrayInputStream(ba);
93             StringBuilderOutputStream sbos = new StringBuilderOutputStream(sb);
94 //            try {
95                 //TODO find Base64
96 //                Symm.base64noSplit().encode(bais, sbos);
97 //            } catch (IOException e) {
98 //                // leave blank
99 //            }
100             return true;
101         }
102         
103     };
104     */
105
106     public final static DataWriter<XMLGregorianCalendar> DATE = new DataWriter<XMLGregorianCalendar>() {
107         @Override
108         public boolean write(XMLGregorianCalendar t, StringBuilder sb) {
109             sb.append(Chrono.dateOnlyStamp(t));
110             return true;
111         }
112     };
113     
114     public final static DataWriter<XMLGregorianCalendar> DATE_TIME = new DataWriter<XMLGregorianCalendar>() {
115         @Override
116         public boolean write(XMLGregorianCalendar t, StringBuilder sb) {
117             sb.append(Chrono.dateTime(t));
118             return true;
119         }
120     };
121
122     private static final char[] chars="0123456789ABCDEF".toCharArray();
123     public final static DataWriter<byte[]> HEX_BINARY = new DataWriter<byte[]>() {
124         @Override
125         public boolean write(byte[] ba, StringBuilder sb) {
126             // FYI, doing this because don't want intermediate 
127             // String in "HexString" or the processing in
128             // "String.format"
129             //sb.append("0x");
130             for (int i=0;i<ba.length;++i) {
131                 byte b = ba[i];
132                 sb.append(chars[((b&0xF0)>>4)]);
133                 sb.append(chars[b&0xF]);
134             }
135             return true;
136         }
137     };
138
139 }