Skip to content

Commit

Permalink
- Allow an outline builder to build outlines for various classes
Browse files Browse the repository at this point in the history
- Add response builder test
- Add repository base class
  • Loading branch information
rchodava committed Nov 1, 2015
1 parent 764b46d commit 40f0777
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 34 deletions.
26 changes: 26 additions & 0 deletions core/src/main/java/org/chodavarapu/datamill/db/Repository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.chodavarapu.datamill.db;

import org.chodavarapu.datamill.reflection.Outline;
import org.chodavarapu.datamill.reflection.OutlineBuilder;
import rx.Observable;

import java.util.function.BiFunction;

/**
* @author Ravi Chodavarapu (rchodava@gmail.com)
*/
public class Repository<T> {
private Client client;
private OutlineBuilder outlineBuilder;
private Class<T> entityClass;

protected Repository(Client client, OutlineBuilder outlineBuilder, Class<T> entityClass) {
this.client = client;
this.outlineBuilder = outlineBuilder;
this.entityClass = entityClass;
}

protected <R> Observable<R> executeQuery(BiFunction<Client, Outline<T>, Observable<R>> executor) {
return executor.apply(client, outlineBuilder.build(entityClass));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,26 @@
/**
* @author Ravi Chodavarapu (rchodava@gmail.com)
*/
public class OutlineBuilder<T> {
public class OutlineBuilder {
private static final Objenesis objenesis = new ObjenesisStd();
private final Class<T> outlinedClass;
private boolean camelCased;

public OutlineBuilder(Class<T> outlinedClass) {
this.outlinedClass = outlinedClass;
public OutlineBuilder() {
}

public OutlineBuilder<T> defaultCamelCased() {
public OutlineBuilder defaultCamelCased() {
camelCased = true;
return this;
}

public OutlineBuilder<T> defaultSnakeCased() {
public OutlineBuilder defaultSnakeCased() {
camelCased = false;
return this;
}

public Outline<T> build() {
public <T> Outline<T> build(Class<T> classToOutline) {
ProxyFactory proxyFactory = new ProxyFactory();
proxyFactory.setSuperclass(outlinedClass);
proxyFactory.setSuperclass(classToOutline);
Class<? extends T> outlineClass = proxyFactory.createClass();
return new OutlineImpl<>(objenesis.newInstance(outlineClass), camelCased);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.chodavarapu.datamill.http.impl;

import org.chodavarapu.datamill.http.ResponseBuilder;
import org.chodavarapu.datamill.http.Status;
import org.junit.Test;

import static org.junit.Assert.assertEquals;

/**
* @author Ravi Chodavarapu (rchodava@gmail.com)
*/
public class ResponseBuilderTest {
@Test
public void responseCodes() {
ResponseBuilder builder = new ResponseBuilderImpl();
assertEquals(Status.NOT_FOUND, builder.notFound().toBlocking().last().status());
assertEquals(Status.OK, builder.ok().toBlocking().last().status());
assertEquals(Status.UNAUTHORIZED, builder.unauthorized().toBlocking().last().status());
assertEquals(Status.NO_CONTENT, builder.noContent().toBlocking().last().status());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ public void setReadWriteProperty(String value) {

@Test
public void buildDefaultSnakeCased() {
OutlineBuilder<TestBeanClass> outlineBuilder = new OutlineBuilder<>(TestBeanClass.class);
Outline<TestBeanClass> outline = outlineBuilder.defaultSnakeCased().build();
OutlineBuilder outlineBuilder = new OutlineBuilder();
Outline<TestBeanClass> outline = outlineBuilder.defaultSnakeCased().build(TestBeanClass.class);

assertEquals("read_only_property", outline.name(outline.members().getReadOnlyProperty()));
assertEquals("boolean_property", outline.name(outline.members().isBooleanProperty()));
Expand All @@ -48,8 +48,8 @@ public void buildDefaultSnakeCased() {

@Test
public void buildDefaultCamelCased() {
OutlineBuilder<TestBeanClass> outlineBuilder = new OutlineBuilder<>(TestBeanClass.class);
Outline<TestBeanClass> outline = outlineBuilder.defaultCamelCased().build();
OutlineBuilder outlineBuilder = new OutlineBuilder();
Outline<TestBeanClass> outline = outlineBuilder.defaultCamelCased().build(TestBeanClass.class);

assertEquals("readOnlyProperty", outline.name(outline.members().getReadOnlyProperty()));
assertEquals("booleanProperty", outline.name(outline.members().isBooleanProperty()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,8 @@ public void setStringProperty(String stringProperty) {

@Test
public void camelCasedNames() {
OutlineBuilder<TestBeanClass> outlineBuilder = new OutlineBuilder<>(TestBeanClass.class);
Outline<TestBeanClass> outline = outlineBuilder.defaultSnakeCased().build();
OutlineBuilder outlineBuilder = new OutlineBuilder();
Outline<TestBeanClass> outline = outlineBuilder.defaultSnakeCased().build(TestBeanClass.class);

assertEquals("readOnlyProperty", outline.camelCasedName(outline.members().getReadOnlyProperty()));
assertEquals("booleanProperty", outline.camelCasedName(outline.members().isBooleanProperty()));
Expand All @@ -146,8 +146,8 @@ public void camelCasedNames() {

@Test
public void methods() {
OutlineBuilder<TestBeanClass> outlineBuilder = new OutlineBuilder<>(TestBeanClass.class);
Outline<TestBeanClass> outline = outlineBuilder.defaultSnakeCased().build();
OutlineBuilder outlineBuilder = new OutlineBuilder();
Outline<TestBeanClass> outline = outlineBuilder.defaultSnakeCased().build(TestBeanClass.class);

// Test all methods in class are present
assertEquals(5, outline.methods().stream().mapToInt(m -> {
Expand All @@ -170,23 +170,23 @@ public void methods() {

@Test
public void propertyNamesCamelCased() {
assertThat(new OutlineBuilder<>(TestBeanClass.class).defaultCamelCased().build().propertyNames(),
assertThat(new OutlineBuilder().defaultCamelCased().build(TestBeanClass.class).propertyNames(),
hasItems("readWriteProperty", "readOnlyProperty", "booleanProperty"));

assertEquals(0, actualBeanMethodInvocations);
}

@Test
public void propertyNamesSnakeCased() {
assertThat(new OutlineBuilder<>(TestBeanClass.class).defaultSnakeCased().build().propertyNames(),
assertThat(new OutlineBuilder().defaultSnakeCased().build(TestBeanClass.class).propertyNames(),
hasItems("read_write_property", "read_only_property", "boolean_property"));

assertEquals(0, actualBeanMethodInvocations);
}

@Test
public void getPropertiesCamelCasedDoesNotHaveGetClass() {
assertThat(new OutlineBuilder<>(TestBeanClass.class).defaultCamelCased().build().properties().stream()
assertThat(new OutlineBuilder().defaultCamelCased().build(TestBeanClass.class).properties().stream()
.map(p -> p.getName()).collect(Collectors.toList()),
not(hasItems("class")));

Expand All @@ -195,7 +195,7 @@ public void getPropertiesCamelCasedDoesNotHaveGetClass() {

@Test
public void getPropertiesCamelCased() {
assertThat(new OutlineBuilder<>(TestBeanClass.class).defaultCamelCased().build().properties().stream()
assertThat(new OutlineBuilder().defaultCamelCased().build(TestBeanClass.class).properties().stream()
.map(p -> p.getName()).collect(Collectors.toList()),
hasItems("readWriteProperty", "readOnlyProperty", "booleanProperty"));

Expand All @@ -204,7 +204,7 @@ public void getPropertiesCamelCased() {

@Test
public void getPropertiesSnakeCased() {
assertThat(new OutlineBuilder<>(TestBeanClass.class).defaultSnakeCased().build().properties().stream()
assertThat(new OutlineBuilder().defaultSnakeCased().build(TestBeanClass.class).properties().stream()
.map(p -> p.getName()).collect(Collectors.toList()),
hasItems("read_write_property", "read_only_property", "boolean_property"));

Expand All @@ -213,7 +213,7 @@ public void getPropertiesSnakeCased() {

@Test
public void getPropertyCamelCased() {
Outline<TestBeanClass> outline = new OutlineBuilder<>(TestBeanClass.class).defaultCamelCased().build();
Outline<TestBeanClass> outline = new OutlineBuilder().defaultCamelCased().build(TestBeanClass.class);
assertEquals("readWriteProperty", outline.property(outline.members().getReadWriteProperty()).getName());
assertEquals("booleanProperty", outline.property(outline.members().isBooleanProperty()).getName());
assertEquals("readWriteProperty", outline.property(outline.members().getReadWriteProperty()).getName());
Expand All @@ -223,7 +223,7 @@ public void getPropertyCamelCased() {

@Test
public void getPropertySnakeCased() {
Outline<TestBeanClass> outline = new OutlineBuilder<>(TestBeanClass.class).defaultSnakeCased().build();
Outline<TestBeanClass> outline = new OutlineBuilder().defaultSnakeCased().build(TestBeanClass.class);
assertEquals("read_write_property", outline.property(outline.members().getReadWriteProperty()).getName());
assertEquals("boolean_property", outline.property(outline.members().isBooleanProperty()).getName());
assertEquals("read_write_property", outline.property(outline.members().getReadWriteProperty()).getName());
Expand All @@ -233,8 +233,8 @@ public void getPropertySnakeCased() {

@Test
public void snakeCasedNames() {
OutlineBuilder<TestBeanClass> outlineBuilder = new OutlineBuilder<>(TestBeanClass.class);
Outline<TestBeanClass> outline = outlineBuilder.defaultCamelCased().build();
OutlineBuilder outlineBuilder = new OutlineBuilder();
Outline<TestBeanClass> outline = outlineBuilder.defaultCamelCased().build(TestBeanClass.class);

assertEquals("read_only_property", outline.snakeCasedName(outline.members().getReadOnlyProperty()));
assertEquals("boolean_property", outline.snakeCasedName(outline.members().isBooleanProperty()));
Expand All @@ -248,8 +248,8 @@ public void snakeCasedNames() {

@Test
public void wrapAndBeanGet() {
OutlineBuilder<TestBeanClass> outlineBuilder = new OutlineBuilder<>(TestBeanClass.class);
Outline<TestBeanClass> outline = outlineBuilder.defaultCamelCased().build();
OutlineBuilder outlineBuilder = new OutlineBuilder();
Outline<TestBeanClass> outline = outlineBuilder.defaultCamelCased().build(TestBeanClass.class);

TestBeanClass instance = new TestBeanClass();
instance.setReadWriteProperty("value1");
Expand All @@ -260,8 +260,8 @@ public void wrapAndBeanGet() {

@Test
public void wrapAndBeanSet() {
OutlineBuilder<TestBeanClass> outlineBuilder = new OutlineBuilder<>(TestBeanClass.class);
Outline<TestBeanClass> outline = outlineBuilder.defaultCamelCased().build();
OutlineBuilder outlineBuilder = new OutlineBuilder();
Outline<TestBeanClass> outline = outlineBuilder.defaultCamelCased().build(TestBeanClass.class);

TestBeanClass instance = new TestBeanClass();
outline.wrap(instance).set(outline.members().getReadWriteProperty(), "value1");
Expand All @@ -272,9 +272,9 @@ public void wrapAndBeanSet() {

@Test
public void wrapAndBeanSetCastedValue() {
OutlineBuilder<TestBeanClassWithVariousProperties> outlineBuilder =
new OutlineBuilder<>(TestBeanClassWithVariousProperties.class);
Outline<TestBeanClassWithVariousProperties> outline = outlineBuilder.defaultCamelCased().build();
OutlineBuilder outlineBuilder = new OutlineBuilder();
Outline<TestBeanClassWithVariousProperties> outline = outlineBuilder.defaultCamelCased()
.build(TestBeanClassWithVariousProperties.class);

TestBeanClassWithVariousProperties instance = new TestBeanClassWithVariousProperties();
outline.wrap(instance)
Expand All @@ -301,8 +301,8 @@ public void wrapAndBeanSetCastedValue() {

@Test
public void unwrapWrappedBean() {
OutlineBuilder<TestBeanClass> outlineBuilder = new OutlineBuilder<>(TestBeanClass.class);
Outline<TestBeanClass> outline = outlineBuilder.defaultCamelCased().build();
OutlineBuilder outlineBuilder = new OutlineBuilder();
Outline<TestBeanClass> outline = outlineBuilder.defaultCamelCased().build(TestBeanClass.class);

TestBeanClass instance = new TestBeanClass();

Expand Down

0 comments on commit 40f0777

Please sign in to comment.