Observe-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
August 2016
- 1 participants
- 200 discussions
09 Aug '16
This is an automated email from the git hooks/post-receive script.
New commit to branch feature/4304_synchro_marees in repository observe.
See https://gitlab.nuiton.org/codelutin/observe.git
commit a747c8225ae4166bdb6fdb243cb9e86b7b9a7bf9
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Mon Aug 8 15:58:50 2016 +0200
use now delete from sql producer instead of hibernate delete
---
.../ui/admin/datasynchro/DataSynchroUIHandler.java | 7 ++-
.../datasynchro/DataSynchronizeDeleteTask.java | 13 +++++
.../datasynchro/DataSynchronizeRequest.java | 21 +++++--
.../datasynchro/DataSynchronizeService.java | 11 ++++
.../datasynchro/DataSynchronizeServiceTopia.java | 65 +++++++++++++---------
5 files changed, 83 insertions(+), 34 deletions(-)
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java
index f59acf1..332bf62 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java
@@ -256,8 +256,8 @@ public class DataSynchroUIHandler extends AdminTabUIHandler {
DefaultListModel<DataSynchronizeTaskSupport> tasks = getStepModel().getTasks();
int size = tasks.size();
- DataSynchronizeRequest.Builder leftDataSynchronizeRequestBuilder = DataSynchronizeRequest.builder(rightSourceIsH2);
- DataSynchronizeRequest.Builder rightDataSynchronizeRequestBuilder = DataSynchronizeRequest.builder(leftSourceIsH2);
+ DataSynchronizeRequest.Builder leftDataSynchronizeRequestBuilder = DataSynchronizeRequest.builder(leftSourceIsH2, rightSourceIsH2);
+ DataSynchronizeRequest.Builder rightDataSynchronizeRequestBuilder = DataSynchronizeRequest.builder(rightSourceIsH2, leftSourceIsH2);
for (int i = 0; i < size; i++) {
DataSynchronizeTaskSupport task = tasks.getElementAt(i);
@@ -292,19 +292,20 @@ public class DataSynchroUIHandler extends AdminTabUIHandler {
}
-
DataSynchronizeService leftDataSynchronizeService = leftSource.newDataSynchronizeService();
DataSynchronizeService rightDataSynchronizeService = rightSource.newDataSynchronizeService();
DataSynchronizeRequest leftDataSynchronizeRequest = leftDataSynchronizeRequestBuilder.build();
if (leftDataSynchronizeRequest.isNotEmpty()) {
rightDataSynchronizeService.prepareRequestOnOppositeDataSource(leftDataSynchronizeRequest);
+ leftDataSynchronizeService.prepareRequestOnDataSource(leftDataSynchronizeRequest);
leftDataSynchronizeService.executeRequest(leftDataSynchronizeRequest);
}
DataSynchronizeRequest rightDataSynchronizeRequest = rightDataSynchronizeRequestBuilder.build();
if (rightDataSynchronizeRequest.isNotEmpty()) {
leftDataSynchronizeService.prepareRequestOnOppositeDataSource(rightDataSynchronizeRequest);
+ rightDataSynchronizeService.prepareRequestOnDataSource(rightDataSynchronizeRequest);
rightDataSynchronizeService.executeRequest(rightDataSynchronizeRequest);
}
diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeDeleteTask.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeDeleteTask.java
index 490eae0..4b457ef 100644
--- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeDeleteTask.java
+++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeDeleteTask.java
@@ -8,7 +8,20 @@ package fr.ird.observe.services.service.actions.datasynchro;
*/
public class DataSynchronizeDeleteTask extends DataSyncrhonizeTaskSupport {
+ /**
+ * Contient le code sql de la copie de la marée.
+ */
+ private byte[] dataContent;
+
public DataSynchronizeDeleteTask(String programId, String tripId) {
super(programId, tripId);
}
+
+ public byte[] getDataContent() {
+ return dataContent;
+ }
+
+ public void setDataContent(byte[] dataContent) {
+ this.dataContent = dataContent;
+ }
}
diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeRequest.java
index 16cc43f..d5fd59d 100644
--- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeRequest.java
+++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeRequest.java
@@ -15,11 +15,15 @@ public class DataSynchronizeRequest {
/** Logger. */
private static final Log log = LogFactory.getLog(DataSynchronizeRequest.class);
- public static Builder builder(boolean oppositeH2) {
- return new Builder(oppositeH2);
+ public static Builder builder(boolean h2, boolean oppositeH2) {
+ return new Builder(h2, oppositeH2);
}
/**
+ * Is data source use h2 ?
+ */
+ private final boolean h2;
+ /**
* Is opposite data source use h2 ?
*/
private final boolean oppositeH2;
@@ -35,16 +39,18 @@ public class DataSynchronizeRequest {
public static class Builder {
+ private final boolean h2;
private final boolean oppositeH2;
private final ImmutableSet.Builder<DataSynchronizeCopyTask> copyTasksBuilder = ImmutableSet.builder();
private final ImmutableSet.Builder<DataSynchronizeDeleteTask> deleteTasksBuilder = ImmutableSet.builder();
- public Builder(boolean oppositeH2) {
+ public Builder(boolean h2, boolean oppositeH2) {
+ this.h2 = h2;
this.oppositeH2 = oppositeH2;
}
public DataSynchronizeRequest build() {
- return new DataSynchronizeRequest(oppositeH2, copyTasksBuilder.build(), deleteTasksBuilder.build());
+ return new DataSynchronizeRequest(h2, oppositeH2, copyTasksBuilder.build(), deleteTasksBuilder.build());
}
public Builder addDeleteTask(DataSynchronizeDeleteTask deleteTask) {
@@ -82,7 +88,12 @@ public class DataSynchronizeRequest {
return oppositeH2;
}
- private DataSynchronizeRequest(boolean oppositeH2, ImmutableSet<DataSynchronizeCopyTask> copyTasks, ImmutableSet<DataSynchronizeDeleteTask> deleteTasks) {
+ public boolean isH2() {
+ return h2;
+ }
+
+ private DataSynchronizeRequest(boolean h2, boolean oppositeH2, ImmutableSet<DataSynchronizeCopyTask> copyTasks, ImmutableSet<DataSynchronizeDeleteTask> deleteTasks) {
+ this.h2 = h2;
this.oppositeH2 = oppositeH2;
this.copyTasks = copyTasks;
this.deleteTasks = deleteTasks;
diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeService.java
index 1f15d58..34882b2 100644
--- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeService.java
+++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeService.java
@@ -26,6 +26,17 @@ public interface DataSynchronizeService extends ObserveService {
void prepareRequestOnOppositeDataSource(DataSynchronizeRequest request);
/**
+ * Prépare la demande donnée en paramètre. Par exemple s'il y a des demandes de suppression, on récupère le code sql de suppression.
+ *
+ * Cette méthode doit être executée sur la base cible.
+ *
+ * @param request la demande des tâches à préparer.
+ */
+ @ReadDataPermission
+ @PostRequest
+ void prepareRequestOnDataSource(DataSynchronizeRequest request);
+
+ /**
* Exécution de la demande donnée en paramètre.
*
* Cette méthode doit être exécutée sur la base cible.
diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeServiceTopia.java
index 3dead6c..b4c6e4e 100644
--- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeServiceTopia.java
+++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeServiceTopia.java
@@ -2,13 +2,10 @@ package fr.ird.observe.services.service.actions.datasynchro;
import com.google.common.collect.ImmutableSet;
import fr.ird.observe.entities.Entities;
-import fr.ird.observe.entities.longline.TripLongline;
-import fr.ird.observe.entities.longline.TripLonglineTopiaDao;
-import fr.ird.observe.entities.seine.TripSeine;
-import fr.ird.observe.entities.seine.TripSeineTopiaDao;
import fr.ird.observe.services.ObserveServiceContextTopia;
import fr.ird.observe.services.ObserveServiceTopia;
-import fr.ird.observe.services.service.SqlScriptProducerRequest;
+import fr.ird.observe.services.service.AddSqlScriptProducerRequest;
+import fr.ird.observe.services.service.DeleteSqlScriptProducerRequest;
import fr.ird.observe.services.service.SqlScriptProducerService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -38,19 +35,19 @@ public class DataSynchronizeServiceTopia extends ObserveServiceTopia implements
for (DataSynchronizeCopyTask copyTask : request.getCopyTasks()) {
if (log.isInfoEnabled()) {
- log.info("Obtain trip sql content: " + copyTask.getProgramId() + " / " + copyTask.getTripId());
+ log.info("Obtain trip sql copy content: " + copyTask.getProgramId() + " / " + copyTask.getTripId());
}
// get the data content
- SqlScriptProducerRequest sqlRequest;
+ AddSqlScriptProducerRequest sqlRequest;
if (request.isOppositeH2()) {
- sqlRequest = SqlScriptProducerRequest.forH2();
+ sqlRequest = AddSqlScriptProducerRequest.forH2();
} else {
- sqlRequest = SqlScriptProducerRequest.forPostgres();
+ sqlRequest = AddSqlScriptProducerRequest.forPostgres();
}
- sqlRequest.addDataIds(ImmutableSet.of(copyTask.getTripId()));
- byte[] sqlScript = sqlScriptProducerService.produceSqlScript(sqlRequest);
+ sqlRequest.dataIdsToAdd(ImmutableSet.of(copyTask.getTripId()));
+ byte[] sqlScript = sqlScriptProducerService.produceAddSqlScript(sqlRequest);
// store it in task
copyTask.setDataContent(sqlScript);
@@ -60,36 +57,52 @@ public class DataSynchronizeServiceTopia extends ObserveServiceTopia implements
}
@Override
- public void executeRequest(DataSynchronizeRequest request) {
-
- TripSeineTopiaDao tripSeineDao = serviceContext.getTopiaPersistenceContext().getTripSeineDao();
- TripLonglineTopiaDao tripLonglineDao = serviceContext.getTopiaPersistenceContext().getTripLonglineDao();
+ public void prepareRequestOnDataSource(DataSynchronizeRequest request) {
for (DataSynchronizeDeleteTask deleteTask : request.getDeleteTasks()) {
String tripId = deleteTask.getTripId();
boolean longlineId = Entities.isLonglineId(tripId);
- if (longlineId) {
+ if (log.isInfoEnabled()) {
+ log.info("Obtain trip sql delete content: " + deleteTask.getProgramId() + " / " + deleteTask.getTripId());
+ }
- if (log.isInfoEnabled()) {
- log.info("Delete longline trip: " + deleteTask.getProgramId() + " / " + deleteTask.getTripId());
- }
- TripLongline tripLongline = tripLonglineDao.forTopiaIdEquals(tripId).findUnique();
- tripLonglineDao.delete(tripLongline);
+ // get the data content
+ DeleteSqlScriptProducerRequest sqlRequest;
+ if (request.isH2()) {
+ sqlRequest = DeleteSqlScriptProducerRequest.forH2();
} else {
+ sqlRequest = DeleteSqlScriptProducerRequest.forPostgres();
+ }
+ sqlRequest.dataIdsToDelete(ImmutableSet.of(deleteTask.getTripId()));
+ byte[] sqlScript = sqlScriptProducerService.produceDeleteSqlScript(sqlRequest);
+
+ // store it in task
+ deleteTask.setDataContent(sqlScript);
+
+ }
+ }
+
+ @Override
+ public void executeRequest(DataSynchronizeRequest request) {
+
+ for (DataSynchronizeDeleteTask deleteTask : request.getDeleteTasks()) {
- if (log.isInfoEnabled()) {
- log.info("Delete seine trip: " + deleteTask.getProgramId() + " / " + deleteTask.getTripId());
- }
- TripSeine tripSeine = tripSeineDao.forTopiaIdEquals(tripId).findUnique();
- tripSeineDao.delete(tripSeine);
+ String tripId = deleteTask.getTripId();
+ boolean longlineId = Entities.isLonglineId(tripId);
+ if (log.isInfoEnabled()) {
+ log.info("Delete trip: " + deleteTask.getProgramId() + " / " + deleteTask.getTripId());
}
+ serviceContext.getTopiaApplicationContext().executeSqlStatements(deleteTask.getDataContent());
}
+ // need to flush to make deletion complete, before to execute the copy sql script
+ serviceContext.getTopiaPersistenceContext().flush();
+
for (DataSynchronizeCopyTask copyTask : request.getCopyTasks()) {
if (log.isInfoEnabled()) {
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0
This is an automated email from the git hooks/post-receive script.
New commit to branch feature/4304_synchro_marees in repository observe.
See https://gitlab.nuiton.org/codelutin/observe.git
commit 325892a388a64041f06ab5ce86d9c25e3fb68bc6
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Mon Aug 8 15:58:30 2016 +0200
Add more logs
---
.../src/main/java/fr/ird/observe/RunScriptTopiaSqlWork.java | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/observe-entities/src/main/java/fr/ird/observe/RunScriptTopiaSqlWork.java b/observe-entities/src/main/java/fr/ird/observe/RunScriptTopiaSqlWork.java
index b5ea405..aa63ad4 100644
--- a/observe-entities/src/main/java/fr/ird/observe/RunScriptTopiaSqlWork.java
+++ b/observe-entities/src/main/java/fr/ird/observe/RunScriptTopiaSqlWork.java
@@ -22,6 +22,8 @@ package fr.ird.observe;
* #L%
*/
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.nuiton.topia.persistence.TopiaException;
import org.nuiton.topia.persistence.support.TopiaSqlWork;
import org.nuiton.util.GZUtil;
@@ -45,6 +47,9 @@ import java.util.zip.GZIPInputStream;
*/
public class RunScriptTopiaSqlWork implements TopiaSqlWork {
+ /** Logger. */
+ private static final Log log = LogFactory.getLog(RunScriptTopiaSqlWork.class);
+
protected final byte[] content;
protected final boolean gzip;
protected final int batchSize;
@@ -87,6 +92,9 @@ public class RunScriptTopiaSqlWork implements TopiaSqlWork {
}
if (trimLine.endsWith(";")) {
statement.addBatch(command);
+ if (log.isDebugEnabled()) {
+ log.debug("Sql statement: " + command);
+ }
batchSize++;
command = null;
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0
09 Aug '16
This is an automated email from the git hooks/post-receive script.
New commit to branch feature/4304_synchro_marees in repository observe.
See https://gitlab.nuiton.org/codelutin/observe.git
commit 7b3d335ae09b5e9e76cf68d07c92a52f6b684552
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Mon Aug 8 15:58:20 2016 +0200
Introduce delete request in SqlScriptProducerService
---
.../java/fr/ird/observe/ui/admin/AdminUIModel.java | 1 +
.../observe/ui/admin/save/SaveLocalUIHandler.java | 6 +-
.../ird/observe/ui/storage/StorageUIHandler.java | 10 +--
.../fr/ird/observe/ui/storage/StorageUIModel.java | 6 +-
.../v1/SqlScriptProducerServiceController.java | 11 ++-
.../injector/SqlScriptProducerRequestInjector.java | 12 ++--
...quest.java => AddSqlScriptProducerRequest.java} | 20 +++---
...st.java => DeleteSqlScriptProducerRequest.java} | 50 ++++---------
.../services/service/SqlScriptProducerService.java | 4 +-
.../services/service/DataSourceServiceTopia.java | 22 +++---
.../service/SqlScriptProducerServiceTopia.java | 84 +++++++++++++++++++++-
.../actions/export/ReplicateTripServiceTopia.java | 6 +-
.../services/service/MigrateTestsDatabases.java | 24 +++----
.../service/SqlScriptProducerServiceTopiaTest.java | 18 ++---
14 files changed, 169 insertions(+), 105 deletions(-)
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java
index 9776e7c..e6133bd 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java
@@ -822,6 +822,7 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
localSourceInformation = localSource.checkCanConnect();
} catch (Exception e) {
+ //FIXME ! il faut faire quelque chose dans ce cas précis, au moins avertir l'utilisateur
if (log.isErrorEnabled()) {
log.error("unable to find local source information", e);
}
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/save/SaveLocalUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/save/SaveLocalUIHandler.java
index 8d3bd23..8762b78 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/save/SaveLocalUIHandler.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/save/SaveLocalUIHandler.java
@@ -22,7 +22,7 @@
package fr.ird.observe.ui.admin.save;
import fr.ird.observe.db.ObserveSwingDataSource;
-import fr.ird.observe.services.service.SqlScriptProducerRequest;
+import fr.ird.observe.services.service.AddSqlScriptProducerRequest;
import fr.ird.observe.services.service.SqlScriptProducerService;
import fr.ird.observe.services.service.actions.synchro.UnidirectionalReferentialSynchronizeContext;
import fr.ird.observe.services.service.actions.synchro.UnidirectionalReferentialSynchronizeEngine;
@@ -155,8 +155,8 @@ public class SaveLocalUIHandler extends AdminTabUIHandler {
File backupFile = stepModel.getBackupFile();
SqlScriptProducerService dumpService = source.newSqlScriptProducerService();
- SqlScriptProducerRequest request = SqlScriptProducerRequest.forH2().addAllData();
- byte[] dump = dumpService.produceSqlScript(request);
+ AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2().addAllData();
+ byte[] dump = dumpService.produceAddSqlScript(request);
try (FileOutputStream outputStream = new FileOutputStream(backupFile)) {
IOUtils.write(dump, outputStream);
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java
index 34a5147..c353459 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java
@@ -44,7 +44,7 @@ import fr.ird.observe.services.configuration.ObserveDataSourceInformation;
import fr.ird.observe.services.dto.DataReference;
import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto;
import fr.ird.observe.services.dto.ObserveDbUserDto;
-import fr.ird.observe.services.service.SqlScriptProducerRequest;
+import fr.ird.observe.services.service.AddSqlScriptProducerRequest;
import fr.ird.observe.services.service.SqlScriptProducerService;
import fr.ird.observe.ui.ObserveMainUI;
import fr.ird.observe.ui.UIHelper;
@@ -602,8 +602,8 @@ public class StorageUIHandler {
log.debug(dst);
}
- SqlScriptProducerRequest request = SqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData();
- byte[] dataDump = dumpProducerService.produceSqlScript(request);
+ AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData();
+ byte[] dataDump = dumpProducerService.produceAddSqlScript(request);
try (FileOutputStream outputStream = new FileOutputStream(dst)) {
@@ -655,8 +655,8 @@ public class StorageUIHandler {
ImmutableSet<String> tripIds = ImmutableSet.copyOf(Iterables.transform(trips, DataReference.getIdFunction()));
- SqlScriptProducerRequest request = SqlScriptProducerRequest.forH2().addSchema().addReferential().addDataIds(tripIds);
- byte[] dump = dumpService.produceSqlScript(request);
+ AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2().addSchema().addReferential().dataIdsToAdd(tripIds);
+ byte[] dump = dumpService.produceAddSqlScript(request);
try (FileOutputStream fileOutputStream = new FileOutputStream(dst)) {
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java
index 89f63fe..67defd8 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java
@@ -44,11 +44,11 @@ import fr.ird.observe.services.security.UnknownObserveWebUserException;
import fr.ird.observe.services.security.UnknownObserveWebUserForDatabaseException;
import fr.ird.observe.services.security.UserLoginNotFoundException;
import fr.ird.observe.services.security.UserPasswordNotFoundException;
+import fr.ird.observe.services.service.AddSqlScriptProducerRequest;
import fr.ird.observe.services.service.BabModelVersionException;
import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.services.service.DatabaseNotFoundException;
import fr.ird.observe.services.service.PingService;
-import fr.ird.observe.services.service.SqlScriptProducerRequest;
import fr.ird.observe.services.service.SqlScriptProducerService;
import fr.ird.observe.ui.storage.tabs.DataSelectionModel;
import fr.ird.observe.ui.storage.tabs.SecurityModel;
@@ -1597,8 +1597,8 @@ public class StorageUIModel extends WizardModel<StorageStep> {
SqlScriptProducerService dumpService = source.newSqlScriptProducerService();
- SqlScriptProducerRequest request = SqlScriptProducerRequest.forH2().addSchema().addReferential();
- byte[] dump = dumpService.produceSqlScript(request);
+ AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2().addSchema().addReferential();
+ byte[] dump = dumpService.produceAddSqlScript(request);
result.setImportDatabase(dump);
}
diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/SqlScriptProducerServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/SqlScriptProducerServiceController.java
index 82cafc9..82b13ec 100644
--- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/SqlScriptProducerServiceController.java
+++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/SqlScriptProducerServiceController.java
@@ -22,7 +22,8 @@ package fr.ird.observe.application.web.controller.v1;
* #L%
*/
-import fr.ird.observe.services.service.SqlScriptProducerRequest;
+import fr.ird.observe.services.service.DeleteSqlScriptProducerRequest;
+import fr.ird.observe.services.service.AddSqlScriptProducerRequest;
import fr.ird.observe.services.service.SqlScriptProducerService;
/**
@@ -35,8 +36,12 @@ public class SqlScriptProducerServiceController extends ObserveAuthenticatedServ
}
@Override
- public byte[] produceSqlScript(SqlScriptProducerRequest request) {
- return service.produceSqlScript(request);
+ public byte[] produceAddSqlScript(AddSqlScriptProducerRequest request) {
+ return service.produceAddSqlScript(request);
}
+ @Override
+ public byte[] produceDeleteSqlScript(DeleteSqlScriptProducerRequest request) {
+ return service.produceDeleteSqlScript(request);
+ }
}
diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/injector/SqlScriptProducerRequestInjector.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/injector/SqlScriptProducerRequestInjector.java
index 29771b6..33fb257 100644
--- a/observe-application-web/src/main/java/fr/ird/observe/application/web/injector/SqlScriptProducerRequestInjector.java
+++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/injector/SqlScriptProducerRequestInjector.java
@@ -24,7 +24,7 @@ package fr.ird.observe.application.web.injector;
import com.google.common.base.Preconditions;
import com.google.gson.Gson;
-import fr.ird.observe.services.service.SqlScriptProducerRequest;
+import fr.ird.observe.services.service.AddSqlScriptProducerRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.debux.webmotion.server.call.Call;
@@ -50,9 +50,9 @@ public class SqlScriptProducerRequestInjector implements ExecutorParametersInjec
@Override
public Object getValue(Mapping mapping, Call call, String name, Class<?> type, Type generic) {
- SqlScriptProducerRequest sqlScriptProducerRequest = null;
+ AddSqlScriptProducerRequest addSqlScriptProducerRequest = null;
- if (type.equals(SqlScriptProducerRequest.class)) {
+ if (type.equals(AddSqlScriptProducerRequest.class)) {
Call.ParameterTree parameterTree = call.getParameterTree().getObject().get(name);
@@ -60,15 +60,15 @@ public class SqlScriptProducerRequestInjector implements ExecutorParametersInjec
String gsonContent = ((String[]) parameterTree.getValue())[0];
- sqlScriptProducerRequest = gson.fromJson(gsonContent, SqlScriptProducerRequest.class);
+ addSqlScriptProducerRequest = gson.fromJson(gsonContent, AddSqlScriptProducerRequest.class);
if (log.isInfoEnabled()) {
- log.info("Inject sqlScriptProducerRequest: " + sqlScriptProducerRequest);
+ log.info("Inject addSqlScriptProducerRequest: " + addSqlScriptProducerRequest);
}
}
- return sqlScriptProducerRequest;
+ return addSqlScriptProducerRequest;
}
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/AddSqlScriptProducerRequest.java
similarity index 80%
copy from observe-services-api/src/main/java/fr/ird/observe/services/service/SqlScriptProducerRequest.java
copy to observe-services-api/src/main/java/fr/ird/observe/services/service/AddSqlScriptProducerRequest.java
index 48040ef..61c89ad 100644
--- 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/AddSqlScriptProducerRequest.java
@@ -32,7 +32,7 @@ import java.util.stream.Collectors;
*
* @author Tony Chemit - chemit(a)codelutin.com
*/
-public class SqlScriptProducerRequest {
+public class AddSqlScriptProducerRequest {
protected final boolean postgres;
protected boolean addSchema;
@@ -40,30 +40,30 @@ public class SqlScriptProducerRequest {
protected boolean addData;
protected ImmutableSet<String> dataIds;
- public static SqlScriptProducerRequest forH2() {
- return new SqlScriptProducerRequest(false);
+ public static AddSqlScriptProducerRequest forH2() {
+ return new AddSqlScriptProducerRequest(false);
}
- public static SqlScriptProducerRequest forPostgres() {
- return new SqlScriptProducerRequest(true);
+ public static AddSqlScriptProducerRequest forPostgres() {
+ return new AddSqlScriptProducerRequest(true);
}
- public SqlScriptProducerRequest addSchema() {
+ public AddSqlScriptProducerRequest addSchema() {
addSchema = true;
return this;
}
- public SqlScriptProducerRequest addReferential() {
+ public AddSqlScriptProducerRequest addReferential() {
addReferential = true;
return this;
}
- public SqlScriptProducerRequest addAllData() {
+ public AddSqlScriptProducerRequest addAllData() {
addData = true;
return this;
}
- public SqlScriptProducerRequest addDataIds(ImmutableSet<String> dataIds) {
+ public AddSqlScriptProducerRequest dataIdsToAdd(ImmutableSet<String> dataIds) {
addData = true;
this.dataIds = dataIds;
return this;
@@ -77,7 +77,7 @@ public class SqlScriptProducerRequest {
return addReferential;
}
- protected SqlScriptProducerRequest(boolean postgres) {
+ protected AddSqlScriptProducerRequest(boolean postgres) {
this.postgres = postgres;
}
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/DeleteSqlScriptProducerRequest.java
similarity index 60%
rename from observe-services-api/src/main/java/fr/ird/observe/services/service/SqlScriptProducerRequest.java
rename to observe-services-api/src/main/java/fr/ird/observe/services/service/DeleteSqlScriptProducerRequest.java
index 48040ef..bbcc54a 100644
--- 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/DeleteSqlScriptProducerRequest.java
@@ -32,57 +32,37 @@ import java.util.stream.Collectors;
*
* @author Tony Chemit - chemit(a)codelutin.com
*/
-public class SqlScriptProducerRequest {
+public class DeleteSqlScriptProducerRequest {
protected final boolean postgres;
- protected boolean addSchema;
- protected boolean addReferential;
- protected boolean addData;
+ protected boolean deleteData;
protected ImmutableSet<String> dataIds;
- public static SqlScriptProducerRequest forH2() {
- return new SqlScriptProducerRequest(false);
+ public static DeleteSqlScriptProducerRequest forH2() {
+ return new DeleteSqlScriptProducerRequest(false);
}
- public static SqlScriptProducerRequest forPostgres() {
- return new SqlScriptProducerRequest(true);
+ public static DeleteSqlScriptProducerRequest forPostgres() {
+ return new DeleteSqlScriptProducerRequest(true);
}
- public SqlScriptProducerRequest addSchema() {
- addSchema = true;
+ public DeleteSqlScriptProducerRequest deleteAllData() {
+ deleteData = 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;
+ public DeleteSqlScriptProducerRequest dataIdsToDelete(ImmutableSet<String> dataIds) {
+ deleteData = true;
this.dataIds = dataIds;
return this;
}
- public boolean isAddSchema() {
- return addSchema;
- }
-
- public boolean isAddReferential() {
- return addReferential;
- }
-
- protected SqlScriptProducerRequest(boolean postgres) {
+ protected DeleteSqlScriptProducerRequest(boolean postgres) {
this.postgres = postgres;
}
- public boolean isAddData() {
- return addData;
+ public boolean isDeleteData() {
+ return deleteData;
}
public ImmutableSet<String> getDataIds() {
@@ -101,9 +81,7 @@ public class SqlScriptProducerRequest {
public String toString() {
return MoreObjects.toStringHelper(this)
.add("postgres", postgres)
- .add("addSchema", addSchema)
- .add("addReferential", addReferential)
- .add("addData", addData)
+ .add("deleteData", deleteData)
.add("dataIds", dataIds == null ? "" : "[" + dataIds.stream().collect(Collectors.joining(", ")) + "]")
.toString();
}
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
index fd0fae8..50ce8b9 100644
--- 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
@@ -31,5 +31,7 @@ import fr.ird.observe.services.ObserveService;
*/
public interface SqlScriptProducerService extends ObserveService {
- byte[] produceSqlScript(SqlScriptProducerRequest request);
+ byte[] produceAddSqlScript(AddSqlScriptProducerRequest request);
+
+ byte[] produceDeleteSqlScript(DeleteSqlScriptProducerRequest request);
}
diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java
index 95fc070..00095d2 100644
--- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java
+++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java
@@ -204,8 +204,8 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS
temporaryTopiaApplicationContext.getMigrationService().runSchemaMigration();
SqlScriptProducerService dumpProducerService = serviceContext.newService(temporaryConfiguration, SqlScriptProducerService.class);
- SqlScriptProducerRequest request = SqlScriptProducerRequest.forPostgres().addSchema().addReferential().addAllData();
- byte[] dump = dumpProducerService.produceSqlScript(request);
+ AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forPostgres().addSchema().addReferential().addAllData();
+ byte[] dump = dumpProducerService.produceAddSqlScript(request);
topiaApplicationContext.executeSqlStatements(dump);
topiaApplicationContext.getMigrationService().createSchemaIfNotExist();
topiaApplicationContext.getMigrationService().runSchemaMigration();
@@ -253,11 +253,11 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS
ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
- SqlScriptProducerRequest request;
+ AddSqlScriptProducerRequest request;
if (((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration).isH2Database()) {
- request = SqlScriptProducerRequest.forH2();
+ request = AddSqlScriptProducerRequest.forH2();
} else {
- request = SqlScriptProducerRequest.forPostgres();
+ request = AddSqlScriptProducerRequest.forPostgres();
}
request.addReferential();
@@ -270,7 +270,7 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS
ObserveDataSourceConnection importDataSourceConnection = dataSourceService.open(importDataSourceConfiguration);
SqlScriptProducerService dumpProducerService = serviceContext.newService(importDataSourceConnection, SqlScriptProducerService.class);
- referentialDump = dumpProducerService.produceSqlScript(request);
+ referentialDump = dumpProducerService.produceAddSqlScript(request);
} finally {
dataSourceService.close();
@@ -288,11 +288,11 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS
ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
- SqlScriptProducerRequest request;
+ AddSqlScriptProducerRequest request;
if (((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration).isH2Database()) {
- request = SqlScriptProducerRequest.forH2();
+ request = AddSqlScriptProducerRequest.forH2();
} else {
- request = SqlScriptProducerRequest.forPostgres();
+ request = AddSqlScriptProducerRequest.forPostgres();
}
if (!referantialImported) {
@@ -310,7 +310,7 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS
log.info("Get data: " + importDataIds);
}
- request.addDataIds(importDataIds);
+ request.dataIdsToAdd(importDataIds);
DataSourceService dataSourceService = serviceContext.newService(importDataSourceConfiguration, DataSourceService.class);
@@ -320,7 +320,7 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS
ObserveDataSourceConnection importDataSourceConnection = dataSourceService.open(importDataSourceConfiguration);
SqlScriptProducerService dumpProducerService = serviceContext.newService(importDataSourceConnection, SqlScriptProducerService.class);
- dataDump = dumpProducerService.produceSqlScript(request);
+ dataDump = dumpProducerService.produceAddSqlScript(request);
} finally {
dataSourceService.close();
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
index e2c4cc9..bb8a17d 100644
--- 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
@@ -51,9 +51,9 @@ public class SqlScriptProducerServiceTopia extends ObserveServiceTopia implement
private static final Log log = LogFactory.getLog(SqlScriptProducerServiceTopia.class);
@Override
- public byte[] produceSqlScript(SqlScriptProducerRequest request) {
+ public byte[] produceAddSqlScript(AddSqlScriptProducerRequest request) {
if (log.isTraceEnabled()) {
- log.trace("produceSqlScript(" + request + ")");
+ log.trace("produceAddSqlScript(" + request + ")");
}
try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
@@ -75,7 +75,31 @@ public class SqlScriptProducerServiceTopia extends ObserveServiceTopia implement
}
- protected SqlRequests sqlRequests(SqlScriptProducerRequest request, SqlRequests.Builder builder) {
+ @Override
+ public byte[] produceDeleteSqlScript(DeleteSqlScriptProducerRequest request) {
+ if (log.isTraceEnabled()) {
+ log.trace("produceDeleteSqlScript(" + request + ")");
+ }
+ try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+
+ try (Writer writer = new OutputStreamWriter(new GZIPOutputStream(out))) {
+
+ TopiaSqlBatchService sqlBatchService = serviceContext.getTopiaApplicationContext().getSqlBatchService();
+ SqlRequests.Builder builder = sqlBatchService.requestBuilder().to(writer);
+
+ SqlRequests sqlRequests = sqlRequests(request, builder);
+ sqlBatchService.execute(sqlRequests);
+
+ }
+
+ return out.toByteArray();
+
+ } catch (IOException e) {
+ throw new RuntimeException("Could not produce delete sql script", e);
+ }
+ }
+
+ protected SqlRequests sqlRequests(AddSqlScriptProducerRequest request, SqlRequests.Builder builder) {
if (request.isAddSchema()) {
@@ -152,4 +176,58 @@ public class SqlScriptProducerServiceTopia extends ObserveServiceTopia implement
return builder.build();
}
+ protected SqlRequests sqlRequests(DeleteSqlScriptProducerRequest request, SqlRequests.Builder builder) {
+
+ ObserveTopiaApplicationContext topiaApplicationContext = serviceContext.getTopiaApplicationContext();
+
+ if (request.isDeleteData()) {
+
+ ImmutableSet<String> tripIds = request.getDataIds();
+ if (tripIds == null) {
+
+ builder.deleteTablesBuilder()
+ .setTables(topiaApplicationContext.getTripSeineTables())
+ .replicateTablesBuilder()
+ .setTables(topiaApplicationContext.getTripLonglineTables())
+ .flush();
+
+ } else {
+
+ {
+
+ Set<String> tripIds1 = Sets.newHashSet(Iterables.filter(tripIds, Entities.IS_SEINE_ID::test));
+
+ if (!tripIds1.isEmpty()) {
+
+ builder.deleteTablesBuilder()
+ .setTables(topiaApplicationContext.getTripSeineTables())
+ .setSelectArgument(TopiaSqlTableSelectArgument.of(tripIds1))
+ .flush();
+
+ }
+
+ }
+
+ {
+
+ Set<String> tripIds1 = Sets.newHashSet(Iterables.filter(tripIds, Entities.IS_LONGLINE_ID::test));
+
+ if (!tripIds1.isEmpty()) {
+
+ builder.deleteTablesBuilder()
+ .setTables(topiaApplicationContext.getTripLonglineTables())
+ .setSelectArgument(TopiaSqlTableSelectArgument.of(tripIds1))
+ .flush();
+
+ }
+
+ }
+
+ }
+
+ }
+
+ return builder.build();
+ }
+
}
diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripServiceTopia.java
index b606b28..fbaf1bf 100644
--- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripServiceTopia.java
+++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/export/ReplicateTripServiceTopia.java
@@ -26,7 +26,7 @@ import com.google.common.collect.ImmutableSet;
import fr.ird.observe.ObserveTopiaApplicationContext;
import fr.ird.observe.services.ObserveServiceTopia;
import fr.ird.observe.services.dto.IdDtos;
-import fr.ird.observe.services.service.SqlScriptProducerRequest;
+import fr.ird.observe.services.service.AddSqlScriptProducerRequest;
import fr.ird.observe.services.service.SqlScriptProducerService;
import fr.ird.observe.services.service.longline.TripLonglineService;
import fr.ird.observe.services.service.seine.TripSeineService;
@@ -49,9 +49,9 @@ public class ReplicateTripServiceTopia extends ObserveServiceTopia implements Re
String tripId = replicateTripExportRequest.getTripId();
- SqlScriptProducerRequest request = SqlScriptProducerRequest.forPostgres().addDataIds(ImmutableSet.of(tripId));
+ AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forPostgres().dataIdsToAdd(ImmutableSet.of(tripId));
- byte[] tripContent = sqlScriptProducerService.produceSqlScript(request);
+ byte[] tripContent = sqlScriptProducerService.produceAddSqlScript(request);
resultBuilder.addTripToReplicate(replicateTripExportRequest, tripContent);
diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/MigrateTestsDatabases.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/MigrateTestsDatabases.java
index 3567ade..a9e0b6c 100644
--- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/MigrateTestsDatabases.java
+++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/MigrateTestsDatabases.java
@@ -63,44 +63,44 @@ public class MigrateTestsDatabases extends AbstractServiceTopiaTest {
@DatabaseNameConfiguration(DatabaseName.referentiel)
@Test
public void migrateReferentielDb() throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
- SqlScriptProducerRequest request = SqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData();
- migrate(service.produceSqlScript(request));
+ AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData();
+ migrate(service.produceAddSqlScript(request));
}
@DatabaseNameConfiguration(DatabaseName.dataForTestSeine)
@Test
public void migrateDataForTestSeineDb() throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
- SqlScriptProducerRequest request = SqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData();
- migrate(service.produceSqlScript(request));
+ AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData();
+ migrate(service.produceAddSqlScript(request));
}
@DatabaseNameConfiguration(DatabaseName.dataForTestLongline)
@Test
public void migrateDataForTestLonglineDb() throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
- SqlScriptProducerRequest request = SqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData();
- migrate(service.produceSqlScript(request));
+ AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData();
+ migrate(service.produceAddSqlScript(request));
}
@DatabaseNameConfiguration(DatabaseName.empty_h2)
@Test
public void migrateEmptyH2Db() throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
- SqlScriptProducerRequest request = SqlScriptProducerRequest.forH2().addSchema();
- migrate(service.produceSqlScript(request));
+ AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2().addSchema();
+ migrate(service.produceAddSqlScript(request));
}
@DatabaseVersionConfiguration("4.903")
@DatabaseNameConfiguration(DatabaseName.dataForTestUnidirectionalReferentialSynchro)
@Test
public void migrateDataForTestUnidirectionalReferentialSynchroDb() throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
- SqlScriptProducerRequest request = SqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData();
- migrate(service.produceSqlScript(request));
+ AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData();
+ migrate(service.produceAddSqlScript(request));
}
@DatabaseNameConfiguration(DatabaseName.empty_h2)
@Test
public void migrateEmptyPgDb() throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
- SqlScriptProducerRequest request = SqlScriptProducerRequest.forPostgres().addSchema();
- migrate(DatabaseName.empty_pg.name(), service.produceSqlScript(request));
+ AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forPostgres().addSchema();
+ migrate(DatabaseName.empty_pg.name(), service.produceAddSqlScript(request));
}
protected void migrate(byte[] dump) throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, DatabaseNotFoundException, BabModelVersionException, DatabaseConnexionNotAuthorizedException {
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
index 194a9f6..364c9bc 100644
--- 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
@@ -55,8 +55,8 @@ public class SqlScriptProducerServiceTopiaTest extends AbstractServiceTopiaTest
@Test
public void testProduceSchema() throws Exception {
- produce(SqlScriptProducerRequest.forH2().addSchema());
- produce(SqlScriptProducerRequest.forPostgres().addSchema());
+ produce(AddSqlScriptProducerRequest.forH2().addSchema());
+ produce(AddSqlScriptProducerRequest.forPostgres().addSchema());
}
@@ -64,7 +64,7 @@ public class SqlScriptProducerServiceTopiaTest extends AbstractServiceTopiaTest
@Test
public void testProduceReferential() throws Exception {
- produce(SqlScriptProducerRequest.forPostgres().addSchema().addReferential());
+ produce(AddSqlScriptProducerRequest.forPostgres().addSchema().addReferential());
}
@@ -72,8 +72,8 @@ public class SqlScriptProducerServiceTopiaTest extends AbstractServiceTopiaTest
@Test
public void testProduceTripSeine() throws Exception {
-// produce(SqlScriptProducerRequest.forPostgres().addSchema().addReferential().addAllData());
- produce(SqlScriptProducerRequest.forPostgres().addSchema().addReferential().addDataIds(ObserveFixtures.TRIP_SEINE_IDS));
+// produce(AddSqlScriptProducerRequest.forPostgres().addSchema().addReferential().addAllData());
+ produce(AddSqlScriptProducerRequest.forPostgres().addSchema().addReferential().dataIdsToAdd(ObserveFixtures.TRIP_SEINE_IDS));
}
@@ -81,18 +81,18 @@ public class SqlScriptProducerServiceTopiaTest extends AbstractServiceTopiaTest
@Test
public void testProduceTripLongline() throws Exception {
- produce(SqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData());
-// produce(SqlScriptProducerRequest.forH2().addSchema().addReferential().addDataIds(ObserveFixtures.TRIP_LONGLINE_IDS));
+ produce(AddSqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData());
+// produce(AddSqlScriptProducerRequest.forH2().addSchema().addReferential().dataIdsToAdd(ObserveFixtures.TRIP_LONGLINE_IDS));
}
- protected void produce(SqlScriptProducerRequest request) throws IOException {
+ protected void produce(AddSqlScriptProducerRequest request) throws IOException {
long time = TimeLog.getTime();
File outputFile = applicationContextResource.createTemporaryFile("-out.sql.gz");
- byte[] gzContent = service.produceSqlScript(request);
+ byte[] gzContent = service.produceAddSqlScript(request);
try (FileOutputStream fileOutputStream = new FileOutputStream(outputFile)) {
IOUtils.write(gzContent, fileOutputStream);
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0
This is an automated email from the git hooks/post-receive script.
New commit to branch feature/4304_synchro_marees in repository observe.
See https://gitlab.nuiton.org/codelutin/observe.git
commit 3dc6ce0aeae64d2bf50f3fe206cc7b077f464fd5
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Mon Aug 8 15:56:27 2016 +0200
Make delete actions works
---
.../service/sql/batch/actions/AbstractTablesAction.java | 5 ++++-
.../topia/service/sql/batch/actions/DeleteTablesAction.java | 13 ++++++++++---
.../service/sql/batch/actions/ReplicateTablesAction.java | 6 ++++++
.../topia/service/sql/batch/actions/UpdateTablesAction.java | 5 +++++
.../topia/service/sql/batch/tables/TopiaSqlTables.java | 11 +++++++++++
5 files changed, 36 insertions(+), 4 deletions(-)
diff --git a/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/AbstractTablesAction.java b/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/AbstractTablesAction.java
index 0851106..ae640f3 100644
--- a/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/AbstractTablesAction.java
+++ b/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/AbstractTablesAction.java
@@ -27,6 +27,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.topia.persistence.support.TopiaSqlWork;
import org.nuiton.topia.service.sql.batch.tables.TopiaSqlTable;
+import org.nuiton.topia.service.sql.batch.tables.TopiaSqlTables;
import org.nuiton.util.TimeLog;
import javax.sql.rowset.serial.SerialBlob;
@@ -61,12 +62,14 @@ public abstract class AbstractTablesAction<R extends AbstractTablesRequest> exte
super(request);
}
+ protected abstract TopiaSqlTables getTables() ;
+
protected abstract void executeOnTable(R request, TopiaSqlTable table, PreparedStatement readStatement) throws SQLException;
@Override
protected final void execute() {
- for (TopiaSqlTable table : request.getTables()) {
+ for (TopiaSqlTable table : getTables()) {
long startTable = TimeLog.getTime();
diff --git a/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/DeleteTablesAction.java b/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/DeleteTablesAction.java
index bec2b89..ba71564 100644
--- a/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/DeleteTablesAction.java
+++ b/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/DeleteTablesAction.java
@@ -27,6 +27,7 @@ import org.apache.commons.logging.LogFactory;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.TopiaException;
import org.nuiton.topia.service.sql.batch.tables.TopiaSqlTable;
+import org.nuiton.topia.service.sql.batch.tables.TopiaSqlTables;
import java.io.IOException;
import java.sql.PreparedStatement;
@@ -43,7 +44,7 @@ import java.util.List;
*/
public class DeleteTablesAction extends AbstractTablesAction<DeleteTablesRequest> {
- public static final String DELETE_STATEMENT = "DELETE FROM %s.%s WHERE topiaId = '%%s'";
+ public static final String DELETE_STATEMENT = "DELETE FROM %s.%s WHERE topiaId = '%%s';\n";
/**
* Logger.
*/
@@ -64,7 +65,7 @@ public class DeleteTablesAction extends AbstractTablesAction<DeleteTablesRequest
List<String> columnNames = getColumnNames(readResultSetMetaData, columnCount);
String topiaIdColumnName = TopiaEntity.PROPERTY_TOPIA_ID.toLowerCase();
- int topiaIdColumnIndex = columnNames.indexOf(topiaIdColumnName);
+ int topiaIdColumnIndex = columnNames.indexOf(topiaIdColumnName) + 1;
boolean useOutputWriter = useOutputWriter();
boolean useOutputDb = useOutputDb();
@@ -95,7 +96,7 @@ public class DeleteTablesAction extends AbstractTablesAction<DeleteTablesRequest
if (useOutputDb) {
writeStatement.clearParameters();
- writeStatement.setObject(1, topiaId);
+ writeStatement.setString(1, topiaId);
writeStatement.addBatch();
}
@@ -123,6 +124,12 @@ public class DeleteTablesAction extends AbstractTablesAction<DeleteTablesRequest
}
+ @Override
+ protected TopiaSqlTables getTables() {
+ return request.getTables().reverse();
+
+ }
+
protected String newDeleteStatementSql(TopiaSqlTable table) {
String sql = String.format(DELETE_STATEMENT, table.getSchemaName(), table.getTableName());
diff --git a/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/ReplicateTablesAction.java b/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/ReplicateTablesAction.java
index 792d5e9..cad3c45 100644
--- a/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/ReplicateTablesAction.java
+++ b/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/ReplicateTablesAction.java
@@ -25,6 +25,7 @@ package org.nuiton.topia.service.sql.batch.actions;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.topia.service.sql.batch.tables.TopiaSqlTable;
+import org.nuiton.topia.service.sql.batch.tables.TopiaSqlTables;
import java.io.IOException;
import java.sql.PreparedStatement;
@@ -121,6 +122,11 @@ public class ReplicateTablesAction extends AbstractTablesAction<ReplicateTablesR
}
+ @Override
+ protected TopiaSqlTables getTables() {
+ return request.getTables();
+ }
+
protected String newInsertStatementSql(TopiaSqlTable table, List<String> columnNames) {
StringBuilder columnNamesBuilder = new StringBuilder();
diff --git a/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/UpdateTablesAction.java b/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/UpdateTablesAction.java
index 2b48710..ed4bab4 100644
--- a/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/UpdateTablesAction.java
+++ b/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/UpdateTablesAction.java
@@ -28,6 +28,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.service.sql.batch.tables.TopiaSqlTable;
+import org.nuiton.topia.service.sql.batch.tables.TopiaSqlTables;
import javax.sql.rowset.serial.SerialBlob;
import java.io.IOException;
@@ -57,6 +58,10 @@ public class UpdateTablesAction extends AbstractTablesAction<UpdateTablesRequest
super(request);
}
+ protected TopiaSqlTables getTables() {
+ return request.getTables();
+ }
+
@Override
protected void executeOnTable(UpdateTablesRequest request, TopiaSqlTable table, PreparedStatement readStatement) throws SQLException {
diff --git a/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/tables/TopiaSqlTables.java b/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/tables/TopiaSqlTables.java
index 1b02f23..82f1a87 100644
--- a/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/tables/TopiaSqlTables.java
+++ b/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/tables/TopiaSqlTables.java
@@ -31,6 +31,7 @@ import org.nuiton.topia.persistence.TopiaEntityEnum;
import java.util.Collections;
import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -79,6 +80,16 @@ public class TopiaSqlTables implements Iterable<TopiaSqlTable> {
.toString();
}
+ public TopiaSqlTables reverse() {
+ List<TopiaSqlTable> reverseList = new LinkedList<>();
+ for (TopiaSqlTable orderedTable : orderedTables) {
+ reverseList.add(0,orderedTable);
+ }
+ ImmutableSet<TopiaSqlTable> reverseSet = ImmutableSet.copyOf(reverseList);
+
+ return new TopiaSqlTables(tablesByFullyTableName, reverseSet);
+ }
+
/**
* Created on 02/01/16.
*
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0
This is an automated email from the git hooks/post-receive script.
New commit to branch feature/4304_synchro_marees in repository observe.
See https://gitlab.nuiton.org/codelutin/observe.git
commit f68a088128dcbac272d85c19dc6e65c5d9b8c4d4
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Mon Aug 8 12:08:09 2016 +0200
Meilleure utilisation des déclarations de service
---
.../fr/ird/observe/db/ObserveSwingDataSource.java | 118 +++++++++++++++++----
.../java/fr/ird/observe/ui/admin/AdminUIModel.java | 4 +-
.../ui/admin/consolidate/ConsolidateUIHandler.java | 2 +-
.../observe/ui/admin/export/ExportUIHandler.java | 4 +-
.../observe/ui/admin/report/ReportUIHandler.java | 4 +-
.../ui/admin/validate/ValidateUIHandler.java | 2 +-
.../impl/seine/FloatingObjectUIHandler.java | 2 +-
.../longline/GearUseFeaturesLonglineUIHandler.java | 2 +-
.../impl/seine/GearUseFeaturesSeineUIHandler.java | 2 +-
.../ird/observe/ui/storage/StorageUIHandler.java | 2 +-
.../fr/ird/observe/ui/storage/StorageUIModel.java | 4 +-
.../ui/storage/tabs/DataSelectionModel.java | 4 +-
.../ird/observe/validation/ValidationContext.java | 18 ++--
13 files changed, 123 insertions(+), 45 deletions(-)
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java b/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java
index 4da3d56..88eb540 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java
@@ -55,10 +55,24 @@ import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.services.service.DatabaseDestroyNotAuthorizedException;
import fr.ird.observe.services.service.DatabaseNotFoundException;
import fr.ird.observe.services.service.ObserveReferentialCache;
+import fr.ird.observe.services.service.PingService;
import fr.ird.observe.services.service.ReferentialService;
import fr.ird.observe.services.service.SqlScriptProducerService;
+import fr.ird.observe.services.service.actions.consolidate.ConsolidateDataService;
+import fr.ird.observe.services.service.actions.datasynchro.DataSynchronizeService;
+import fr.ird.observe.services.service.actions.export.ReplicateTripService;
+import fr.ird.observe.services.service.actions.report.ReportService;
import fr.ird.observe.services.service.actions.synchro.UnidirectionalReferentialSynchronizeLocalService;
import fr.ird.observe.services.service.actions.synchro.UnidirectionalReferentialSynchronizeRemoteService;
+import fr.ird.observe.services.service.actions.validate.ValidateService;
+import fr.ird.observe.services.service.longline.ActivityLonglineService;
+import fr.ird.observe.services.service.longline.SetLonglineService;
+import fr.ird.observe.services.service.longline.TripLonglineService;
+import fr.ird.observe.services.service.seine.ActivitySeineService;
+import fr.ird.observe.services.service.seine.FloatingObjectService;
+import fr.ird.observe.services.service.seine.RouteService;
+import fr.ird.observe.services.service.seine.SetSeineService;
+import fr.ird.observe.services.service.seine.TripSeineService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdesktop.beans.AbstractSerializableBean;
@@ -172,7 +186,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements
fireOpening();
- DataSourceService dataSourceService = newService(DataSourceService.class);
+ DataSourceService dataSourceService = newDataSourceService();
connection = dataSourceService.open(configuration);
@@ -189,7 +203,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements
fireNewMessage(t("observe.storage.message.creating", getLabel()));
fireOpening();
- DataSourceService dataSourceService = newService(DataSourceService.class);
+ DataSourceService dataSourceService = newDataSourceService();
connection = dataSourceService.create(configuration, createDto);
@@ -210,7 +224,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements
try {
// si la connection a expirée la source a deja été fermer pas le serveur
if (!expired) {
- DataSourceService dataSourceService = newService(DataSourceService.class);
+ DataSourceService dataSourceService = newDataSourceService();
dataSourceService.close();
}
@@ -233,7 +247,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements
referentialCache.close();
- DataSourceService dataSourceService = newService(DataSourceService.class);
+ DataSourceService dataSourceService = newDataSourceService();
dataSourceService.destroy();
@@ -248,7 +262,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements
checkIsNotOpen();
- DataSourceService dataSourceService = newService(DataSourceService.class);
+ DataSourceService dataSourceService = newDataSourceService();
Set<ObserveDbUserDto> users = dataSourceService.getUsers(getConfiguration());
@@ -260,7 +274,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements
checkIsNotOpen();
- DataSourceService dataSourceService = newService(DataSourceService.class);
+ DataSourceService dataSourceService = newDataSourceService();
dataSourceService.applySecurity(getConfiguration(), users);
}
@@ -291,7 +305,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements
if (answer == JOptionPane.YES_OPTION) {
- DataSourceService dataSourceService = newService(DataSourceService.class);
+ DataSourceService dataSourceService = newDataSourceService();
if (log.isInfoEnabled()) {
@@ -307,7 +321,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements
public ImmutableMap<Class<?>, ReferentialReferenceSet<?>> updateReferentialReferenceSetsCache(String referentialReferenceSetsRequestName) {
- ReferentialService referentialService = newService(ReferentialService.class);
+ ReferentialService referentialService = newReferentialService();
return referentialCache.loadReferenceSets(referentialService, referentialReferenceSetsRequestName);
}
@@ -316,7 +330,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements
checkIsOpen();
- ReferentialService referentialService = newService(ReferentialService.class);
+ ReferentialService referentialService = newReferentialService();
return referentialCache.getReferentialReferenceSet(referentialService, type);
}
@@ -342,6 +356,26 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements
return newService(SqlScriptProducerService.class);
}
+ public ValidateService newValidateService() {
+ return newService(ValidateService.class);
+ }
+
+ public ReportService newReportService() {
+ return newService(ReportService.class);
+ }
+
+ public PingService newPingService() {
+ return newService(PingService.class);
+ }
+
+ public ReplicateTripService newReplicateTripService() {
+ return newService(ReplicateTripService.class);
+ }
+
+ public ConsolidateDataService newConsolidateDataService() {
+ return newService(ConsolidateDataService.class);
+ }
+
public UnidirectionalReferentialSynchronizeLocalService newUnidirectionalReferentialSynchronizeLocalService() {
return newService(UnidirectionalReferentialSynchronizeLocalService.class);
}
@@ -350,21 +384,55 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements
return newService(UnidirectionalReferentialSynchronizeRemoteService.class);
}
- public <S extends ObserveService> S newService(Class<S> serviceType) {
+ public DataSynchronizeService newDataSynchronizeService() {
+ return newService(DataSynchronizeService.class);
+ }
- ObserveServiceInitializer observeServiceInitializer = getObserveServiceInitializer();
+ public DataSourceService newDataSourceService() {
+ return newService(DataSourceService.class);
+ }
- ObserveServiceMainFactory serviceFactory = ObserveServiceMainFactory.get();
+ public ReferentialService newReferentialService() {
+ return newService(ReferentialService.class);
+ }
- S service = serviceFactory.newService(observeServiceInitializer, serviceType);
- return service;
+ public TripSeineService newTripSeineService() {
+ return newService(TripSeineService.class);
+ }
+
+ public RouteService newRouteService() {
+ return newService(RouteService.class);
+ }
+
+ public FloatingObjectService newFloatingObjectService() {
+ return newService(FloatingObjectService.class);
+ }
+
+ public ActivitySeineService newActivitySeineService() {
+ return newService(ActivitySeineService.class);
+ }
+
+ public SetSeineService newSetSeineService() {
+ return newService(SetSeineService.class);
+ }
+
+ public TripLonglineService newTripLonglineService() {
+ return newService(TripLonglineService.class);
+ }
+
+ public ActivityLonglineService newActivityLonglineService() {
+ return newService(ActivityLonglineService.class);
+ }
+
+ public SetLonglineService newSetLonglineService() {
+ return newService(SetLonglineService.class);
}
public ObserveDataSourceInformation checkCanConnect() throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
checkIsNotAlreadyOpen();
- DataSourceService dataSourceService = newService(DataSourceService.class);
+ DataSourceService dataSourceService = newDataSourceService();
ObserveDataSourceInformation dataSourceInformation = dataSourceService.checkCanConnect(configuration);
@@ -427,6 +495,14 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements
}
}
+ public boolean isExpired() {
+ return expired;
+ }
+
+ public void expired() {
+ this.expired = true;
+ }
+
protected ObserveServiceInitializer getObserveServiceInitializer() {
ObserveSwingApplicationContext context = ObserveSwingApplicationContext.get();
@@ -501,11 +577,13 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements
Preconditions.checkState(!isOpen(), "Connection is open");
}
- public boolean isExpired() {
- return expired;
- }
+ private <S extends ObserveService> S newService(Class<S> serviceType) {
- public void expired() {
- this.expired = true;
+ ObserveServiceInitializer observeServiceInitializer = getObserveServiceInitializer();
+
+ ObserveServiceMainFactory serviceFactory = ObserveServiceMainFactory.get();
+
+ S service = serviceFactory.newService(observeServiceInitializer, serviceType);
+ return service;
}
}
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java
index 77cf722..9776e7c 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java
@@ -1333,11 +1333,11 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
List<DataReference<?>> existingTrip = Lists.newArrayList();
- TripSeineService tripSeineService = source.newService(TripSeineService.class);
+ TripSeineService tripSeineService = source.newTripSeineService();
DataReferenceSet<TripSeineDto> tripSeineSet = tripSeineService.getAllTripSeine();
existingTrip.addAll(tripSeineSet.getReferences());
- TripLonglineService tripLonglineService = source.newService(TripLonglineService.class);
+ TripLonglineService tripLonglineService = source.newTripLonglineService();
DataReferenceSet<TripLonglineDto> tripLonglineSet = tripLonglineService.getAllTripLongline();
existingTrip.addAll(tripLonglineSet.getReferences());
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/consolidate/ConsolidateUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/consolidate/ConsolidateUIHandler.java
index 15c0546..d6aa2cd 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/consolidate/ConsolidateUIHandler.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/consolidate/ConsolidateUIHandler.java
@@ -128,7 +128,7 @@ public class ConsolidateUIHandler extends AdminTabUIHandler {
try {
- ConsolidateDataService consolidateDataService = dataSource.newService(ConsolidateDataService.class);
+ ConsolidateDataService consolidateDataService = dataSource.newConsolidateDataService();
ConsolidateTripSeineDataRequest request = new ConsolidateTripSeineDataRequest();
request.setTripSeineIds(tripIds);
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/export/ExportUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/export/ExportUIHandler.java
index ad9afb8..e60a641 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/export/ExportUIHandler.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/export/ExportUIHandler.java
@@ -303,7 +303,7 @@ public class ExportUIHandler extends AdminTabUIHandler {
try {
openSource(source);
- ReplicateTripService sourceReplicateService = source.newService(ReplicateTripService.class);
+ ReplicateTripService sourceReplicateService = source.newReplicateTripService();
tripExportResults = sourceReplicateService.exportTrips(request);
} finally {
@@ -317,7 +317,7 @@ public class ExportUIHandler extends AdminTabUIHandler {
try {
openSource(target);
- ReplicateTripService targetReplicateService = target.newService(ReplicateTripService.class);
+ ReplicateTripService targetReplicateService = target.newReplicateTripService();
result = targetReplicateService.importTrips(tripExportResults);
} finally {
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/report/ReportUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/report/ReportUIHandler.java
index d69f170..e725ab4 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/report/ReportUIHandler.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/report/ReportUIHandler.java
@@ -313,7 +313,7 @@ public class ReportUIHandler extends AdminTabUIHandler {
}
- ReportService reportService = dataSource.newService(ReportService.class);
+ ReportService reportService = dataSource.newReportService();
report = reportService.populateVariables(report, getModel().getSelectedTrip().getId());
@@ -428,7 +428,7 @@ public class ReportUIHandler extends AdminTabUIHandler {
dataSource.open();
}
- ReportService reportService = dataSource.newService(ReportService.class);
+ ReportService reportService = dataSource.newReportService();
DataMatrix data = reportService.executeReport(report, trip.getId());
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/validate/ValidateUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/validate/ValidateUIHandler.java
index 0984941..9266ebf 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/validate/ValidateUIHandler.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/validate/ValidateUIHandler.java
@@ -408,7 +408,7 @@ public class ValidateUIHandler extends AdminTabUIHandler {
dataSourceToValidate.open();
}
- ValidateService validateService = dataSourceToValidate.newService(ValidateService.class);
+ ValidateService validateService = dataSourceToValidate.newValidateService();
Map<Class<? extends IdDto>, ValidateResultForDtoType> messages = Maps.newHashMap();
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/impl/seine/FloatingObjectUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/impl/seine/FloatingObjectUIHandler.java
index 9e51cbc..0968063 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/impl/seine/FloatingObjectUIHandler.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/impl/seine/FloatingObjectUIHandler.java
@@ -220,6 +220,6 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto>
}
protected FloatingObjectService getFloatingObjectService() {
- return getDataSource().newService(FloatingObjectService.class);
+ return getDataSource().newFloatingObjectService();
}
}
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineUIHandler.java
index 99ebe34..9013221 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineUIHandler.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/GearUseFeaturesLonglineUIHandler.java
@@ -196,7 +196,7 @@ public class GearUseFeaturesLonglineUIHandler extends ContentTableUIHandler<Trip
public List<GearUseFeaturesMeasurementLonglineDto> getDefaultGearUseFeaturesMeasurementLongline(String gearId) {
- ReferentialService referentialService = getDataSource().newService(ReferentialService.class);
+ ReferentialService referentialService = getDataSource().newReferentialService();
Form<GearDto> gearDtoForm = referentialService.loadForm(GearDto.class, gearId);
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/GearUseFeaturesSeineUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/GearUseFeaturesSeineUIHandler.java
index f3c55b3..3477614 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/GearUseFeaturesSeineUIHandler.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/GearUseFeaturesSeineUIHandler.java
@@ -194,7 +194,7 @@ public class GearUseFeaturesSeineUIHandler extends ContentTableUIHandler<TripSei
public List<GearUseFeaturesMeasurementSeineDto> getDefaultGearUseFeaturesMeasurementSeine(String gearId) {
- ReferentialService referentialService = getDataSource().newService(ReferentialService.class);
+ ReferentialService referentialService = getDataSource().newReferentialService();
Form<GearDto> gearDtoForm = referentialService.loadForm(GearDto.class, gearId);
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java
index 6096c18..34a5147 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java
@@ -629,7 +629,7 @@ public class StorageUIHandler {
File dst,
Set<DataReference> trips) {
- SqlScriptProducerService dumpService = dataSource.newService(SqlScriptProducerService.class);
+ SqlScriptProducerService dumpService = dataSource.newSqlScriptProducerService();
if (trips == null) {
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java
index eddc5d8..89f63fe 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java
@@ -1595,7 +1595,7 @@ public class StorageUIModel extends WizardModel<StorageStep> {
source.open();
- SqlScriptProducerService dumpService = source.newService(SqlScriptProducerService.class);
+ SqlScriptProducerService dumpService = source.newSqlScriptProducerService();
SqlScriptProducerRequest request = SqlScriptProducerRequest.forH2().addSchema().addReferential();
byte[] dump = dumpService.produceSqlScript(request);
@@ -1744,7 +1744,7 @@ public class StorageUIModel extends WizardModel<StorageStep> {
if (DbMode.USE_SERVER.equals(getDbMode())
|| DbMode.CREATE_LOCAL.equals(getDbMode()) && CreationMode.IMPORT_SERVER_STORAGE.equals(creationMode)) {
- PingService pingService = dataSource.newService(PingService.class);
+ PingService pingService = dataSource.newPingService();
Version modelServerVersion = pingService.ping();
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/DataSelectionModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/DataSelectionModel.java
index 93d2cf8..cf6e505 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/DataSelectionModel.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/DataSelectionModel.java
@@ -69,8 +69,8 @@ public class DataSelectionModel implements Serializable {
Map<ReferentialReference<ProgramDto>, List<DataReference>> datas = Maps.newHashMap();
- TripSeineService tripSeineService = source.newService(TripSeineService.class);
- TripLonglineService tripLonglineService = source.newService(TripLonglineService.class);
+ TripSeineService tripSeineService = source.newTripSeineService();
+ TripLonglineService tripLonglineService = source.newTripLonglineService();
Set<ReferentialReference<ProgramDto>> programSet = source.getReferentialReferences(ProgramDto.class);
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/validation/ValidationContext.java b/observe-application-swing/src/main/java/fr/ird/observe/validation/ValidationContext.java
index 551762f..d794766 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/validation/ValidationContext.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/validation/ValidationContext.java
@@ -69,7 +69,7 @@ public class ValidationContext {
@Override
public TripSeineDto get(ObserveSwingDataSource dataSource, String id) {
- TripSeineService service = dataSource.newService(TripSeineService.class);
+ TripSeineService service = dataSource.newTripSeineService();
TripSeineDto dto = service.loadDto(id);
return dto;
}
@@ -79,7 +79,7 @@ public class ValidationContext {
@Override
public RouteDto get(ObserveSwingDataSource dataSource, String id) {
- RouteService service = dataSource.newService(RouteService.class);
+ RouteService service = dataSource.newRouteService();
RouteDto dto = service.loadDto(id);
return dto;
}
@@ -89,7 +89,7 @@ public class ValidationContext {
@Override
public ActivitySeineDto get(ObserveSwingDataSource dataSource, String id) {
- ActivitySeineService service = dataSource.newService(ActivitySeineService.class);
+ ActivitySeineService service = dataSource.newActivitySeineService();
ActivitySeineDto dto = service.loadDto(id);
return dto;
}
@@ -99,7 +99,7 @@ public class ValidationContext {
@Override
public TripLonglineDto get(ObserveSwingDataSource dataSource, String id) {
- TripLonglineService service = dataSource.newService(TripLonglineService.class);
+ TripLonglineService service = dataSource.newTripLonglineService();
TripLonglineDto dto = service.loadDto(id);
return dto;
}
@@ -109,7 +109,7 @@ public class ValidationContext {
@Override
public ActivityLonglineDto get(ObserveSwingDataSource dataSource, String id) {
- ActivityLonglineService service = dataSource.newService(ActivityLonglineService.class);
+ ActivityLonglineService service = dataSource.newActivityLonglineService();
ActivityLonglineDto dto = service.loadDto(id);
return dto;
}
@@ -119,7 +119,7 @@ public class ValidationContext {
@Override
public SetSeineDto get(ObserveSwingDataSource dataSource, String id) {
- SetSeineService service = dataSource.newService(SetSeineService.class);
+ SetSeineService service = dataSource.newSetSeineService();
SetSeineDto dto = service.loadDto(id);
return dto;
}
@@ -129,7 +129,7 @@ public class ValidationContext {
@Override
public SetLonglineDto get(ObserveSwingDataSource dataSource, String id) {
- SetLonglineService service = dataSource.newService(SetLonglineService.class);
+ SetLonglineService service = dataSource.newSetLonglineService();
SetLonglineDto dto = service.loadDto(id);
return dto;
}
@@ -139,7 +139,7 @@ public class ValidationContext {
@Override
public FloatingObjectDto get(ObserveSwingDataSource dataSource, String id) {
- FloatingObjectService service = dataSource.newService(FloatingObjectService.class);
+ FloatingObjectService service = dataSource.newFloatingObjectService();
FloatingObjectDto dto = service.loadDto(id);
return dto;
}
@@ -149,7 +149,7 @@ public class ValidationContext {
@Override
public SpeciesDto get(ObserveSwingDataSource dataSource, String id) {
- ReferentialService service = dataSource.newService(ReferentialService.class);
+ ReferentialService service = dataSource.newReferentialService();
SpeciesDto dto = service.loadSpecies(id);
return dto;
}
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0
07/23: Début d'implantation de la logique de synchronisation de données
by codelutin.com scm 09 Aug '16
by codelutin.com scm 09 Aug '16
09 Aug '16
This is an automated email from the git hooks/post-receive script.
New commit to branch feature/4304_synchro_marees in repository observe.
See https://gitlab.nuiton.org/codelutin/observe.git
commit c1cee17e2b11b2230a92ba8a28adc0f7251175a7
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Mon Aug 8 12:08:05 2016 +0200
Début d'implantation de la logique de synchronisation de données
---
.../ui/admin/datasynchro/DataSynchroUIHandler.java | 68 +++++++++++++-
.../datasynchro/DataSynchronizeCopyTask.java | 27 ++++++
.../datasynchro/DataSynchronizeDeleteTask.java | 14 +++
.../datasynchro/DataSynchronizeRequest.java | 90 ++++++++++++++++++
.../datasynchro/DataSynchronizeService.java | 41 +++++++++
.../datasynchro/DataSyncrhonizeTaskSupport.java | 26 ++++++
.../datasynchro/DataSynchronizeServiceTopia.java | 102 +++++++++++++++++++++
7 files changed, 367 insertions(+), 1 deletion(-)
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java
index 0c0a3a2..f59acf1 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java
@@ -1,9 +1,14 @@
package fr.ird.observe.ui.admin.datasynchro;
import fr.ird.observe.db.ObserveSwingDataSource;
+import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2;
import fr.ird.observe.services.dto.DataReference;
import fr.ird.observe.services.dto.referential.ProgramDto;
import fr.ird.observe.services.dto.referential.ReferentialReference;
+import fr.ird.observe.services.service.actions.datasynchro.DataSynchronizeCopyTask;
+import fr.ird.observe.services.service.actions.datasynchro.DataSynchronizeDeleteTask;
+import fr.ird.observe.services.service.actions.datasynchro.DataSynchronizeRequest;
+import fr.ird.observe.services.service.actions.datasynchro.DataSynchronizeService;
import fr.ird.observe.ui.admin.AdminTabUIHandler;
import fr.ird.observe.ui.admin.AdminUI;
import fr.ird.observe.ui.storage.tabs.DataSelectionModel;
@@ -14,6 +19,7 @@ import jaxx.runtime.swing.wizard.ext.WizardState;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.border.TitledBorder;
import java.awt.event.MouseEvent;
@@ -241,7 +247,67 @@ public class DataSynchroUIHandler extends AdminTabUIHandler {
public void doExecuteAction() {
- //TODO
+ ObserveSwingDataSource leftSource = getStepModel().getLeftSource();
+ boolean leftSourceIsH2 = leftSource.getConfiguration() instanceof ObserveDataSourceConfigurationTopiaH2;
+
+ ObserveSwingDataSource rightSource = getStepModel().getRightSource();
+ boolean rightSourceIsH2 = rightSource.getConfiguration() instanceof ObserveDataSourceConfigurationTopiaH2;
+
+ DefaultListModel<DataSynchronizeTaskSupport> tasks = getStepModel().getTasks();
+ int size = tasks.size();
+
+ DataSynchronizeRequest.Builder leftDataSynchronizeRequestBuilder = DataSynchronizeRequest.builder(rightSourceIsH2);
+ DataSynchronizeRequest.Builder rightDataSynchronizeRequestBuilder = DataSynchronizeRequest.builder(leftSourceIsH2);
+ for (int i = 0; i < size; i++) {
+
+ DataSynchronizeTaskSupport task = tasks.getElementAt(i);
+
+ if (task instanceof DeleteFromLeftDataSynchronizeTask) {
+
+ leftDataSynchronizeRequestBuilder.addDeleteTask(new DataSynchronizeDeleteTask(task.getProgram().getId(), task.getTrip().getId()));
+ continue;
+ }
+
+ if (task instanceof DeleteFromRightDataSynchronizeTask) {
+ rightDataSynchronizeRequestBuilder.addDeleteTask(new DataSynchronizeDeleteTask(task.getProgram().getId(), task.getTrip().getId()));
+ continue;
+ }
+
+ if (task instanceof CopyToLeftDataSynchronizeTask) {
+ CopyToLeftDataSynchronizeTask copyTask = (CopyToLeftDataSynchronizeTask) task;
+ if (copyTask.isTripExistOnLeft()) {
+ leftDataSynchronizeRequestBuilder.addDeleteTask(new DataSynchronizeDeleteTask(task.getProgram().getId(), task.getTrip().getId()));
+ }
+ leftDataSynchronizeRequestBuilder.addCopyTask(new DataSynchronizeCopyTask(task.getProgram().getId(), task.getTrip().getId()));
+ continue;
+ }
+
+ if (task instanceof CopyToRightDataSynchronizeTask) {
+ CopyToRightDataSynchronizeTask copyTask = (CopyToRightDataSynchronizeTask) task;
+ if (copyTask.isTripExistOnRight()) {
+ rightDataSynchronizeRequestBuilder.addDeleteTask(new DataSynchronizeDeleteTask(task.getProgram().getId(), task.getTrip().getId()));
+ }
+ rightDataSynchronizeRequestBuilder.addCopyTask(new DataSynchronizeCopyTask(task.getProgram().getId(), task.getTrip().getId()));
+ }
+
+ }
+
+
+ DataSynchronizeService leftDataSynchronizeService = leftSource.newDataSynchronizeService();
+ DataSynchronizeService rightDataSynchronizeService = rightSource.newDataSynchronizeService();
+
+ DataSynchronizeRequest leftDataSynchronizeRequest = leftDataSynchronizeRequestBuilder.build();
+ if (leftDataSynchronizeRequest.isNotEmpty()) {
+ rightDataSynchronizeService.prepareRequestOnOppositeDataSource(leftDataSynchronizeRequest);
+ leftDataSynchronizeService.executeRequest(leftDataSynchronizeRequest);
+ }
+
+ DataSynchronizeRequest rightDataSynchronizeRequest = rightDataSynchronizeRequestBuilder.build();
+ if (rightDataSynchronizeRequest.isNotEmpty()) {
+ leftDataSynchronizeService.prepareRequestOnOppositeDataSource(rightDataSynchronizeRequest);
+ rightDataSynchronizeService.executeRequest(rightDataSynchronizeRequest);
+ }
+
getModel().setStepState(WizardState.SUCCESSED);
}
diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeCopyTask.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeCopyTask.java
new file mode 100644
index 0000000..2217414
--- /dev/null
+++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeCopyTask.java
@@ -0,0 +1,27 @@
+package fr.ird.observe.services.service.actions.datasynchro;
+
+/**
+ * Created on 08/08/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 5.0
+ */
+public class DataSynchronizeCopyTask extends DataSyncrhonizeTaskSupport {
+
+ /**
+ * Contient le code sql de la copie de la marée.
+ */
+ private byte[] dataContent;
+
+ public DataSynchronizeCopyTask(String programId, String tripId) {
+ super(programId, tripId);
+ }
+
+ public byte[] getDataContent() {
+ return dataContent;
+ }
+
+ public void setDataContent(byte[] dataContent) {
+ this.dataContent = dataContent;
+ }
+}
diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeDeleteTask.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeDeleteTask.java
new file mode 100644
index 0000000..490eae0
--- /dev/null
+++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeDeleteTask.java
@@ -0,0 +1,14 @@
+package fr.ird.observe.services.service.actions.datasynchro;
+
+/**
+ * Created on 08/08/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 5.0
+ */
+public class DataSynchronizeDeleteTask extends DataSyncrhonizeTaskSupport {
+
+ public DataSynchronizeDeleteTask(String programId, String tripId) {
+ super(programId, tripId);
+ }
+}
diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeRequest.java
new file mode 100644
index 0000000..16cc43f
--- /dev/null
+++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeRequest.java
@@ -0,0 +1,90 @@
+package fr.ird.observe.services.service.actions.datasynchro;
+
+import com.google.common.collect.ImmutableSet;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Created on 08/08/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 5.0
+ */
+public class DataSynchronizeRequest {
+
+ /** Logger. */
+ private static final Log log = LogFactory.getLog(DataSynchronizeRequest.class);
+
+ public static Builder builder(boolean oppositeH2) {
+ return new Builder(oppositeH2);
+ }
+
+ /**
+ * Is opposite data source use h2 ?
+ */
+ private final boolean oppositeH2;
+ /**
+ * Copy tasks.
+ */
+ private final ImmutableSet<DataSynchronizeCopyTask> copyTasks;
+
+ /**
+ * Delete tasks.
+ */
+ private final ImmutableSet<DataSynchronizeDeleteTask> deleteTasks;
+
+ public static class Builder {
+
+ private final boolean oppositeH2;
+ private final ImmutableSet.Builder<DataSynchronizeCopyTask> copyTasksBuilder = ImmutableSet.builder();
+ private final ImmutableSet.Builder<DataSynchronizeDeleteTask> deleteTasksBuilder = ImmutableSet.builder();
+
+ public Builder(boolean oppositeH2) {
+ this.oppositeH2 = oppositeH2;
+ }
+
+ public DataSynchronizeRequest build() {
+ return new DataSynchronizeRequest(oppositeH2, copyTasksBuilder.build(), deleteTasksBuilder.build());
+ }
+
+ public Builder addDeleteTask(DataSynchronizeDeleteTask deleteTask) {
+
+ if (log.isInfoEnabled()) {
+ log.info("Add delete task for trip: " + deleteTask.getProgramId() + " / " + deleteTask.getTripId());
+ }
+ deleteTasksBuilder.add(deleteTask);
+ return this;
+ }
+
+ public Builder addCopyTask(DataSynchronizeCopyTask copyTask) {
+ if (log.isInfoEnabled()) {
+ log.info("Add copy task for trip: " + copyTask.getProgramId() + " / " + copyTask.getTripId());
+ }
+ copyTasksBuilder.add(copyTask);
+ return this;
+ }
+
+ }
+
+ public ImmutableSet<DataSynchronizeCopyTask> getCopyTasks() {
+ return copyTasks;
+ }
+
+ public ImmutableSet<DataSynchronizeDeleteTask> getDeleteTasks() {
+ return deleteTasks;
+ }
+
+ public boolean isNotEmpty() {
+ return !(copyTasks.isEmpty() && deleteTasks.isEmpty());
+ }
+
+ public boolean isOppositeH2() {
+ return oppositeH2;
+ }
+
+ private DataSynchronizeRequest(boolean oppositeH2, ImmutableSet<DataSynchronizeCopyTask> copyTasks, ImmutableSet<DataSynchronizeDeleteTask> deleteTasks) {
+ this.oppositeH2 = oppositeH2;
+ this.copyTasks = copyTasks;
+ this.deleteTasks = deleteTasks;
+ }
+}
diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeService.java
new file mode 100644
index 0000000..1f15d58
--- /dev/null
+++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeService.java
@@ -0,0 +1,41 @@
+package fr.ird.observe.services.service.actions.datasynchro;
+
+import fr.ird.observe.services.ObserveService;
+import fr.ird.observe.services.spi.PostRequest;
+import fr.ird.observe.services.spi.ReadDataPermission;
+import fr.ird.observe.services.spi.Write;
+import fr.ird.observe.services.spi.WriteDataPermission;
+
+/**
+ * Created on 08/08/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 5.0
+ */
+public interface DataSynchronizeService extends ObserveService {
+
+ /**
+ * Prépare la demande donnée en paramètre. Par exemple s'il y a des demandes de recopie, on récupère le code sql de recopie.
+ *
+ * Cette méthode doit être executée sur la base opposée.
+ *
+ * @param request la demande des tâches à préparer.
+ */
+ @ReadDataPermission
+ @PostRequest
+ void prepareRequestOnOppositeDataSource(DataSynchronizeRequest request);
+
+ /**
+ * Exécution de la demande donnée en paramètre.
+ *
+ * Cette méthode doit être exécutée sur la base cible.
+ *
+ * @param request la demande des tâches à réaliser.
+ */
+ @ReadDataPermission
+ @WriteDataPermission
+ @Write
+ @PostRequest
+ void executeRequest(DataSynchronizeRequest request);
+
+}
diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSyncrhonizeTaskSupport.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSyncrhonizeTaskSupport.java
new file mode 100644
index 0000000..c90b217
--- /dev/null
+++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSyncrhonizeTaskSupport.java
@@ -0,0 +1,26 @@
+package fr.ird.observe.services.service.actions.datasynchro;
+
+/**
+ * Created on 08/08/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 5.0
+ */
+public abstract class DataSyncrhonizeTaskSupport {
+
+ private final String programId;
+ private final String tripId;
+
+ protected DataSyncrhonizeTaskSupport(String programId, String tripId) {
+ this.programId = programId;
+ this.tripId = tripId;
+ }
+
+ public String getProgramId() {
+ return programId;
+ }
+
+ public String getTripId() {
+ return tripId;
+ }
+}
diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeServiceTopia.java
new file mode 100644
index 0000000..3dead6c
--- /dev/null
+++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeServiceTopia.java
@@ -0,0 +1,102 @@
+package fr.ird.observe.services.service.actions.datasynchro;
+
+import com.google.common.collect.ImmutableSet;
+import fr.ird.observe.entities.Entities;
+import fr.ird.observe.entities.longline.TripLongline;
+import fr.ird.observe.entities.longline.TripLonglineTopiaDao;
+import fr.ird.observe.entities.seine.TripSeine;
+import fr.ird.observe.entities.seine.TripSeineTopiaDao;
+import fr.ird.observe.services.ObserveServiceContextTopia;
+import fr.ird.observe.services.ObserveServiceTopia;
+import fr.ird.observe.services.service.SqlScriptProducerRequest;
+import fr.ird.observe.services.service.SqlScriptProducerService;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Created on 08/08/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 5.0
+ */
+public class DataSynchronizeServiceTopia extends ObserveServiceTopia implements DataSynchronizeService {
+
+ /** Logger. */
+ private static final Log log = LogFactory.getLog(DataSynchronizeServiceTopia.class);
+
+ protected SqlScriptProducerService sqlScriptProducerService;
+
+ @Override
+ public void setServiceContext(ObserveServiceContextTopia serviceContext) {
+ super.setServiceContext(serviceContext);
+ sqlScriptProducerService = serviceContext.newService(SqlScriptProducerService.class);
+ }
+
+ @Override
+ public void prepareRequestOnOppositeDataSource(DataSynchronizeRequest request) {
+
+ for (DataSynchronizeCopyTask copyTask : request.getCopyTasks()) {
+
+ if (log.isInfoEnabled()) {
+ log.info("Obtain trip sql content: " + copyTask.getProgramId() + " / " + copyTask.getTripId());
+ }
+
+ // get the data content
+
+ SqlScriptProducerRequest sqlRequest;
+ if (request.isOppositeH2()) {
+ sqlRequest = SqlScriptProducerRequest.forH2();
+ } else {
+ sqlRequest = SqlScriptProducerRequest.forPostgres();
+ }
+ sqlRequest.addDataIds(ImmutableSet.of(copyTask.getTripId()));
+ byte[] sqlScript = sqlScriptProducerService.produceSqlScript(sqlRequest);
+
+ // store it in task
+ copyTask.setDataContent(sqlScript);
+
+ }
+
+ }
+
+ @Override
+ public void executeRequest(DataSynchronizeRequest request) {
+
+ TripSeineTopiaDao tripSeineDao = serviceContext.getTopiaPersistenceContext().getTripSeineDao();
+ TripLonglineTopiaDao tripLonglineDao = serviceContext.getTopiaPersistenceContext().getTripLonglineDao();
+
+ for (DataSynchronizeDeleteTask deleteTask : request.getDeleteTasks()) {
+
+ String tripId = deleteTask.getTripId();
+ boolean longlineId = Entities.isLonglineId(tripId);
+
+ if (longlineId) {
+
+ if (log.isInfoEnabled()) {
+ log.info("Delete longline trip: " + deleteTask.getProgramId() + " / " + deleteTask.getTripId());
+ }
+ TripLongline tripLongline = tripLonglineDao.forTopiaIdEquals(tripId).findUnique();
+ tripLonglineDao.delete(tripLongline);
+
+ } else {
+
+ if (log.isInfoEnabled()) {
+ log.info("Delete seine trip: " + deleteTask.getProgramId() + " / " + deleteTask.getTripId());
+ }
+ TripSeine tripSeine = tripSeineDao.forTopiaIdEquals(tripId).findUnique();
+ tripSeineDao.delete(tripSeine);
+
+ }
+
+ }
+
+ for (DataSynchronizeCopyTask copyTask : request.getCopyTasks()) {
+
+ if (log.isInfoEnabled()) {
+ log.info("Copy trip: " + copyTask.getProgramId() + " / " + copyTask.getTripId());
+ }
+ serviceContext.getTopiaApplicationContext().executeSqlStatements(copyTask.getDataContent());
+
+ }
+ }
+}
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0
06/23: debut de gestion de la prise en compte des marées présentes des deux cotés lors d'une recopie
by codelutin.com scm 09 Aug '16
by codelutin.com scm 09 Aug '16
09 Aug '16
This is an automated email from the git hooks/post-receive script.
New commit to branch feature/4304_synchro_marees in repository observe.
See https://gitlab.nuiton.org/codelutin/observe.git
commit d5fb3d4af7aa5f3aa003ca2313010fd5ad4de6a7
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Mon Aug 8 11:35:44 2016 +0200
debut de gestion de la prise en compte des marées présentes des deux cotés lors d'une recopie
---
.../datasynchro/CopyToLeftDataSynchronizeTask.java | 10 ++++-
.../CopyToRightDataSynchronizeTask.java | 9 ++++-
.../ui/admin/datasynchro/DataSynchroUIHandler.java | 47 +++++++++++++++-------
.../ui/storage/tabs/DataSelectionModel.java | 5 +++
4 files changed, 55 insertions(+), 16 deletions(-)
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/CopyToLeftDataSynchronizeTask.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/CopyToLeftDataSynchronizeTask.java
index 26689a2..15cf796 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/CopyToLeftDataSynchronizeTask.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/CopyToLeftDataSynchronizeTask.java
@@ -14,12 +14,20 @@ import static org.nuiton.i18n.I18n.t;
*/
public class CopyToLeftDataSynchronizeTask extends DataSynchronizeTaskSupport {
- public CopyToLeftDataSynchronizeTask(ReferentialReference<ProgramDto> programReference, DataReference tripReference) {
+ private final boolean tripExistOnLeft;
+
+ public CopyToLeftDataSynchronizeTask(ReferentialReference<ProgramDto> programReference, DataReference tripReference, boolean tripExistOnLeft) {
super(programReference, tripReference);
+ this.tripExistOnLeft=tripExistOnLeft;
}
@Override
public String getLabel() {
return t("observe.datasynchro.copyToLeftTask", decorateProgram(), decorateTrip());
}
+
+ public boolean isTripExistOnLeft() {
+ return tripExistOnLeft;
+ }
+
}
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/CopyToRightDataSynchronizeTask.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/CopyToRightDataSynchronizeTask.java
index 03bf7f0..ecb6420 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/CopyToRightDataSynchronizeTask.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/CopyToRightDataSynchronizeTask.java
@@ -14,8 +14,11 @@ import static org.nuiton.i18n.I18n.t;
*/
public class CopyToRightDataSynchronizeTask extends DataSynchronizeTaskSupport {
- public CopyToRightDataSynchronizeTask(ReferentialReference<ProgramDto> programReference, DataReference tripReference) {
+ private final boolean tripExistOnRight;
+
+ public CopyToRightDataSynchronizeTask(ReferentialReference<ProgramDto> programReference, DataReference tripReference, boolean tripExistOnRight) {
super(programReference, tripReference);
+ this.tripExistOnRight = tripExistOnRight;
}
@Override
@@ -23,4 +26,8 @@ public class CopyToRightDataSynchronizeTask extends DataSynchronizeTaskSupport {
return t("observe.datasynchro.copyToRightTask", decorateProgram(), decorateTrip());
}
+ public boolean isTripExistOnRight() {
+ return tripExistOnRight;
+ }
+
}
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java
index 98b49fd..0c0a3a2 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java
@@ -112,16 +112,24 @@ public class DataSynchroUIHandler extends AdminTabUIHandler {
public void addCopyToLeftTasks() {
- DataSelectionModel selectionDataModel = getStepModel().getRightSelectionDataModel();
- ObserveTreeHelper treeHelper = getUi().getRightTreeHelper();
- Map<ReferentialReference<ProgramDto>, List<DataReference>> selectedDataByProgram = selectionDataModel.getSelectedDataByProgram();
- selectionDataModel.removeAllSelectedData();
+ DataSelectionModel rightSelectionDataModel = getStepModel().getRightSelectionDataModel();
+ DataSelectionModel leftSelectionDataModel = getStepModel().getLeftSelectionDataModel();
+ ObserveTreeHelper rightTreeHelper = getUi().getRightTreeHelper();
+ ObserveTreeHelper leftTreeHelper = getUi().getLeftTreeHelper();
+ Map<ReferentialReference<ProgramDto>, List<DataReference>> selectedDataByProgram = rightSelectionDataModel.getSelectedDataByProgram();
+ rightSelectionDataModel.removeAllSelectedData();
for (Map.Entry<ReferentialReference<ProgramDto>, List<DataReference>> entry : selectedDataByProgram.entrySet()) {
ReferentialReference<ProgramDto> program = entry.getKey();
for (DataReference trip : entry.getValue()) {
- getStepModel().addTask(new CopyToLeftDataSynchronizeTask(program, trip));
- treeHelper.removeTrip(program, trip);
- selectionDataModel.removeTrip(program, trip);
+ boolean tripExistOnLeft = leftSelectionDataModel.containsData(program, trip);
+ getStepModel().addTask(new CopyToLeftDataSynchronizeTask(program, trip, tripExistOnLeft));
+ rightTreeHelper.removeTrip(program, trip);
+ rightSelectionDataModel.removeTrip(program, trip);
+
+ if (tripExistOnLeft) {
+ leftTreeHelper.removeTrip(program, trip);
+ leftSelectionDataModel.removeTrip(program, trip);
+ }
}
}
@@ -130,16 +138,25 @@ public class DataSynchroUIHandler extends AdminTabUIHandler {
public void addCopyToRightTasks() {
- DataSelectionModel selectionDataModel = getStepModel().getLeftSelectionDataModel();
- ObserveTreeHelper treeHelper = getUi().getLeftTreeHelper();
- Map<ReferentialReference<ProgramDto>, List<DataReference>> selectedDataByProgram = selectionDataModel.getSelectedDataByProgram();
- selectionDataModel.removeAllSelectedData();
+ DataSelectionModel leftSelectionDataModel = getStepModel().getLeftSelectionDataModel();
+ DataSelectionModel rightSelectionDataModel = getStepModel().getRightSelectionDataModel();
+ ObserveTreeHelper leftTreeHelper = getUi().getLeftTreeHelper();
+ ObserveTreeHelper rightTreeHelper = getUi().getRightTreeHelper();
+ Map<ReferentialReference<ProgramDto>, List<DataReference>> selectedDataByProgram = leftSelectionDataModel.getSelectedDataByProgram();
+ leftSelectionDataModel.removeAllSelectedData();
for (Map.Entry<ReferentialReference<ProgramDto>, List<DataReference>> entry : selectedDataByProgram.entrySet()) {
ReferentialReference<ProgramDto> program = entry.getKey();
for (DataReference trip : entry.getValue()) {
- getStepModel().addTask(new CopyToRightDataSynchronizeTask(program, trip));
- treeHelper.removeTrip(program, trip);
- selectionDataModel.removeTrip(program, trip);
+
+ boolean tripExistOnRight = rightSelectionDataModel.containsData(program, trip);
+ getStepModel().addTask(new CopyToRightDataSynchronizeTask(program, trip, tripExistOnRight));
+ leftTreeHelper.removeTrip(program, trip);
+ leftSelectionDataModel.removeTrip(program, trip);
+
+ if (tripExistOnRight) {
+ rightTreeHelper.removeTrip(program, trip);
+ rightSelectionDataModel.removeTrip(program, trip);
+ }
}
}
@@ -188,6 +205,8 @@ public class DataSynchroUIHandler extends AdminTabUIHandler {
DataSynchronizeTaskSupport task = getStepModel().getTasks().getElementAt(selectionIndex);
getStepModel().getTasks().removeElementAt(selectionIndex);
+ //TODO Deal with tripExistOnxxx for copy tasks
+
ObserveTreeHelper treeHelper;
DataSelectionModel selectionDataModel;
if (task instanceof CopyToLeftDataSynchronizeTask || task instanceof DeleteFromRightDataSynchronizeTask) {
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/DataSelectionModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/DataSelectionModel.java
index 9f7f29e..93d2cf8 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/DataSelectionModel.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/DataSelectionModel.java
@@ -229,6 +229,11 @@ public class DataSelectionModel implements Serializable {
return datas;
}
+ public boolean containsData(ReferentialReference<ProgramDto> program, DataReference trip) {
+ List<DataReference> datas = getDatas(program.getId());
+ return datas!=null && datas.contains(trip);
+ }
+
public Set<DataReference> getSelectedData() {
if (selectedData == null) {
selectedData = Sets.newHashSet();
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0
This is an automated email from the git hooks/post-receive script.
New commit to branch feature/4304_synchro_marees in repository observe.
See https://gitlab.nuiton.org/codelutin/observe.git
commit 6012e8927d9ba8f60943e03b48fe52eaf17bf5be
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Aug 3 12:33:28 2016 +0200
Continue ui for data synchronize action
---
.../java/fr/ird/observe/ui/admin/AdminUIModel.java | 55 ++++--
.../datasynchro/CopyToLeftDataSynchronizeTask.java | 25 +++
.../CopyToRightDataSynchronizeTask.java | 26 +++
.../ui/admin/datasynchro/DataSynchroModel.java | 21 +++
.../ui/admin/datasynchro/DataSynchroUI.jaxx | 82 +++++----
.../ui/admin/datasynchro/DataSynchroUI.jcss | 14 +-
.../ui/admin/datasynchro/DataSynchroUIHandler.java | 204 ++++++++++++++++++---
.../DataSynchronizeTaskListCellRenderer.java | 37 ++++
.../datasynchro/DataSynchronizeTaskSupport.java | 47 +++++
.../DeleteFromLeftDataSynchronizeTask.java | 25 +++
.../DeleteFromRightDataSynchronizeTask.java | 25 +++
.../ui/storage/tabs/DataSelectionModel.java | 21 +++
.../fr/ird/observe/ui/tree/ObserveTreeHelper.java | 63 ++++++-
.../loadors/ProgramLonglineNodeChildLoador.java | 7 +
.../tree/loadors/ProgramSeineNodeChildLoador.java | 8 +
.../observe-application-swing_en_GB.properties | 4 +
.../observe-application-swing_es_ES.properties | 4 +
.../observe-application-swing_fr_FR.properties | 4 +
18 files changed, 582 insertions(+), 90 deletions(-)
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java
index 80930e2..77cf722 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java
@@ -133,7 +133,7 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
private final PropertyChangeListener listenReportModified;
- private final PropertyChangeListener listenerSelectedDataForReport;
+ private final PropertyChangeListener listenerSelectedDataForReport;
private final PropertyChangeListener listenConsolidateModified;
@@ -245,6 +245,22 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
return;
}
+ if (AdminStep.CONFIG == oldStep && AdminStep.DATA_SYNCHRONIZE == newStep) {
+
+ // On lance le chargement de la sélection des arbres
+
+ DataSynchroModel dataSynchroModel = getDataSynchroModel();
+
+ ObserveSwingDataSource leftSource = getSafeLocalSource(true);
+ dataSynchroModel.setLeftSource(leftSource);
+
+ ObserveSwingDataSource rightSource = getSafeCentralSource(true);
+ dataSynchroModel.setRightSource(rightSource);
+
+ return;
+
+ }
+
// on était sur l'écran de configuration
// mise à jour des modèles de sélection si on arrive sur une étape
@@ -278,13 +294,13 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
DataSelectionModel source = (DataSelectionModel) evt.getSource();
if (log.isDebugEnabled()) {
log.debug("selection data model [" + source + "] changed on " +
- evt.getPropertyName() + ", new value = " +
- evt.getNewValue());
+ evt.getPropertyName() + ", new value = " +
+ evt.getNewValue());
}
validate();
if (log.isDebugEnabled()) {
log.debug("nb selected export datas = " +
- source.getSelectedData().size());
+ source.getSelectedData().size());
}
// on declanche la revalidation du modèle
@@ -294,13 +310,13 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
ValidateModel source = (ValidateModel) evt.getSource();
if (log.isDebugEnabled()) {
log.debug("validation model [" + source + "] changed on " +
- evt.getPropertyName() + ", new value = " +
- evt.getNewValue());
+ evt.getPropertyName() + ", new value = " +
+ evt.getNewValue());
}
validate();
if (log.isDebugEnabled()) {
log.debug("nb validators = " +
- source.getValidators().size()
+ source.getValidators().size()
);
}
firePropertyChange(VALID_STEP_PROPERTY_NAME, validStep);
@@ -309,8 +325,8 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
ReportModel source = (ReportModel) evt.getSource();
if (log.isDebugEnabled()) {
log.debug("report model [" + source + "] changed on " +
- evt.getPropertyName() + ", new value = " +
- evt.getNewValue());
+ evt.getPropertyName() + ", new value = " +
+ evt.getNewValue());
}
validate();
firePropertyChange(VALID_STEP_PROPERTY_NAME, validStep);
@@ -328,8 +344,8 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
ConsolidateModel source = (ConsolidateModel) evt.getSource();
if (log.isDebugEnabled()) {
log.debug("consolidate model [" + source + "] changed on " +
- evt.getPropertyName() + ", new value = " +
- evt.getNewValue());
+ evt.getPropertyName() + ", new value = " +
+ evt.getNewValue());
}
validate();
firePropertyChange(VALID_STEP_PROPERTY_NAME, validStep);
@@ -501,7 +517,7 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
if (log.isDebugEnabled()) {
log.debug("Close previous source " +
- previousSource.getLabel());
+ previousSource.getLabel());
}
doCloseSource(previousSource, false);
}
@@ -1094,7 +1110,6 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
}
-
}
if (containsOperation(AdminStep.SYNCHRONIZE)) {
@@ -1118,7 +1133,7 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
// validate &= centralSourceModel.isValid() &&
// centralSourceModel.getPgConfig().isCanWriteData();
validate &= centralSourceModel.getDataSourceInformation() != null
- && centralSourceModel.getDataSourceInformation().canWriteData();
+ && centralSourceModel.getDataSourceInformation().canWriteData();
}
@@ -1127,7 +1142,7 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
// il faut le fichier di'mport existe
File reportFile = getReportModel().getReportFile();
validate &= reportFile != null &&
- reportFile.exists();
+ reportFile.exists();
}
break;
case SELECT_DATA:
@@ -1174,21 +1189,21 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
// il faut exactement une Trip de selectionnee
boolean empty = selectionModel.isDataEmpty();
validate &= !empty &&
- selectionModel.getSelectedData().size() == 1;
+ selectionModel.getSelectedData().size() == 1;
}
}
break;
case VALIDATE:
validate &= validate(AdminStep.SELECT_DATA) &&
- getStepState(s) == WizardState.SUCCESSED;
+ getStepState(s) == WizardState.SUCCESSED;
break;
case EXPORT_DATA:
validate &= validate(AdminStep.SELECT_DATA) &&
- getStepState(s) == WizardState.SUCCESSED;
+ getStepState(s) == WizardState.SUCCESSED;
break;
case CONSOLIDATE:
validate &= validate(AdminStep.SELECT_DATA) &&
- getStepState(s) == WizardState.SUCCESSED;
+ getStepState(s) == WizardState.SUCCESSED;
break;
case REPORT:
@@ -1202,7 +1217,7 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
case SAVE_LOCAL:
// valide si l'action a ete executee avec success
validate &= !getSaveLocalModel().isDoBackup() ||
- getStepState(s) == WizardState.SUCCESSED;
+ getStepState(s) == WizardState.SUCCESSED;
break;
case SHOW_RESUME:
validate = true;
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/CopyToLeftDataSynchronizeTask.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/CopyToLeftDataSynchronizeTask.java
new file mode 100644
index 0000000..26689a2
--- /dev/null
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/CopyToLeftDataSynchronizeTask.java
@@ -0,0 +1,25 @@
+package fr.ird.observe.ui.admin.datasynchro;
+
+import fr.ird.observe.services.dto.DataReference;
+import fr.ird.observe.services.dto.referential.ProgramDto;
+import fr.ird.observe.services.dto.referential.ReferentialReference;
+
+import static org.nuiton.i18n.I18n.t;
+
+/**
+ * Created on 03/08/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 5.0
+ */
+public class CopyToLeftDataSynchronizeTask extends DataSynchronizeTaskSupport {
+
+ public CopyToLeftDataSynchronizeTask(ReferentialReference<ProgramDto> programReference, DataReference tripReference) {
+ super(programReference, tripReference);
+ }
+
+ @Override
+ public String getLabel() {
+ return t("observe.datasynchro.copyToLeftTask", decorateProgram(), decorateTrip());
+ }
+}
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/CopyToRightDataSynchronizeTask.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/CopyToRightDataSynchronizeTask.java
new file mode 100644
index 0000000..03bf7f0
--- /dev/null
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/CopyToRightDataSynchronizeTask.java
@@ -0,0 +1,26 @@
+package fr.ird.observe.ui.admin.datasynchro;
+
+import fr.ird.observe.services.dto.DataReference;
+import fr.ird.observe.services.dto.referential.ProgramDto;
+import fr.ird.observe.services.dto.referential.ReferentialReference;
+
+import static org.nuiton.i18n.I18n.t;
+
+/**
+ * Created on 03/08/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 5.0
+ */
+public class CopyToRightDataSynchronizeTask extends DataSynchronizeTaskSupport {
+
+ public CopyToRightDataSynchronizeTask(ReferentialReference<ProgramDto> programReference, DataReference tripReference) {
+ super(programReference, tripReference);
+ }
+
+ @Override
+ public String getLabel() {
+ return t("observe.datasynchro.copyToRightTask", decorateProgram(), decorateTrip());
+ }
+
+}
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroModel.java
index 1371502..d41df3c 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroModel.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroModel.java
@@ -7,16 +7,23 @@ import fr.ird.observe.ui.storage.tabs.DataSelectionModel;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import javax.swing.DefaultListModel;
+
/**
* Created on 02/08/16.
*
* @author Tony Chemit - chemit(a)codelutin.com
+ * @since 5.0
*/
public class DataSynchroModel extends AdminActionModel {
/** Logger. */
private static final Log log = LogFactory.getLog(DataSynchroModel.class);
+ public static final String LEFT_SOURCE_PROPERTY_NAME = "leftSource";
+ public static final String RIGHT_SOURCE_PROPERTY_NAME = "rightSource";
+ public static final String TASKS_PROPERTY_NAME = "tasks";
+
public static final String LEFT_SELECTION_MODEL_CHANGED_PROPERTY_NAME = "leftSelectionModelChanged";
public static final String RIGHT_SELECTION_MODEL_CHANGED_PROPERTY_NAME = "rightSelectionModelChanged";
@@ -32,6 +39,8 @@ public class DataSynchroModel extends AdminActionModel {
/** les données sélectionnées sur le panneau de droite. */
protected final DataSelectionModel rightSelectionDataModel;
+ protected final DefaultListModel<DataSynchronizeTaskSupport> tasks;
+
public DataSynchroModel() {
super(AdminStep.DATA_SYNCHRONIZE);
@@ -40,6 +49,8 @@ public class DataSynchroModel extends AdminActionModel {
rightSelectionDataModel = new DataSelectionModel();
rightSelectionDataModel.setUseData(true);
+ tasks = new DefaultListModel<>();
+
}
public ObserveSwingDataSource getLeftSource() {
@@ -48,6 +59,7 @@ public class DataSynchroModel extends AdminActionModel {
public void setLeftSource(ObserveSwingDataSource leftSource) {
this.leftSource = leftSource;
+ firePropertyChange(LEFT_SOURCE_PROPERTY_NAME, leftSource);
}
public ObserveSwingDataSource getRightSource() {
@@ -56,6 +68,7 @@ public class DataSynchroModel extends AdminActionModel {
public void setRightSource(ObserveSwingDataSource rightSource) {
this.rightSource = rightSource;
+ firePropertyChange(RIGHT_SOURCE_PROPERTY_NAME, rightSource);
}
public DataSelectionModel getLeftSelectionDataModel() {
@@ -74,6 +87,14 @@ public class DataSynchroModel extends AdminActionModel {
populateSelectionModel(rightSource, rightSelectionDataModel, RIGHT_SELECTION_MODEL_CHANGED_PROPERTY_NAME);
}
+ public DefaultListModel<DataSynchronizeTaskSupport> getTasks() {
+ return tasks;
+ }
+
+ public void addTask(DataSynchronizeTaskSupport task) {
+ tasks.addElement(task);
+ }
+
private void populateSelectionModel(ObserveSwingDataSource dataSource, DataSelectionModel selectionDataModel, String propertyName) {
try {
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUI.jaxx
index 0d21a11..61cbf25 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUI.jaxx
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUI.jaxx
@@ -37,6 +37,7 @@
jaxx.runtime.SwingUtil
+ javax.swing.ListSelectionModel
javax.swing.tree.TreeSelectionModel
</import>
@@ -76,7 +77,7 @@ public void destroy() {
]]>
</script>
- <JPanel id='PENDING_content'>
+ <!--JPanel id='PENDING_content'>
<Table constraints='BorderLayout.CENTER' fill='both' weightx='1'
weighty='1'>
<row>
@@ -85,43 +86,52 @@ public void destroy() {
</cell>
</row>
</Table>
- </JPanel>
+ </JPanel-->
- <JPanel id='NEED_FIX_content'>
- <Table fill="both" constraints='BorderLayout.CENTER'>
- <row weighty="0.8">
- <cell weightx="0.4">
- <JScrollPane id='leftTreePane' decorator='boxed'>
- <JTree id='leftTree'/>
- </JScrollPane>
- </cell>
- <cell weightx="0.2">
- <JPanel layout="{new BorderLayout()}" border='{new TitledBorder(" ")}'>
- <JPanel id="middleActions" layout="{new GridLayout(0, 1)}" constraints='BorderLayout.CENTER'>
- <JButton id="copyToRight"/>
- <JButton id="copyToLeft"/>
- <JButton id="deleteFromLeft"/>
- <JButton id="deleteFromRight"/>
+ <JPanel id='PENDING_content'>
+ <JSplitPane id="contentSplitPane" constraints='BorderLayout.CENTER'>
+ <Table fill="both">
+ <row weighty="1">
+ <cell weightx="0.45">
+ <JScrollPane id='leftTreePane' decorator='boxed'>
+ <JTree id='leftTree'/>
+ </JScrollPane>
+ </cell>
+ <cell weightx="0.1">
+ <JPanel layout="{new BorderLayout()}" border='{new TitledBorder(" ")}'>
+ <JPanel id="middleActions" layout="{new GridLayout(0, 1)}" constraints='BorderLayout.CENTER'>
+ <JButton id="copyToRight" onActionPerformed="getHandler().addCopyToRightTasks()"/>
+ <JButton id="copyToLeft" onActionPerformed="getHandler().addCopyToLeftTasks()"/>
+ <JButton id="deleteFromLeft" onActionPerformed="getHandler().addDeleteFromLeftTasks()"/>
+ <JButton id="deleteFromRight" onActionPerformed="getHandler().addDeleteFromRightTasks()"/>
+ </JPanel>
</JPanel>
- </JPanel>
- </cell>
- <cell weightx="0.4">
- <JScrollPane id='rightTreePane' decorator='boxed'>
- <JTree id='rightTree'/>
- </JScrollPane>
- </cell>
- </row>
- <row weighty="0.8">
- <cell columns="3">
- <JList id="actionsToConsume"/>
- </cell>
- </row>
- <row>
- <cell columns='3'>
- <JButton id='applyAction' onActionPerformed='getHandler().doExecuteAction()'/>
- </cell>
- </row>
- </Table>
+ </cell>
+ <cell weightx="0.45">
+ <JScrollPane id='rightTreePane' decorator='boxed'>
+ <JTree id='rightTree'/>
+ </JScrollPane>
+ </cell>
+ </row>
+ </Table>
+ <Table fill="both">
+ <row weighty="1">
+ <cell weightx="1">
+ <JScrollPane id='actionsToConsumePane'>
+ <JList id="actionsToConsume" onMouseClicked="getHandler().removeTasks(event)"/>
+ </JScrollPane>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JPanel layout="{new BorderLayout()}" >
+ <JButton id='applyAction' constraints='BorderLayout.CENTER' onActionPerformed='getHandler().doExecuteAction()'/>
+ </JPanel>
+ </cell>
+ </row>
+ </Table>
+ </JSplitPane>
+
</JPanel>
</fr.ird.observe.ui.admin.AdminTabUI>
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUI.jcss b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUI.jcss
index c7781a4..6073115 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUI.jcss
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUI.jcss
@@ -28,6 +28,11 @@
layout:{new BorderLayout()};
}
+#contentSplitPane {
+ orientation: {JSplitPane.VERTICAL_SPLIT};
+ resizeWeight: 0.8;
+}
+
#startAction {
actionIcon:"wizard-start";
}
@@ -101,6 +106,13 @@
enabled:false;
}
-#actionsToConsume {
+#actionsToConsumePane {
border:{new TitledBorder(t("observe.datasynchro.actionsToPerform"))};
+ verticalScrollBarPolicy:{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED};
+}
+
+#actionsToConsume {
+ selectionMode:{ListSelectionModel.SINGLE_SELECTION};
+ cellRenderer:{new DataSynchronizeTaskListCellRenderer()};
+ model:{getStepModel().getTasks()};
}
\ No newline at end of file
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java
index 200b2dc..98b49fd 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java
@@ -1,14 +1,25 @@
package fr.ird.observe.ui.admin.datasynchro;
import fr.ird.observe.db.ObserveSwingDataSource;
+import fr.ird.observe.services.dto.DataReference;
+import fr.ird.observe.services.dto.referential.ProgramDto;
+import fr.ird.observe.services.dto.referential.ReferentialReference;
import fr.ird.observe.ui.admin.AdminTabUIHandler;
import fr.ird.observe.ui.admin.AdminUI;
import fr.ird.observe.ui.storage.tabs.DataSelectionModel;
+import fr.ird.observe.ui.tree.DataSelectionTreeCellRenderer;
+import fr.ird.observe.ui.tree.ObserveNode;
+import fr.ird.observe.ui.tree.ObserveTreeHelper;
import jaxx.runtime.swing.wizard.ext.WizardState;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import javax.swing.JList;
import javax.swing.border.TitledBorder;
+import java.awt.event.MouseEvent;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import static org.nuiton.i18n.I18n.t;
@@ -16,6 +27,7 @@ import static org.nuiton.i18n.I18n.t;
* Created on 02/08/16.
*
* @author Tony Chemit - chemit(a)codelutin.com
+ * @since 5.0
*/
public class DataSynchroUIHandler extends AdminTabUIHandler {
@@ -43,7 +55,7 @@ public class DataSynchroUIHandler extends AdminTabUIHandler {
log.debug(" specialized for [" + tabUI.getStep() + "] for main ui " + ui.getClass().getName() + "@" + System.identityHashCode(ui));
}
- tabUI.getStartAction().setText(t("observe.action.datasynchro.launch.operation", t(tabUI.getStep().getOperationLabel())));
+// tabUI.getStartAction().setText(t("observe.action.datasynchro.launch.operation", t(tabUI.getStep().getOperationLabel())));
getStepModel().getLeftSelectionDataModel().addPropertyChangeListener(evt -> {
@@ -64,58 +76,190 @@ public class DataSynchroUIHandler extends AdminTabUIHandler {
});
- }
+ DataSelectionTreeCellRenderer.initUI(tabUI.getLeftTreePane(), tabUI.getLeftTree());
+ DataSelectionTreeCellRenderer.initUI(tabUI.getRightTreePane(), tabUI.getRightTree());
+
+ getStepModel().addPropertyChangeListener(DataSynchroModel.LEFT_SOURCE_PROPERTY_NAME, evt -> {
+
+ DataSynchroModel stepModel = (DataSynchroModel) evt.getSource();
+ ObserveSwingDataSource dataSource = (ObserveSwingDataSource) evt.getNewValue();
+
+ tabUI.getLeftTreePane().setBorder(new TitledBorder(getModel().getLocalSourceModel().getLabel()));
+ stepModel.populateLeftSelectionModel();
+ updateSelectionModel(tabUI, tabUI.getLeftTreeHelper(), tabUI.getLeftTree(), dataSource, stepModel.getLeftSelectionDataModel(), tabUI.getLeftSelectionModel());
+ sendMessage(t("observe.message.datasynchro.leftData.loaded"));
+ });
+
+ getStepModel().addPropertyChangeListener(DataSynchroModel.RIGHT_SOURCE_PROPERTY_NAME, evt -> {
- public void doPrepareAction() {
+ DataSynchroModel stepModel = (DataSynchroModel) evt.getSource();
+ ObserveSwingDataSource dataSource = (ObserveSwingDataSource) evt.getNewValue();
- addAdminWorker(getUi().getStartAction().getToolTipText(), this::doAction);
+ tabUI.getRightTreePane().setBorder(new TitledBorder(getModel().getCentralSourceModel().getLabel()));
+ stepModel.populateRightSelectionModel();
+ updateSelectionModel(tabUI, tabUI.getRightTreeHelper(), tabUI.getRightTree(), dataSource, stepModel.getRightSelectionDataModel(), tabUI.getRightSelectionModel());
+ sendMessage(t("observe.message.datasynchro.rightData.loaded"));
+
+ });
}
- public void doExecuteAction() {
+// public void doPrepareAction() {
+//
+// addAdminWorker(getUi().getStartAction().getToolTipText(), this::doAction);
+//
+// }
+
+ public void addCopyToLeftTasks() {
+
+ DataSelectionModel selectionDataModel = getStepModel().getRightSelectionDataModel();
+ ObserveTreeHelper treeHelper = getUi().getRightTreeHelper();
+ Map<ReferentialReference<ProgramDto>, List<DataReference>> selectedDataByProgram = selectionDataModel.getSelectedDataByProgram();
+ selectionDataModel.removeAllSelectedData();
+ for (Map.Entry<ReferentialReference<ProgramDto>, List<DataReference>> entry : selectedDataByProgram.entrySet()) {
+ ReferentialReference<ProgramDto> program = entry.getKey();
+ for (DataReference trip : entry.getValue()) {
+ getStepModel().addTask(new CopyToLeftDataSynchronizeTask(program, trip));
+ treeHelper.removeTrip(program, trip);
+ selectionDataModel.removeTrip(program, trip);
+ }
+ }
- //TODO
- getModel().setStepState(WizardState.SUCCESSED);
}
- private WizardState doAction() throws Exception {
+ public void addCopyToRightTasks() {
+
+ DataSelectionModel selectionDataModel = getStepModel().getLeftSelectionDataModel();
+ ObserveTreeHelper treeHelper = getUi().getLeftTreeHelper();
+ Map<ReferentialReference<ProgramDto>, List<DataReference>> selectedDataByProgram = selectionDataModel.getSelectedDataByProgram();
+ selectionDataModel.removeAllSelectedData();
+ for (Map.Entry<ReferentialReference<ProgramDto>, List<DataReference>> entry : selectedDataByProgram.entrySet()) {
+ ReferentialReference<ProgramDto> program = entry.getKey();
+ for (DataReference trip : entry.getValue()) {
+ getStepModel().addTask(new CopyToRightDataSynchronizeTask(program, trip));
+ treeHelper.removeTrip(program, trip);
+ selectionDataModel.removeTrip(program, trip);
+ }
+ }
- if (log.isDebugEnabled()) {
- log.debug(this);
+ }
+
+ public void addDeleteFromLeftTasks() {
+
+ DataSelectionModel selectionDataModel = getStepModel().getLeftSelectionDataModel();
+ ObserveTreeHelper treeHelper = getUi().getLeftTreeHelper();
+ Map<ReferentialReference<ProgramDto>, List<DataReference>> selectedDataByProgram = selectionDataModel.getSelectedDataByProgram();
+ selectionDataModel.removeAllSelectedData();
+ for (Map.Entry<ReferentialReference<ProgramDto>, List<DataReference>> entry : selectedDataByProgram.entrySet()) {
+ ReferentialReference<ProgramDto> program = entry.getKey();
+ for (DataReference trip : entry.getValue()) {
+ getStepModel().addTask(new DeleteFromLeftDataSynchronizeTask(program, trip));
+ treeHelper.removeTrip(program, trip);
+ selectionDataModel.removeTrip(program, trip);
+ }
+ }
+
+ }
+
+ public void addDeleteFromRightTasks() {
+
+ DataSelectionModel selectionDataModel = getStepModel().getRightSelectionDataModel();
+ ObserveTreeHelper treeHelper = getUi().getRightTreeHelper();
+ Map<ReferentialReference<ProgramDto>, List<DataReference>> selectedDataByProgram = selectionDataModel.getSelectedDataByProgram();
+ selectionDataModel.removeAllSelectedData();
+ for (Map.Entry<ReferentialReference<ProgramDto>, List<DataReference>> entry : selectedDataByProgram.entrySet()) {
+ ReferentialReference<ProgramDto> program = entry.getKey();
+ for (DataReference trip : entry.getValue()) {
+ getStepModel().addTask(new DeleteFromRightDataSynchronizeTask(program, trip));
+ treeHelper.removeTrip(program, trip);
+ selectionDataModel.removeTrip(program, trip);
+ }
}
- DataSynchroModel stepModel = getStepModel();
+ }
- // on cree les sources de données
+ public void removeTasks(MouseEvent event) {
- ObserveSwingDataSource leftSource = model.getSafeLocalSource(false);
- stepModel.setLeftSource(leftSource);
+ if (event.getClickCount() > 1) {
- ObserveSwingDataSource rightSource = model.getSafeCentralSource(false);
- stepModel.setRightSource(rightSource);
+ JList source = (JList) event.getSource();
+ int selectionIndex = source.getMinSelectionIndex();
+ DataSynchronizeTaskSupport task = getStepModel().getTasks().getElementAt(selectionIndex);
+ getStepModel().getTasks().removeElementAt(selectionIndex);
- openSource(leftSource);
- openSource(rightSource);
+ ObserveTreeHelper treeHelper;
+ DataSelectionModel selectionDataModel;
+ if (task instanceof CopyToLeftDataSynchronizeTask || task instanceof DeleteFromRightDataSynchronizeTask) {
- // Populate tree models
+ // push back to right tree
+ treeHelper = getUi().getRightTreeHelper();
+ selectionDataModel = getStepModel().getRightSelectionDataModel();
+ } else {
- DataSynchroUI tabUI = getUi();
+ // push back to left tree
- tabUI.getLeftTreePane().setBorder(new TitledBorder(leftSource.getLabel()));
- stepModel.populateLeftSelectionModel();
- updateSelectionModel(tabUI, tabUI.getLeftTreeHelper(), tabUI.getLeftTree(), leftSource, stepModel.getLeftSelectionDataModel(), tabUI.getLeftSelectionModel());
- sendMessage(t("observe.message.datasynchro.leftData.loaded"));
+ treeHelper = getUi().getLeftTreeHelper();
+ selectionDataModel = getStepModel().getLeftSelectionDataModel();
+ }
- tabUI.getRightTreePane().setBorder(new TitledBorder(rightSource.getLabel()));
- stepModel.populateRightSelectionModel();
- updateSelectionModel(tabUI, tabUI.getRightTreeHelper(), tabUI.getRightTree(), rightSource, stepModel.getRightSelectionDataModel(), tabUI.getRightSelectionModel());
- sendMessage(t("observe.message.datasynchro.rightData.loaded"));
+ ReferentialReference<ProgramDto> program = task.getProgram();
+ DataReference trip = task.getTrip();
- sendMessage(t("observe.message.datasynchro.ready"));
+ Set<ReferentialReference<ProgramDto>> programs = selectionDataModel.getPrograms();
+ ObserveNode programNode;
+ if (programs.contains(program)) {
+ programNode = treeHelper.getChild(treeHelper.getRootNode(), program.getId());
+ } else {
+ programNode = treeHelper.addProgram(programs, program);
+ }
- return WizardState.NEED_FIX;
+ selectionDataModel.addData(program, trip);
+ treeHelper.addSimpleTrip(programNode, trip);
+ }
}
+ public void doExecuteAction() {
+
+ //TODO
+ getModel().setStepState(WizardState.SUCCESSED);
+
+ }
+
+// private WizardState doAction() throws Exception {
+//
+// if (log.isDebugEnabled()) {
+// log.debug(this);
+// }
+//
+// DataSynchroModel stepModel = getStepModel();
+//
+// // on cree les sources de données
+//
+// ObserveSwingDataSource leftSource = model.getSafeLocalSource(false);
+// openSource(leftSource);
+// stepModel.setLeftSource(leftSource);
+//
+// ObserveSwingDataSource rightSource = model.getSafeCentralSource(false);
+// openSource(rightSource);
+// stepModel.setRightSource(rightSource);
+//
+//
+// // Populate tree models
+//
+// DataSynchroUI tabUI = getUi();
+//
+// tabUI.getLeftTreePane().setBorder(new TitledBorder(leftSource.getLabel()));
+// stepModel.populateLeftSelectionModel();
+// updateSelectionModel(tabUI, tabUI.getLeftTreeHelper(), tabUI.getLeftTree(), leftSource, stepModel.getLeftSelectionDataModel(), tabUI.getLeftSelectionModel());
+// sendMessage(t("observe.message.datasynchro.leftData.loaded"));
+//
+//
+// sendMessage(t("observe.message.datasynchro.ready"));
+//
+// return WizardState.NEED_FIX;
+//
+// }
+
}
\ No newline at end of file
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchronizeTaskListCellRenderer.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchronizeTaskListCellRenderer.java
new file mode 100644
index 0000000..cccbbab
--- /dev/null
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchronizeTaskListCellRenderer.java
@@ -0,0 +1,37 @@
+package fr.ird.observe.ui.admin.datasynchro;
+
+import jaxx.runtime.SwingUtil;
+
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.ImageIcon;
+import javax.swing.JList;
+import java.awt.Component;
+
+/**
+ * Created on 03/08/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 5.0
+ */
+public class DataSynchronizeTaskListCellRenderer extends DefaultListCellRenderer {
+
+ private static final long serialVersionUID = 1L;
+
+ private final ImageIcon icon;
+
+ public DataSynchronizeTaskListCellRenderer() {
+ icon = SwingUtil.createActionIcon("cancel");
+ }
+
+ @Override
+ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+
+ DataSynchronizeTaskSupport task = (DataSynchronizeTaskSupport) value;
+ String label = task.getLabel();
+ Component listCellRendererComponent = super.getListCellRendererComponent(list, label, index, isSelected, cellHasFocus);
+ setIcon(icon);
+ return listCellRendererComponent;
+
+ }
+
+}
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchronizeTaskSupport.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchronizeTaskSupport.java
new file mode 100644
index 0000000..b60565f
--- /dev/null
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchronizeTaskSupport.java
@@ -0,0 +1,47 @@
+package fr.ird.observe.ui.admin.datasynchro;
+
+import fr.ird.observe.ObserveSwingApplicationContext;
+import fr.ird.observe.application.swing.decoration.DecoratorService;
+import fr.ird.observe.services.dto.DataReference;
+import fr.ird.observe.services.dto.referential.ProgramDto;
+import fr.ird.observe.services.dto.referential.ReferentialReference;
+
+/**
+ * Created on 03/08/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 5.0
+ */
+public abstract class DataSynchronizeTaskSupport {
+
+ private final ReferentialReference<ProgramDto> program;
+ private final DataReference trip;
+
+ public abstract String getLabel();
+
+ public ReferentialReference<ProgramDto> getProgram() {
+ return program;
+ }
+
+ public DataReference getTrip() {
+ return trip;
+ }
+
+ protected DataSynchronizeTaskSupport(ReferentialReference<ProgramDto> program, DataReference trip) {
+ this.program = program;
+ this.trip = trip;
+ }
+
+ protected String decorateProgram() {
+ DecoratorService decoratorService = ObserveSwingApplicationContext.get().getDecoratorService();
+ String programStr = decoratorService.getReferentialReferenceDecorator(ProgramDto.class).toString(getProgram());
+ return programStr;
+ }
+
+ protected String decorateTrip() {
+ DecoratorService decoratorService = ObserveSwingApplicationContext.get().getDecoratorService();
+ String tripStr = decoratorService.getTripReferenceDecorator(getTrip()).toString(getTrip());
+ return tripStr;
+ }
+
+}
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DeleteFromLeftDataSynchronizeTask.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DeleteFromLeftDataSynchronizeTask.java
new file mode 100644
index 0000000..d6705fb
--- /dev/null
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DeleteFromLeftDataSynchronizeTask.java
@@ -0,0 +1,25 @@
+package fr.ird.observe.ui.admin.datasynchro;
+
+import fr.ird.observe.services.dto.DataReference;
+import fr.ird.observe.services.dto.referential.ProgramDto;
+import fr.ird.observe.services.dto.referential.ReferentialReference;
+
+import static org.nuiton.i18n.I18n.t;
+
+/**
+ * Created on 03/08/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 5.0
+ */
+public class DeleteFromLeftDataSynchronizeTask extends DataSynchronizeTaskSupport {
+
+ public DeleteFromLeftDataSynchronizeTask(ReferentialReference<ProgramDto> programReference, DataReference tripReference) {
+ super(programReference, tripReference);
+ }
+
+ @Override
+ public String getLabel() {
+ return t("observe.datasynchro.deleteFromLeftTask", decorateProgram(), decorateTrip());
+ }
+}
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DeleteFromRightDataSynchronizeTask.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DeleteFromRightDataSynchronizeTask.java
new file mode 100644
index 0000000..b891c9a
--- /dev/null
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DeleteFromRightDataSynchronizeTask.java
@@ -0,0 +1,25 @@
+package fr.ird.observe.ui.admin.datasynchro;
+
+import fr.ird.observe.services.dto.DataReference;
+import fr.ird.observe.services.dto.referential.ProgramDto;
+import fr.ird.observe.services.dto.referential.ReferentialReference;
+
+import static org.nuiton.i18n.I18n.t;
+
+/**
+ * Created on 03/08/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ * @since 5.0
+ */
+public class DeleteFromRightDataSynchronizeTask extends DataSynchronizeTaskSupport {
+
+ public DeleteFromRightDataSynchronizeTask(ReferentialReference<ProgramDto> programReference, DataReference tripReference) {
+ super(programReference, tripReference);
+ }
+
+ @Override
+ public String getLabel() {
+ return t("observe.datasynchro.deleteFromRightTask", decorateProgram(), decorateTrip());
+ }
+}
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/DataSelectionModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/DataSelectionModel.java
index 95aecc8..9f7f29e 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/DataSelectionModel.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/tabs/DataSelectionModel.java
@@ -47,6 +47,7 @@ import org.apache.commons.logging.LogFactory;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -539,4 +540,24 @@ public class DataSelectionModel implements Serializable {
return result;
}
+
+ public void addData(ReferentialReference<ProgramDto> program, DataReference trip) {
+ if (!getDatas().containsKey(program)) {
+ getDatas().put(program, new ArrayList<>());
+ }
+ getDatas(program.getId()).add(trip);
+ firePropertyChange(PROPERTY_DATAS, getDatas());
+ }
+
+ public Set<ReferentialReference<ProgramDto>> getPrograms() {
+ return getDatas().keySet();
+ }
+
+ public void removeTrip(ReferentialReference<ProgramDto> program, DataReference trip) {
+ List<DataReference> trips = getDatas(program.getId());
+ trips.remove(trip);
+ if (trips.isEmpty()) {
+ getDatas().remove(program);
+ }
+ }
}
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ObserveTreeHelper.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ObserveTreeHelper.java
index 6c28585..97d0aa5 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ObserveTreeHelper.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ObserveTreeHelper.java
@@ -377,8 +377,7 @@ public class ObserveTreeHelper extends NavTreeHelper<ObserveNode> {
} finally {
getBridge().setPathToSelect();
if (log.isInfoEnabled()) {
- log.info("Creates " + (ObserveNode.count - count) +
- " nodes to select path " + Arrays.toString(path));
+ log.info("Creates " + (ObserveNode.count - count) + " nodes to select path " + Arrays.toString(path));
}
}
}
@@ -457,6 +456,35 @@ public class ObserveTreeHelper extends NavTreeHelper<ObserveNode> {
return result;
}
+ public ObserveNode addSimpleTrip(ObserveNode parentNode, DataReference<?> bean) {
+ ObserveNode result;
+
+ if (bean.getType().isAssignableFrom(TripSeineDto.class)) {
+
+ ProgramSeineNodeChildLoador loador = getChildLoador(ProgramSeineNodeChildLoador.class);
+ boolean addChilds = loador.isAddChilds();
+ loador.setAddChilds(false);
+ try {
+ result = loador.createNode((DataReference<TripSeineDto>) bean, dataProvider);
+ insertNode(parentNode, result);
+ } finally {
+ loador.setAddChilds(addChilds);
+ }
+ } else {
+
+ ProgramLonglineNodeChildLoador loador = getChildLoador(ProgramLonglineNodeChildLoador.class);
+ boolean addChilds = loador.isAddChilds();
+ loador.setAddChilds(false);
+ try {
+ result = loador.createNode((DataReference<TripLonglineDto>) bean, dataProvider);
+ insertNode(parentNode, result);
+ } finally {
+ loador.setAddChilds(addChilds);
+ }
+ }
+ return result;
+ }
+
public ObserveNode addRoute(ObserveNode parentNode, DataReference<RouteDto> bean) {
RoutesNodeChildLoador loador =
getChildLoador(RoutesNodeChildLoador.class);
@@ -508,7 +536,7 @@ public class ObserveTreeHelper extends NavTreeHelper<ObserveNode> {
public ObserveNode addProgram(ReferentialReference<ProgramDto> bean) {
Set<ReferentialReference<ProgramDto>> programs = getDataProvider().getDataSource().getReferentialReferences(ProgramDto.class);
- List data = Lists.newArrayList(programs);
+ List<ReferentialReference<ProgramDto>> data = Lists.newArrayList(programs);
int newIndex = 0;
if (CollectionUtils.isNotEmpty(data)) {
sortPrograms(data);
@@ -536,6 +564,35 @@ public class ObserveTreeHelper extends NavTreeHelper<ObserveNode> {
refreshNode(result, false);
}
+ public ObserveNode addProgram(Set<ReferentialReference<ProgramDto>> existingPrograms, ReferentialReference<ProgramDto> bean) {
+
+ List<ReferentialReference<ProgramDto>> data = Lists.newArrayList(existingPrograms);
+ data.add(bean);
+ int newIndex = 0;
+ if (CollectionUtils.isNotEmpty(data)) {
+ sortPrograms(data);
+ newIndex = data.indexOf(bean);
+ }
+ RootNodeChildLoador loador = getChildLoador(RootNodeChildLoador.class);
+ ObserveNode result = loador.createNode(bean, dataProvider);
+ insertNode(getRootNode(), result, newIndex);
+ return result;
+ }
+
+ public void removeTrip(ReferentialReference<ProgramDto> program, DataReference trip) {
+
+ ObserveNode rootNode = getRootNode();
+ ObserveNode programNode = rootNode.getChild(program.getId(), getBridge(), dataProvider);
+ Preconditions.checkNotNull(programNode, "Could not find program node with id: " + program);
+ ObserveNode tripNode = programNode.getChild(trip.getId(), getBridge(), dataProvider);
+ Preconditions.checkNotNull(tripNode, "Could not find program node with id: " + trip);
+ removeNode(tripNode);
+
+ if (programNode.isLeaf()) {
+ removeProgram(program.getId());
+ }
+ }
+
public void reloadSelectedNode(boolean refreshFromParent, boolean refreshChilds) {
ObserveNode node = getSelectedNode();
((AbstrctReferenceNodeSupport) node).setReloadEntity(true);
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/loadors/ProgramLonglineNodeChildLoador.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/loadors/ProgramLonglineNodeChildLoador.java
index 70c65bc..b786b43 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/loadors/ProgramLonglineNodeChildLoador.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/loadors/ProgramLonglineNodeChildLoador.java
@@ -134,5 +134,12 @@ public class ProgramLonglineNodeChildLoador extends AbstractNodeChildLoador<Data
}
+ public void setAddChilds(boolean addChilds) {
+ this.addChilds = addChilds;
+ }
+
+ public boolean isAddChilds() {
+ return addChilds;
+ }
}
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/loadors/ProgramSeineNodeChildLoador.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/loadors/ProgramSeineNodeChildLoador.java
index 03899dc..5dc088f 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/loadors/ProgramSeineNodeChildLoador.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/loadors/ProgramSeineNodeChildLoador.java
@@ -128,4 +128,12 @@ public class ProgramSeineNodeChildLoador extends AbstractNodeChildLoador<DataRef
return result;
}
+
+ public boolean isAddChilds() {
+ return addChilds;
+ }
+
+ public void setAddChilds(boolean addChilds) {
+ this.addChilds = addChilds;
+ }
}
diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties
index 908924b..7d26d45 100644
--- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties
+++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties
@@ -1042,6 +1042,10 @@ observe.content.mode.create.tip=
observe.content.mode.read.tip=
observe.content.mode.update.tip=
observe.datasynchro.actionsToPerform=
+observe.datasynchro.copyToLeftTask=
+observe.datasynchro.copyToRightTask=
+observe.datasynchro.deleteFromLeftTask=
+observe.datasynchro.deleteFromRightTask=
observe.encounter.action.create=Insert this encounter
observe.encounter.action.create.tip=Insert this encounter
observe.encounter.count=Count
diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties
index 6b9c8cf..bc0bf88 100644
--- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties
+++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties
@@ -1042,6 +1042,10 @@ observe.content.mode.create.tip=Objeto en proceso de creación
observe.content.mode.read.tip=Objeto no se puede editar
observe.content.mode.update.tip=Objeto en proceso de edición
observe.datasynchro.actionsToPerform=
+observe.datasynchro.copyToLeftTask=
+observe.datasynchro.copyToRightTask=
+observe.datasynchro.deleteFromLeftTask=
+observe.datasynchro.deleteFromRightTask=
observe.encounter.action.create=
observe.encounter.action.create.tip=
observe.encounter.count=
diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties
index 770bc94..279004e 100644
--- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties
+++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties
@@ -1041,6 +1041,10 @@ observe.content.mode.create.tip=L'objet est en cours de création
observe.content.mode.read.tip=L'objet n'est pas éditable
observe.content.mode.update.tip=L'objet est en cours d'édition
observe.datasynchro.actionsToPerform=Opérations à réaliser
+observe.datasynchro.copyToLeftTask=Copier vers la base de gauche \: %s - %s
+observe.datasynchro.copyToRightTask=Copier vers la base de droite \: %s - %s
+observe.datasynchro.deleteFromLeftTask=Supprimer de la base de gauche \: %s - %s
+observe.datasynchro.deleteFromRightTask=Supprimer de la base de droite \: %s - %s
observe.encounter.action.create=Insérer cette rencontre
observe.encounter.action.create.tip=Insérer cette rencontre
observe.encounter.count=Nombre
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0
This is an automated email from the git hooks/post-receive script.
New commit to branch feature/4304_synchro_marees in repository observe.
See https://gitlab.nuiton.org/codelutin/observe.git
commit 2194ff2cd4542698e6ca1195eb6f3098c4e54731
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Aug 3 12:33:14 2016 +0200
more decoration methods
---
.../observe/application/swing/decoration/DecoratorService.java | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/observe-application-swing-decoration/src/main/java/fr/ird/observe/application/swing/decoration/DecoratorService.java b/observe-application-swing-decoration/src/main/java/fr/ird/observe/application/swing/decoration/DecoratorService.java
index a349c6c..0706a18 100644
--- a/observe-application-swing-decoration/src/main/java/fr/ird/observe/application/swing/decoration/DecoratorService.java
+++ b/observe-application-swing-decoration/src/main/java/fr/ird/observe/application/swing/decoration/DecoratorService.java
@@ -607,6 +607,16 @@ public class DecoratorService extends DecoratorProvider {
return decorator;
}
+ public DataReferenceDecorator getTripReferenceDecorator(DataReference tripDto) {
+ DataReferenceDecorator decorator;
+ if (tripDto.getType().isAssignableFrom(TripSeineDto.class)) {
+ decorator = (DataReferenceDecorator) getDataReferenceDecorator(TripSeineDto.class);
+ } else {
+ decorator = (DataReferenceDecorator) getDataReferenceDecorator(TripLonglineDto.class);
+ }
+ return decorator;
+ }
+
protected <T extends ReferentialDto> void registerDefaultReferentialAndReferentialReferenceDecorator(Class<T> referenceType, String libelle) {
registerReferentialReferenceDecorator(referenceType, "${code}$s##${label}$s");
registerObserveDecorator(referenceType, "${code}$s##${" + libelle + "}$s", " ");
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0
This is an automated email from the git hooks/post-receive script.
New commit to branch feature/4304_synchro_marees in repository observe.
See https://gitlab.nuiton.org/codelutin/observe.git
commit e3b7181a75318c871b39513055120a426551e870
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Tue Aug 2 17:37:26 2016 +0200
UI for data synchronize action
---
.../main/java/fr/ird/observe/ui/ObserveMainUI.jaxx | 1 +
.../main/java/fr/ird/observe/ui/ObserveMainUI.jcss | 4 +
.../java/fr/ird/observe/ui/admin/AdminStep.java | 21 ++++
.../fr/ird/observe/ui/admin/AdminTabUIHandler.java | 51 ++++++---
.../java/fr/ird/observe/ui/admin/AdminUIModel.java | 55 +++++++++
.../ui/admin/datasynchro/DataSynchroModel.java | 97 ++++++++++++++++
.../ui/admin/datasynchro/DataSynchroUI.jaxx | 127 +++++++++++++++++++++
.../ui/admin/datasynchro/DataSynchroUI.jcss | 106 +++++++++++++++++
.../ui/admin/datasynchro/DataSynchroUIHandler.java | 121 ++++++++++++++++++++
.../observe-application-swing_en_GB.properties | 20 ++++
.../observe-application-swing_es_ES.properties | 20 ++++
.../observe-application-swing_fr_FR.properties | 19 +++
12 files changed, 623 insertions(+), 19 deletions(-)
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/ObserveMainUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/ObserveMainUI.jaxx
index e97816a..7f43933 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/ObserveMainUI.jaxx
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/ObserveMainUI.jaxx
@@ -172,6 +172,7 @@ void $afterCompleteSetup() {
<JMenuItem id='menuActionsExportData'/>
<JMenuItem id='menuActionsReport'/>
<JMenuItem id='menuActionsConsolidate'/>
+ <JMenuItem id='menuActionsDataSynchro'/>
</JMenu>
<JMenu id='menuNavigation'>
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/ObserveMainUI.jcss b/observe-application-swing/src/main/java/fr/ird/observe/ui/ObserveMainUI.jcss
index 50f53e1..999d7b2 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/ObserveMainUI.jcss
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/ObserveMainUI.jcss
@@ -204,6 +204,10 @@ JSplitPane {
enabled: {getHandler().acceptMode(getMode(), !isBusy() && !isMainFromSynchro(), ObserveUIMode.DB, ObserveUIMode.NO_DB)};
}
+#menuActionsDataSynchro {
+ action: {new fr.ird.observe.ui.actions.LaunchAdminAction(this, AdminStep.DATA_SYNCHRONIZE)};
+}
+
#menuActionsSynchronize {
action: {new fr.ird.observe.ui.actions.LaunchAdminAction(this, AdminStep.SYNCHRONIZE)};
}
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminStep.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminStep.java
index 41032c0..2819d66 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminStep.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminStep.java
@@ -27,6 +27,8 @@ import fr.ird.observe.ui.admin.config.ConfigUI;
import fr.ird.observe.ui.admin.config.SelectDataUI;
import fr.ird.observe.ui.admin.consolidate.ConsolidateModel;
import fr.ird.observe.ui.admin.consolidate.ConsolidateUI;
+import fr.ird.observe.ui.admin.datasynchro.DataSynchroModel;
+import fr.ird.observe.ui.admin.datasynchro.DataSynchroUI;
import fr.ird.observe.ui.admin.export.ExportModel;
import fr.ird.observe.ui.admin.export.ExportUI;
import fr.ird.observe.ui.admin.report.ReportModel;
@@ -99,6 +101,25 @@ public enum AdminStep implements WizardExtStep {
DbMode.USE_REMOTE
),
+ DATA_SYNCHRONIZE(
+ n("observe.synchro.step.dataSynchronize"),
+ n("observe.synchro.step.dataSynchronize.description"),
+ n("observe.title.dataSynchronize"),
+ n("observe.title.dataSynchronize.tip"),
+ "dataSynchronize",
+ n("observe.synchro.operation.dataSynchronize"),
+ n("observe.synchro.operation.dataSynchronize.description"),
+ DataSynchroModel.class,
+ DataSynchroUI.class,
+ true,
+ false,
+ false,
+ false,
+ DbMode.USE_LOCAL,
+ DbMode.USE_REMOTE,
+ DbMode.USE_SERVER
+ ),
+
/** pour lancer la validation des donnees */
VALIDATE(
n("observe.synchro.step.validate"),
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminTabUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminTabUIHandler.java
index 8e1e171..97e1ed0 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminTabUIHandler.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminTabUIHandler.java
@@ -23,11 +23,11 @@ package fr.ird.observe.ui.admin;
import fr.ird.observe.ObserveRunner;
import fr.ird.observe.ObserveSwingApplicationContext;
+import fr.ird.observe.application.swing.decoration.DecoratorService;
import fr.ird.observe.db.ObserveSwingDataSource;
import fr.ird.observe.services.service.BabModelVersionException;
import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.services.service.DatabaseNotFoundException;
-import fr.ird.observe.application.swing.decoration.DecoratorService;
import fr.ird.observe.ui.admin.config.SelectDataUI;
import fr.ird.observe.ui.admin.resume.ShowResumeUI;
import fr.ird.observe.ui.storage.tabs.DataSelectionModel;
@@ -196,33 +196,17 @@ public class AdminTabUIHandler {
DataSelectionModel selectDataModel = tabUI.getSelectDataModel();
DataSelectionTreeSelectionModel selectionModel = tabUI.getSelectionModel();
ObserveTreeHelper helper = tabUI.getTreeHelper();
-
- if (log.isDebugEnabled()) {
- log.debug("reload model " + selectDataModel);
- }
-
- selectionModel.clearSelection();
ObserveSwingDataSource source = tabUI.getModel().getSafeLocalSource(true);
- if (log.isDebugEnabled()) {
- log.debug("Will treeHelper : " + helper);
- log.debug("selection model : " + selectDataModel);
- log.debug("use referentiel : " + selectDataModel.isUseReferentiel());
- log.debug("use data : " + selectDataModel.isUseData());
- }
-
- TreeModel model = helper.createModel(tabUI, selectDataModel, source);
+ updateSelectionModel(tabUI, helper, selectTree, source, selectDataModel, selectionModel);
- selectTree.setModel(model);
-
- selectionModel.initUI(selectTree);
}
protected void checkStepIsOperation(AdminTabUI ui) {
if (!ui.getStep().isOperation()) {
throw new IllegalStateException(
"can not launch objectOperation on none operation step " +
- ui.getStep());
+ ui.getStep());
}
}
@@ -248,4 +232,33 @@ public class AdminTabUIHandler {
ObserveRunner.getActionExecutor().addAction(worker);
}
+ protected void updateSelectionModel(AdminTabUI tabUI,
+ ObserveTreeHelper helper,
+ JTree selectTree,
+ ObserveSwingDataSource source,
+ DataSelectionModel selectDataModel,
+ DataSelectionTreeSelectionModel selectionModel) {
+
+
+ if (log.isDebugEnabled()) {
+ log.debug("reload model " + selectDataModel);
+ }
+
+ selectionModel.clearSelection();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Will treeHelper : " + helper);
+ log.debug("selection model : " + selectDataModel);
+ log.debug("use referentiel : " + selectDataModel.isUseReferentiel());
+ log.debug("use data : " + selectDataModel.isUseData());
+ }
+
+ helper.setUI(selectTree, false);
+
+ TreeModel model = helper.createModel(tabUI, selectDataModel, source);
+ selectTree.setModel(model);
+
+ selectionModel.initUI(selectTree);
+ }
+
}
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java
index ac8553b..80930e2 100644
--- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminUIModel.java
@@ -44,6 +44,7 @@ import fr.ird.observe.services.service.actions.validate.ValidateServiceUtils;
import fr.ird.observe.services.service.longline.TripLonglineService;
import fr.ird.observe.services.service.seine.TripSeineService;
import fr.ird.observe.ui.admin.consolidate.ConsolidateModel;
+import fr.ird.observe.ui.admin.datasynchro.DataSynchroModel;
import fr.ird.observe.ui.admin.export.ExportModel;
import fr.ird.observe.ui.admin.report.ReportModel;
import fr.ird.observe.ui.admin.save.SaveLocalModel;
@@ -569,6 +570,12 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
getConsolidateModel().addPropertyChangeListener(listenConsolidateModified);
}
+ if (containsOperation(AdminStep.DATA_SYNCHRONIZE)) {
+
+ //TODO ?
+
+ }
+
// on ecoute les modifications d'étapes pour remplir les modèles de sélection
// si nécessaire
@@ -882,6 +889,10 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
return (SaveLocalModel) getStepModel(AdminStep.SAVE_LOCAL);
}
+ public DataSynchroModel getDataSynchroModel() {
+ return (DataSynchroModel) getStepModel(AdminStep.DATA_SYNCHRONIZE);
+ }
+
@Override
public void cancel() {
super.cancel();
@@ -1047,6 +1058,44 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
}
}
}
+ if (validate && containsOperation(AdminStep.DATA_SYNCHRONIZE)) {
+
+ // les deux bases (source et referentiel) doivent etre different
+ DbMode dbMode = localSourceModel.getDbMode();
+ if (dbMode == centralSourceModel.getDbMode()) {
+ if (dbMode == DbMode.USE_REMOTE) {
+ validate &= !localSourceModel.getPgConfig().getJdbcUrl().equals(centralSourceModel.getPgConfig().getJdbcUrl());
+ } else {
+
+ // pour le moment ce cas n'est pas possible
+ // la base de référence est obligatoirement une base distante
+ //FIXME
+ }
+ }
+
+ ObserveDataSourceInformation leftDataSourceInformation = getLocalSourceInformation();
+ if (!(leftDataSourceInformation.canReadData() && leftDataSourceInformation.canWriteData())) {
+ if (log.isDebugEnabled()) {
+ log.debug("can not read and write data on left data source");
+ }
+ return false;
+ }
+
+ if (centralSourceModel.getDataSourceInformation() != null) {
+
+ ObserveDataSourceInformation rightDataSourceInformation = centralSourceModel.getDataSourceInformation();
+ if (!(rightDataSourceInformation.canReadData() && rightDataSourceInformation.canWriteData())) {
+ if (log.isDebugEnabled()) {
+ log.debug("can not read and write data on right data source");
+ }
+ return false;
+ }
+
+ }
+
+
+
+ }
if (containsOperation(AdminStep.SYNCHRONIZE)) {
// les deux bases (source et referentiel) doivent etre different
@@ -1179,6 +1228,12 @@ public class AdminUIModel extends WizardExtModel<AdminStep> {
universe.add(AdminStep.SELECT_DATA);
}
+ if (containsOperation(AdminStep.DATA_SYNCHRONIZE)) {
+
+ // ajout de l'onglet de resolution des entites obsoletes
+ universe.add(AdminStep.DATA_SYNCHRONIZE);
+ }
+
if (containsOperation(AdminStep.SYNCHRONIZE)) {
// ajout de l'onglet de resolution des entites obsoletes
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroModel.java
new file mode 100644
index 0000000..1371502
--- /dev/null
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroModel.java
@@ -0,0 +1,97 @@
+package fr.ird.observe.ui.admin.datasynchro;
+
+import fr.ird.observe.db.ObserveSwingDataSource;
+import fr.ird.observe.ui.admin.AdminActionModel;
+import fr.ird.observe.ui.admin.AdminStep;
+import fr.ird.observe.ui.storage.tabs.DataSelectionModel;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Created on 02/08/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ */
+public class DataSynchroModel extends AdminActionModel {
+
+ /** Logger. */
+ private static final Log log = LogFactory.getLog(DataSynchroModel.class);
+
+ public static final String LEFT_SELECTION_MODEL_CHANGED_PROPERTY_NAME = "leftSelectionModelChanged";
+ public static final String RIGHT_SELECTION_MODEL_CHANGED_PROPERTY_NAME = "rightSelectionModelChanged";
+
+ /** la source sur le panneau de gauche. */
+ protected ObserveSwingDataSource leftSource;
+
+ /** la source sur le panneau de droite. */
+ protected ObserveSwingDataSource rightSource;
+
+ /** les données sélectionnées sur le panneau de gauche. */
+ protected final DataSelectionModel leftSelectionDataModel;
+
+ /** les données sélectionnées sur le panneau de droite. */
+ protected final DataSelectionModel rightSelectionDataModel;
+
+ public DataSynchroModel() {
+ super(AdminStep.DATA_SYNCHRONIZE);
+
+ leftSelectionDataModel = new DataSelectionModel();
+ leftSelectionDataModel.setUseData(true);
+
+ rightSelectionDataModel = new DataSelectionModel();
+ rightSelectionDataModel.setUseData(true);
+ }
+
+ public ObserveSwingDataSource getLeftSource() {
+ return leftSource;
+ }
+
+ public void setLeftSource(ObserveSwingDataSource leftSource) {
+ this.leftSource = leftSource;
+ }
+
+ public ObserveSwingDataSource getRightSource() {
+ return rightSource;
+ }
+
+ public void setRightSource(ObserveSwingDataSource rightSource) {
+ this.rightSource = rightSource;
+ }
+
+ public DataSelectionModel getLeftSelectionDataModel() {
+ return leftSelectionDataModel;
+ }
+
+ public DataSelectionModel getRightSelectionDataModel() {
+ return rightSelectionDataModel;
+ }
+
+ public void populateLeftSelectionModel() {
+ populateSelectionModel(leftSource, leftSelectionDataModel, LEFT_SELECTION_MODEL_CHANGED_PROPERTY_NAME);
+ }
+
+ public void populateRightSelectionModel() {
+ populateSelectionModel(rightSource, rightSelectionDataModel, RIGHT_SELECTION_MODEL_CHANGED_PROPERTY_NAME);
+ }
+
+ private void populateSelectionModel(ObserveSwingDataSource dataSource, DataSelectionModel selectionDataModel, String propertyName) {
+
+ try {
+
+ DataSelectionModel.populate(selectionDataModel, dataSource);
+
+ } catch (Exception e) {
+
+ if (log.isErrorEnabled()) {
+ log.error("could not populate selected model", e);
+ }
+
+ } finally {
+
+ // on notifie que le modèle de sélection a changé
+ // (il faut donc recalculé l'arbre de sélection)
+ firePropertyChange(propertyName, selectionDataModel);
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUI.jaxx
new file mode 100644
index 0000000..0d21a11
--- /dev/null
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUI.jaxx
@@ -0,0 +1,127 @@
+<!--
+ #%L
+ ObServe :: Swing
+ %%
+ Copyright (C) 2008 - 2010 IRD, Codelutin, Tony Chemit
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public
+ License along with this program. If not, see
+ <http://www.gnu.org/licenses/gpl-3.0.html>.
+ #L%
+ -->
+
+<!-- ************************************************************* -->
+<!-- L'écran de synchronisation bi-directionnel des données -->
+<!-- ************************************************************* -->
+
+<fr.ird.observe.ui.admin.AdminTabUI>
+
+ <import>
+ fr.ird.observe.ui.UIHelper
+ fr.ird.observe.ui.admin.AdminUI
+ fr.ird.observe.ui.admin.AdminStep
+ fr.ird.observe.ui.tree.ObserveTreeHelper
+ fr.ird.observe.ui.tree.DataSelectionTreeCellRenderer
+ fr.ird.observe.ui.tree.DataSelectionTreeSelectionModel
+ fr.ird.observe.ui.storage.tabs.DataSelectionModel
+
+ jaxx.runtime.SwingUtil
+
+ javax.swing.tree.TreeSelectionModel
+
+ </import>
+
+ <ObserveTreeHelper id='leftTreeHelper'/>
+ <ObserveTreeHelper id='rightTreeHelper'/>
+
+ <DataSynchroUIHandler id='handler' constructorParams='this'/>
+
+ <DataSynchroModel id='stepModel' initializer='getModel().getDataSynchroModel()'/>
+
+ <DataSelectionModel id='leftSelectDataModel'
+ initializer='getModel().getDataSynchroModel().getLeftSelectionDataModel()'/>
+ <DataSelectionTreeSelectionModel id='leftSelectionModel'/>
+ <DataSelectionTreeCellRenderer id='leftSelectionRenderer' constraints='BorderLayout.EAST'/>
+
+ <DataSelectionModel id='rightSelectDataModel'
+ initializer='getModel().getDataSynchroModel().getRightSelectionDataModel()'/>
+ <DataSelectionTreeSelectionModel id='rightSelectionModel'/>
+ <DataSelectionTreeCellRenderer id='rightSelectionRenderer' constraints='BorderLayout.EAST'/>
+
+ <script><![CDATA[
+public DataSynchroUI(AdminUI parentContext) {
+ super(AdminStep.DATA_SYNCHRONIZE, parentContext);
+}
+
+public void initUI(AdminUI ui) {
+ getHandler().initTabUI(ui, this);
+}
+
+@Override
+public void destroy() {
+ leftSelectionModel.clearSelection();
+ rightSelectionModel.clearSelection();
+ super.destroy();
+}
+]]>
+ </script>
+
+ <JPanel id='PENDING_content'>
+ <Table constraints='BorderLayout.CENTER' fill='both' weightx='1'
+ weighty='1'>
+ <row>
+ <cell>
+ <JButton id='startAction' onActionPerformed="getHandler().doPrepareAction()"/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+
+ <JPanel id='NEED_FIX_content'>
+ <Table fill="both" constraints='BorderLayout.CENTER'>
+ <row weighty="0.8">
+ <cell weightx="0.4">
+ <JScrollPane id='leftTreePane' decorator='boxed'>
+ <JTree id='leftTree'/>
+ </JScrollPane>
+ </cell>
+ <cell weightx="0.2">
+ <JPanel layout="{new BorderLayout()}" border='{new TitledBorder(" ")}'>
+ <JPanel id="middleActions" layout="{new GridLayout(0, 1)}" constraints='BorderLayout.CENTER'>
+ <JButton id="copyToRight"/>
+ <JButton id="copyToLeft"/>
+ <JButton id="deleteFromLeft"/>
+ <JButton id="deleteFromRight"/>
+ </JPanel>
+ </JPanel>
+ </cell>
+ <cell weightx="0.4">
+ <JScrollPane id='rightTreePane' decorator='boxed'>
+ <JTree id='rightTree'/>
+ </JScrollPane>
+ </cell>
+ </row>
+ <row weighty="0.8">
+ <cell columns="3">
+ <JList id="actionsToConsume"/>
+ </cell>
+ </row>
+ <row>
+ <cell columns='3'>
+ <JButton id='applyAction' onActionPerformed='getHandler().doExecuteAction()'/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+
+</fr.ird.observe.ui.admin.AdminTabUI>
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUI.jcss b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUI.jcss
new file mode 100644
index 0000000..c7781a4
--- /dev/null
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUI.jcss
@@ -0,0 +1,106 @@
+/*
+ * #%L
+ * ObServe :: Swing
+ * %%
+ * Copyright (C) 2008 - 2010 IRD, Codelutin, Tony Chemit
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+#NEED_FIX_content {
+ layout:{new BorderLayout()};
+}
+
+#PENDING_content {
+ layout:{new BorderLayout()};
+}
+
+#startAction {
+ actionIcon:"wizard-start";
+}
+
+#applyAction {
+ actionIcon:accept;
+ text:"observe.action.apply";
+}
+
+#leftTree {
+ rootVisible:false;
+ largeModel:true;
+ minimumSize:{UIHelper.newMinDimension()};
+ font-size:11;
+ showsRootHandles:false;
+ toggleClickCount:100;
+ selectionModel:{leftSelectionModel};
+ cellRenderer:{leftSelectionRenderer};
+}
+
+#leftSelectionModel {
+ selectionMode: {TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION};
+ dataModel:{leftSelectDataModel};
+}
+
+#leftTreePane {
+ verticalScrollBarPolicy:{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED};
+}
+
+#rightTree {
+ rootVisible:false;
+ largeModel:true;
+ minimumSize:{UIHelper.newMinDimension()};
+ font-size:11;
+ showsRootHandles:false;
+ toggleClickCount:100;
+ selectionModel:{rightSelectionModel};
+ cellRenderer:{rightSelectionRenderer};
+}
+
+#rightSelectionModel {
+ selectionMode: {TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION};
+ dataModel:{rightSelectDataModel};
+}
+
+#rightTreePane {
+ verticalScrollBarPolicy:{JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED};
+}
+
+#copyToLeft {
+ text:"observe.action.copyToLeft";
+ toolTipText:"observe.action.copyToLeft.tip";
+ enabled:false;
+}
+
+#copyToRight {
+ text:"observe.action.copyToRight";
+ toolTipText:"observe.action.copyToRight.tip";
+ enabled:false;
+}
+
+#deleteFromLeft {
+ text:"observe.action.deleteFromLeft";
+ toolTipText:"observe.action.deleteFromLeft.tip";
+ enabled:false;
+}
+
+#deleteFromRight {
+ text:"observe.action.deleteFromRight";
+ toolTipText:"observe.action.deleteFromRight.tip";
+ enabled:false;
+}
+
+#actionsToConsume {
+ border:{new TitledBorder(t("observe.datasynchro.actionsToPerform"))};
+}
\ No newline at end of file
diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java
new file mode 100644
index 0000000..200b2dc
--- /dev/null
+++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java
@@ -0,0 +1,121 @@
+package fr.ird.observe.ui.admin.datasynchro;
+
+import fr.ird.observe.db.ObserveSwingDataSource;
+import fr.ird.observe.ui.admin.AdminTabUIHandler;
+import fr.ird.observe.ui.admin.AdminUI;
+import fr.ird.observe.ui.storage.tabs.DataSelectionModel;
+import jaxx.runtime.swing.wizard.ext.WizardState;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.swing.border.TitledBorder;
+
+import static org.nuiton.i18n.I18n.t;
+
+/**
+ * Created on 02/08/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ */
+public class DataSynchroUIHandler extends AdminTabUIHandler {
+
+ /** Logger */
+ private static final Log log = LogFactory.getLog(DataSynchroUIHandler.class);
+
+ public DataSynchroUIHandler(DataSynchroUI ui) {
+ super(ui);
+ }
+
+ public DataSynchroModel getStepModel() {
+ return model.getDataSynchroModel();
+ }
+
+ @Override
+ public DataSynchroUI getUi() {
+ return (DataSynchroUI) super.getUi();
+ }
+
+ public void initTabUI(AdminUI ui, DataSynchroUI tabUI) {
+
+ super.initTabUI(ui, tabUI);
+
+ if (log.isDebugEnabled()) {
+ log.debug(" specialized for [" + tabUI.getStep() + "] for main ui " + ui.getClass().getName() + "@" + System.identityHashCode(ui));
+ }
+
+ tabUI.getStartAction().setText(t("observe.action.datasynchro.launch.operation", t(tabUI.getStep().getOperationLabel())));
+
+ getStepModel().getLeftSelectionDataModel().addPropertyChangeListener(evt -> {
+
+ DataSelectionModel model = (DataSelectionModel) evt.getSource();
+ boolean withDataSelected = !model.isDataEmpty();
+
+ tabUI.getCopyToRight().setEnabled(withDataSelected);
+ tabUI.getDeleteFromLeft().setEnabled(withDataSelected);
+
+ });
+ getStepModel().getRightSelectionDataModel().addPropertyChangeListener(evt -> {
+
+ DataSelectionModel model = (DataSelectionModel) evt.getSource();
+ boolean withDataSelected = !model.isDataEmpty();
+
+ tabUI.getCopyToLeft().setEnabled(withDataSelected);
+ tabUI.getDeleteFromRight().setEnabled(withDataSelected);
+
+ });
+
+ }
+
+ public void doPrepareAction() {
+
+ addAdminWorker(getUi().getStartAction().getToolTipText(), this::doAction);
+
+ }
+
+ public void doExecuteAction() {
+
+ //TODO
+ getModel().setStepState(WizardState.SUCCESSED);
+
+ }
+
+ private WizardState doAction() throws Exception {
+
+ if (log.isDebugEnabled()) {
+ log.debug(this);
+ }
+
+ DataSynchroModel stepModel = getStepModel();
+
+ // on cree les sources de données
+
+ ObserveSwingDataSource leftSource = model.getSafeLocalSource(false);
+ stepModel.setLeftSource(leftSource);
+
+ ObserveSwingDataSource rightSource = model.getSafeCentralSource(false);
+ stepModel.setRightSource(rightSource);
+
+ openSource(leftSource);
+ openSource(rightSource);
+
+ // Populate tree models
+
+ DataSynchroUI tabUI = getUi();
+
+ tabUI.getLeftTreePane().setBorder(new TitledBorder(leftSource.getLabel()));
+ stepModel.populateLeftSelectionModel();
+ updateSelectionModel(tabUI, tabUI.getLeftTreeHelper(), tabUI.getLeftTree(), leftSource, stepModel.getLeftSelectionDataModel(), tabUI.getLeftSelectionModel());
+ sendMessage(t("observe.message.datasynchro.leftData.loaded"));
+
+ tabUI.getRightTreePane().setBorder(new TitledBorder(rightSource.getLabel()));
+ stepModel.populateRightSelectionModel();
+ updateSelectionModel(tabUI, tabUI.getRightTreeHelper(), tabUI.getRightTree(), rightSource, stepModel.getRightSelectionDataModel(), tabUI.getRightSelectionModel());
+ sendMessage(t("observe.message.datasynchro.rightData.loaded"));
+
+ sendMessage(t("observe.message.datasynchro.ready"));
+
+ return WizardState.NEED_FIX;
+
+ }
+
+}
\ No newline at end of file
diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties
index 236fb11..908924b 100644
--- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties
+++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties
@@ -96,6 +96,10 @@ observe.action.copy.column.headers=
observe.action.copy.column.headers.tip=
observe.action.copy.row.headers=
observe.action.copy.row.headers.tip=
+observe.action.copyToLeft=
+observe.action.copyToLeft.tip=
+observe.action.copyToRight=
+observe.action.copyToRight.tip=
observe.action.country.create.tip=
observe.action.country.delete.tip=
observe.action.country.detail.tip=
@@ -129,6 +133,7 @@ observe.action.create.targetSample=
observe.action.create.targetSample.tip=
observe.action.create.targetSampleCapture=
observe.action.create.targetSampleCapture.tip=
+observe.action.datasynchro.launch.operation=
observe.action.db.locale.es.tip=Change database language in spanish
observe.action.db.locale.fr.tip=Change database language in french
observe.action.db.locale.uk.tip=Change database language in english
@@ -140,6 +145,11 @@ observe.action.delete.maree.tip=
observe.action.delete.route.tip=
observe.action.delete.set.tip=
observe.action.delete.tip=Delete
+observe.action.deleteFromBoth=
+observe.action.deleteFromLeft=
+observe.action.deleteFromLeft.tip=
+observe.action.deleteFromRight=
+observe.action.deleteFromRight.tip=
observe.action.detail=Details
observe.action.detectionMode.create.tip=
observe.action.detectionMode.delete.tip=
@@ -1031,6 +1041,7 @@ observe.configuration.description=
observe.content.mode.create.tip=
observe.content.mode.read.tip=
observe.content.mode.update.tip=
+observe.datasynchro.actionsToPerform=
observe.encounter.action.create=Insert this encounter
observe.encounter.action.create.tip=Insert this encounter
observe.encounter.count=Count
@@ -1337,6 +1348,9 @@ observe.message.consolidate.operation.done=
observe.message.consolidate.save.changes=
observe.message.consolidate.trip=
observe.message.creating.referentiel=
+observe.message.datasynchro.leftData.loaded=
+observe.message.datasynchro.ready=
+observe.message.datasynchro.rightData.loaded=
observe.message.db.closed=%1$s was closed
observe.message.db.loaded=%1$s was loaded
observe.message.db.loading=%1$s loading...
@@ -1779,6 +1793,8 @@ observe.synchro.obsolete.entity.fix=
observe.synchro.operation.canceled=
observe.synchro.operation.consolidate=
observe.synchro.operation.consolidate.description=
+observe.synchro.operation.dataSynchronize=
+observe.synchro.operation.dataSynchronize.description=
observe.synchro.operation.exportData=
observe.synchro.operation.exportData.description=
observe.synchro.operation.failed=
@@ -1805,6 +1821,8 @@ observe.synchro.step.config=
observe.synchro.step.config.description=
observe.synchro.step.consolidate=
observe.synchro.step.consolidate.description=
+observe.synchro.step.dataSynchronize=
+observe.synchro.step.dataSynchronize.description=
observe.synchro.step.exportData=
observe.synchro.step.exportData.description=
observe.synchro.step.report=
@@ -2002,6 +2020,8 @@ observe.title.content.weightCategory=
observe.title.content.weightMeasureTypes=
observe.title.content.windSpeeds=
observe.title.create.local.db=Loading local database
+observe.title.dataSynchronize=
+observe.title.dataSynchronize.tip=
observe.title.delete=Confirm a delete
observe.title.error.dialog=An error occurs\!
observe.title.exportData=Export datas
diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties
index e9bdcc2..6b9c8cf 100644
--- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties
+++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties
@@ -96,6 +96,10 @@ observe.action.copy.column.headers=Copiar los encabezados de columnas
observe.action.copy.column.headers.tip=Añadir al resultado las cabeceras de columna
observe.action.copy.row.headers=Copiar las cabeceras de linea
observe.action.copy.row.headers.tip=Añadir al resultado las cabeceras de linea (ej. la primera columna)
+observe.action.copyToLeft=
+observe.action.copyToLeft.tip=
+observe.action.copyToRight=
+observe.action.copyToRight.tip=
observe.action.country.create.tip=Crear un nuevo país
observe.action.country.delete.tip=Eliminar el país seleccionado
observe.action.country.detail.tip=Ver los detalles del país seleccionado
@@ -129,6 +133,7 @@ observe.action.create.targetSample=Insertar muestreo
observe.action.create.targetSample.tip=Insertar muestreo de atún descartado
observe.action.create.targetSampleCapture=Insertar muestreo
observe.action.create.targetSampleCapture.tip=Insertar muestreo de atún capturado
+observe.action.datasynchro.launch.operation=
observe.action.db.locale.es.tip=Cambia el idioma del referencial al español
observe.action.db.locale.fr.tip=Cambiar el idioma del referencial al francés
observe.action.db.locale.uk.tip=Cambiar el idioma del referencial al inglés
@@ -140,6 +145,11 @@ observe.action.delete.maree.tip=Eliminar la marea
observe.action.delete.route.tip=Eliminar la ruta
observe.action.delete.set.tip=Eliminar el lance
observe.action.delete.tip=Eliminar
+observe.action.deleteFromBoth=
+observe.action.deleteFromLeft=
+observe.action.deleteFromLeft.tip=
+observe.action.deleteFromRight=
+observe.action.deleteFromRight.tip=
observe.action.detail=Ver detalles
observe.action.detectionMode.create.tip=Crear un nuevo modo de detección
observe.action.detectionMode.delete.tip=Eliminar el modo de detección seleccionado
@@ -1031,6 +1041,7 @@ observe.configuration.description=
observe.content.mode.create.tip=Objeto en proceso de creación
observe.content.mode.read.tip=Objeto no se puede editar
observe.content.mode.update.tip=Objeto en proceso de edición
+observe.datasynchro.actionsToPerform=
observe.encounter.action.create=
observe.encounter.action.create.tip=
observe.encounter.count=
@@ -1337,6 +1348,9 @@ observe.message.consolidate.operation.done=Operación de calculo de datos termin
observe.message.consolidate.save.changes=Guardar las modificaciones de la(s) %1$s marea(s) modificada(s).
observe.message.consolidate.trip=
observe.message.creating.referentiel=Objeto en proceso de creación.
+observe.message.datasynchro.leftData.loaded=
+observe.message.datasynchro.ready=
+observe.message.datasynchro.rightData.loaded=
observe.message.db.closed=%1$s ha sido cerrado
observe.message.db.loaded=%1$s cargado
observe.message.db.loading=%1$s cargando
@@ -1779,6 +1793,8 @@ observe.synchro.obsolete.entity.fix=Cambiar las referencias del objeto seleccion
observe.synchro.operation.canceled=
observe.synchro.operation.consolidate=
observe.synchro.operation.consolidate.description=
+observe.synchro.operation.dataSynchronize=
+observe.synchro.operation.dataSynchronize.description=
observe.synchro.operation.exportData=
observe.synchro.operation.exportData.description=
observe.synchro.operation.failed=
@@ -1805,6 +1821,8 @@ observe.synchro.step.config=
observe.synchro.step.config.description=
observe.synchro.step.consolidate=
observe.synchro.step.consolidate.description=
+observe.synchro.step.dataSynchronize=
+observe.synchro.step.dataSynchronize.description=
observe.synchro.step.exportData=
observe.synchro.step.exportData.description=
observe.synchro.step.report=
@@ -2002,6 +2020,8 @@ observe.title.content.weightCategory=
observe.title.content.weightMeasureTypes=
observe.title.content.windSpeeds=
observe.title.create.local.db=
+observe.title.dataSynchronize=
+observe.title.dataSynchronize.tip=
observe.title.delete=
observe.title.error.dialog=
observe.title.exportData=
diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties
index 19aa237..770bc94 100644
--- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties
+++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties
@@ -96,6 +96,10 @@ observe.action.copy.column.headers=Copier les entêtes de colonne
observe.action.copy.column.headers.tip=Ajoute dans le résultat les entêtes de colonne (i.e la première ligne)
observe.action.copy.row.headers=Copier les entêtes de ligne
observe.action.copy.row.headers.tip=Ajoute dans le résultat les entêtes de ligne (i.e la première colonne)
+observe.action.copyToLeft=←
+observe.action.copyToLeft.tip=Copier vers la base de gauche
+observe.action.copyToRight=→
+observe.action.copyToRight.tip=Copier vers la base de droite
observe.action.country.create.tip=Créer un nouveau pays
observe.action.country.delete.tip=Supprimer le pays sélectionné
observe.action.country.detail.tip=Voir les détails du pays sélectionné
@@ -129,6 +133,7 @@ observe.action.create.targetSample=Insérer cet échantillon
observe.action.create.targetSample.tip=Insérer cet échantillon de thon rejeté
observe.action.create.targetSampleCapture=Insérer cet échantillon
observe.action.create.targetSampleCapture.tip=Insérer cet échantillon de thon capturé
+observe.action.datasynchro.launch.operation=Récupération des données
observe.action.db.locale.es.tip=Changer la langue du référentiel en espagnol
observe.action.db.locale.fr.tip=Changer la langue du référentiel en français
observe.action.db.locale.uk.tip=Changer la langue du référentiel en anglais
@@ -140,6 +145,10 @@ observe.action.delete.maree.tip=Supprimer la marée
observe.action.delete.route.tip=Supprimer la route
observe.action.delete.set.tip=Supprimer la calée
observe.action.delete.tip=Supprimer
+observe.action.deleteFromLeft=Supprimer à gauche
+observe.action.deleteFromLeft.tip=Supprimer la ou les marées sélectionnée(s) de la base de gauche
+observe.action.deleteFromRight=Supprimer à droite
+observe.action.deleteFromRight.tip=Supprimer la ou les marées sélectionnée(s) de la base de droite
observe.action.detail=Voir les détails
observe.action.detectionMode.create.tip=Créer un nouveau mode détection
observe.action.detectionMode.delete.tip=Supprimer le mode de détection sélectionné
@@ -1031,6 +1040,7 @@ observe.configuration.description=
observe.content.mode.create.tip=L'objet est en cours de création
observe.content.mode.read.tip=L'objet n'est pas éditable
observe.content.mode.update.tip=L'objet est en cours d'édition
+observe.datasynchro.actionsToPerform=Opérations à réaliser
observe.encounter.action.create=Insérer cette rencontre
observe.encounter.action.create.tip=Insérer cette rencontre
observe.encounter.count=Nombre
@@ -1337,6 +1347,9 @@ observe.message.consolidate.operation.done=Opération de calcul des données ter
observe.message.consolidate.save.changes=Sauvegarde des modifications sur la(es) %1$s marée(s) modifiée(s).
observe.message.consolidate.trip=Données calculées pour la marée %1$s
observe.message.creating.referentiel=L'objet est en cours de création.
+observe.message.datasynchro.leftData.loaded=Données du panneau gauche récupérées.
+observe.message.datasynchro.ready=Données récupérées.
+observe.message.datasynchro.rightData.loaded=Données du panneau droit récupérées.
observe.message.db.closed=%1$s a été fermé
observe.message.db.loaded=%1$s chargé
observe.message.db.loading=%1$s en cours de chargement
@@ -1779,6 +1792,8 @@ observe.synchro.obsolete.entity.fix=Changer les références sur l'objet sélect
observe.synchro.operation.canceled=L'opération <%1$s> a été annulée.
observe.synchro.operation.consolidate=Calculer les données
observe.synchro.operation.consolidate.description=Calculer les données non observées
+observe.synchro.operation.dataSynchronize=Synchronisation bi-directionnelle de données
+observe.synchro.operation.dataSynchronize.description=Synchronisation bi-directionnelle des données utilisateurs
observe.synchro.operation.exportData=Exporter les données observateurs
observe.synchro.operation.exportData.description=Exporter les données observateurs vers la base centrale
observe.synchro.operation.failed=L'opération < %1$s > a échouée.
@@ -1805,6 +1820,8 @@ observe.synchro.step.config=Configuration
observe.synchro.step.config.description=Configuration des opérations et sources de données à utiliser.
observe.synchro.step.consolidate=Calculer les données
observe.synchro.step.consolidate.description=Calculer les données non observées
+observe.synchro.step.dataSynchronize=Synchronisation bi-directionnelle de données
+observe.synchro.step.dataSynchronize.description=Synchronisation bi-directionnelle des données utilisateurs
observe.synchro.step.exportData=Exporter
observe.synchro.step.exportData.description=Exporter les données observateurs vers la base centrale
observe.synchro.step.report=Tableaux de synthèse
@@ -2002,6 +2019,8 @@ observe.title.content.weightCategory=Gestion des catégories poids
observe.title.content.weightMeasureTypes=Gestion des types de mesure de poids
observe.title.content.windSpeeds=Gestion des vents Beaufort
observe.title.create.local.db=Chargement d'une base locale
+observe.title.dataSynchronize=Synchronisation bi-directionnelle de données
+observe.title.dataSynchronize.tip=Synchronisation bi-directionnelle des données utilisateurs
observe.title.delete=Confirmation de suppression
observe.title.error.dialog=Une erreur est survenue\!
observe.title.exportData=Exporter les données
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0