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

org.nohope.test.SerializationUtils Maven / Gradle / Ivy

package org.nohope.test;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.hamcrest.CoreMatchers;
import org.nohope.logging.Logger;
import org.nohope.logging.LoggerFactory;

import javax.annotation.Nonnull;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.io.StringWriter;
import java.io.Writer;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.nohope.typetools.TypeSafeObjectMapper.createPreConfiguredMapper;

/**
 * @author ketoth xupack
 * @since 9/21/12 12:48 AM
 */
public final class SerializationUtils {
    private static final Logger LOG = LoggerFactory.getLogger(SerializationUtils.class);
    private static final ObjectMapper MONGO_MAPPER = createPreConfiguredMapper();
    private SerializationUtils() {
    }

    @SuppressWarnings("unchecked")
    public static  T cloneJava(final T object) {
        try(final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            ObjectOutputStream out = new ObjectOutputStream(outputStream)) {
            out.writeObject(object);
            try(final ByteArrayInputStream inputStream =
                        new ByteArrayInputStream(outputStream.toByteArray());
                ObjectInputStream in = new ObjectInputStream(inputStream)) {
                return (T) in.readObject();
            }
        } catch (IOException | ClassNotFoundException e) {
            throw new AssertionError(e.getMessage());
        }
    }

    public static T assertJavaClonedEquals(final T origin) {
        final T result = cloneJava(origin);
        assertThat(result, CoreMatchers.equalTo(origin));
        return result;
    }

    public static  T fromJSON(@Nonnull final ObjectMapper mapper,
                                 @Nonnull final String json,
                                 @Nonnull final Class clazz) {
        try {

            return mapper.readValue(json, clazz);
        } catch (final Exception e) {
            final String message = String.format("Unable to unmarshall from json: %s to %s", json, clazz);
            throw new AssertionError(message, e);
        }
    }

    public static  String toJSON(@Nonnull final ObjectMapper mapper, final T obj) {
        try {
            final Writer writer = new StringWriter();
            mapper.writeValue(writer, obj);
            return writer.toString();
        } catch (final Exception e) {
            final String message = String.format("Unable to marshall json from: %s", obj);
            throw new AssertionError(message, e);
        }
    }

    @SuppressWarnings("unchecked")
    public static  T cloneJson(@Nonnull final ObjectMapper mapper, final T object) {
        final String marshalled = toJSON(mapper, object);
        LOG.trace("marshaled value {}", marshalled);
        return (T) fromJSON(mapper, marshalled, object.getClass());
    }

    public static T assertJsonClonedEquals(@Nonnull final ObjectMapper mapper, final T origin) {
        final T result = cloneJson(mapper, origin);
        assertThat(result, CoreMatchers.equalTo(origin));
        return result;
    }

    public static  T fromMongo(@Nonnull final String json, @Nonnull final Class clazz) {
        return fromJSON(MONGO_MAPPER, json, clazz);
    }

    public static  String toMongo(final T obj) {
        return toJSON(MONGO_MAPPER, obj);
    }

    @SuppressWarnings("unchecked")
    public static  T cloneMongo(final T object) {
        return cloneJson(MONGO_MAPPER, object);
    }

    public static T assertMongoClonedEquals(final T origin) {
        return assertJsonClonedEquals(MONGO_MAPPER, origin);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy