com.vethrfolnir.services.DataMappingService.java Source code

Java tutorial

Introduction

Here is the source code for com.vethrfolnir.services.DataMappingService.java

Source

/**
 * Copyright (C) 2013-2014 Project-Vethrfolnir
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.vethrfolnir.services;

import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.core.JsonParser.Feature;
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter.Lf2SpacesIndenter;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.type.TypeFactory;
import com.vethrfolnir.logging.MuLogger;
import com.vethrfolnir.services.assets.AssetManager;
import com.vethrfolnir.services.assets.key.FileKey;

import corvus.corax.config.CorvusConfig;
import corvus.corax.inject.Inject;

/**
 * @author Vlad
 * This class is dependent on Asset Manager!
 */
public class DataMappingService {
    private static final MuLogger log = MuLogger.getLogger(DataMappingService.class);

    @Inject
    private AssetManager assetManager;

    private ObjectMapper jsonMapper = new ObjectMapper();
    private DefaultPrettyPrinter defaultPrettyPrinter;
    private TypeFactory defaultTypeFactory;

    @Inject
    private void load() {
        if (assetManager == null) {
            throw new RuntimeException(
                    "AssetManaget has not been set in your setup! Mapping service cannot be performed!");
        }

        defaultTypeFactory = TypeFactory.defaultInstance();

        jsonMapper.setVisibilityChecker(jsonMapper.getDeserializationConfig().getDefaultVisibilityChecker()
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE)
                .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE));

        jsonMapper.configure(SerializationFeature.INDENT_OUTPUT, true).configure(Feature.ALLOW_COMMENTS, true);

        defaultPrettyPrinter = new DefaultPrettyPrinter();
        defaultPrettyPrinter.indentArraysWith(new Lf2SpacesIndenter());
    }

    public <T> ArrayList<T> asArrayList(Class<? extends T> type, String path) throws Exception {
        InputStream is = assetManager.loadAsset(FileKey.class, path);
        return asArrayList(is, type);
    }

    public <T> ArrayList<T> asArrayList(InputStream is, Class<? extends T> type) throws Exception {
        return jsonMapper.readValue(is, defaultTypeFactory.constructCollectionType(ArrayList.class, type));
    }

    public <T> T asSimple(Class<? extends T> type, String path) {
        InputStream is = assetManager.loadAsset(FileKey.class, path);
        try {
            return jsonMapper.readValue(is, type);
        } catch (Exception e) {
            log.fatal("Failed deserialization of " + type.getSimpleName() + "!", e);
        }

        return null;
    }

    public ObjectWriter writer() {
        return jsonMapper.writer(defaultPrettyPrinter);
    }

    /**
     * @param obj
     * @param path
     */
    public void saveSimple(Object obj, String path) {
        try {
            writer().writeValue(new File(CorvusConfig.WorkingDirectory, path), obj);
        } catch (Exception e) {
            log.fatal("Failed saving object[" + obj.getClass().getSimpleName() + "]!", e);
        }
    }
}