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

com.fasterxml.jackson.dataformat.javaprop.JavaPropsMapper Maven / Gradle / Ivy

Go to download

Support for reading and writing content of "Java Properties" style configuration files as if there was implied nesting structure (by default using dots as separators).

There is a newer version: 2.18.1
Show newest version
package com.fasterxml.jackson.dataformat.javaprop;

import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Properties;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.cfg.CoercionAction;
import com.fasterxml.jackson.databind.cfg.CoercionInputShape;
import com.fasterxml.jackson.databind.cfg.MapperBuilder;

public class JavaPropsMapper extends ObjectMapper
{
    private static final long serialVersionUID = 1L;

    /**
     * Base implementation for "Vanilla" {@link ObjectMapper}, used with
     * Java Properties backend.
     *
     * @since 2.10
     */
    public static class Builder extends MapperBuilder
    {
        public Builder(JavaPropsMapper m) {
            super(m);
        }
    }

    /*
    /**********************************************************
    /* Life-cycle
    /**********************************************************
     */

    public JavaPropsMapper() {
        this(new JavaPropsFactory());
    }

    public JavaPropsMapper(JavaPropsFactory f) {
        super(f);

        // 09-Apr-2021, tatu: [dataformats-text#255]: take empty String to
        //    mean `null` where applicable; also accept Blank same way
        enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);

        coercionConfigDefaults()
            .setAcceptBlankAsEmpty(Boolean.TRUE)
            .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty)
        ;
    }

    protected JavaPropsMapper(JavaPropsMapper src) {
        super(src);
    }

    public static Builder builder() {
        return new JavaPropsMapper.Builder(new JavaPropsMapper());
    }

    public static Builder builder(JavaPropsFactory streamFactory) {
        return new JavaPropsMapper.Builder(new JavaPropsMapper(streamFactory));
    }

    @Override
    public JavaPropsMapper copy()
    {
        _checkInvalidCopy(JavaPropsMapper.class);
        return new JavaPropsMapper(this);
    }

    @Override
    public Version version() {
        return PackageVersion.VERSION;
    }

    @Override
    public JavaPropsFactory getFactory() {
        return (JavaPropsFactory) _jsonFactory;
    }

    /*
    /**********************************************************************
    /* Extended read methods, from Properties objects
    /**********************************************************************
     */

    /**
     * Convenience method which uses given `Properties` as the source
     * as if they had been read from an external source, processes
     * them (splits paths etc), and then binds as given result
     * value.
     *

* Note that this is NOT identical to calling {@link #convertValue(Object, Class)}; * rather, it would be similar to writing `Properties` out into a File, * then calling `readValue()` on this mapper to bind contents. * * @since 2.9 */ @SuppressWarnings("resource") public T readPropertiesAs(Properties props, JavaPropsSchema schema, Class valueType) throws IOException { JsonParser p = getFactory().createParser((Map)props); p.setSchema(schema); return (T) readValue(p, valueType); } /** * Convenience method which uses given `Properties` as the source * as if they had been read from an external source, processes * them (splits paths etc), and then binds as given result * value. *

* Note that this is NOT identical to calling {@link #convertValue(Object, Class)}; * rather, it would be similar to writing `Properties` out into a File, * then calling `readValue()` on this mapper to bind contents. * * @since 2.9 */ @SuppressWarnings({ "resource", "unchecked" }) public T readPropertiesAs(Properties props, JavaPropsSchema schema, JavaType valueType) throws IOException { JsonParser p = getFactory().createParser((Map)props); p.setSchema(schema); return (T) readValue(p, valueType); } /** * Convenience method, functionally equivalent to: *

     *   readPropertiesAs(props, JavaPropsSchema.emptySchema(), valueType);
     *
* * @since 2.9 */ public T readPropertiesAs(Properties props, Class valueType) throws IOException { return readPropertiesAs(props, JavaPropsSchema.emptySchema(), valueType); } /** * Convenience method, functionally equivalent to: *
     *   readPropertiesAs(props, JavaPropsSchema.emptySchema(), valueType);
     *
* * @since 2.9 */ public T readPropertiesAs(Properties props, JavaType valueType) throws IOException { return readPropertiesAs(props, JavaPropsSchema.emptySchema(), valueType); } /* /********************************************************************** /* Extended read methods, from Map objects /********************************************************************** */ /** * Convenience method which uses given `Properties` as the source * as if they had been read from an external source, processes * them (splits paths etc), and then binds as given result * value. *

* Note that this is NOT identical to calling {@link #convertValue(Object, Class)}; * rather, it would be similar to writing `Properties` out into a File, * then calling `readValue()` on this mapper to bind contents. * * @since 2.10 */ @SuppressWarnings("resource") public T readMapAs(Map map, JavaPropsSchema schema, Class valueType) throws IOException { JsonParser p = getFactory().createParser(map); p.setSchema(schema); return (T) readValue(p, valueType); } /** * Convenience method which uses given `Properties` as the source * as if they had been read from an external source, processes * them (splits paths etc), and then binds as given result * value. *

* Note that this is NOT identical to calling {@link #convertValue(Object, Class)}; * rather, it would be similar to writing `Properties` out into a File, * then calling `readValue()` on this mapper to bind contents. * * @since 2.10 */ @SuppressWarnings({ "resource", "unchecked" }) public T readMapAs(Map map, JavaPropsSchema schema, JavaType valueType) throws IOException { JsonParser p = getFactory().createParser(map); p.setSchema(schema); return (T) readValue(p, valueType); } /** * Convenience method, functionally equivalent to: *

     *   readPropertiesAs(props, JavaPropsSchema.emptySchema(), valueType);
     *
* * @since 2.10 */ public T readMapAs(Map map, Class valueType) throws IOException { return readMapAs(map, JavaPropsSchema.emptySchema(), valueType); } /** * Convenience method, functionally equivalent to: *
     *   readPropertiesAs(props, JavaPropsSchema.emptySchema(), valueType);
     *
* * @since 2.10 */ public T readMapAs(Map map, JavaType valueType) throws IOException { return readMapAs(map, JavaPropsSchema.emptySchema(), valueType); } /* /********************************************************************** /* Extended read methods, from System Properties /********************************************************************** */ /** * Convenience method, functionally equivalent to: *
     *   readPropertiesAs(System.getProperties(), schema, valueType);
     *
* * @since 2.9 */ public T readSystemPropertiesAs(JavaPropsSchema schema, Class valueType) throws IOException { return readPropertiesAs(System.getProperties(), schema, valueType); } /** * Convenience method, functionally equivalent to: *
     *   readPropertiesAs(System.getProperties(), schema, valueType);
     *
* * @since 2.9 */ public T readSystemPropertiesAs(JavaPropsSchema schema, JavaType valueType) throws IOException { return readPropertiesAs(System.getProperties(), schema, valueType); } /* /********************************************************************** /* Extended read methods, from Env variables /********************************************************************** */ /** * Convenience method, functionally equivalent to: *
     *   readPropertiesAs(convertMapToProperties(System.getenv()), schema, valueType);
     *
* * @since 2.9 */ public T readEnvVariablesAs(JavaPropsSchema schema, Class valueType) throws IOException { return readPropertiesAs(_env(), schema, valueType); } /** * Convenience method, functionally equivalent to: *
     *   readPropertiesAs(convertMapToProperties(System.getenv()), schema, valueType);
     *
* * @since 2.9 */ public T readEnvVariablesAs(JavaPropsSchema schema, JavaType valueType) throws IOException { return readPropertiesAs(_env(), schema, valueType); } protected Properties _env() { Properties props = new Properties(); props.putAll(System.getenv()); return props; } /* /********************************************************** /* Extended write methods /********************************************************** */ /** * Convenience method that "writes" given `value` as properties * in given {@link Map} object. * * @since 2.10 */ public void writeValue(Map target, Object value) throws IOException { if (target == null) { throw new IllegalArgumentException("Can not pass `null` target"); } try (JavaPropsGenerator g = getFactory().createGenerator(target, null)) { writeValue(g, value); } } /** * Convenience method that "writes" given `value` as properties * in given {@link Map} object. * * @since 2.10 */ public void writeValue(Map target, Object value, JavaPropsSchema schema) throws IOException { if (target == null) { throw new IllegalArgumentException("Can not pass `null` target"); } try (JavaPropsGenerator g = getFactory().createGenerator(target, schema)) { if (schema != null) { g.setSchema(schema); } writeValue(g, value); } } @Deprecated // since 2.10 public void writeValue(Properties targetProps, Object value) throws IOException { writeValue((Map) targetProps, value); } @Deprecated // since 2.10 public void writeValue(Properties targetProps, Object value, JavaPropsSchema schema) throws IOException { writeValue((Map) targetProps, value, schema); } /** * Convenience method that serializes given value but so that results are * stored in a newly constructed {@link Properties}. Functionally equivalent * to serializing in a File and reading contents into {@link Properties}. * * @since 2.9 */ public Properties writeValueAsProperties(Object value) throws IOException { final Properties props = new Properties(); writeValue(props, value); return props; } /** * Convenience method that serializes given value but so that results are * stored in given {@link Properties} instance. * * @since 2.9 */ public Properties writeValueAsProperties(Object value, JavaPropsSchema schema) throws IOException { Properties props = new Properties(); writeValue(props, value, schema); return props; } /** * Convenience method that serializes given value but so that results are * stored in a newly constructed {@link Properties}. Functionally equivalent * to serializing in a File and reading contents into {@link Properties}. * * @since 2.10 */ public Map writeValueAsMap(Object value) throws IOException { final Map map = new LinkedHashMap<>(); writeValue(map, value); return map; } /** * Convenience method that serializes given value but so that results are * stored in given {@link Properties} instance. * * @since 2.10 */ public Map writeValueAsMap(Object value, JavaPropsSchema schema) throws IOException { final Map map = new LinkedHashMap<>(); writeValue(map, value, schema); return map; } /* /********************************************************** /* Schema support methods? /********************************************************** */ // do we have any actually? }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy