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

com.github.leeonky.dal.extensions.Dumpers Maven / Gradle / Ivy

package com.github.leeonky.dal.extensions;

import com.github.leeonky.dal.DAL;
import com.github.leeonky.dal.runtime.Data;
import com.github.leeonky.dal.runtime.Extension;
import com.github.leeonky.dal.runtime.Order;
import com.github.leeonky.dal.runtime.inspector.Dumper;
import com.github.leeonky.dal.runtime.inspector.DumpingBuffer;
import com.github.leeonky.dal.type.InputCode;
import com.github.leeonky.dal.type.InputValue;

import java.lang.reflect.Type;
import java.time.*;
import java.util.Date;
import java.util.UUID;

import static com.github.leeonky.dal.runtime.Order.BUILD_IN;
import static com.github.leeonky.dal.runtime.inspector.Dumper.STRING_DUMPER;
import static com.github.leeonky.dal.runtime.inspector.Dumper.VALUE_INSPECTOR;

@Order(BUILD_IN)
@SuppressWarnings("used")
public class Dumpers implements Extension {
    private static final StackTraceDumper STACK_TRACE_DUMPER = new StackTraceDumper();
    private static final InputValueDumper INPUT_VALUE_DUMPER = new InputValueDumper();
    private static final InputCodeDumper INPUT_CODE_DUMPER = new InputCodeDumper();

    @Override
    public void extend(DAL dal) {
        registerValueTypes(dal, Type.class, Number.class, Boolean.class, UUID.class, Instant.class, Date.class,
                LocalTime.class, LocalDate.class, LocalDateTime.class, OffsetDateTime.class, ZonedDateTime.class,
                YearMonth.class);
        dal.getRuntimeContextBuilder()
                .registerDumper(CharSequence.class, data -> STRING_DUMPER)
                .registerDumper(StackTraceElement[].class, data -> STACK_TRACE_DUMPER)
                .registerDumper(InputValue.class, data -> INPUT_VALUE_DUMPER)
                .registerDumper(InputCode.class, data -> INPUT_CODE_DUMPER)
        ;
    }

    private void registerValueTypes(DAL dal, Class... types) {
        for (Class type : types)
            dal.getRuntimeContextBuilder().registerDumper(type, data -> VALUE_INSPECTOR);
    }

    private static class StackTraceDumper implements Dumper {

        @Override
        public void dump(Data data, DumpingBuffer dumpingBuffer) {
            DumpingBuffer sub = dumpingBuffer.indent();
            data.list().values().forEach(s -> sub.newLine().append("at " + s.toString()));
        }
    }

    private static class InputValueDumper implements Dumper {

        @Override
        public void dump(Data data, DumpingBuffer dumpingBuffer) {
            dumpingBuffer.dump(dumpingBuffer.getRuntimeContext().wrap(((InputValue) data.instance()).get()));
        }
    }

    private static class InputCodeDumper implements Dumper {

        @Override
        public void dump(Data data, DumpingBuffer dumpingBuffer) {
            dumpingBuffer.append("InputCode return value was ");
            InputCode inputCode = (InputCode) data.instance();
            try {
                dumpingBuffer.dump(dumpingBuffer.getRuntimeContext().wrap(inputCode.get()));
            } catch (Throwable e) {
                throw new RuntimeException(e);
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy