AT&T 2.0.19 Code drop, stage 1
[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 }