public EntityInfoBuilder<T> addColumn(String columnName, FieldTypeEnum fieldTypeEnum, boolean primitive, Function<T, Object> accessor) { return addColumn(columnName, fieldTypeEnum, primitive, false, accessor); }
public EntityInfoBuilder<T> addColumn(String columnName, FieldTypeEnum fieldTypeEnum, Function<T, Object> accessor) { return addColumn(columnName, fieldTypeEnum, false, accessor); }
public EntityInfoBuilder<T> addColumn(String columnName, FieldTypeEnum fieldTypeEnum, boolean primitive, boolean identityId, Function<T, Object> accessor) { EntityFieldType fieldType = new EntityFieldType(fieldTypeEnum, primitive, identityId); return addColumn(columnName, fieldType, accessor); }
@SuppressWarnings("unchecked") public EntityInfoBuilder<T> addColumn(String columnName, EntityFieldType fieldType, Function<T, Object> accessor) { return addColumn(new ColumnInfo(columnName, fieldType, (Function<Object, Object>) accessor)); }
.addColumn("tripduration", INT, map -> map.get(0)) .addColumn("starttime", TIMESTAMP, map -> map.get(1)) .addColumn("stoptime", TIMESTAMP, map -> map.get(2)) .addColumn("start_station_id", INT, map -> map.get(3)) .addColumn("start_station_name", STRING, map -> map.get(4)) .addColumn("start_station_latitude", DOUBLE, map -> map.get(5)) .addColumn("start_station_longitude", DOUBLE, map -> map.get(6)) .addColumn("end_station_id", INT, map -> map.get(7)) .addColumn("end_station_name", STRING, map -> map.get(8)) .addColumn("end_station_latitude", DOUBLE, map -> map.get(9)) .addColumn("end_station_longitude", DOUBLE, map -> map.get(10)) .addColumn("bike_id", LONG, map -> map.get(11)) .addColumn("user_type", STRING, map -> map.get(12)) .addColumn("birth_year", INT, map -> map.get(13)) .addColumn("gender", CHAR, map -> map.get(14)) .build();
.addColumn("tripduration", INT, map -> map.get("TripDuration")) .addColumn("starttime", TIMESTAMP, map -> map.get("StartTime")) .addColumn("stoptime", TIMESTAMP, map -> map.get("StopTime")) .addColumn("start_station_id", INT, map -> map.get("StartStationId")) .addColumn("start_station_name", STRING, map -> map.get("StartStationName")) .addColumn("start_station_latitude", DOUBLE, map -> map.get("StartStationLatitude")) .addColumn("start_station_longitude", DOUBLE, map -> map.get("StartStationLongitude")) .addColumn("end_station_id", INT, map -> map.get("EndStationId")) .addColumn("end_station_name", STRING, map -> map.get("EndStationName")) .addColumn("end_station_latitude", DOUBLE, map -> map.get("EndStationLatitude")) .addColumn("end_station_longitude", DOUBLE, map -> map.get("EndStationLongitude")) .addColumn("bike_id", LONG, map -> map.get("BikeId")) .addColumn("user_type", STRING, map -> map.get("UserType")) .addColumn("birth_year", INT, map -> map.get("BirthYear")) .addColumn("gender", CHAR, map -> map.get("Gender")) .build();
private static EntityInfo configureEntityMapping() { EntityInfoBuilder<Trip> entityInfo = new EntityInfoBuilder<>(Trip.class); entityInfo.addField("bikeId"); entityInfo.addField("tripduration"); entityInfo.addColumn("startdate", FieldTypeEnum.STRING, trip -> toDate(trip.getStarttime())); entityInfo.addField("startStationId"); entityInfo.addColumn("stopdate", FieldTypeEnum.STRING, trip -> toDate(trip.getStoptime())); entityInfo.addField("endStationId"); entityInfo.addField("userType"); entityInfo.addColumn("age", FieldTypeEnum.INT, trip -> getAge(trip.getBirthYear())); entityInfo.addColumn("gender", FieldTypeEnum.STRING, trip -> getGender(trip.getGender())); return entityInfo.build(); }
public EntityInfoBuilder<T> addField(FieldInfo fieldInfo) { validate(fieldInfo.getColumnName()); Function<Object, Object> accessor = accesorFactory.getAccessor(entityClass, fieldInfo.getFieldName()); return addColumn(new ColumnInfo(fieldInfo.getColumnName(), fieldInfo.getFieldType(), accessor)); }
@Test public void columnsMantainsDeclaredOrder() throws IOException { EntityInfoBuilder<SomeEntity> entityBuilder = new EntityInfoBuilder<>(SomeEntity.class); entityBuilder.addColumn("age", FieldTypeEnum.INT, SomeEntity::getAge); entityBuilder.addColumn("name", FieldTypeEnum.STRING, SomeEntity::getName); CsvConfiguration<SomeEntity> config = new CsvConfiguration<>(entityBuilder.build()); String result = writeCsvToString(config, new SomeEntity("John", 10)); assertEquals("age,name" + ls + "10,John" + ls, result); }
@Test public void accessorCanChangeType() throws IOException { EntityInfoBuilder<SomeEntity> entityBuilder = new EntityInfoBuilder<>(SomeEntity.class); entityBuilder.addField("name"); entityBuilder.addColumn("age", FieldTypeEnum.STRING, e -> e.getAge() + " years"); entityBuilder.addColumn("adult", FieldTypeEnum.STRING, e -> e.getAge() >= 18 ? "Si" : "No"); Builder<SomeEntity> config = new Builder<>(entityBuilder.build()); String result = writeCsvToString(config.build(), new SomeEntity("John", 10), new SomeEntity("Amanda", 34)); assertEquals("name,age,adult" + ls + "John,10 years,No" + ls + "Amanda,34 years,Si" + ls, result); }
public static void main(String[] args) throws IOException, SQLException { Supplier<Connection> connectionSuplier = new MySqlTestConnectionProvider(); try (Connection connection = connectionSuplier.get()) { TableHelper.createTableDistance(connection); CitiBikeReader<Trip> reader = new CitiBikeReader<>("/tmp", str -> new TripParser(str)); EntityInfo entityInfo = new EntityInfoBuilder<>(Trip.class, "bike_trip_distance").addField("id", "id", true) .addField("tripDuration", "tripduration").addField("bikeId", "bike_id") .addField("userType", "user_type").addField("birthYear", "birth_year").addField("gender", "gender") .addColumn("distance", FieldTypeEnum.DOUBLE, trip -> distance(trip.getStartStation().getLatitude(), trip.getStartStation().getLongitude(), trip.getEndStation().getLatitude(), trip.getEndStation().getLongitude())) .build(); BulkInsert<Trip> bulkInsert = new LoadDataBulkInsert<>(entityInfo); reader.forEachCsvInZip(trips -> { try { bulkInsert.insertAll(connection, trips); } catch (JFleetException | SQLException e) { e.printStackTrace(); } }); } }
@Test public void canChangeDefaultSerializer() throws IOException { EntityInfoBuilder<SomeEntity> entityBuilder = new EntityInfoBuilder<>(SomeEntity.class); entityBuilder.addFields("name", "age"); entityBuilder.addColumn("adult", FieldTypeEnum.BOOLEAN, e -> e.getAge() >= 18); BaseTypeSerializer serializer = new BaseTypeSerializer(); serializer.add(FieldTypeEnum.BOOLEAN, (obj) -> ((Boolean) obj).booleanValue() ? "1" : "0"); Builder<SomeEntity> config = new Builder<>(entityBuilder.build()); config.typeSerializer(serializer); String result = writeCsvToString(config.build(), new SomeEntity("John", 10), new SomeEntity("Amanda", 34)); assertEquals("name,age,adult" + ls + "John,10,0" + ls + "Amanda,34,1" + ls, result); }
@Test public void testColumnCapturedValue() { String value = "Some Value"; EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addColumn("some_column", FieldTypeEnum.STRING, obj -> value); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("some_column"); assertEquals("some_column", column.getColumnName()); assertEquals(FieldTypeEnum.STRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(value, column.getAccessor().apply(simple)); }
@Test public void canCreateSyntheticColumns() throws IOException { EntityInfoBuilder<SomeEntity> entityBuilder = new EntityInfoBuilder<>(SomeEntity.class); entityBuilder.addFields("name", "age"); entityBuilder.addColumn("adult", FieldTypeEnum.BOOLEAN, e -> e.getAge() >= 18); CsvConfiguration<SomeEntity> config = new CsvConfiguration<>(entityBuilder.build()); String result = writeCsvToString(config, new SomeEntity("John", 10), new SomeEntity("Amanda", 34)); assertEquals("name,age,adult" + ls + "John,10,false" + ls + "Amanda,34,true" + ls, result); }
@Test public void testSimpleColumnDeclaration() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addColumn("name", FieldTypeEnum.STRING, SimpleEntity::getName); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("name"); assertEquals("name", column.getColumnName()); assertEquals(FieldTypeEnum.STRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simple.getName(), column.getAccessor().apply(simple)); }
@Test public void testColumnChildEntity() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addColumn("city_name", FieldTypeEnum.STRING, obj -> obj.getCity().getName()); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("city_name"); assertEquals("city_name", column.getColumnName()); assertEquals(FieldTypeEnum.STRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simple.getCity().getName(), column.getAccessor().apply(simple)); }
@Test public void testSyntheticColumn() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addColumn("city_code", FieldTypeEnum.STRING, obj -> obj.getCity().getId() + ": " + obj.getCity().getName()); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("city_code"); assertEquals("city_code", column.getColumnName()); assertEquals(FieldTypeEnum.STRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simple.getCity().getId() + ": " + simple.getCity().getName(), column.getAccessor().apply(simple)); }