Skip to content

Commit

Permalink
introduce types for Printers
Browse files Browse the repository at this point in the history
  • Loading branch information
awildturtok committed Sep 3, 2024
1 parent d5ae999 commit 9ee0f68
Show file tree
Hide file tree
Showing 24 changed files with 170 additions and 226 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package com.bakdata.conquery.models.query.resultinfo.printers;

import com.bakdata.conquery.models.query.PrintSettings;
import com.bakdata.conquery.models.query.resultinfo.printers.common.IdentityPrinter;

public class ArrowResultPrinters extends JavaResultPrinters {

@Override
public Printer getDatePrinter(PrintSettings printSettings) {
return getIntegerPrinter(printSettings);
public Printer<Number> getDatePrinter(PrintSettings printSettings) {
return new IdentityPrinter<>();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class ExcelResultPrinters extends StringResultPrinters {

private final PrinterFactory partialDelegate = new StringResultPrinters();

public Printer printerFor(ResultType type, PrintSettings printSettings) {
public Printer<?> printerFor(ResultType type, PrintSettings printSettings) {
if (type instanceof ResultType.ListT<?> listT) {
final Printer elementPrinter = partialDelegate.printerFor(listT.getElementType(), printSettings);
return getListPrinter(elementPrinter, printSettings);
Expand All @@ -32,28 +32,28 @@ public Printer printerFor(ResultType type, PrintSettings printSettings) {
}

@Override
public Printer getBooleanPrinter(PrintSettings printSettings) {
return new IdentityPrinter();
public Printer<Boolean> getBooleanPrinter(PrintSettings printSettings) {
return new IdentityPrinter<>();
}

@Override
public Printer getNumericPrinter(PrintSettings printSettings) {
return new IdentityPrinter();
public Printer<Number> getNumericPrinter(PrintSettings printSettings) {
return new IdentityPrinter<>();
}

@Override
public Printer getMoneyPrinter(PrintSettings printSettings) {
return new IdentityPrinter();
public Printer<Number> getMoneyPrinter(PrintSettings printSettings) {
return new IdentityPrinter<>();
}

@Override
public Printer getDatePrinter(PrintSettings printSettings) {
public Printer<Number> getDatePrinter(PrintSettings printSettings) {
return new DatePrinter();
}

@Override
public Printer getIntegerPrinter(PrintSettings printSettings) {
return new IdentityPrinter();
public Printer<Number> getIntegerPrinter(PrintSettings printSettings) {
return new IdentityPrinter<>();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,77 +7,71 @@
import com.bakdata.conquery.models.query.PrintSettings;
import com.bakdata.conquery.models.query.resultinfo.printers.common.DatePrinter;
import com.bakdata.conquery.models.query.resultinfo.printers.common.IdentityPrinter;
import com.google.common.base.Preconditions;

public class JavaResultPrinters extends PrinterFactory {

@Override
public Printer getListPrinter(Printer elementPrinter, PrintSettings printSettings) {
return new ListPrinter(elementPrinter);
public <T> Printer<List<T>> getListPrinter(Printer<T> elementPrinter, PrintSettings printSettings) {
return new ListPrinter<>(elementPrinter);
}

@Override
public Printer getBooleanPrinter(PrintSettings printSettings) {
public Printer<Boolean> getBooleanPrinter(PrintSettings printSettings) {
return new IdentityPrinter();
}

@Override
public Printer getIntegerPrinter(PrintSettings printSettings) {
return new IdentityPrinter();
public Printer<Number> getIntegerPrinter(PrintSettings printSettings) {
return new IdentityPrinter<>();
}

@Override
public Printer getNumericPrinter(PrintSettings printSettings) {
return new IdentityPrinter();
public Printer<Number> getNumericPrinter(PrintSettings printSettings) {
return new IdentityPrinter<>();
}

@Override
public Printer getDatePrinter(PrintSettings printSettings) {
public Printer<Number> getDatePrinter(PrintSettings printSettings) {
return new DatePrinter();
}

@Override
public Printer getDateRangePrinter(PrintSettings printSettings) {
public Printer<List<Integer>> getDateRangePrinter(PrintSettings printSettings) {
return new DateRangePrinter();
}

@Override
public Printer getStringPrinter(PrintSettings printSettings) {
return new IdentityPrinter();
public Printer<String> getStringPrinter(PrintSettings printSettings) {
return new IdentityPrinter<>();
}


@Override
public Printer getMoneyPrinter(PrintSettings printSettings) {
return new IdentityPrinter();
public Printer<Number> getMoneyPrinter(PrintSettings printSettings) {
return new IdentityPrinter<>();
}

private record ListPrinter(Printer elementPrinter) implements Printer {
private record ListPrinter<T>(Printer<T> elementPrinter) implements Printer<List<T>> {

@Override
public Object apply(Object value) {
final List<?> inList = (List) value;
final List<Object> out = new ArrayList<>(inList.size());
public Object apply(List<T> value) {
final List<Object> out = new ArrayList<>(value.size());

for (Object elt : inList) {
for (T elt : value) {
out.add(elementPrinter.apply(elt));
}

return out;
}
}

private record DateRangePrinter() implements Printer {
private record DateRangePrinter() implements Printer<List<Integer>> {


@Override
public Object apply(Object f) {
Preconditions.checkArgument(f instanceof List<?>, "Expected a List got %s (Type: %s, as string: %s)", f, f.getClass().getName(), f);
Preconditions.checkArgument(((List<?>) f).size() == 2, "Expected a list with 2 elements, one min, one max. The list was: %s ", f);

final List<?> list = (List<?>) f;
final Integer min = (Integer) list.get(0);
final Integer max = (Integer) list.get(1);
public Object apply(List<Integer> f) {
final Integer min = (Integer) ((List<?>) f).get(0);
final Integer max = (Integer) ((List<?>) f).get(1);


return CDateRange.of(min, max);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.bakdata.conquery.models.query.resultinfo.printers;

import java.util.List;

import com.bakdata.conquery.models.query.PrintSettings;
import com.bakdata.conquery.models.query.resultinfo.printers.common.ToStringPrinter;
import lombok.ToString;
Expand All @@ -9,13 +11,13 @@ public class JsonResultPrinters extends JavaResultPrinters {


@Override
public Printer getDatePrinter(PrintSettings printSettings) {
return new ToStringPrinter(super.getDatePrinter(printSettings));
public Printer<Number> getDatePrinter(PrintSettings printSettings) {
return new ToStringPrinter<>(super.getDatePrinter(printSettings));
}

@Override
public Printer getDateRangePrinter(PrintSettings printSettings) {
return new ToStringPrinter(super.getDateRangePrinter(printSettings));
public Printer<List<Integer>> getDateRangePrinter(PrintSettings printSettings) {
return new ToStringPrinter<>(super.getDateRangePrinter(printSettings));
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
import java.util.function.Function;

@FunctionalInterface
public interface Printer extends Function<Object, Object> {
Object apply(Object value);
public interface Printer<T> extends Function<T, Object> {
Object apply(T value);
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
package com.bakdata.conquery.models.query.resultinfo.printers;

import java.util.List;

import com.bakdata.conquery.models.query.PrintSettings;
import com.bakdata.conquery.models.types.ResultType;


public abstract class PrinterFactory {
public Printer printerFor(ResultType type, PrintSettings printSettings) {
public <T> Printer<T> printerFor(ResultType type, PrintSettings printSettings) {
if (type instanceof ResultType.ListT<?> listT) {
final Printer elementPrinter = printerFor(listT.getElementType(), printSettings);
return getListPrinter(elementPrinter, printSettings);
final Printer<?> elementPrinter = printerFor(listT.getElementType(), printSettings);
return (Printer<T>) getListPrinter(elementPrinter, printSettings);
}

return switch (((ResultType.Primitive) type)) {
return (Printer<T>) switch (((ResultType.Primitive) type)) {
case BOOLEAN -> getBooleanPrinter(printSettings);
case INTEGER -> getIntegerPrinter(printSettings);
case NUMERIC -> getNumericPrinter(printSettings);
Expand All @@ -21,19 +24,19 @@ public Printer printerFor(ResultType type, PrintSettings printSettings) {
};
}

public abstract Printer getListPrinter(Printer elementPrinter, PrintSettings printSettings);
public abstract <T> Printer<List<T>> getListPrinter(Printer<T> elementPrinter, PrintSettings printSettings);

public abstract Printer getBooleanPrinter(PrintSettings printSettings);
public abstract Printer<Boolean> getBooleanPrinter(PrintSettings printSettings);

public abstract Printer getIntegerPrinter(PrintSettings printSettings);
public abstract Printer<Number> getIntegerPrinter(PrintSettings printSettings);

public abstract Printer getNumericPrinter(PrintSettings printSettings);
public abstract Printer<Number> getNumericPrinter(PrintSettings printSettings);

public abstract Printer getDatePrinter(PrintSettings printSettings);
public abstract Printer<Number> getDatePrinter(PrintSettings printSettings);

public abstract Printer getDateRangePrinter(PrintSettings printSettings);
public abstract Printer<List<Integer>> getDateRangePrinter(PrintSettings printSettings);

public abstract Printer getStringPrinter(PrintSettings printSettings);
public abstract Printer<String> getStringPrinter(PrintSettings printSettings);

public abstract Printer getMoneyPrinter(PrintSettings printSettings);
public abstract Printer<Number> getMoneyPrinter(PrintSettings printSettings);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.bakdata.conquery.models.query.resultinfo.printers;

import java.util.List;

import com.bakdata.conquery.models.query.PrintSettings;
import com.bakdata.conquery.models.query.resultinfo.printers.common.BooleanStringPrinter;
import com.bakdata.conquery.models.query.resultinfo.printers.common.DateRangeStringPrinter;
Expand All @@ -16,42 +18,42 @@ public class StringResultPrinters extends PrinterFactory {


@Override
public Printer getListPrinter(Printer elementPrinter, PrintSettings printSettings) {
return new ListStringPrinter(elementPrinter, printSettings);
public <T> Printer<List<T>> getListPrinter(Printer<T> elementPrinter, PrintSettings printSettings) {
return new ListStringPrinter<>(elementPrinter, printSettings);
}

@Override
public Printer getBooleanPrinter(PrintSettings printSettings) {
public Printer<Boolean> getBooleanPrinter(PrintSettings printSettings) {
return BooleanStringPrinter.create(printSettings);
}

@Override
public Printer getIntegerPrinter(PrintSettings printSettings) {
public Printer<Number> getIntegerPrinter(PrintSettings printSettings) {
return new IntegerStringPrinter(printSettings);
}

@Override
public Printer getNumericPrinter(PrintSettings printSettings) {
public Printer<Number> getNumericPrinter(PrintSettings printSettings) {
return new NumericStringPrinter(printSettings);
}

@Override
public Printer getDatePrinter(PrintSettings printSettings) {
public Printer<Number> getDatePrinter(PrintSettings printSettings) {
return new DateStringPrinter(printSettings);
}

@Override
public Printer getDateRangePrinter(PrintSettings printSettings) {
public Printer<List<Integer>> getDateRangePrinter(PrintSettings printSettings) {
return new DateRangeStringPrinter(printSettings);
}

@Override
public Printer getStringPrinter(PrintSettings printSettings) {
public Printer<String> getStringPrinter(PrintSettings printSettings) {
return new StringPrinter();
}

@Override
public Printer getMoneyPrinter(PrintSettings printSettings) {
public Printer<Number> getMoneyPrinter(PrintSettings printSettings) {
return new MoneyStringPrinter(printSettings);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import com.bakdata.conquery.models.query.PrintSettings;
import com.bakdata.conquery.models.query.resultinfo.printers.Printer;

public record BooleanStringPrinter(PrintSettings cfg, String trueVal, String falseVal) implements Printer {
public record BooleanStringPrinter(PrintSettings cfg, String trueVal, String falseVal) implements Printer<Boolean> {

public static BooleanStringPrinter create(PrintSettings settings) {
if (!settings.isPrettyPrint()) {
Expand All @@ -18,11 +18,7 @@ public static BooleanStringPrinter create(PrintSettings settings) {


@Override
public String apply(Object f) {
if ((Boolean) f) {
return trueVal;
}
return falseVal;

public String apply(Boolean f) {
return f ? trueVal : falseVal;
}
}
Loading

0 comments on commit 9ee0f68

Please sign in to comment.