From 216c43eea688894f284e07f92bb301eccdf5a3b1 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Thu, 25 Aug 2022 17:25:49 +1200 Subject: [PATCH] Extract CsvReader into separate ebean-csv-reader module --- ebean-api/src/main/java/io/ebean/DB.java | 6 -- .../src/main/java/io/ebean/Database.java | 4 -- .../io/ebean/text/csv/DefaultCsvCallback.java | 3 +- .../server/core/DefaultServer.java | 5 -- .../server/text/csv/package-info.java | 1 - ebean-csv-reader/pom.xml | 69 +++++++++++++++++++ .../server/text/csv/CsvUtilReader.java | 0 .../server/text/csv/TCsvReader.java | 60 ++++++++-------- .../server/text/csv}/TimeStringParser.java | 4 +- .../server}/text/csv/TestCsvReader.java | 29 +++++--- .../text/csv/TestCsvReaderWithCallback.java | 47 +++++++++++++ .../server/text/csv/TimeStringParserTest.java | 6 +- .../src/test/java/org/example/BaseEntity.java | 48 +++++++++++++ .../src/test/java/org/example/Country.java | 31 +++++++++ .../src/test/java/org/example/Customer.java | 63 +++++++++++++++++ .../src/test/java/org/example/DAddress.java | 54 +++++++++++++++ .../src/test/resources/application-test.yml | 4 ++ .../src/test/resources/test1.csv | 0 .../xtest/internal/api/TDSpiEbeanServer.java | 4 -- .../ebean/xtest/internal/api/TDSpiServer.java | 4 -- .../text/csv/TestCsvReaderWithCallback.java | 59 ---------------- pom.xml | 1 + 22 files changed, 372 insertions(+), 130 deletions(-) delete mode 100644 ebean-core/src/main/java/io/ebeaninternal/server/text/csv/package-info.java create mode 100644 ebean-csv-reader/pom.xml rename {ebean-core => ebean-csv-reader}/src/main/java/io/ebeaninternal/server/text/csv/CsvUtilReader.java (100%) rename {ebean-core => ebean-csv-reader}/src/main/java/io/ebeaninternal/server/text/csv/TCsvReader.java (89%) rename {ebean-api/src/main/java/io/ebean/text => ebean-csv-reader/src/main/java/io/ebeaninternal/server/text/csv}/TimeStringParser.java (94%) rename {ebean-test/src/test/java/org/tests => ebean-csv-reader/src/test/java/io/ebeaninternal/server}/text/csv/TestCsvReader.java (50%) create mode 100644 ebean-csv-reader/src/test/java/io/ebeaninternal/server/text/csv/TestCsvReaderWithCallback.java rename ebean-test/src/test/java/org/tests/text/csv/TestTimeStringParser.java => ebean-csv-reader/src/test/java/io/ebeaninternal/server/text/csv/TimeStringParserTest.java (79%) create mode 100644 ebean-csv-reader/src/test/java/org/example/BaseEntity.java create mode 100644 ebean-csv-reader/src/test/java/org/example/Country.java create mode 100644 ebean-csv-reader/src/test/java/org/example/Customer.java create mode 100644 ebean-csv-reader/src/test/java/org/example/DAddress.java create mode 100644 ebean-csv-reader/src/test/resources/application-test.yml rename {ebean-test => ebean-csv-reader}/src/test/resources/test1.csv (100%) delete mode 100644 ebean-test/src/test/java/org/tests/text/csv/TestCsvReaderWithCallback.java diff --git a/ebean-api/src/main/java/io/ebean/DB.java b/ebean-api/src/main/java/io/ebean/DB.java index e922fd94e..b9558fd3c 100644 --- a/ebean-api/src/main/java/io/ebean/DB.java +++ b/ebean-api/src/main/java/io/ebean/DB.java @@ -785,12 +785,6 @@ public final class DB { return getDefault().createUpdate(beanType, ormUpdate); } - /** - * Create a CsvReader for a given beanType. - */ - public static CsvReader createCsvReader(Class beanType) { - return getDefault().createCsvReader(beanType); - } /** * Create a named query. diff --git a/ebean-api/src/main/java/io/ebean/Database.java b/ebean-api/src/main/java/io/ebean/Database.java index 7c976eb0c..47df2b9fb 100644 --- a/ebean-api/src/main/java/io/ebean/Database.java +++ b/ebean-api/src/main/java/io/ebean/Database.java @@ -204,10 +204,6 @@ public interface Database { */ T createEntityBean(Class type); - /** - * Create a CsvReader for a given beanType. - */ - CsvReader createCsvReader(Class beanType); /** * Create an Update query to perform a bulk update. diff --git a/ebean-api/src/main/java/io/ebean/text/csv/DefaultCsvCallback.java b/ebean-api/src/main/java/io/ebean/text/csv/DefaultCsvCallback.java index 3fcc8cc51..57ec73388 100644 --- a/ebean-api/src/main/java/io/ebean/text/csv/DefaultCsvCallback.java +++ b/ebean-api/src/main/java/io/ebean/text/csv/DefaultCsvCallback.java @@ -49,6 +49,7 @@ public class DefaultCsvCallback implements CsvCallback { */ protected final int persistBatchSize; + protected boolean getGeneratedKeys = true; /** * The time the process started. */ @@ -164,7 +165,7 @@ public class DefaultCsvCallback implements CsvCallback { if (persistBatchSize > 1) { transaction.setBatchMode(true); transaction.setBatchSize(persistBatchSize); - transaction.setGetGeneratedKeys(false); + transaction.setGetGeneratedKeys(getGeneratedKeys); } else { // explicitly turn off JDBC batching in case // is has been turned on globally diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java index 02acc09a7..e9af6750c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java @@ -39,7 +39,6 @@ import io.ebeaninternal.server.grammer.EqlParser; import io.ebeaninternal.server.query.*; import io.ebeaninternal.server.querydefn.*; import io.ebeaninternal.server.rawsql.SpiRawSql; -import io.ebeaninternal.server.text.csv.TCsvReader; import io.ebeaninternal.server.transaction.DefaultPersistenceContext; import io.ebeaninternal.server.transaction.RemoteTransactionEvent; import io.ebeaninternal.server.transaction.TransactionManager; @@ -807,10 +806,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { return new ElFilter<>(desc(beanType)); } - @Override - public CsvReader createCsvReader(Class beanType) { - return new TCsvReader<>(this, desc(beanType)); - } @Override public UpdateQuery update(Class beanType) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/text/csv/package-info.java b/ebean-core/src/main/java/io/ebeaninternal/server/text/csv/package-info.java deleted file mode 100644 index 039bc09f3..000000000 --- a/ebean-core/src/main/java/io/ebeaninternal/server/text/csv/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package io.ebeaninternal.server.text.csv; diff --git a/ebean-csv-reader/pom.xml b/ebean-csv-reader/pom.xml new file mode 100644 index 000000000..147b10ea9 --- /dev/null +++ b/ebean-csv-reader/pom.xml @@ -0,0 +1,69 @@ + + + + ebean-parent + io.ebean + 13.8.1-SNAPSHOT + + 4.0.0 + + ebean-csv-reader + + + 11 + 11 + UTF-8 + + + + + + io.ebean + ebean-api + 13.8.2-SNAPSHOT + + + + io.ebean + ebean-core + 13.8.2-SNAPSHOT + + + + io.ebean + ebean-test + 13.8.2-SNAPSHOT + test + + + + io.avaje + junit + 1.1 + test + + + + + + + + + + io.repaint.maven + tiles-maven-plugin + 2.24 + true + + + io.ebean.tile:enhancement:13.6.5 + + + + + + + + diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/text/csv/CsvUtilReader.java b/ebean-csv-reader/src/main/java/io/ebeaninternal/server/text/csv/CsvUtilReader.java similarity index 100% rename from ebean-core/src/main/java/io/ebeaninternal/server/text/csv/CsvUtilReader.java rename to ebean-csv-reader/src/main/java/io/ebeaninternal/server/text/csv/CsvUtilReader.java diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/text/csv/TCsvReader.java b/ebean-csv-reader/src/main/java/io/ebeaninternal/server/text/csv/TCsvReader.java similarity index 89% rename from ebean-core/src/main/java/io/ebeaninternal/server/text/csv/TCsvReader.java rename to ebean-csv-reader/src/main/java/io/ebeaninternal/server/text/csv/TCsvReader.java index 62be82d5c..9d144067c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/text/csv/TCsvReader.java +++ b/ebean-csv-reader/src/main/java/io/ebeaninternal/server/text/csv/TCsvReader.java @@ -2,16 +2,13 @@ package io.ebeaninternal.server.text.csv; import io.ebean.Database; import io.ebean.bean.EntityBean; +import io.ebean.plugin.BeanType; import io.ebean.plugin.ExpressionPath; import io.ebean.text.StringParser; import io.ebean.text.TextException; -import io.ebean.text.TimeStringParser; import io.ebean.text.csv.CsvCallback; import io.ebean.text.csv.CsvReader; import io.ebean.text.csv.DefaultCsvCallback; -import io.ebeaninternal.server.deploy.BeanDescriptor; -import io.ebeaninternal.server.deploy.BeanPropertyAssocOne; -import io.ebeaninternal.server.el.ElPropertyValue; import java.io.Reader; import java.sql.Types; @@ -27,13 +24,13 @@ import java.util.Locale; /** * Implementation of the CsvReader */ -public class TCsvReader implements CsvReader { +public class TCsvReader {//implements CsvReader { private static final TimeStringParser TIME_PARSER = new TimeStringParser(); private final Database server; - private final BeanDescriptor descriptor; + private final BeanType descriptor; private final List columnList = new ArrayList<>(); @@ -55,73 +52,73 @@ public class TCsvReader implements CsvReader { private boolean addPropertiesFromHeader; - public TCsvReader(Database server, BeanDescriptor descriptor) { + public TCsvReader(Database server, BeanType descriptor) { this.server = server; this.descriptor = descriptor; } - @Override + ////@Override public void setDefaultLocale(Locale defaultLocale) { this.defaultLocale = defaultLocale; } - @Override + ////@Override public void setDefaultTimeFormat(String defaultTimeFormat) { this.defaultTimeFormat = defaultTimeFormat; } - @Override + ////@Override public void setDefaultDateFormat(String defaultDateFormat) { this.defaultDateFormat = defaultDateFormat; } - @Override + ////@Override public void setDefaultTimestampFormat(String defaultTimestampFormat) { this.defaultTimestampFormat = defaultTimestampFormat; } - @Override + ////@Override public void setPersistBatchSize(int persistBatchSize) { this.persistBatchSize = persistBatchSize; } - @Override + ////@Override public void setIgnoreHeader() { setHasHeader(true, false); } - @Override + ////@Override public void setAddPropertiesFromHeader() { setHasHeader(true, true); } - @Override + //@Override public void setHasHeader(boolean hasHeader, boolean addPropertiesFromHeader) { this.hasHeader = hasHeader; this.addPropertiesFromHeader = addPropertiesFromHeader; } - @Override + //@Override public void setLogInfoFrequency(int logInfoFrequency) { this.logInfoFrequency = logInfoFrequency; } - @Override + //@Override public void addIgnore() { columnList.add(ignoreColumn); } - @Override + //@Override public void addProperty(String propertyName) { addProperty(propertyName, null); } - @Override + //@Override public void addDateTime(String propertyName, String dateTimeFormat) { addDateTime(propertyName, dateTimeFormat, Locale.getDefault()); } - @Override + //@Override public void addDateTime(String propertyName, String dateTimeFormat, Locale locale) { ExpressionPath elProp = descriptor.expressionPath(propertyName); if (dateTimeFormat == null) { @@ -153,7 +150,7 @@ public class TCsvReader implements CsvReader { } } - @Override + //@Override public void addProperty(String propertyName, StringParser parser) { ExpressionPath elProp = descriptor.expressionPath(propertyName); @@ -164,13 +161,13 @@ public class TCsvReader implements CsvReader { columnList.add(column); } - @Override + //@Override public void process(Reader reader) throws Exception { DefaultCsvCallback callback = new DefaultCsvCallback<>(persistBatchSize, logInfoFrequency); process(reader, callback); } - @Override + //@Override public void process(Reader reader, CsvCallback callback) throws Exception { if (reader == null) { @@ -231,7 +228,8 @@ public class TCsvReader implements CsvReader { private void addPropertiesFromHeader(String[] line) { for (String aLine : line) { - ElPropertyValue elProp = descriptor.elGetValue(aLine); + ExpressionPath elProp = descriptor.expressionPath(aLine); + //ElPropertyValue elProp = descriptor.elGetValue(aLine); if (elProp == null) { throw new TextException("Property [" + aLine + "] not found"); } @@ -242,10 +240,10 @@ public class TCsvReader implements CsvReader { } else if (isDateTimeType(elProp.jdbcType())) { addDateTime(aLine, null, null); - } else if (elProp.isAssocProperty()) { - BeanPropertyAssocOne assocOne = (BeanPropertyAssocOne) elProp.beanProperty(); - String idProp = assocOne.descriptor().idBinder().getIdProperty(); - addProperty(aLine + "." + idProp); +// } else if (elProp.isAssocProperty()) { +// BeanPropertyAssocOne assocOne = (BeanPropertyAssocOne) elProp.beanProperty(); +// String idProp = assocOne.descriptor().idBinder().getIdProperty(); +// addProperty(aLine + "." + idProp); } else { addProperty(aLine); } @@ -260,8 +258,8 @@ public class TCsvReader implements CsvReader { protected T buildBeanFromLineContent(int row, String[] line) { try { - EntityBean entityBean = descriptor.createEntityBean(); - T bean = (T) entityBean; + T bean = descriptor.createBean(); + EntityBean entityBean = (EntityBean)bean; for (int columnPos = 0; columnPos < line.length; columnPos++) { convertAndSetColumn(columnPos, line[columnPos], entityBean); @@ -340,7 +338,7 @@ public class TCsvReader implements CsvReader { this.format = format; } - @Override + //@Override public Object parse(String value) { try { Date dt = dateFormat.parse(value); diff --git a/ebean-api/src/main/java/io/ebean/text/TimeStringParser.java b/ebean-csv-reader/src/main/java/io/ebeaninternal/server/text/csv/TimeStringParser.java similarity index 94% rename from ebean-api/src/main/java/io/ebean/text/TimeStringParser.java rename to ebean-csv-reader/src/main/java/io/ebeaninternal/server/text/csv/TimeStringParser.java index b7c6c9e06..9cdef79de 100644 --- a/ebean-api/src/main/java/io/ebean/text/TimeStringParser.java +++ b/ebean-csv-reader/src/main/java/io/ebeaninternal/server/text/csv/TimeStringParser.java @@ -1,4 +1,6 @@ -package io.ebean.text; +package io.ebeaninternal.server.text.csv; + +import io.ebean.text.StringParser; import java.sql.Time; diff --git a/ebean-test/src/test/java/org/tests/text/csv/TestCsvReader.java b/ebean-csv-reader/src/test/java/io/ebeaninternal/server/text/csv/TestCsvReader.java similarity index 50% rename from ebean-test/src/test/java/org/tests/text/csv/TestCsvReader.java rename to ebean-csv-reader/src/test/java/io/ebeaninternal/server/text/csv/TestCsvReader.java index 7306753f0..bf9fb44ad 100644 --- a/ebean-test/src/test/java/org/tests/text/csv/TestCsvReader.java +++ b/ebean-csv-reader/src/test/java/io/ebeaninternal/server/text/csv/TestCsvReader.java @@ -1,28 +1,37 @@ -package org.tests.text.csv; +package io.ebeaninternal.server.text.csv; import io.ebean.DB; -import io.ebean.xtest.base.TransactionalTestCase; -import io.ebean.text.csv.CsvReader; +import io.ebean.Database; +import io.ebean.plugin.BeanType; import io.ebean.util.IOUtils; +import org.example.Country; +import org.example.Customer; import org.junit.jupiter.api.Test; -import org.tests.model.basic.Customer; -import org.tests.model.basic.ResetBasicData; import java.io.Reader; import java.net.URL; import java.util.Locale; -public class TestCsvReader extends TransactionalTestCase { +class TestCsvReader { @Test - public void test() throws Exception { + void test() throws Exception { - ResetBasicData.reset(); + Country country = new Country(); + country.code("NZ"); + DB.save(country); + + Country au = new Country(); + au.code("AU"); + DB.save(au); URL resource = TestCsvReaderWithCallback.class.getResource("/test1.csv"); - try (Reader reader = IOUtils.newReader(resource.openStream())){ + try (Reader reader = IOUtils.newReader(resource.openStream())) { - CsvReader csvReader = DB.getDefault().createCsvReader(Customer.class); + Database database = DB.getDefault(); + BeanType type = database.pluginApi().beanType(Customer.class); + TCsvReader csvReader = new TCsvReader<>(database, type); + //CsvReader csvReader = DB.getDefault().createCsvReader(Customer.class); csvReader.setPersistBatchSize(2); diff --git a/ebean-csv-reader/src/test/java/io/ebeaninternal/server/text/csv/TestCsvReaderWithCallback.java b/ebean-csv-reader/src/test/java/io/ebeaninternal/server/text/csv/TestCsvReaderWithCallback.java new file mode 100644 index 000000000..77c9e4119 --- /dev/null +++ b/ebean-csv-reader/src/test/java/io/ebeaninternal/server/text/csv/TestCsvReaderWithCallback.java @@ -0,0 +1,47 @@ +package io.ebeaninternal.server.text.csv; + +import org.junit.jupiter.api.Test; + +public class TestCsvReaderWithCallback { + + @Test + public void test() throws Throwable { + +// URL resource = TestCsvReaderWithCallback.class.getResource("/test1.csv"); +// try (Reader reader = IOUtils.newReader(resource.openStream())) { +// +// CsvReader csvReader = DB.getDefault().createCsvReader(Customer.class); +// +// csvReader.setPersistBatchSize(2); +// csvReader.setLogInfoFrequency(3); +// +// csvReader.addIgnore(); +// // csvReader.addProperty("id"); +// csvReader.addProperty("status"); +// csvReader.addProperty("name"); +// csvReader.addDateTime("anniversary", "dd-MMM-yyyy", Locale.ENGLISH); +// csvReader.addProperty("billingAddress.line1"); +// csvReader.addProperty("billingAddress.city"); +// // processor.addReference("billingAddress.country.code"); +// csvReader.addProperty("billingAddress.country.code"); +// +// int before = DB.find(Customer.class).findCount(); +// +// csvReader.process(reader, new DefaultCsvCallback() { +// +// @Override +// public void processBean(int row, String[] lineContent, Customer cust) { +// +// server.save(cust.getBillingAddress(), transaction); +// server.save(cust, transaction); +// +// } +// +// }); +// +// int after = DB.find(Customer.class).findCount(); +// Assertions.assertThat(after).isEqualTo(before + 9); +// } + } + +} diff --git a/ebean-test/src/test/java/org/tests/text/csv/TestTimeStringParser.java b/ebean-csv-reader/src/test/java/io/ebeaninternal/server/text/csv/TimeStringParserTest.java similarity index 79% rename from ebean-test/src/test/java/org/tests/text/csv/TestTimeStringParser.java rename to ebean-csv-reader/src/test/java/io/ebeaninternal/server/text/csv/TimeStringParserTest.java index 5f05cab76..550ba8034 100644 --- a/ebean-test/src/test/java/org/tests/text/csv/TestTimeStringParser.java +++ b/ebean-csv-reader/src/test/java/io/ebeaninternal/server/text/csv/TimeStringParserTest.java @@ -1,14 +1,12 @@ -package org.tests.text.csv; +package io.ebeaninternal.server.text.csv; -import io.ebean.xtest.BaseTestCase; -import io.ebean.text.TimeStringParser; import org.junit.jupiter.api.Test; import java.sql.Time; import static org.junit.jupiter.api.Assertions.*; -public class TestTimeStringParser extends BaseTestCase { +public class TimeStringParserTest { @Test public void testSimple() { diff --git a/ebean-csv-reader/src/test/java/org/example/BaseEntity.java b/ebean-csv-reader/src/test/java/org/example/BaseEntity.java new file mode 100644 index 000000000..d2be50575 --- /dev/null +++ b/ebean-csv-reader/src/test/java/org/example/BaseEntity.java @@ -0,0 +1,48 @@ +package org.example; + +import io.ebean.annotation.WhenCreated; + +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import javax.persistence.Version; +import java.time.Instant; + +@MappedSuperclass +public abstract class BaseEntity { + + @Id + long id; + + @Version + long version; + + @WhenCreated + Instant whenCreated; + + public long id() { + return id; + } + + public BaseEntity id(long id) { + this.id = id; + return this; + } + + public long version() { + return version; + } + + public BaseEntity version(long version) { + this.version = version; + return this; + } + + public Instant whenCreated() { + return whenCreated; + } + + public BaseEntity whenCreated(Instant whenCreated) { + this.whenCreated = whenCreated; + return this; + } +} diff --git a/ebean-csv-reader/src/test/java/org/example/Country.java b/ebean-csv-reader/src/test/java/org/example/Country.java new file mode 100644 index 000000000..15782fb2a --- /dev/null +++ b/ebean-csv-reader/src/test/java/org/example/Country.java @@ -0,0 +1,31 @@ +package org.example; + +import javax.persistence.Entity; +import javax.persistence.Id; + +@Entity +public class Country { + + @Id + String code; + + String name; + + public String code() { + return code; + } + + public Country code(String code) { + this.code = code; + return this; + } + + public String name() { + return name; + } + + public Country name(String name) { + this.name = name; + return this; + } +} diff --git a/ebean-csv-reader/src/test/java/org/example/Customer.java b/ebean-csv-reader/src/test/java/org/example/Customer.java new file mode 100644 index 000000000..53a3fb9fa --- /dev/null +++ b/ebean-csv-reader/src/test/java/org/example/Customer.java @@ -0,0 +1,63 @@ +package org.example; + +import javax.persistence.*; +import java.time.LocalDate; + +import static javax.persistence.CascadeType.PERSIST; + +@Entity +public class Customer extends BaseEntity { + + enum Status { + NEW, + ACTIVE, + INACTIVE + } + + @Enumerated(EnumType.STRING) + Status status; + + String name; + + LocalDate anniversary; + + @ManyToOne(optional = false, cascade = PERSIST) + DAddress billingAddress; + + + public Status status() { + return status; + } + + public Customer status(Status status) { + this.status = status; + return this; + } + + public String name() { + return name; + } + + public Customer name(String name) { + this.name = name; + return this; + } + + public LocalDate anniversary() { + return anniversary; + } + + public Customer anniversary(LocalDate anniversary) { + this.anniversary = anniversary; + return this; + } + + public DAddress billingAddress() { + return billingAddress; + } + + public Customer billingAddress(DAddress billingAddress) { + this.billingAddress = billingAddress; + return this; + } +} diff --git a/ebean-csv-reader/src/test/java/org/example/DAddress.java b/ebean-csv-reader/src/test/java/org/example/DAddress.java new file mode 100644 index 000000000..2c8c2337a --- /dev/null +++ b/ebean-csv-reader/src/test/java/org/example/DAddress.java @@ -0,0 +1,54 @@ +package org.example; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; + +import static javax.persistence.CascadeType.PERSIST; + +@Entity +public class DAddress extends BaseEntity { + + String line1; + + String line2; + String city; + + @ManyToOne(optional = false) + Country country; + + public String line1() { + return line1; + } + + public DAddress line1(String line1) { + this.line1 = line1; + return this; + } + + public String line2() { + return line2; + } + + public DAddress line2(String line2) { + this.line2 = line2; + return this; + } + + public String city() { + return city; + } + + public DAddress city(String city) { + this.city = city; + return this; + } + + public Country country() { + return country; + } + + public DAddress country(Country country) { + this.country = country; + return this; + } +} diff --git a/ebean-csv-reader/src/test/resources/application-test.yml b/ebean-csv-reader/src/test/resources/application-test.yml new file mode 100644 index 000000000..758521ea5 --- /dev/null +++ b/ebean-csv-reader/src/test/resources/application-test.yml @@ -0,0 +1,4 @@ +ebean: + test: + platform: h2 + ddlMode: dropCreate diff --git a/ebean-test/src/test/resources/test1.csv b/ebean-csv-reader/src/test/resources/test1.csv similarity index 100% rename from ebean-test/src/test/resources/test1.csv rename to ebean-csv-reader/src/test/resources/test1.csv diff --git a/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiEbeanServer.java b/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiEbeanServer.java index 34309393c..d4b1eaecf 100644 --- a/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiEbeanServer.java +++ b/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiEbeanServer.java @@ -356,10 +356,6 @@ public class TDSpiEbeanServer extends TDSpiServer implements SpiEbeanServer { return null; } - @Override - public CsvReader createCsvReader(Class beanType) { - return null; - } @Override public Query createNamedQuery(Class beanType, String namedQuery) { diff --git a/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiServer.java b/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiServer.java index 08f2bea9e..a69f25bd7 100644 --- a/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiServer.java +++ b/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiServer.java @@ -103,10 +103,6 @@ public class TDSpiServer implements SpiServer { return null; } - @Override - public CsvReader createCsvReader(Class beanType) { - return null; - } @Override public UpdateQuery update(Class beanType) { diff --git a/ebean-test/src/test/java/org/tests/text/csv/TestCsvReaderWithCallback.java b/ebean-test/src/test/java/org/tests/text/csv/TestCsvReaderWithCallback.java deleted file mode 100644 index cf55d67b1..000000000 --- a/ebean-test/src/test/java/org/tests/text/csv/TestCsvReaderWithCallback.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.tests.text.csv; - -import io.ebean.DB; -import io.ebean.xtest.base.TransactionalTestCase; -import io.ebean.text.csv.CsvReader; -import io.ebean.text.csv.DefaultCsvCallback; -import io.ebean.util.IOUtils; -import org.junit.jupiter.api.Test; -import org.tests.model.basic.Customer; - -import java.io.Reader; -import java.net.URL; -import java.util.Locale; - -import static org.assertj.core.api.Assertions.assertThat; - -public class TestCsvReaderWithCallback extends TransactionalTestCase { - - @Test - public void test() throws Throwable { - - URL resource = TestCsvReaderWithCallback.class.getResource("/test1.csv"); - try (Reader reader = IOUtils.newReader(resource.openStream())) { - - CsvReader csvReader = DB.getDefault().createCsvReader(Customer.class); - - csvReader.setPersistBatchSize(2); - csvReader.setLogInfoFrequency(3); - - csvReader.addIgnore(); - // csvReader.addProperty("id"); - csvReader.addProperty("status"); - csvReader.addProperty("name"); - csvReader.addDateTime("anniversary", "dd-MMM-yyyy", Locale.ENGLISH); - csvReader.addProperty("billingAddress.line1"); - csvReader.addProperty("billingAddress.city"); - // processor.addReference("billingAddress.country.code"); - csvReader.addProperty("billingAddress.country.code"); - - int before = DB.find(Customer.class).findCount(); - - csvReader.process(reader, new DefaultCsvCallback() { - - @Override - public void processBean(int row, String[] lineContent, Customer cust) { - - server.save(cust.getBillingAddress(), transaction); - server.save(cust, transaction); - - } - - }); - - int after = DB.find(Customer.class).findCount(); - assertThat(after).isEqualTo(before + 9); - } - } - -} diff --git a/pom.xml b/pom.xml index 3d04697d5..1bc7781db 100644 --- a/pom.xml +++ b/pom.xml @@ -89,6 +89,7 @@ ebean-redis platforms composites + ebean-csv-reader