Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lib/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ dependencies {
testImplementation(platform('org.junit:junit-bom:5.10.0'))
testImplementation('org.junit.jupiter:junit-jupiter:5.10.0')
testImplementation('org.junit.jupiter:junit-jupiter-api:5.10.0')
testImplementation('org.mockito:mockito-core:5.4.0')
testImplementation('org.mockito:mockito-junit-jupiter:5.4.0')
testRuntimeOnly('org.junit.jupiter:junit-jupiter-engine:5.10.0')

testImplementation 'org.assertj:assertj-core:3.24.2'
Expand Down
4 changes: 4 additions & 0 deletions lib/src/main/java/io/cloudquery/schema/ClientMeta.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package io.cloudquery.schema;

public class ClientMeta {
}
10 changes: 10 additions & 0 deletions lib/src/main/java/io/cloudquery/schema/Column.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package io.cloudquery.schema;

import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class Column {
private String name;
}
7 changes: 7 additions & 0 deletions lib/src/main/java/io/cloudquery/schema/ColumnResolver.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package io.cloudquery.schema;

import io.cloudquery.transformers.TransformerException;

public interface ColumnResolver {
void resolve(ClientMeta meta, Resource resource, Column column) throws TransformerException;
}
14 changes: 14 additions & 0 deletions lib/src/main/java/io/cloudquery/schema/Resource.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.cloudquery.schema;

import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class Resource {
private Object item;


public void set(String columnName, Object value) {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.cloudquery.transformers;

import io.cloudquery.helper.ReflectionPathResolver;
import io.cloudquery.helper.ReflectionPathResolver.PathResolverException;
import io.cloudquery.schema.ColumnResolver;

import java.lang.reflect.Field;

public interface ResolverTransformer {
class DefaulResolverTransformer implements ResolverTransformer {
@Override
public ColumnResolver transform(Field field, String path) throws TransformerException {
return (meta, resource, column) -> {
try {
resource.set(column.getName(), ReflectionPathResolver.resolve(resource.getItem(), path));
} catch (PathResolverException ex) {
throw new TransformerException("Failed to resolve path: " + path, ex);
}
};
}
}

ColumnResolver transform(Field field, String path) throws TransformerException;
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package io.cloudquery.transformers;

public class TransformerException extends Exception{
public class TransformerException extends Exception {
public TransformerException(String message) {
super(message);
}

public TransformerException(String message, Throwable ex) {
super(message, ex);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package io.cloudquery.transformers;

import io.cloudquery.schema.Column;
import io.cloudquery.schema.Resource;
import io.cloudquery.transformers.ResolverTransformer.DefaulResolverTransformer;
import lombok.Builder;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import static org.junit.Assert.assertThrows;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
class DefaultResolverTransformerTest {

@Builder
public static class ResourceItem {
public String myCustomID;
}

private DefaulResolverTransformer transformer;

@Mock
private Resource resource;

@BeforeEach
void setUp() {
transformer = new DefaulResolverTransformer();

when(resource.getItem()).thenReturn(ResourceItem.builder().myCustomID("1234").build());
}

@Test
public void shouldTransformCustomFieldNamesFromResource() throws TransformerException {
Column targetColumn = Column.builder().name("id").build();

transformer.transform(null, "myCustomID").resolve(null, resource, targetColumn);

verify(resource).set(eq("id"), eq("1234"));
}

@Test
public void shouldThrowExceptionIfResourceFieldNameNotFound() throws TransformerException {
Column targetColumn = Column.builder().name("id").build();

assertThrows(TransformerException.class, () -> transformer.transform(null, "badFieldName").resolve(null, resource, targetColumn));
}
}