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

com.github.dreamhead.moco.monitor.DefaultLogFormatter Maven / Gradle / Ivy

Go to download

Moco is an easy setup stub framework, mainly focusing on testing and integration.

There is a newer version: 1.5.0
Show newest version
package com.github.dreamhead.moco.monitor;

import com.github.dreamhead.moco.HttpRequest;
import com.github.dreamhead.moco.HttpResponse;
import com.github.dreamhead.moco.Request;
import com.github.dreamhead.moco.Response;
import com.github.dreamhead.moco.SocketRequest;
import com.github.dreamhead.moco.SocketResponse;
import com.github.dreamhead.moco.dumper.Dumper;
import com.github.dreamhead.moco.dumper.HttpRequestDumper;
import com.github.dreamhead.moco.dumper.HttpResponseDumper;
import com.github.dreamhead.moco.dumper.SocketRequestDumper;
import com.github.dreamhead.moco.dumper.SocketResponseDumper;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableMap;

import java.io.PrintWriter;
import java.io.StringWriter;

import static com.google.common.collect.FluentIterable.from;

public final class DefaultLogFormatter implements LogFormatter {
    private static final ImmutableMap, Dumper> REQUEST_DUMPERS = ImmutableMap.of(
            HttpRequest.class, new HttpRequestDumper(),
            SocketRequest.class, new SocketRequestDumper()
    );

    private static final ImmutableMap, Dumper> RESPONSE_DUMPERS = ImmutableMap.of(
            HttpResponse.class, new HttpResponseDumper(),
            SocketResponse.class, new SocketResponseDumper()
    );

    @Override
    public String format(final Request request) {
        return String.format("Request received:\n\n%s\n", findDumper(request, REQUEST_DUMPERS).dump(request));
    }

    @Override
    public String format(final Response response) {
        return String.format("Response return:\n\n%s\n", findDumper(response, RESPONSE_DUMPERS).dump(response));
    }

    @Override
    public String format(final Throwable e) {
        return String.format("Exception thrown:\n\n%s\n", stackTraceToString(e));
    }

    private String stackTraceToString(final Throwable e) {
        StringWriter writer = new StringWriter();
        e.printStackTrace(new PrintWriter(writer));
        return writer.toString();
    }

    private  Dumper findDumper(final T target, final ImmutableMap, Dumper> dumperClasses) {
        Optional> dumpClass = from(dumperClasses.keySet()).firstMatch(isInstance(target));
        if (dumpClass.isPresent()) {
            return dumperClasses.get(dumpClass.get());
        }

        throw new IllegalArgumentException("Unknown target type:" + target.getClass());
    }

    private  Predicate> isInstance(final T target) {
        return new Predicate>() {
            @Override
            public boolean apply(final Class input) {
                return input.isInstance(target);
            }
        };
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy