Skip to content

Commit

Permalink
Merge pull request #99 from rchodava/rc/structured-values
Browse files Browse the repository at this point in the history
Wiring improvements, wiring auto-construction, wiring modules, and serialization
  • Loading branch information
rchodava committed Dec 8, 2016
2 parents 34ce887 + d64de35 commit 06f3a88
Show file tree
Hide file tree
Showing 39 changed files with 1,065 additions and 311 deletions.
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

0 comments on commit 06f3a88

Please sign in to comment.