Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wiring improvements, wiring auto-construction, wiring modules, and serialization #99

Merged
merged 9 commits into from
Dec 8, 2016
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package foundation.stack.datamill.configuration;

import rx.functions.Action1;

/**
* @author Ravi Chodavarapu (rchodava@gmail.com)
*/
@FunctionalInterface
public interface Module extends Action1<Wiring> {
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,15 @@
* @author Ravi Chodavarapu (rchodava@gmail.com)
*/
public interface PropertySource {
/**
* Alias a property so that the alias can be used in a {@link #get(String)} call in order to retrieve the original
* property's value.
*
* @param alias New alias for the original property.
* @param original Original property to create an alias for.
*/
PropertySource alias(String alias, String original);

/**
* Get the specified property from the source, if it exists.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@
* @author Ravi Chodavarapu (rchodava@gmail.com)
*/
public interface PropertySourceChain extends PropertySource {
/**
* @see PropertySource#alias(String, String)
*/
PropertySourceChain alias(String alias, String original);

/**
* Add a property source to the chain which retrieves properties specified in the file at the specified path.
*
Expand Down
362 changes: 277 additions & 85 deletions core/src/main/java/foundation/stack/datamill/configuration/Wiring.java

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,37 @@
import foundation.stack.datamill.values.Value;
import rx.functions.Action1;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

/**
* @author Ravi Chodavarapu (rchodava@gmail.com)
*/
public abstract class AbstractSource implements PropertySource {
private final Map<String, String> aliases = new HashMap<>();

@Override
public PropertySource alias(String alias, String original) {
aliases.put(alias, original);
return this;
}

protected abstract Optional<String> getOptional(String name);

@Override
public final Optional<String> get(String name) {
Optional<String> value = getOptional(name);
if (!value.isPresent()) {
String original = aliases.get(name);
if (original != null) {
value = getOptional(original);
}
}

return value;
}

@Override
public Value getRequired(String name) {
Optional<String> value = get(name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,4 +138,10 @@ public static boolean isAssignable(Class<?> clazz, final Class<?> toClass) {

return toClass.isAssignableFrom(clazz);
}

public static boolean isPrimitiveWrapper(Class<?> type) {
return type == Boolean.class || type == Byte.class || type == Short.class ||
type == Integer.class || type == Long.class || type == Float.class ||
type == Double.class || type == Void.class || type == Character.class;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class DefaultsSource extends AbstractSource implements Defaults {
private final Map<String, String> defaults = new HashMap<>();

@Override
public Optional<String> get(String name) {
public Optional<String> getOptional(String name) {
return Optional.ofNullable(defaults.get(name));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public class EmptySource extends AbstractSource {
public static final EmptySource INSTANCE = new EmptySource();

@Override
public Optional<String> get(String name) {
public Optional<String> getOptional(String name) {
return Optional.empty();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ private EnvironmentPropertiesSource() {
}

@Override
public Optional<String> get(String name) {
public Optional<String> getOptional(String name) {
return Optional.ofNullable(System.getenv(transformer.call(name)));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public FileSource(String propertiesLocation) throws IOException {
}

@Override
public Optional<String> get(String name) {
public Optional<String> getOptional(String name) {
String value = properties.getProperty(name);
return Optional.ofNullable(value);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,12 @@ private PropertySourceChainImpl(List<PropertySource> chain) {
}

@Override
public Optional<String> get(String name) {
public PropertySourceChain alias(String alias, String original) {
return (PropertySourceChain) super.alias(alias, original);
}

@Override
public Optional<String> getOptional(String name) {
for (PropertySource source : chain) {
Optional<String> value = source.get(name);
if (value.isPresent()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ private SystemPropertiesSource() {
}

@Override
public Optional<String> get(String name) {
public Optional<String> getOptional(String name) {
return Optional.ofNullable(System.getProperty(transformer.call(name)));
}
}
11 changes: 6 additions & 5 deletions core/src/main/java/foundation/stack/datamill/db/Row.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
package foundation.stack.datamill.db;

import foundation.stack.datamill.reflection.Member;
import foundation.stack.datamill.serialization.StructuredInput;
import foundation.stack.datamill.values.Value;

/**
* @author Ravi Chodavarapu (rchodava@gmail.com)
*/
public interface Row {
public interface Row extends StructuredInput {
int size();
Value column(int index);
Value column(String name);
Value column(String table, String name);
Value column(Member member);
Value get(int index);
Value get(String name);
Value get(String table, String name);
Value get(Member member);
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package foundation.stack.datamill.db.impl;

import foundation.stack.datamill.reflection.Member;
import foundation.stack.datamill.serialization.DeserializationStrategy;
import foundation.stack.datamill.serialization.StructuredInput;
import foundation.stack.datamill.values.Value;
import foundation.stack.datamill.db.DatabaseException;
import foundation.stack.datamill.db.Row;
import rx.functions.Action1;

import java.sql.ResultSet;
import java.sql.SQLException;
Expand All @@ -22,23 +25,23 @@ public RowImpl(ResultSet resultSet) {
}

@Override
public Value column(int index) {
public Value get(int index) {
return new IndexedColumnValue(index);
}

@Override
public Value column(String name) {
public Value get(String name) {
return new LabeledColumnValue(name);
}

@Override
public Value column(String table, String name) {
public Value get(String table, String name) {
return new LabeledColumnValue(table + "." + name);
}

@Override
public Value column(Member member) {
return column(member.outline().pluralName(), member.name());
public Value get(Member member) {
return get(member.outline().pluralName(), member.name());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public class DatabaseRowBuilder<T> {
private final Outline<T> outline;

public DatabaseRowBuilder(Class<T> clazz) {
this.outline = new OutlineBuilder().build(clazz);
this.outline = OutlineBuilder.DEFAULT.build(clazz);
}

public Row build(Func2<RowBuilder, Outline<T>, Map<String, ?>> rowBuilder) {
Expand Down Expand Up @@ -64,17 +64,17 @@ public DatabaseRow(Map<String, ?> values) {
}

@Override
public Value column(int index) {
return column(columnNamesByIndex.get(index));
public Value get(int index) {
return get(columnNamesByIndex.get(index));
}

@Override
public Value column(Member member) {
return column(member.outline().pluralName(), member.name());
public Value get(Member member) {
return get(member.outline().pluralName(), member.name());
}

@Override
public Value column(String name) {
public Value get(String name) {
Object value = values.get(name);
if (value != null) {
return new StringValue(value.toString());
Expand All @@ -84,8 +84,8 @@ public Value column(String name) {
}

@Override
public Value column(String table, String name) {
return column(SqlSyntax.qualifiedName(table, name));
public Value get(String table, String name) {
return get(SqlSyntax.qualifiedName(table, name));
}

@Override
Expand Down
16 changes: 16 additions & 0 deletions core/src/main/java/foundation/stack/datamill/json/Json.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,23 @@
package foundation.stack.datamill.json;

import foundation.stack.datamill.serialization.DeserializationStrategy;
import foundation.stack.datamill.serialization.Deserializer;
import foundation.stack.datamill.serialization.SerializationStrategy;
import foundation.stack.datamill.serialization.Serializer;

/**
* @author Ravi Chodavarapu (rchodava@gmail.com)
*/
public interface Json {
static <T> Deserializer<JsonObject, T> deserializer(DeserializationStrategy<T> strategy) {
return json -> strategy.deserialize(json);
}

static <T> Serializer<T, JsonObject> serializer(SerializationStrategy<T> strategy) {
return o -> {
JsonObject json = new JsonObject();
strategy.serialize(json, o);
return json;
};
}
}
Loading