All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.dominokit.jacksonapt.ser.BaseNumberJsonSerializer Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2013 Nicolas Morel
 *
 * 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.
 */

package org.dominokit.jacksonapt.ser;

import java.math.BigDecimal;
import java.math.BigInteger;
import org.dominokit.jacksonapt.JsonSerializationContext;
import org.dominokit.jacksonapt.JsonSerializer;
import org.dominokit.jacksonapt.JsonSerializerParameters;
import org.dominokit.jacksonapt.stream.JsonWriter;

/**
 * Base implementation of {@link org.dominokit.jacksonapt.JsonSerializer} for {@link
 * java.lang.Number}.
 */
public abstract class BaseNumberJsonSerializer extends JsonSerializer {

  /** Default implementation of {@link BaseNumberJsonSerializer} for {@link BigDecimal} */
  public static final class BigDecimalJsonSerializer extends BaseNumberJsonSerializer {

    private static final BigDecimalJsonSerializer INSTANCE = new BigDecimalJsonSerializer();

    /** @return an instance of {@link BigDecimalJsonSerializer} */
    public static BigDecimalJsonSerializer getInstance() {
      return INSTANCE;
    }

    private BigDecimalJsonSerializer() {}

    /** {@inheritDoc} */
    @Override
    protected boolean isDefault(BigDecimal value) {
      return null == value || BigDecimal.ZERO.compareTo(value) == 0;
    }
  }

  /** Default implementation of {@link BaseNumberJsonSerializer} for {@link BigInteger} */
  public static final class BigIntegerJsonSerializer extends BaseNumberJsonSerializer {

    private static final BigIntegerJsonSerializer INSTANCE = new BigIntegerJsonSerializer();

    /** @return an instance of {@link BigIntegerJsonSerializer} */
    public static BigIntegerJsonSerializer getInstance() {
      return INSTANCE;
    }

    private BigIntegerJsonSerializer() {}

    /** {@inheritDoc} */
    @Override
    protected boolean isDefault(BigInteger value) {
      return null == value || BigInteger.ZERO.compareTo(value) == 0;
    }
  }

  /** Default implementation of {@link BaseNumberJsonSerializer} for {@link Byte} */
  public static final class ByteJsonSerializer extends BaseNumberJsonSerializer {

    private static final ByteJsonSerializer INSTANCE = new ByteJsonSerializer();

    /** @return an instance of {@link ByteJsonSerializer} */
    public static ByteJsonSerializer getInstance() {
      return INSTANCE;
    }

    private static byte defaultValue;

    private ByteJsonSerializer() {}

    /** {@inheritDoc} */
    @Override
    protected boolean isDefault(Byte value) {
      return null == value || defaultValue == value;
    }
  }

  /** Default implementation of {@link BaseNumberJsonSerializer} for {@link Double} */
  public static final class DoubleJsonSerializer extends BaseNumberJsonSerializer {

    private static final DoubleJsonSerializer INSTANCE = new DoubleJsonSerializer();

    /** @return an instance of {@link DoubleJsonSerializer} */
    public static DoubleJsonSerializer getInstance() {
      return INSTANCE;
    }

    private DoubleJsonSerializer() {}

    /** {@inheritDoc} */
    @Override
    protected boolean isDefault(Double value) {
      return null == value || value == 0d;
    }

    /** {@inheritDoc} */
    @Override
    public void doSerialize(
        JsonWriter writer,
        Double value,
        JsonSerializationContext ctx,
        JsonSerializerParameters params) {
      // writer has a special method to write double, let's use instead of default Number method.
      writer.value(value.doubleValue());
    }
  }

  /** Default implementation of {@link BaseNumberJsonSerializer} for {@link Float} */
  public static final class FloatJsonSerializer extends BaseNumberJsonSerializer {

    private static final FloatJsonSerializer INSTANCE = new FloatJsonSerializer();

    /** @return an instance of {@link FloatJsonSerializer} */
    public static FloatJsonSerializer getInstance() {
      return INSTANCE;
    }

    private FloatJsonSerializer() {}

    /** {@inheritDoc} */
    @Override
    protected boolean isDefault(Float value) {
      return null == value || value == 0f;
    }
  }

  /** Default implementation of {@link BaseNumberJsonSerializer} for {@link Integer} */
  public static final class IntegerJsonSerializer extends BaseNumberJsonSerializer {

    private static final IntegerJsonSerializer INSTANCE = new IntegerJsonSerializer();

    /** @return an instance of {@link IntegerJsonSerializer} */
    public static IntegerJsonSerializer getInstance() {
      return INSTANCE;
    }

    private IntegerJsonSerializer() {}

    /** {@inheritDoc} */
    @Override
    protected boolean isDefault(Integer value) {
      return null == value || value == 0;
    }
  }

  /** Default implementation of {@link BaseNumberJsonSerializer} for {@link Long} */
  public static final class LongJsonSerializer extends BaseNumberJsonSerializer {

    private static final LongJsonSerializer INSTANCE = new LongJsonSerializer();

    /** @return an instance of {@link LongJsonSerializer} */
    public static LongJsonSerializer getInstance() {
      return INSTANCE;
    }

    private LongJsonSerializer() {}

    /** {@inheritDoc} */
    @Override
    protected boolean isDefault(Long value) {
      return null == value || value == 0l;
    }

    /** {@inheritDoc} */
    @Override
    public void doSerialize(
        JsonWriter writer,
        Long value,
        JsonSerializationContext ctx,
        JsonSerializerParameters params) {
      // writer has a special method to write long, let's use instead of default Number method.
      writer.value(value.longValue());
    }
  }

  /** Default implementation of {@link BaseNumberJsonSerializer} for {@link Short} */
  public static final class ShortJsonSerializer extends BaseNumberJsonSerializer {

    private static final ShortJsonSerializer INSTANCE = new ShortJsonSerializer();

    /** @return an instance of {@link ShortJsonSerializer} */
    public static ShortJsonSerializer getInstance() {
      return INSTANCE;
    }

    private static short defaultValue;

    private ShortJsonSerializer() {}

    /** {@inheritDoc} */
    @Override
    protected boolean isDefault(Short value) {
      return null == value || defaultValue == value;
    }
  }

  /** Default implementation of {@link BaseNumberJsonSerializer} for {@link Number} */
  public static final class NumberJsonSerializer extends BaseNumberJsonSerializer {

    private static final NumberJsonSerializer INSTANCE = new NumberJsonSerializer();

    /** @return an instance of {@link NumberJsonSerializer} */
    public static NumberJsonSerializer getInstance() {
      return INSTANCE;
    }

    private NumberJsonSerializer() {}

    /** {@inheritDoc} */
    @Override
    protected boolean isDefault(Number value) {
      return null == value || value.intValue() == 0;
    }
  }

  /** {@inheritDoc} */
  @Override
  public void doSerialize(
      JsonWriter writer, N value, JsonSerializationContext ctx, JsonSerializerParameters params) {
    writer.value(value);
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy