This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit c36169804dabc1098efa1fa1d531fda9e8649f3d Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Dec 31 19:38:23 2015 +0100 Ajout d'un nouveau service pour produire les script sql --- .../services/service/SqlScriptProducerRequest.java | 70 ++++++++++++++++++ .../services/service/SqlScriptProducerService.java | 13 ++++ .../service/SqlScriptProducerServiceTopia.java | 82 ++++++++++++++++++++++ .../services/ApplicationContextResource.java | 4 ++ .../service/SqlScriptProducerServiceTopiaTest.java | 81 +++++++++++++++++++++ .../java/fr/ird/observe/test/ObserveFixtures.java | 13 ++++ 6 files changed, 263 insertions(+) diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/SqlScriptProducerRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/SqlScriptProducerRequest.java new file mode 100644 index 0000000..20c2add --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/SqlScriptProducerRequest.java @@ -0,0 +1,70 @@ +package fr.ird.observe.services.service; + +import com.google.common.collect.ImmutableSet; + +/** + * Created on 31/12/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class SqlScriptProducerRequest { + + protected final boolean h2; + protected boolean addSchema; + protected boolean addReferential; + protected boolean addData; + protected ImmutableSet<String> dataIds; + + public static SqlScriptProducerRequest forH2() { + return new SqlScriptProducerRequest(true); + } + + public static SqlScriptProducerRequest forPostgres() { + return new SqlScriptProducerRequest(false); + } + + public SqlScriptProducerRequest addSchema() { + addSchema = true; + return this; + } + + public SqlScriptProducerRequest addReferential() { + addReferential = true; + return this; + } + + public SqlScriptProducerRequest addAllData() { + addData = true; + return this; + } + + public SqlScriptProducerRequest addDataIds(ImmutableSet<String> dataIds) { + addData = true; + this.dataIds = dataIds; + return this; + } + + public boolean isAddSchema() { + return addSchema; + } + + public boolean isAddReferential() { + return addReferential; + } + + protected SqlScriptProducerRequest(boolean h2) { + this.h2 = h2; + } + + public boolean isAddData() { + return addData; + } + + public ImmutableSet<String> getDataIds() { + return dataIds; + } + + public boolean isH2() { + return h2; + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/SqlScriptProducerService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/SqlScriptProducerService.java new file mode 100644 index 0000000..cf37249 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/SqlScriptProducerService.java @@ -0,0 +1,13 @@ +package fr.ird.observe.services.service; + +import fr.ird.observe.services.ObserveService; + +/** + * Created on 31/12/15. + * @author Tony Chemit - chemit@codelutin.com + */ +public interface SqlScriptProducerService extends ObserveService { + + byte[] produceSqlScript(SqlScriptProducerRequest request); + +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/SqlScriptProducerServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/SqlScriptProducerServiceTopia.java new file mode 100644 index 0000000..ac8c592 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/SqlScriptProducerServiceTopia.java @@ -0,0 +1,82 @@ +package fr.ird.observe.services.service; + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.ObserveTopiaApplicationContext; +import fr.ird.observe.entities.SqlDatabaseType; +import fr.ird.observe.services.ObserveServiceTopia; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.zip.GZIPOutputStream; + +/** + * Created on 31/12/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class SqlScriptProducerServiceTopia extends ObserveServiceTopia implements SqlScriptProducerService { + + @Override + public byte[] produceSqlScript(SqlScriptProducerRequest request) { + + try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { + + try (Writer writer = new OutputStreamWriter(new GZIPOutputStream(out))) { + + if (request.isAddSchema()) { + addSchema(request.isH2(), writer); + } + + if (request.isAddReferential()) { + addReferentialSqlScript(writer); + } + + if (request.isAddData()) { + + ImmutableSet<String> dataIds = request.getDataIds(); + if (dataIds == null) { + addAllTrips(writer); + } else { + addTrips(writer, dataIds); + } + + } + + } + + return out.toByteArray(); + + } catch (IOException e) { + throw new RuntimeException("Could not produce sql script", e); + } + + } + + public void addSchema(boolean h2, Writer writer) { + + try { + getObserveTopiaApplicationContext().replicateSchema(h2 ? SqlDatabaseType.h2 : SqlDatabaseType.postgres, serviceContext.getTemporaryDirectoryRoot(), writer); + } catch (IOException e) { + throw new RuntimeException("Could not add schema sql script", e); + } + } + + public void addReferentialSqlScript(Writer writer) { + getObserveTopiaApplicationContext().replicateReferentials(writer); + } + + public void addAllTrips(Writer writer) { + getObserveTopiaApplicationContext().replicateAllTrips(writer); + } + + public void addTrips(Writer writer, ImmutableSet<String> tripIds) { + getObserveTopiaApplicationContext().replicateTrips(writer, tripIds); + } + + protected ObserveTopiaApplicationContext getObserveTopiaApplicationContext() { + return serviceContext.getTopiaApplicationContext(); + } + +} diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/ApplicationContextResource.java b/observe-services-topia/src/test/java/fr/ird/observe/services/ApplicationContextResource.java index a44a1b0..c4657f4 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/ApplicationContextResource.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/ApplicationContextResource.java @@ -263,6 +263,10 @@ public class ApplicationContextResource implements TestRule { return dbVersion; } + public File createTemporaryFile(String suffix) { + return temporaryDirectoryRoot.resolve(System.nanoTime()+suffix).toFile(); + } + /** * Created on 26/12/15. * diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/SqlScriptProducerServiceTopiaTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/SqlScriptProducerServiceTopiaTest.java new file mode 100644 index 0000000..7989941 --- /dev/null +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/SqlScriptProducerServiceTopiaTest.java @@ -0,0 +1,81 @@ +package fr.ird.observe.services.service; + +import fr.ird.observe.test.DatabaseName; +import fr.ird.observe.test.ObserveFixtures; +import fr.ird.observe.test.spi.DatabaseNameConfiguration; +import org.apache.commons.io.IOUtils; +import org.junit.Before; +import org.junit.Test; +import org.nuiton.util.StringUtil; +import org.nuiton.util.TimeLog; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +/** + * Created on 31/12/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class SqlScriptProducerServiceTopiaTest extends AbstractServiceTopiaTest { + + private static final TimeLog timeLog = new TimeLog(SqlScriptProducerServiceTopiaTest.class, 10, 1000); + + protected SqlScriptProducerService service; + + @Before + public void setUp() throws Exception { + service = dataSourceResource.newService(SqlScriptProducerService.class); + } + + @DatabaseNameConfiguration(DatabaseName.empty) + @Test + public void testProduceSchema() throws Exception { + + produce(SqlScriptProducerRequest.forH2().addSchema()); + produce(SqlScriptProducerRequest.forPostgres().addSchema()); + + } + + @DatabaseNameConfiguration(DatabaseName.referentiel) + @Test + public void testProduceReferential() throws Exception { + + produce(SqlScriptProducerRequest.forPostgres().addSchema().addReferential()); + + } + + @DatabaseNameConfiguration(DatabaseName.dataForTestSeine) + @Test + public void testProduceTripSeine() throws Exception { + + produce(SqlScriptProducerRequest.forPostgres().addSchema().addReferential().addAllData()); + produce(SqlScriptProducerRequest.forPostgres().addSchema().addReferential().addDataIds(ObserveFixtures.TRIP_SEINE_IDS)); + + } + + @DatabaseNameConfiguration(DatabaseName.dataForTestLongline) + @Test + public void testProduceTripLongline() throws Exception { + + produce(SqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData()); + produce(SqlScriptProducerRequest.forH2().addSchema().addReferential().addDataIds(ObserveFixtures.TRIP_LONGLINE_IDS)); + + } + + protected void produce(SqlScriptProducerRequest request) throws IOException { + + long time = TimeLog.getTime(); + + File outputFile = applicationContextResource.createTemporaryFile("-out.sql.gz"); + + byte[] gzContent = service.produceSqlScript(request); + + try (FileOutputStream fileOutputStream = new FileOutputStream(outputFile)) { + IOUtils.write(gzContent, fileOutputStream); + } + + timeLog.log(time, "Output file - " + StringUtil.convertMemory(outputFile.length()) + "\n" + outputFile); + } +} \ No newline at end of file diff --git a/observe-test-data/src/main/java/fr/ird/observe/test/ObserveFixtures.java b/observe-test-data/src/main/java/fr/ird/observe/test/ObserveFixtures.java index a15d653..0f84698 100644 --- a/observe-test-data/src/main/java/fr/ird/observe/test/ObserveFixtures.java +++ b/observe-test-data/src/main/java/fr/ird/observe/test/ObserveFixtures.java @@ -1,6 +1,7 @@ package fr.ird.observe.test; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import org.apache.commons.lang3.mutable.MutableLong; import java.util.Map; @@ -21,6 +22,12 @@ public class ObserveFixtures { public static final String TRIP_SEINE_ID_3 = "fr.ird.observe.entities.seine.TripSeine#1360156698296#0.6097793743126777"; + public static final ImmutableSet<String> TRIP_SEINE_IDS = ImmutableSet.of( + TRIP_SEINE_ID_1, + TRIP_SEINE_ID_2, + TRIP_SEINE_ID_3 + ); + public static final String PROGRAM_ID = "fr.ird.observe.entities.referentiel.Program#1239832686262#0.31033946454061234"; public static final String TRIP_LONGLINE_ID_1 = "fr.ird.observe.entities.longline.TripLongline#1429538088091#0.763886003987864"; @@ -29,6 +36,12 @@ public class ObserveFixtures { public static final String TRIP_LONGLINE_ID_3 = "fr.ird.observe.entities.longline.TripLongline#1429537115030#0.493692863034084"; + public static final ImmutableSet<String> TRIP_LONGLINE_IDS = ImmutableSet.of( + TRIP_LONGLINE_ID_1, + TRIP_LONGLINE_ID_2, + TRIP_LONGLINE_ID_3 + ); + public static final String SET_LONGLINE_ID_1 = "fr.ird.observe.entities.longline.SetLongline#1429538714446#0.0876020351424813"; public static final ImmutableMap<String, Long> REFERENTIAL_COMMON_TABLES_COUNT = ImmutableMap -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.