Coverage Report - org.apache.johnzon.mapper.MapperBuilder
 
Classes in this File Line Coverage Branch Coverage Complexity
MapperBuilder
68%
64/94
37%
9/24
1,722
 
 1  
 /*
 2  
  * Licensed to the Apache Software Foundation (ASF) under one
 3  
  * or more contributor license agreements. See the NOTICE file
 4  
  * distributed with this work for additional information
 5  
  * regarding copyright ownership. The ASF licenses this file
 6  
  * to you under the Apache License, Version 2.0 (the
 7  
  * "License"); you may not use this file except in compliance
 8  
  * with the License. You may obtain a copy of the License at
 9  
  *
 10  
  * http://www.apache.org/licenses/LICENSE-2.0
 11  
  *
 12  
  * Unless required by applicable law or agreed to in writing,
 13  
  * software distributed under the License is distributed on an
 14  
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 15  
  * KIND, either express or implied. See the License for the
 16  
  * specific language governing permissions and limitations
 17  
  * under the License.
 18  
  */
 19  
 package org.apache.johnzon.mapper;
 20  
 
 21  
 import java.math.BigDecimal;
 22  
 import java.math.BigInteger;
 23  
 import java.util.Comparator;
 24  
 import java.util.Date;
 25  
 import java.util.HashMap;
 26  
 import java.util.Map;
 27  
 
 28  
 import javax.json.JsonReaderFactory;
 29  
 import javax.json.spi.JsonProvider;
 30  
 import javax.json.stream.JsonGenerator;
 31  
 import javax.json.stream.JsonGeneratorFactory;
 32  
 
 33  
 import org.apache.johnzon.mapper.access.AccessMode;
 34  
 import org.apache.johnzon.mapper.access.FieldAccessMode;
 35  
 import org.apache.johnzon.mapper.access.FieldAndMethodAccessMode;
 36  
 import org.apache.johnzon.mapper.access.MethodAccessMode;
 37  
 import org.apache.johnzon.mapper.converter.BigDecimalConverter;
 38  
 import org.apache.johnzon.mapper.converter.BigIntegerConverter;
 39  
 import org.apache.johnzon.mapper.converter.BooleanConverter;
 40  
 import org.apache.johnzon.mapper.converter.ByteConverter;
 41  
 import org.apache.johnzon.mapper.converter.CachedDelegateConverter;
 42  
 import org.apache.johnzon.mapper.converter.CharacterConverter;
 43  
 import org.apache.johnzon.mapper.converter.ClassConverter;
 44  
 import org.apache.johnzon.mapper.converter.DateConverter;
 45  
 import org.apache.johnzon.mapper.converter.DoubleConverter;
 46  
 import org.apache.johnzon.mapper.converter.FloatConverter;
 47  
 import org.apache.johnzon.mapper.converter.IntegerConverter;
 48  
 import org.apache.johnzon.mapper.converter.LongConverter;
 49  
 import org.apache.johnzon.mapper.converter.ShortConverter;
 50  
 import org.apache.johnzon.mapper.converter.StringConverter;
 51  
 
 52  56
 public class MapperBuilder {
 53  1
     private static final Map<Class<?>, Converter<?>> DEFAULT_CONVERTERS = new HashMap<Class<?>, Converter<?>>();
 54  
 
 55  
     static {
 56  
         //DEFAULT_CONVERTERS.put(Date.class, new DateConverter("yyyy-MM-dd'T'HH:mm:ssZ")); // ISO8601 long RFC822 zone
 57  1
         DEFAULT_CONVERTERS.put(Date.class, new DateConverter("yyyyMMddHHmmssZ")); // ISO8601 short
 58  1
         DEFAULT_CONVERTERS.put(Class.class, new ClassConverter());
 59  1
         DEFAULT_CONVERTERS.put(String.class, new StringConverter());
 60  1
         DEFAULT_CONVERTERS.put(BigDecimal.class, new BigDecimalConverter());
 61  1
         DEFAULT_CONVERTERS.put(BigInteger.class, new BigIntegerConverter());
 62  1
         DEFAULT_CONVERTERS.put(Byte.class, new CachedDelegateConverter<Byte>(new ByteConverter()));
 63  1
         DEFAULT_CONVERTERS.put(Character.class, new CharacterConverter());
 64  1
         DEFAULT_CONVERTERS.put(Double.class, new DoubleConverter());
 65  1
         DEFAULT_CONVERTERS.put(Float.class, new FloatConverter());
 66  1
         DEFAULT_CONVERTERS.put(Integer.class, new IntegerConverter());
 67  1
         DEFAULT_CONVERTERS.put(Long.class, new LongConverter());
 68  1
         DEFAULT_CONVERTERS.put(Short.class, new ShortConverter());
 69  1
         DEFAULT_CONVERTERS.put(Boolean.class, new CachedDelegateConverter<Boolean>(new BooleanConverter()));
 70  1
         DEFAULT_CONVERTERS.put(byte.class, DEFAULT_CONVERTERS.get(Byte.class));
 71  1
         DEFAULT_CONVERTERS.put(char.class, new CharacterConverter());
 72  1
         DEFAULT_CONVERTERS.put(double.class, DEFAULT_CONVERTERS.get(Double.class));
 73  1
         DEFAULT_CONVERTERS.put(float.class, DEFAULT_CONVERTERS.get(Float.class));
 74  1
         DEFAULT_CONVERTERS.put(int.class, DEFAULT_CONVERTERS.get(Integer.class));
 75  1
         DEFAULT_CONVERTERS.put(long.class, DEFAULT_CONVERTERS.get(Long.class));
 76  1
         DEFAULT_CONVERTERS.put(short.class, DEFAULT_CONVERTERS.get(Short.class));
 77  1
         DEFAULT_CONVERTERS.put(boolean.class, DEFAULT_CONVERTERS.get(Boolean.class));
 78  1
     }
 79  
 
 80  
     private JsonReaderFactory readerFactory;
 81  
     private JsonGeneratorFactory generatorFactory;
 82  56
     private boolean doCloseOnStreams = false;
 83  56
     private boolean supportHiddenAccess = true;
 84  56
     private int version = -1;
 85  56
     private int maxSize = -1;
 86  56
     private int bufferSize = -1;
 87  
     private String bufferStrategy;
 88  56
     private Comparator<String> attributeOrder = null;
 89  56
     private boolean skipNull = true;
 90  56
     private boolean skipEmptyArray = false;
 91  56
     private boolean supportsComments = false;
 92  
     protected boolean pretty;
 93  56
     private AccessMode accessMode = new MethodAccessMode();
 94  
     private boolean treatByteArrayAsBase64;
 95  56
     private final Map<Class<?>, Converter<?>> converters = new HashMap<Class<?>, Converter<?>>(DEFAULT_CONVERTERS);
 96  
 
 97  
     public Mapper build() {
 98  56
         if (readerFactory == null || generatorFactory == null) {
 99  56
             final JsonProvider provider = JsonProvider.provider();
 100  56
             final Map<String, Object> config = new HashMap<String, Object>();
 101  56
             if (maxSize > 0) {
 102  0
                 config.put("org.apache.johnzon.max-string-length", maxSize);
 103  
             }
 104  56
             if (bufferSize > 0) {
 105  0
                 config.put("org.apache.johnzon.default-char-buffer", bufferSize);
 106  
             }
 107  56
             if (bufferStrategy != null) {
 108  0
                 config.put("org.apache.johnzon.buffer-strategy", bufferStrategy);
 109  
             }
 110  56
             if (pretty) {
 111  0
                 config.put(JsonGenerator.PRETTY_PRINTING, true);
 112  
             }
 113  
 
 114  56
             if (generatorFactory == null) {
 115  56
                 generatorFactory = provider.createGeneratorFactory(config);
 116  
             }
 117  
 
 118  56
             config.remove(JsonGenerator.PRETTY_PRINTING); // doesnt mean anything anymore for reader
 119  56
             if (supportsComments) {
 120  0
                 config.put("org.apache.johnzon.supports-comments", "true");
 121  
             }
 122  56
             if (readerFactory == null) {
 123  56
                 readerFactory = provider.createReaderFactory(config);
 124  
             }
 125  
         }
 126  
 
 127  56
         return new Mapper(
 128  
                 readerFactory, generatorFactory,
 129  
                 doCloseOnStreams,
 130  
                 converters,
 131  
                 version,
 132  
                 attributeOrder,
 133  
                 skipNull, skipEmptyArray,
 134  
                 accessMode,
 135  
                 supportHiddenAccess,
 136  
                 treatByteArrayAsBase64);
 137  
     }
 138  
 
 139  
     public MapperBuilder setSupportsComments(final boolean supportsComments) {
 140  0
         this.supportsComments = supportsComments;
 141  0
         return this;
 142  
     }
 143  
 
 144  
     public MapperBuilder setPretty(final boolean pretty) {
 145  0
         this.pretty = pretty;
 146  0
         return this;
 147  
     }
 148  
 
 149  
     public MapperBuilder setBufferSize(final int bufferSize) {
 150  0
         this.bufferSize = bufferSize;
 151  0
         return this;
 152  
     }
 153  
 
 154  
     public MapperBuilder setBufferStrategy(final String bufferStrategy) {
 155  0
         this.bufferStrategy = bufferStrategy;
 156  0
         return this;
 157  
     }
 158  
 
 159  
     public MapperBuilder setMaxSize(final int size) {
 160  0
         this.maxSize = size;
 161  0
         return this;
 162  
     }
 163  
 
 164  
     public MapperBuilder setAccessMode(final AccessMode mode) {
 165  0
         this.accessMode = mode;
 166  0
         return this;
 167  
     }
 168  
 
 169  
     public MapperBuilder setAccessModeName(final String mode) {
 170  1
         if ("field".equalsIgnoreCase(mode)) {
 171  1
             this.accessMode = new FieldAccessMode();
 172  0
         } else if ("method".equalsIgnoreCase(mode)) {
 173  0
             this.accessMode = new MethodAccessMode();
 174  0
         } else if ("both".equalsIgnoreCase(mode)) {
 175  0
             this.accessMode = new FieldAndMethodAccessMode();
 176  
         } else {
 177  0
             throw new IllegalArgumentException("Mode " + mode + " unsupported");
 178  
         }
 179  1
         return this;
 180  
     }
 181  
 
 182  
     public MapperBuilder setSupportHiddenAccess(final boolean supportHiddenAccess) {
 183  1
         this.supportHiddenAccess = supportHiddenAccess;
 184  1
         return this;
 185  
     }
 186  
 
 187  
     public MapperBuilder setAttributeOrder(final Comparator<String> attributeOrder) {
 188  12
         this.attributeOrder = attributeOrder;
 189  12
         return this;
 190  
     }
 191  
 
 192  
     public MapperBuilder setReaderFactory(final JsonReaderFactory readerFactory) {
 193  0
         this.readerFactory = readerFactory;
 194  0
         return this;
 195  
     }
 196  
 
 197  
     public MapperBuilder setGeneratorFactory(final JsonGeneratorFactory generatorFactory) {
 198  0
         this.generatorFactory = generatorFactory;
 199  0
         return this;
 200  
     }
 201  
 
 202  
     public MapperBuilder setDoCloseOnStreams(final boolean doCloseOnStreams) {
 203  0
         this.doCloseOnStreams = doCloseOnStreams;
 204  0
         return this;
 205  
     }
 206  
 
 207  
     public MapperBuilder addPropertyEditor(final Class<?> clazz, final Converter<?> converter) {
 208  0
         this.converters.put(clazz, converter);
 209  0
         return this;
 210  
     }
 211  
 
 212  
     public MapperBuilder setVersion(final int version) {
 213  4
         this.version = version;
 214  4
         return this;
 215  
     }
 216  
     
 217  
     public MapperBuilder setSkipNull(final boolean skipNull) {
 218  4
         this.skipNull = skipNull;
 219  4
         return this;
 220  
     }
 221  
     
 222  
     public MapperBuilder setSkipEmptyArray(final boolean skipEmptyArray) {
 223  2
         this.skipEmptyArray = skipEmptyArray;
 224  2
         return this;
 225  
     }
 226  
     
 227  
     public MapperBuilder setTreatByteArrayAsBase64(final boolean treatByteArrayAsBase64) {
 228  1
         this.treatByteArrayAsBase64 = treatByteArrayAsBase64;
 229  1
         return this;
 230  
     }
 231  
 
 232  
 }