Sammoa-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
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
August 2012
- 4 participants
- 171 discussions
Author: tchemit
Date: 2012-08-23 10:04:47 +0200 (Thu, 23 Aug 2012)
New Revision: 460
Url: http://forge.codelutin.com/repositories/revision/sammoa/460
Log:
updates to nuiton-utils and jaxx
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-08-22 22:02:42 UTC (rev 459)
+++ trunk/pom.xml 2012-08-23 08:04:47 UTC (rev 460)
@@ -109,7 +109,7 @@
<!-- libraries version -->
- <nuitonUtilsVersion>2.6-SNAPSHOT</nuitonUtilsVersion>
+ <nuitonUtilsVersion>2.6</nuitonUtilsVersion>
<nuitonI18nVersion>2.4.1</nuitonI18nVersion>
<eugenePluginVersion>2.5</eugenePluginVersion>
@@ -118,7 +118,7 @@
<h2Version>1.3.168</h2Version>
<postgresqlVersion>9.1-901-1.jdbc4</postgresqlVersion>
- <jaxxVersion>2.5.5-SNAPSHOT</jaxxVersion>
+ <jaxxVersion>2.5.5</jaxxVersion>
<swingXVersion>1.6.4</swingXVersion>
<xworkVersion>2.3.4</xworkVersion>
1
0
22 Aug '12
Author: tchemit
Date: 2012-08-23 00:02:42 +0200 (Thu, 23 Aug 2012)
New Revision: 459
Url: http://forge.codelutin.com/repositories/revision/sammoa/459
Log:
fix import/export
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/SammoaImportModelFactory.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java
trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-08-22 18:17:49 UTC (rev 458)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-08-22 22:02:42 UTC (rev 459)
@@ -322,6 +322,9 @@
*/
public void deleteFlightInDb(TopiaContext tx, String flightId) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Delete flight {}", flightId);
+ }
try {
FlightDAO dao = SammoaDAOHelper.getFlightDAO(tx);
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java 2012-08-22 18:17:49 UTC (rev 458)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java 2012-08-22 22:02:42 UTC (rev 459)
@@ -181,7 +181,7 @@
try {
importReferentials(tx, modelFactory, tableMap);
- tx.commitTransaction();
+// tx.commitTransaction();
startTime = timeLog.log(startTime, "importDb",
"after referential import");
@@ -195,8 +195,6 @@
importFlight(tx,
dbMetas,
strategy,
- tableMap,
- associationMap,
flightStorage);
}
} finally {
@@ -219,14 +217,13 @@
private void importFlight(TopiaContext tx,
SammoaDbMeta dbMetas,
DataImportStrategy strategy,
- Map<TableMeta<SammoaEntityEnum>, File> tableMap,
- Map<AssociationMeta<SammoaEntityEnum>, File> associationMap,
FlightStorage storage) throws IOException, TopiaException {
- tableMap = getEntries(dbMetas.getDataTables(), storage);
- associationMap = getEntries(dbMetas.getDataAssociations(), storage);
+ Map<TableMeta<SammoaEntityEnum>, File> tableMap =
+ getEntries(dbMetas.getDataTables(), storage);
+ Map<AssociationMeta<SammoaEntityEnum>, File> associationMap =
+ getEntries(dbMetas.getDataAssociations(), storage);
-
for (Map.Entry<TableMeta<SammoaEntityEnum>, File> entry : tableMap.entrySet()) {
TableMeta<SammoaEntityEnum> meta = entry.getKey();
File file = entry.getValue();
@@ -242,6 +239,8 @@
}
}
+ persistence.flushTransaction(tx);
+
for (Map.Entry<AssociationMeta<SammoaEntityEnum>, File> entry : associationMap.entrySet()) {
AssociationMeta<SammoaEntityEnum> meta = entry.getKey();
File file = entry.getValue();
@@ -255,7 +254,6 @@
reader.close();
}
}
-
}
private void importReferentials(TopiaContext tx,
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/SammoaImportModelFactory.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/SammoaImportModelFactory.java 2012-08-22 18:17:49 UTC (rev 458)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/SammoaImportModelFactory.java 2012-08-22 22:02:42 UTC (rev 459)
@@ -31,6 +31,7 @@
import org.nuiton.topia.TopiaRuntimeException;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.csv.EntityCsvModel;
+import org.nuiton.topia.persistence.csv.TopiaCsvCommons;
import org.nuiton.topia.persistence.csv.in.EntityAssociationImportModel;
import org.nuiton.topia.persistence.csv.in.ImportModelFactory;
import org.nuiton.topia.persistence.metadata.AssociationMeta;
@@ -40,6 +41,7 @@
import org.nuiton.util.csv.ImportModel;
import java.io.Reader;
+import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -91,7 +93,13 @@
String propertyName = columnMeta.getName();
Class<?> type = columnMeta.getType();
if (!columnMeta.isFK()) {
- model.addDefaultColumn(propertyName, type);
+ if (Date.class.equals(type)) {
+ model.newColumnForImportExport(
+ propertyName,
+ TopiaCsvCommons.DAY_TIME_SECOND_MILI_WITH_TIMESTAMP);
+ } else {
+ model.addDefaultColumn(propertyName, type);
+ }
} else {
Class<TopiaEntity> entityType = (Class<TopiaEntity>) type;
@@ -135,11 +143,20 @@
boolean result = false;
if (source == SammoaEntityEnum.Flight && target == SammoaEntityEnum.Observer) {
result = true;
+ } else if (source == SammoaEntityEnum.TransectFlight && target == SammoaEntityEnum.ObserverPosition) {
+ result = true;
}
+// else if (source == SammoaEntityEnum.Route && target == SammoaEntityEnum.ObserverPosition) {
+// result = true;
+// }
return result;
}
public void close() {
universe.clear();
}
+
+ public SammoaDbMeta getDbMetas() {
+ return dbMetas;
+ }
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java 2012-08-22 18:17:49 UTC (rev 458)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java 2012-08-22 22:02:42 UTC (rev 459)
@@ -38,6 +38,7 @@
import org.nuiton.util.csv.ImportToMap;
import java.io.Reader;
+import java.util.Map;
/**
* Strategy to import data (create all entites, no update possible).
@@ -70,18 +71,47 @@
ImportToMap importer,
CsvImportResult<SammoaEntityEnum> csvResult) throws TopiaException {
- if (getModelFactory().isNMAssociationMeta(meta)) {
- TopiaCsvImports.importNMAssociation(getTx(),
- meta,
- importer,
- csvResult,
- 1000);
+
+ SammoaEntityEnum target = meta.getTarget();
+ boolean nmAssociationMeta = getModelFactory().isNMAssociationMeta(meta);
+
+ if (getModelFactory().getDbMetas().isReferential(target)) {
+
+ // must switch topia of target to the one in universe
+ Map<String, TopiaEntity> targetUniverse =
+ getModelFactory().getUniverse().get(target);
+
+ if (nmAssociationMeta) {
+ TopiaCsvImports.importNMAssociation(getTx(),
+ meta,
+ targetUniverse,
+ importer,
+ csvResult,
+ 1000);
+ } else {
+ TopiaCsvImports.importAssociation(getTx(),
+ meta,
+ targetUniverse,
+ importer,
+ csvResult,
+ 1000);
+ }
+
+
} else {
- TopiaCsvImports.importAssociation(getTx(),
- meta,
- importer,
- csvResult,
- 1000);
+ if (nmAssociationMeta) {
+ TopiaCsvImports.importNMAssociation(getTx(),
+ meta,
+ importer,
+ csvResult,
+ 1000);
+ }else {
+ TopiaCsvImports.importAssociation(getTx(),
+ meta,
+ importer,
+ csvResult,
+ 1000);
+ }
}
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java 2012-08-22 18:17:49 UTC (rev 458)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java 2012-08-22 22:02:42 UTC (rev 459)
@@ -47,6 +47,7 @@
import org.nuiton.topia.TopiaException;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.csv.EntityCsvModel;
+import org.nuiton.topia.persistence.csv.TopiaCsvCommons;
import org.nuiton.topia.persistence.csv.out.EntityAssociationExportModel;
import org.nuiton.topia.persistence.csv.out.ExportEntityVisitor;
import org.nuiton.topia.persistence.csv.out.ExportModelFactory;
@@ -62,6 +63,7 @@
import java.io.File;
import java.io.IOException;
+import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -100,7 +102,13 @@
model.addForeignKeyForExport(propertyName, entityType);
} else {
- model.addDefaultColumn(propertyName, type);
+ if (Date.class.equals(type)) {
+ model.newColumnForImportExport(
+ propertyName,
+ TopiaCsvCommons.DAY_TIME_SECOND_MILI_WITH_TIMESTAMP);
+ } else {
+ model.addDefaultColumn(propertyName, type);
+ }
}
}
return model;
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java 2012-08-22 18:17:49 UTC (rev 458)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java 2012-08-22 22:02:42 UTC (rev 459)
@@ -38,6 +38,7 @@
import fr.ulr.sammoa.ui.swing.UIDecoratorService;
import fr.ulr.sammoa.ui.swing.util.SammoaUtil;
import jaxx.runtime.SwingUtil;
+import jaxx.runtime.swing.ErrorDialogUI;
import jaxx.runtime.swing.editor.FileEditor;
import org.nuiton.util.FileUtil;
import org.slf4j.Logger;
@@ -176,8 +177,16 @@
try {
importService.importApplication(dataModel);
+ SammoaUtil.showSuccessMessage(
+ frame,
+ _("sammoa.messageDialog.aplication.import.success",
+ getModel().getImportFile()));
+
+ } catch (Exception e) {
+ ErrorDialogUI.showError(e);
} finally {
SammoaUtil.updateBusyState(frame, false);
+ close();
}
}
Modified: trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties
===================================================================
--- trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties 2012-08-22 18:17:49 UTC (rev 458)
+++ trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties 2012-08-22 22:02:42 UTC (rev 459)
@@ -76,10 +76,10 @@
sammoa.flightPanel.table.column.position.left=Left
sammoa.flightPanel.table.column.position.navigator=Nav
sammoa.flightPanel.table.column.position.right=Right
-sammoa.importApplication.flightTable.column.flightName=
-sammoa.importApplication.flightTable.column.flightName.tip=
-sammoa.importApplication.flightTable.column.toTreat=
-sammoa.importApplication.flightTable.column.toTreat.tip=
+sammoa.importApplication.flightTable.column.flightName=Flight name
+sammoa.importApplication.flightTable.column.flightName.tip=Flight name
+sammoa.importApplication.flightTable.column.toTreat=Select
+sammoa.importApplication.flightTable.column.toTreat.tip=Select the flight to import it
sammoa.info.importApplication.importfile.loaded.on.existingCampaign=Import an existing campaign %s, please choose which flights of the following list to import
sammoa.info.importApplication.importfile.loaded.on.newCampaign=Import a new campaign %s, all the flights of the following list will be imported
sammoa.info.importApplication.no.importfile.loaded=No import file loaded, choose an file to import then press the 'load import file' button
@@ -131,6 +131,7 @@
sammoa.menu.showLogs=Display logs
sammoa.menu.showLogs.tip=Display logs
sammoa.message.goto.site=Opening %1$s on navigator
+sammoa.messageDialog.aplication.import.success=Import of sammoa file %s done with success
sammoa.messageDialog.map.export.success=Map (with %s rows in dbf) was successfully exported in directory\n\n%s
sammoa.messageDialog.mapOrDbf.exportFile.alreadyExists=Export Shape file (%s)\nor dbf file (%s) already exists.\n\nConfirm to override it?
sammoa.messageDialog.observers.import.success=%1$d observers are successfully imported
1
0
r458 - in trunk: sammoa-application/src/main/java/fr/ulr/sammoa/application/io sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map
by tchemit@users.forge.codelutin.com 22 Aug '12
by tchemit@users.forge.codelutin.com 22 Aug '12
22 Aug '12
Author: tchemit
Date: 2012-08-22 20:17:49 +0200 (Wed, 22 Aug 2012)
New Revision: 458
Url: http://forge.codelutin.com/repositories/revision/sammoa/458
Log:
add busy blocker in ui + fix application import (just need now to fix the association import)
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/SammoaImportModelFactory.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.css
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.jaxx
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUIHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapLauncherUI.css
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapLauncherUI.jaxx
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapUIHandler.java
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java 2012-08-22 16:20:46 UTC (rev 457)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java 2012-08-22 18:17:49 UTC (rev 458)
@@ -45,7 +45,7 @@
* @see FlightStorage
* @since 0.6
*/
-abstract class SammoaStorage<E> implements Serializable {
+public abstract class SammoaStorage<E> implements Serializable {
private static final long serialVersionUID = 1L;
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java 2012-08-22 16:20:46 UTC (rev 457)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java 2012-08-22 18:17:49 UTC (rev 458)
@@ -32,6 +32,8 @@
import fr.ulr.sammoa.application.SammoaServiceSupport;
import fr.ulr.sammoa.application.SammoaTechnicalException;
import fr.ulr.sammoa.application.io.CampaignStorage;
+import fr.ulr.sammoa.application.io.FlightStorage;
+import fr.ulr.sammoa.application.io.SammoaStorage;
import fr.ulr.sammoa.application.io.SammoaStorages;
import fr.ulr.sammoa.application.io.input.application.strategy.DataImportStrategy;
import fr.ulr.sammoa.application.io.input.application.strategy.ReferentialImportStrategy;
@@ -177,27 +179,26 @@
dbMetas);
try {
- importReferentials(tx, modelFactory, tableMap);
+ importReferentials(tx, modelFactory, tableMap);
- tx.commitTransaction();
+ tx.commitTransaction();
- startTime = timeLog.log(startTime, "importDb",
- "after referential import");
+ startTime = timeLog.log(startTime, "importDb",
+ "after referential import");
- tableMap = getEntries(dbMetas.getDataTables(), storage);
- associationMap = getEntries(dbMetas.getDataAssociations(), storage);
+ DataImportStrategy strategy = new DataImportStrategy(
+ modelFactory, tx, persistence.getPersistenceHelper()
+ );
+ for (String flightId : model.getFlightIds()) {
- DataImportStrategy strategy = new DataImportStrategy(
- modelFactory, tx, persistence.getPersistenceHelper()
- );
- for (String flightId : model.getFlightIds()) {
-
- importFlight(tx,
- strategy,
- tableMap,
- associationMap,
- flightId);
- }
+ FlightStorage flightStorage = storage.getFlightStorage(flightId);
+ importFlight(tx,
+ dbMetas,
+ strategy,
+ tableMap,
+ associationMap,
+ flightStorage);
+ }
} finally {
modelFactory.close();
}
@@ -216,11 +217,16 @@
}
private void importFlight(TopiaContext tx,
+ SammoaDbMeta dbMetas,
DataImportStrategy strategy,
Map<TableMeta<SammoaEntityEnum>, File> tableMap,
Map<AssociationMeta<SammoaEntityEnum>, File> associationMap,
- String flightId) throws IOException, TopiaException {
+ FlightStorage storage) throws IOException, TopiaException {
+ tableMap = getEntries(dbMetas.getDataTables(), storage);
+ associationMap = getEntries(dbMetas.getDataAssociations(), storage);
+
+
for (Map.Entry<TableMeta<SammoaEntityEnum>, File> entry : tableMap.entrySet()) {
TableMeta<SammoaEntityEnum> meta = entry.getKey();
File file = entry.getValue();
@@ -278,7 +284,7 @@
}
protected <M extends MetaFilenameAware<SammoaEntityEnum>> Map<M, File> getEntries(
- List<M> metas, CampaignStorage storage) {
+ List<M> metas, SammoaStorage storage) {
List<String> missingEntries = Lists.newArrayList();
Map<M, File> result = TopiaCsvImports.discoverEntries(
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/SammoaImportModelFactory.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/SammoaImportModelFactory.java 2012-08-22 16:20:46 UTC (rev 457)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/SammoaImportModelFactory.java 2012-08-22 18:17:49 UTC (rev 458)
@@ -130,7 +130,13 @@
@Override
public boolean isNMAssociationMeta(AssociationMeta<SammoaEntityEnum> meta) {
- return false;
+ SammoaEntityEnum source = meta.getSource();
+ SammoaEntityEnum target = meta.getTarget();
+ boolean result = false;
+ if (source == SammoaEntityEnum.Flight && target == SammoaEntityEnum.Observer) {
+ result = true;
+ }
+ return result;
}
public void close() {
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java 2012-08-22 16:20:46 UTC (rev 457)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java 2012-08-22 18:17:49 UTC (rev 458)
@@ -69,12 +69,20 @@
public void importAssociation(AssociationMeta<SammoaEntityEnum> meta,
ImportToMap importer,
CsvImportResult<SammoaEntityEnum> csvResult) throws TopiaException {
- TopiaCsvImports.importAssociation(getTx(),
- meta,
- importer,
- csvResult,
- 1000);
+
+ if (getModelFactory().isNMAssociationMeta(meta)) {
+ TopiaCsvImports.importNMAssociation(getTx(),
+ meta,
+ importer,
+ csvResult,
+ 1000);
+ } else {
+ TopiaCsvImports.importAssociation(getTx(),
+ meta,
+ importer,
+ csvResult,
+ 1000);
+ }
}
-
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.css
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.css 2012-08-22 16:20:46 UTC (rev 457)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.css 2012-08-22 18:17:49 UTC (rev 458)
@@ -103,3 +103,8 @@
text:"sammoa.label.exportApplication.callbackRemoveAllData";
value:{ExportApplicationCallbackMode.REMOVE_ALL};
}
+
+#busyBlockLayerUI {
+ useIcon:false;
+ blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
+}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.jaxx
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.jaxx 2012-08-22 16:20:46 UTC (rev 457)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.jaxx 2012-08-22 18:17:49 UTC (rev 458)
@@ -32,6 +32,7 @@
java.awt.BorderLayout
java.awt.event.ItemEvent
java.io.File
+ javax.swing.UIManager
static org.nuiton.i18n.I18n._
</import>
@@ -58,7 +59,9 @@
<JAXXButtonGroup id='callbacks'/>
- <Table fill='both' constraints='BorderLayout.CENTER'>
+ <BlockingLayerUI id='busyBlockLayerUI'/>
+
+ <Table id='body' fill='both' constraints='BorderLayout.CENTER' decorator='boxed'>
<!-- Campaign filter -->
<row>
<cell anchor='west'>
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUIHandler.java 2012-08-22 16:20:46 UTC (rev 457)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUIHandler.java 2012-08-22 18:17:49 UTC (rev 458)
@@ -146,6 +146,7 @@
@Override
public void afterInitUI() {
+ SwingUtil.setLayerUI(ui.getBody(), ui.getBusyBlockLayerUI());
ui.getCampaignCombobox().setRenderer(new DecoratorListCellRenderer(
decoratorService.getDecoratorByType(Campaign.class)));
@@ -182,6 +183,7 @@
JFrame frame = ui.getParentContainer(JFrame.class);
+
try {
ExportApplicationModel dataModel = getModel().toModel();
@@ -189,6 +191,8 @@
if (doExport) {
+ ui.getBusyBlockLayerUI().setBlock(true);
+
SammoaUtil.updateBusyState(frame.getRootPane(), true);
exportService.exportApplication(dataModel);
@@ -235,6 +239,7 @@
} catch (Exception e) {
ErrorDialogUI.showError(e);
} finally {
+ ui.getBusyBlockLayerUI().setBlock(false);
SammoaUtil.updateBusyState(frame.getRootPane(), false);
}
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapLauncherUI.css
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapLauncherUI.css 2012-08-22 16:20:46 UTC (rev 457)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapLauncherUI.css 2012-08-22 18:17:49 UTC (rev 458)
@@ -41,3 +41,8 @@
text:{model.getExportFilename()};
}
+#busyBlockLayerUI {
+ useIcon:false;
+ blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
+}
+
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapLauncherUI.jaxx
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapLauncherUI.jaxx 2012-08-22 16:20:46 UTC (rev 457)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapLauncherUI.jaxx 2012-08-22 18:17:49 UTC (rev 458)
@@ -26,6 +26,7 @@
<import>
java.awt.BorderLayout
java.io.File
+ javax.swing.UIManager
static org.nuiton.i18n.I18n._
</import>
@@ -44,6 +45,8 @@
<ExportMapUIHandler id='handler'
initializer='getContextValue(ExportMapUIHandler.class)'/>
+ <BlockingLayerUI id='busyBlockLayerUI'/>
+
<Table id='body' fill='both' constraints='BorderLayout.CENTER' decorator='boxed'>
<!-- export directory-->
<row>
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapUIHandler.java 2012-08-22 16:20:46 UTC (rev 457)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapUIHandler.java 2012-08-22 18:17:49 UTC (rev 458)
@@ -262,52 +262,32 @@
public void exportEfforts() {
- Action startAction = new AbstractAction(
+ Action startAction = new AbstractStartAction(
_("sammoa.action.startExport"),
- SwingUtil.createActionIcon("accept")) {
+ ui) {
private static final long serialVersionUID = 1L;
@Override
- public void actionPerformed(ActionEvent e) {
- JButton source = (JButton) e.getSource();
+ protected String getSuccessMessage(int nbRow, ExportMapModel dataModel) {
+ return _("sammoa.messageDialog.map.export.success",
+ nbRow, dataModel.getExportDirectory());
+ }
+ @Override
+ protected int doImport(ExportMapModel dataModel) {
+ return exportService.exportEffortsMap(dataModel);
+ }
- try {
- ExportMapUIModel model = ui.getModel();
+ @Override
+ protected ExportMapModel prepareModel(ExportMapUIModel model) {
+ // persist the file name
+ model.setExportEffortsFilename(model.getExportFilename());
- // persist the file name
- model.setExportEffortsFilename(model.getExportFilename());
-
- // create export service model
- ExportMapModel dataModel =
- model.toModel(model.getExportEffortsFilename());
-
- boolean doExport = checkFileToExport(dataModel);
-
- if (doExport) {
-
- ExportMapLauncherUI fileChooserUI = SwingUtil.getParentContainer(
- source, ExportMapLauncherUI.class);
-
- SammoaUtil.updateBusyState(fileChooserUI, true);
-
- // launch export
- int nbRow = exportService.exportEffortsMap(dataModel);
-
- SammoaUtil.showSuccessMessage(
- fileChooserUI,
- _("sammoa.messageDialog.map.export.success",
- nbRow, dataModel.getExportDirectory()));
- }
-
- } catch (Exception eee) {
- ErrorDialogUI.showError(eee);
- } finally {
-
- SwingUtil.getParentContainer(
- source, JDialog.class).setVisible(false);
- }
+ // create export service model
+ ExportMapModel dataModel =
+ model.toModel(model.getExportEffortsFilename());
+ return dataModel;
}
};
@@ -318,69 +298,35 @@
startAction);
}
- private boolean checkFileToExport(ExportMapModel dataModel) {
- boolean doExport = true;
- File dbf = dataModel.getExportFileWithoutExtension(".dbf");
- File shp = dataModel.getExportFileWithoutExtension(".shp");
- if (dbf.exists() ||
- shp.exists()) {
- doExport = SammoaUtil.askQuestion(
- ui,
- _("sammoa.messageDialog.mapOrDbf.exportFile.alreadyExists",
- dbf, shp));
- }
- return doExport;
- }
public void exportObservations() {
- Action startAction = new AbstractAction(
+ Action startAction = new AbstractStartAction(
_("sammoa.action.startExport"),
- SwingUtil.createActionIcon("accept")) {
+ ui) {
private static final long serialVersionUID = 1L;
@Override
- public void actionPerformed(ActionEvent e) {
+ protected String getSuccessMessage(int nbRow, ExportMapModel dataModel) {
+ return _("sammoa.messageDialog.map.export.success",
+ nbRow, dataModel.getExportDirectory());
+ }
- JButton source = (JButton) e.getSource();
+ @Override
+ protected int doImport(ExportMapModel dataModel) {
+ return exportService.exportObservationsMap(dataModel);
+ }
- try {
+ @Override
+ protected ExportMapModel prepareModel(ExportMapUIModel model) {
+ // persist the file name
+ model.setExportObservationsFilename(model.getExportFilename());
- ExportMapUIModel model = ui.getModel();
-
- // persist the file name
- model.setExportObservationsFilename(model.getExportFilename());
-
- // create export service model
- ExportMapModel dataModel =
- model.toModel(model.getExportObservationsFilename());
-
- boolean doExport = checkFileToExport(dataModel);
-
- if (doExport) {
-
- ExportMapLauncherUI fileChooserUI = SwingUtil.getParentContainer(
- source, ExportMapLauncherUI.class);
-
- SammoaUtil.updateBusyState(fileChooserUI, true);
-
- // launch export
- int nbRow = exportService.exportObservationsMap(dataModel);
-
- SammoaUtil.showSuccessMessage(
- fileChooserUI,
- _("sammoa.messageDialog.map.export.success",
- nbRow, dataModel.getExportDirectory()));
- }
-
- } catch (Exception eee) {
- ErrorDialogUI.showError(eee);
- } finally {
-
- SwingUtil.getParentContainer(
- source, JDialog.class).setVisible(false);
- }
+ // create export service model
+ ExportMapModel dataModel =
+ model.toModel(model.getExportObservationsFilename());
+ return dataModel;
}
};
@@ -393,54 +339,32 @@
public void exportGeoPoints() {
-
- Action startAction = new AbstractAction(
+ Action startAction = new AbstractStartAction(
_("sammoa.action.startExport"),
- SwingUtil.createActionIcon("accept")) {
+ ui) {
private static final long serialVersionUID = 1L;
@Override
- public void actionPerformed(ActionEvent e) {
+ protected String getSuccessMessage(int nbRow, ExportMapModel dataModel) {
+ return _("sammoa.messageDialog.map.export.success",
+ nbRow, dataModel.getExportDirectory());
+ }
- JButton source = (JButton) e.getSource();
+ @Override
+ protected int doImport(ExportMapModel dataModel) {
+ return exportService.exportGeoPointsMap(dataModel);
+ }
- try {
+ @Override
+ protected ExportMapModel prepareModel(ExportMapUIModel model) {
+ // persist the file name
+ model.setExportGeoPointsFilename(model.getExportFilename());
- ExportMapUIModel model = getModel();
-
- // persist the file name
- model.setExportGeoPointsFilename(model.getExportFilename());
-
- // create export service model
- ExportMapModel dataModel =
- model.toModel(model.getExportGeoPointsFilename());
-
- boolean doExport = checkFileToExport(dataModel);
-
- if (doExport) {
-
- ExportMapLauncherUI fileChooserUI = SwingUtil.getParentContainer(
- source, ExportMapLauncherUI.class);
-
- SammoaUtil.updateBusyState(fileChooserUI, true);
-
- // launch export
- int nbRow = exportService.exportGeoPointsMap(dataModel);
-
- SammoaUtil.showSuccessMessage(
- fileChooserUI,
- _("sammoa.messageDialog.map.export.success",
- nbRow, dataModel.getExportDirectory()));
- }
-
- } catch (Exception eee) {
- ErrorDialogUI.showError(eee);
- } finally {
-
- SwingUtil.getParentContainer(
- source, JDialog.class).setVisible(false);
- }
+ // create export service model
+ ExportMapModel dataModel =
+ model.toModel(model.getExportGeoPointsFilename());
+ return dataModel;
}
};
@@ -463,6 +387,9 @@
model.setExportFilename(defaultFilename);
final ExportMapLauncherUI exportUI = new ExportMapLauncherUI(this);
+ SwingUtil.setLayerUI(exportUI.getBody(),
+ exportUI.getBusyBlockLayerUI());
+
JFrame frame = ui.getParentContainer(JFrame.class);
Action closeAction = new AbstractAction(
_("sammoa.action.cancelExport"),
@@ -522,4 +449,78 @@
list.putClientProperty("data", data);
}
+ protected static abstract class AbstractStartAction extends AbstractAction {
+
+ private static final long serialVersionUID = 1L;
+
+ private final ExportMapUI ui;
+
+ protected AbstractStartAction(String name, ExportMapUI ui) {
+ super(name, SwingUtil.createActionIcon("accept"));
+ this.ui = ui;
+ }
+
+ @Override
+ public final void actionPerformed(ActionEvent e) {
+
+ JButton source = (JButton) e.getSource();
+ try {
+
+ ExportMapUIModel model = ui.getModel();
+
+ ExportMapModel dataModel = prepareModel(model);
+
+ boolean doExport = checkFileToExport(dataModel);
+
+ if (doExport) {
+
+ ExportMapLauncherUI fileChooserUI = SwingUtil.getParentContainer(
+ source, ExportMapLauncherUI.class);
+
+ fileChooserUI.getBusyBlockLayerUI().setBlock(true);
+ SammoaUtil.updateBusyState(fileChooserUI, true);
+
+ int nbRow = doImport(dataModel);
+
+ String successMessage = getSuccessMessage(nbRow, dataModel);
+
+ SammoaUtil.showSuccessMessage(fileChooserUI, successMessage);
+ }
+
+ } catch (Exception eee) {
+ ErrorDialogUI.showError(eee);
+ } finally {
+
+ ExportMapLauncherUI fileChooserUI = SwingUtil.getParentContainer(
+ source, ExportMapLauncherUI.class);
+
+ fileChooserUI.getBusyBlockLayerUI().setBlock(false);
+
+ SwingUtil.getParentContainer(
+ source, JDialog.class).setVisible(false);
+ }
+ }
+
+ protected abstract String getSuccessMessage(int nbRow, ExportMapModel dataModel);
+
+ protected abstract int doImport(ExportMapModel dataModel);
+
+ protected abstract ExportMapModel prepareModel(ExportMapUIModel model);
+
+ private boolean checkFileToExport(ExportMapModel dataModel) {
+ boolean doExport = true;
+ File dbf = dataModel.getExportFileWithoutExtension(".dbf");
+ File shp = dataModel.getExportFileWithoutExtension(".shp");
+ if (dbf.exists() ||
+ shp.exists()) {
+ doExport = SammoaUtil.askQuestion(
+ ui,
+ _("sammoa.messageDialog.mapOrDbf.exportFile.alreadyExists",
+ dbf, shp));
+ }
+ return doExport;
+ }
+
+ }
+
}
1
0
22 Aug '12
Author: tchemit
Date: 2012-08-22 18:20:46 +0200 (Wed, 22 Aug 2012)
New Revision: 457
Url: http://forge.codelutin.com/repositories/revision/sammoa/457
Log:
refs #1269: Import/Export base H2 (review import/export)
Added:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/SammoaImportModelFactory.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/AbstractImportStrategy.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/ReferentialImportStrategy.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/SammoaPrepareDataForExport.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMeta.java
trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetaTest.java
Removed:
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMetas.java
trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetasTest.java
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationModel.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistenceHelper.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java
trunk/src/site/rst/import-export.rst
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-08-22 09:08:00 UTC (rev 456)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -31,7 +31,6 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import fr.ulr.sammoa.application.io.CampaignStorage;
-import fr.ulr.sammoa.application.io.FlightStorage;
import fr.ulr.sammoa.application.io.SammoaStorages;
import fr.ulr.sammoa.persistence.AutoSaveListener;
import fr.ulr.sammoa.persistence.Campaign;
@@ -71,7 +70,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
@@ -312,15 +310,7 @@
// delete flight storage
CampaignStorage campaignStorage = getCampaignStorage(campaignId);
- FlightStorage flightStorage =
- campaignStorage.getFlightStorage(flightId);
-
- try {
- flightStorage.delete();
- } catch (IOException e) {
- throw new SammoaTechnicalException(
- "Could not delete flight storage", e);
- }
+ campaignStorage.deleteFlightStorage(flightId);
}
/**
@@ -362,7 +352,6 @@
ObservationDAO observationDAO = SammoaDAOHelper.getObservationDAO(tx);
observationDAO.deleteAll(observations);
-
// delete observationPositions
ObserverPositionDAO observerPositionDAO = SammoaDAOHelper.getObserverPositionDAO(tx);
observerPositionDAO.deleteAll(positions);
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java 2012-08-22 09:08:00 UTC (rev 456)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -29,8 +29,10 @@
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import fr.ulr.sammoa.application.DecoratorService;
+import fr.ulr.sammoa.application.SammoaTechnicalException;
import fr.ulr.sammoa.persistence.Campaign;
import fr.ulr.sammoa.persistence.Region;
+import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.nuiton.util.decorator.Decorator;
@@ -38,6 +40,7 @@
import org.slf4j.LoggerFactory;
import java.io.File;
+import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
@@ -52,7 +55,9 @@
private static final long serialVersionUID = 1L;
- /** Logger. */
+ /**
+ * Logger.
+ */
private static final Logger logger =
LoggerFactory.getLogger(CampaignStorage.class);
@@ -74,10 +79,6 @@
return new File(getDirectory(), "flight");
}
- public File getCsvDirectory() {
- return new File(getDirectory(), "csv");
- }
-
public Set<String> getFlightIds() {
String[] files = getFlightDirectory().list(DirectoryFileFilter.INSTANCE);
Set<String> result = files == null ?
@@ -162,4 +163,25 @@
append("nbFlightStoragesLoaded", flightStorages == null ? 0 : flightStorages.size()).
toString();
}
+
+ public void deleteFlightStorage(String flightId) {
+ Preconditions.checkNotNull(flightId);
+ Preconditions.checkArgument(getFlightIds().contains(flightId));
+ FlightStorage flightStorage = getFlightStorage(flightId);
+ try {
+ flightStorage.delete();
+ } catch (IOException e) {
+ throw new SammoaTechnicalException(
+ "Could not delete flight storage", e);
+ }
+ }
+
+ public void deletePropertiesFiles() {
+
+ FileUtils.deleteQuietly(getPropertiesFile());
+
+ for (FlightStorage flightStorage : this) {
+ FileUtils.deleteQuietly(flightStorage.getPropertiesFile());
+ }
+ }
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java 2012-08-22 09:08:00 UTC (rev 456)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -28,8 +28,8 @@
import fr.ulr.sammoa.persistence.Campaign;
import fr.ulr.sammoa.persistence.Flight;
import fr.ulr.sammoa.persistence.Region;
+import fr.ulr.sammoa.persistence.Route;
import org.apache.commons.lang3.builder.ToStringBuilder;
-import fr.ulr.sammoa.persistence.Route;
import org.nuiton.util.decorator.Decorator;
import java.io.File;
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java 2012-08-22 09:08:00 UTC (rev 456)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -49,16 +49,24 @@
private static final long serialVersionUID = 1L;
- /** Root directory for this storage. */
+ /**
+ * Root directory for this storage.
+ */
private final File directory;
- /** Id of the storage. */
+ /**
+ * Id of the storage.
+ */
private final String id;
- /** Properties of the storage. */
+ /**
+ * Properties of the storage.
+ */
private final Properties properties;
- /** Name of the properties file of the storage. */
+ /**
+ * Name of the properties file of the storage.
+ */
private final String propertiesFilename;
public abstract Map<String, Object> getNaturalId();
@@ -83,6 +91,10 @@
return directory;
}
+ public File getCsvDirectory() {
+ return new File(getDirectory(), "csv");
+ }
+
public File getPropertiesFile() {
return new File(directory, propertiesFilename);
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java 2012-08-22 09:08:00 UTC (rev 456)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -54,40 +54,41 @@
}
}
- public static CampaignStorage copyCampaignStorage(CampaignStorage source,
- File targetDirectory,
- boolean createCsvDirectory,
- Iterable<String> flightIds) {
+ public static void copyCampaignStorage(CampaignStorage source,
+ CampaignStorage target,
+ Iterable<String> flightIds) {
try {
- CampaignStorage target = new CampaignStorage(targetDirectory,
- source.getId());
- createEmptyCampaignStructure(target);
+
FileUtils.copyDirectory(source.getMapDirectory(),
target.getMapDirectory());
- if (createCsvDirectory) {
- FileUtils.forceMkdir(target.getCsvDirectory());
- }
- if (source.getCsvDirectory().exists()) {
- FileUtils.copyDirectory(source.getCsvDirectory(),
- target.getCsvDirectory());
- }
for (String flightId : flightIds) {
FlightStorage flightStorage = source.getFlightStorage(flightId);
FlightStorage targetFlightStorage =
target.getFlightStorage(flightStorage.getId());
- FileUtils.copyDirectory(flightStorage.getDirectory(),
- targetFlightStorage.getDirectory());
+ copyFlightStorage(flightStorage, targetFlightStorage);
+
}
- return target;
} catch (IOException e) {
throw new SammoaTechnicalException("Could not copy campaign storage", e);
}
}
+ public static void copyFlightStorage(FlightStorage source,
+ FlightStorage target) {
+
+ try {
+
+ FileUtils.copyDirectory(source.getAudioDirectory(),
+ target.getAudioDirectory());
+ } catch (IOException e) {
+ throw new SammoaTechnicalException("Could not copy flight storage", e);
+ }
+ }
+
public static FlightStorage createFlightStorage(CampaignStorage source,
String flightId) {
try {
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationModel.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationModel.java 2012-08-22 09:08:00 UTC (rev 456)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationModel.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -34,26 +34,54 @@
*/
public class ImportApplicationModel {
- public static ImportApplicationModel newModel(CampaignStorage storage,
- Iterable<String> flightIds) {
+ public static ImportApplicationModel newModel(
+ CampaignStorage storage,
+ CampaignStorage oldStorage,
+ Iterable<String> flightIds,
+ Iterable<String> flightToRemoveIds
+ ) {
ImportApplicationModel result = new ImportApplicationModel();
result.storage = storage;
+ result.oldStorage = oldStorage;
result.flightIds = flightIds;
+ result.flightToRemoveIds = flightToRemoveIds;
return result;
}
- /** Loaded campaign storage. */
+ /**
+ * Loaded campaign storage.
+ */
protected CampaignStorage storage;
+ /**
+ * Existing storage (where to remove old flight.
+ */
+ protected CampaignStorage oldStorage;
- /** All flight ids to import from the import file. */
+ /**
+ * All flight ids to import from the import file.
+ */
+ protected Iterable<String> flightToRemoveIds;
+
+ /**
+ * All flight ids to remove from application.
+ */
protected Iterable<String> flightIds;
+
public CampaignStorage getStorage() {
return storage;
}
+ public CampaignStorage getOldStorage() {
+ return oldStorage;
+ }
+
public Iterable<String> getFlightIds() {
return flightIds;
}
+
+ public Iterable<String> getFlightToRemoveIds() {
+ return flightToRemoveIds;
+ }
}
\ No newline at end of file
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java 2012-08-22 09:08:00 UTC (rev 456)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -25,33 +25,30 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
import com.google.common.io.Files;
+import fr.ulr.sammoa.application.FlightService;
+import fr.ulr.sammoa.application.ReferentialService;
+import fr.ulr.sammoa.application.SammoaContext;
import fr.ulr.sammoa.application.SammoaServiceSupport;
import fr.ulr.sammoa.application.SammoaTechnicalException;
import fr.ulr.sammoa.application.io.CampaignStorage;
import fr.ulr.sammoa.application.io.SammoaStorages;
-import fr.ulr.sammoa.persistence.SammoaDbMetas;
+import fr.ulr.sammoa.application.io.input.application.strategy.DataImportStrategy;
+import fr.ulr.sammoa.application.io.input.application.strategy.ReferentialImportStrategy;
+import fr.ulr.sammoa.persistence.Campaign;
+import fr.ulr.sammoa.persistence.SammoaDbMeta;
import fr.ulr.sammoa.persistence.SammoaEntityEnum;
-import fr.ulr.sammoa.persistence.SammoaPersistenceHelper;
import org.apache.commons.io.Charsets;
+import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
-import org.nuiton.topia.persistence.TopiaDAO;
-import org.nuiton.topia.persistence.TopiaEntity;
-import org.nuiton.topia.persistence.csv.EntityCsvModel;
-import org.nuiton.topia.persistence.csv.in.ImportModelFactory;
import org.nuiton.topia.persistence.csv.in.TopiaCsvImports;
import org.nuiton.topia.persistence.metadata.AssociationMeta;
-import org.nuiton.topia.persistence.metadata.ColumnMeta;
-import org.nuiton.topia.persistence.metadata.DbMeta;
import org.nuiton.topia.persistence.metadata.MetaFilenameAware;
import org.nuiton.topia.persistence.metadata.TableMeta;
import org.nuiton.util.TimeLog;
import org.nuiton.util.ZipUtil;
-import org.nuiton.util.csv.Import;
-import org.nuiton.util.csv.ImportModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -59,7 +56,6 @@
import java.io.FileFilter;
import java.io.IOException;
import java.io.Reader;
-import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -78,6 +74,17 @@
private static final TimeLog timeLog =
new TimeLog(ImportApplicationService.class);
+ private FlightService flightService;
+
+ private ReferentialService referentialService;
+
+ @Override
+ public void setSammoaContext(SammoaContext context) {
+ super.setSammoaContext(context);
+ flightService = getService(FlightService.class);
+ referentialService = getService(ReferentialService.class);
+ }
+
public CampaignStorage loadCampaignStorage(File file) {
File tmpDirectory = context.getConfig().getTmpDirectory();
File deflateDirectory = new File(tmpDirectory, file.getName() + "_" + System.nanoTime());
@@ -104,50 +111,101 @@
public void importApplication(ImportApplicationModel model) {
- CampaignStorage storage = model.getStorage();
-
if (logger.isInfoEnabled()) {
logger.info("Start Application import to {} :: {}",
- storage);
+ model.getStorage());
}
long startTime = TimeLog.getTime();
- DbMeta<SammoaEntityEnum> dbMetas = persistence.getDbMetas();
- SammoaPersistenceHelper persistenceHelper = persistence.getPersistenceHelper();
- MetaFilenameAware<SammoaEntityEnum>[] referencialEntries = SammoaDbMetas.getReferencialEntries(dbMetas);
+ importDb(model);
- List<String> missingEntries = Lists.newArrayList();
- Map<MetaFilenameAware<SammoaEntityEnum>, File> fileMap = TopiaCsvImports.discoverEntries(
- referencialEntries,
- storage.getCsvDirectory(),
- missingEntries);
+ startTime = timeLog.log(startTime, "importApplication", "after db import");
- Preconditions.checkState(
- missingEntries.isEmpty(),
- "It miss some csv files for referential import :" +
- missingEntries);
+ try {
+ importStorages(model);
- Map<SammoaEntityEnum, Map<String, TopiaEntity>> universe = Maps.newTreeMap();
- SammoaImportModelFactory modelFactory = new SammoaImportModelFactory(universe);
+ } catch (IOException e) {
+ throw new SammoaTechnicalException(
+ "Could not delete storage", e);
+ }
+ timeLog.log(startTime, "importApplication", "after import storages");
+ }
+
+ protected void importDb(ImportApplicationModel model) {
+
TopiaContext tx = beginTransaction();
try {
- for (MetaFilenameAware<SammoaEntityEnum> entry : referencialEntries) {
+ long startTime = TimeLog.getTime();
- File entryFile = fileMap.get(entry);
- TopiaDAO<? extends TopiaEntity> dao = persistenceHelper.getDAO(tx, entry.getSource().getContract());
- importReferential(dao,
- modelFactory,
- entryFile,
- (TableMeta<SammoaEntityEnum>) entry);
+ CampaignStorage oldStorage = model.getOldStorage();
+ if (oldStorage != null) {
+
+ // there is an existing campaign
+ // revmoe old flights which will be imported
+
+ Iterable<String> flightToRemoveIds = model.getFlightToRemoveIds();
+ for (String flightId : flightToRemoveIds) {
+ flightService.deleteFlightInDb(tx, flightId);
+ }
}
tx.commitTransaction();
- startTime = timeLog.log(startTime, "importApplication", "after referential import");
+ startTime = timeLog.log(startTime, "importDb",
+ "after flights delete");
+
+ CampaignStorage storage = model.getStorage();
+
+ SammoaDbMeta dbMetas = persistence.getDbMetas();
+
+ Map<TableMeta<SammoaEntityEnum>, File> tableMap;
+ Map<AssociationMeta<SammoaEntityEnum>, File> associationMap;
+
+ tableMap = getEntries(dbMetas.getReferentialTables(), storage);
+ associationMap = getEntries(dbMetas.getReferentialAssociations(), storage);
+ Preconditions.checkArgument(
+ associationMap.isEmpty(),
+ "No association to import from referential");
+
+ SammoaImportModelFactory modelFactory =
+ new SammoaImportModelFactory(config.getCsvSeparator(),
+ tx,
+ dbMetas);
+
+ try {
+ importReferentials(tx, modelFactory, tableMap);
+
+ tx.commitTransaction();
+
+ startTime = timeLog.log(startTime, "importDb",
+ "after referential import");
+
+ tableMap = getEntries(dbMetas.getDataTables(), storage);
+ associationMap = getEntries(dbMetas.getDataAssociations(), storage);
+
+ DataImportStrategy strategy = new DataImportStrategy(
+ modelFactory, tx, persistence.getPersistenceHelper()
+ );
+ for (String flightId : model.getFlightIds()) {
+
+ importFlight(tx,
+ strategy,
+ tableMap,
+ associationMap,
+ flightId);
+ }
+ } finally {
+ modelFactory.close();
+ }
+
+ tx.commitTransaction();
+
+ timeLog.log(startTime, "importDb", "after data import");
+
} catch (TopiaException e) {
throw new SammoaTechnicalException("Could not import", e);
} catch (IOException e) {
@@ -155,139 +213,126 @@
} finally {
endTransaction(tx);
}
+ }
- try {
- storage.delete();
- } catch (IOException e) {
- throw new SammoaTechnicalException(
- "Could not delete storage", e);
- }
+ private void importFlight(TopiaContext tx,
+ DataImportStrategy strategy,
+ Map<TableMeta<SammoaEntityEnum>, File> tableMap,
+ Map<AssociationMeta<SammoaEntityEnum>, File> associationMap,
+ String flightId) throws IOException, TopiaException {
- timeLog.log(startTime, "importApplication", "after Callback execution");
- }
+ for (Map.Entry<TableMeta<SammoaEntityEnum>, File> entry : tableMap.entrySet()) {
+ TableMeta<SammoaEntityEnum> meta = entry.getKey();
+ File file = entry.getValue();
- protected <E extends TopiaEntity> void importReferential(TopiaDAO<E> dao,
- SammoaImportModelFactory modelFactory,
- File entryFile,
- TableMeta<SammoaEntityEnum> meta) throws IOException, TopiaException {
+ Reader reader = Files.newReader(file, Charsets.UTF_8);
+ try {
- SammoaEntityEnum entityEnum = meta.getSource();
+ TopiaCsvImports.importTable(reader, strategy, meta, null);
- // create new universe
- Map<String, TopiaEntity> universe = Maps.newTreeMap();
- modelFactory.getUniverse().put(entityEnum, universe);
+ } finally {
+ reader.close();
- Reader reader = Files.newReader(entryFile, Charsets.UTF_8);
- try {
- long s0 = TimeLog.getTime();
+ }
+ }
- if (logger.isInfoEnabled()) {
- logger.info("Will import " + meta);
- }
- ImportModel<TopiaEntity> model = modelFactory.buildForImport(meta);
- Import<TopiaEntity> importer = Import.newImport(model, reader);
+ for (Map.Entry<AssociationMeta<SammoaEntityEnum>, File> entry : associationMap.entrySet()) {
+ AssociationMeta<SammoaEntityEnum> meta = entry.getKey();
+ File file = entry.getValue();
+
+ Reader reader = Files.newReader(file, Charsets.UTF_8);
try {
- for (TopiaEntity entity : importer) {
+ TopiaCsvImports.importAssociation(reader, strategy, meta, null);
- String topiaId = entity.getTopiaId();
+ } finally {
+ reader.close();
+ }
+ }
- Map<String, Object> properties = meta.prepareCreate(entity, null);
- E existingEntity = dao.findByProperties(properties);
- if (existingEntity == null) {
+ }
- // new entity to create
- E entityToSave = dao.create(properties);
- String newTopiaId = entityToSave.getTopiaId();
- Date topiaCreateDate = entityToSave.getTopiaCreateDate();
- meta.copy(entity, entityToSave);
- entityToSave.setTopiaId(newTopiaId);
- entityToSave.setTopiaCreateDate(topiaCreateDate);
+ private void importReferentials(TopiaContext tx,
+ SammoaImportModelFactory modelFactory,
+ Map<TableMeta<SammoaEntityEnum>, File> tableMap) throws IOException, TopiaException {
- if (logger.isInfoEnabled()) {
- logger.info("Create entity [{} becomes {}] with naturalId {}", new Object[]{topiaId, newTopiaId, properties});
- }
- universe.put(topiaId, entityToSave);
- } else {
- // existing entity, nothing to create
- // just add a ref into universe to make translation possible by foreign keys
+ ReferentialImportStrategy strategy = new ReferentialImportStrategy(
+ modelFactory, tx, persistence.getPersistenceHelper()
+ );
- if (logger.isDebugEnabled()) {
- logger.debug("Existing entity [{}] with naturalId {}, do not create anything", topiaId, properties);
- }
- universe.put(topiaId, existingEntity);
- }
+ for (Map.Entry<TableMeta<SammoaEntityEnum>, File> entry : tableMap.entrySet()) {
+ TableMeta<SammoaEntityEnum> meta = entry.getKey();
+ File file = entry.getValue();
- }
+ Reader reader = Files.newReader(file, Charsets.UTF_8);
+ try {
+ TopiaCsvImports.importTable(reader, strategy, meta, null);
+
} finally {
- importer.close();
+ reader.close();
+
}
+ }
+ }
- timeLog.log(s0, "importFile::done");
+ protected <M extends MetaFilenameAware<SammoaEntityEnum>> Map<M, File> getEntries(
+ List<M> metas, CampaignStorage storage) {
- s0 = TimeLog.getTime();
+ List<String> missingEntries = Lists.newArrayList();
+ Map<M, File> result = TopiaCsvImports.discoverEntries(
+ metas,
+ storage.getCsvDirectory(),
+ missingEntries);
+ Preconditions.checkState(
+ missingEntries.isEmpty(),
+ "There is some csv files for import:" + missingEntries);
+ return result;
+ }
- persistence.flushTransaction(dao.getContext());
+ protected void importStorages(ImportApplicationModel model) throws IOException {
- timeLog.log(s0, "importFile::flushTransaction");
- } finally {
- reader.close();
- }
- }
+ //storage to copy
+ CampaignStorage storageToCopy = model.getStorage();
+ try {
+ CampaignStorage oldStorage = model.getOldStorage();
+ if (oldStorage != null) {
- protected class SammoaImportModelFactory implements ImportModelFactory<SammoaEntityEnum> {
+ // there is an existing campaign
- final Map<SammoaEntityEnum, Map<String, TopiaEntity>> universe;
+ Iterable<String> flightToRemoveIds = model.getFlightToRemoveIds();
+ for (String flightId : flightToRemoveIds) {
+ oldStorage.deleteFlightStorage(flightId);
+ }
- private SammoaImportModelFactory(Map<SammoaEntityEnum, Map<String, TopiaEntity>> universe) {
- this.universe = universe;
- }
+ FileUtils.deleteDirectory(oldStorage.getMapDirectory());
+ }
- public Map<SammoaEntityEnum, Map<String, TopiaEntity>> getUniverse() {
- return universe;
- }
+ FileUtils.deleteDirectory(storageToCopy.getCsvDirectory());
- public <E extends TopiaEntity> Import<E> newModel(TableMeta<SammoaEntityEnum> meta, Reader reader) {
- ImportModel<E> model = buildForImport(meta);
- Import<E> importer = Import.newImport(model, reader);
- return importer;
- }
+ // get the new campaign from db using his naturalId
+ Campaign newCampaign = referentialService.getCampaignByNaturalId(
+ storageToCopy.getNaturalId());
+ Preconditions.checkNotNull(newCampaign);
- @Override
- public <E extends TopiaEntity> ImportModel<E> buildForImport(TableMeta<SammoaEntityEnum> meta) {
+ // create the new empty (or not) campaign storage
+ CampaignStorage newStorage = SammoaStorages.createCampaignStorage(
+ config.getCampaignDirectory(), newCampaign.getTopiaId());
- EntityCsvModel<SammoaEntityEnum, E> model = EntityCsvModel.newModel(
- config.getCsvSeparator(),
- meta,
- TopiaEntity.TOPIA_ID
- );
+ // remove properties files from storage
+ storageToCopy.deletePropertiesFiles();
- for (ColumnMeta columnMeta : meta) {
- String propertyName = columnMeta.getName();
- Class<?> type = columnMeta.getType();
- if (!columnMeta.isFK()) {
- model.addDefaultColumn(propertyName, type);
- } else {
+ // recopy storage (and selected flight ids) to new storage
+ SammoaStorages.copyCampaignStorage(storageToCopy,
+ newStorage,
+ model.getFlightIds());
+ } finally {
- Class<TopiaEntity> entityType = (Class<TopiaEntity>) type;
- SammoaEntityEnum entityEnum = SammoaEntityEnum.valueOf(entityType);
- Map<String, TopiaEntity> entitiesbyId = universe.get(entityEnum);
- model.addForeignKeyForImport(propertyName, entityType, entitiesbyId);
- }
- }
- return model;
+ // at the end remove the storage to copy
+ storageToCopy.delete();
}
+ }
- @Override
- public ImportModel<Map<String, Object>> buildForImport(AssociationMeta<SammoaEntityEnum> meta) {
- return null;
- }
- @Override
- public boolean isNMAssociationMeta(AssociationMeta<SammoaEntityEnum> meta) {
- return false;
- }
- }
}
\ No newline at end of file
Added: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/SammoaImportModelFactory.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/SammoaImportModelFactory.java (rev 0)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/SammoaImportModelFactory.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -0,0 +1,139 @@
+package fr.ulr.sammoa.application.io.input.application;
+/*
+ * #%L
+ * SAMMOA :: Application
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * 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%
+ */
+
+import com.google.common.collect.Maps;
+import fr.ulr.sammoa.persistence.SammoaDbMeta;
+import fr.ulr.sammoa.persistence.SammoaEntityEnum;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.TopiaRuntimeException;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.csv.EntityCsvModel;
+import org.nuiton.topia.persistence.csv.in.EntityAssociationImportModel;
+import org.nuiton.topia.persistence.csv.in.ImportModelFactory;
+import org.nuiton.topia.persistence.metadata.AssociationMeta;
+import org.nuiton.topia.persistence.metadata.ColumnMeta;
+import org.nuiton.topia.persistence.metadata.TableMeta;
+import org.nuiton.util.csv.Import;
+import org.nuiton.util.csv.ImportModel;
+
+import java.io.Reader;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * To produce csv import model.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+public class SammoaImportModelFactory implements ImportModelFactory<SammoaEntityEnum> {
+
+ private final char csvSeparator;
+
+ private final Map<SammoaEntityEnum, Map<String, TopiaEntity>> universe;
+
+ private final TopiaContext tx;
+
+ private final SammoaDbMeta dbMetas;
+
+ SammoaImportModelFactory(char csvSeparator,
+ TopiaContext tx,
+ SammoaDbMeta dbMetas) {
+ this.dbMetas = dbMetas;
+ this.universe = Maps.newTreeMap();
+ this.csvSeparator = csvSeparator;
+ this.tx = tx;
+ }
+
+ public Map<SammoaEntityEnum, Map<String, TopiaEntity>> getUniverse() {
+ return universe;
+ }
+
+ public <E extends TopiaEntity> Import<E> newModel(TableMeta<SammoaEntityEnum> meta, Reader reader) {
+ ImportModel<E> model = buildForImport(meta);
+ Import<E> importer = Import.newImport(model, reader);
+ return importer;
+ }
+
+ @Override
+ public <E extends TopiaEntity> ImportModel<E> buildForImport(TableMeta<SammoaEntityEnum> meta) {
+
+ EntityCsvModel<SammoaEntityEnum, E> model = EntityCsvModel.newModel(
+ csvSeparator,
+ meta,
+ TopiaEntity.TOPIA_ID
+ );
+
+ for (ColumnMeta columnMeta : meta) {
+ String propertyName = columnMeta.getName();
+ Class<?> type = columnMeta.getType();
+ if (!columnMeta.isFK()) {
+ model.addDefaultColumn(propertyName, type);
+ } else {
+
+ Class<TopiaEntity> entityType = (Class<TopiaEntity>) type;
+ SammoaEntityEnum entityEnum = SammoaEntityEnum.valueOf(entityType);
+
+ if (dbMetas.isReferential(entityEnum)) {
+
+ // referential is always loaded by incoming universe (and not from db)
+ //since we need to do some topiaId translations
+ Map<String, TopiaEntity> entitiesbyId = universe.get(entityEnum);
+ model.addForeignKeyForImport(propertyName, entityType, entitiesbyId);
+ } else {
+
+ // foreign keys on data are always coming from db
+ try {
+ List<TopiaEntity> entities = dbMetas.getPersistenceHelper().getDAO(tx, entityType).findAll();
+ model.addForeignKeyForImport(propertyName, entityType, entities);
+ } catch (TopiaException e) {
+ throw new TopiaRuntimeException(e);
+ }
+ }
+ }
+ }
+ return model;
+ }
+
+ @Override
+ public ImportModel<Map<String, Object>> buildForImport(AssociationMeta<SammoaEntityEnum> meta) {
+ ImportModel<Map<String, Object>> model =
+ EntityAssociationImportModel.newImportModel(
+ csvSeparator,
+ meta
+ );
+ return model;
+ }
+
+ @Override
+ public boolean isNMAssociationMeta(AssociationMeta<SammoaEntityEnum> meta) {
+ return false;
+ }
+
+ public void close() {
+ universe.clear();
+ }
+}
Property changes on: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/SammoaImportModelFactory.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/AbstractImportStrategy.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/AbstractImportStrategy.java (rev 0)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/AbstractImportStrategy.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -0,0 +1,92 @@
+package fr.ulr.sammoa.application.io.input.application.strategy;
+/*
+ * #%L
+ * SAMMOA :: Application
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * 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%
+ */
+
+import fr.ulr.sammoa.application.io.input.application.SammoaImportModelFactory;
+import fr.ulr.sammoa.persistence.SammoaEntityEnum;
+import fr.ulr.sammoa.persistence.SammoaPersistenceHelper;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.persistence.TopiaDAO;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.csv.in.CsvImportResult;
+import org.nuiton.topia.persistence.csv.in.ImportStrategy;
+import org.nuiton.topia.persistence.metadata.AssociationMeta;
+import org.nuiton.topia.persistence.metadata.TableMeta;
+import org.nuiton.util.csv.Import;
+import org.nuiton.util.csv.ImportToMap;
+
+import java.io.Reader;
+
+/**
+ * Base import stragey for sammo application import.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+abstract class AbstractImportStrategy implements ImportStrategy<SammoaEntityEnum> {
+
+ private final TopiaContext tx;
+
+ private final SammoaPersistenceHelper persistenceHelper;
+
+ private final SammoaImportModelFactory modelFactory;
+
+ AbstractImportStrategy(SammoaImportModelFactory modelFactory,
+ TopiaContext tx,
+ SammoaPersistenceHelper persistenceHelper) {
+ this.tx = tx;
+ this.persistenceHelper = persistenceHelper;
+ this.modelFactory = modelFactory;
+ }
+
+ @Override
+ public SammoaImportModelFactory getModelFactory() {
+ return modelFactory;
+ }
+
+ @Override
+ public <E extends TopiaEntity> void importTable(Import<E> importer,
+ TableMeta<SammoaEntityEnum> meta,
+ Reader reader,
+ CsvImportResult<SammoaEntityEnum> csvResult) throws TopiaException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void importAssociation(AssociationMeta<SammoaEntityEnum> meta,
+ ImportToMap importer,
+ CsvImportResult<SammoaEntityEnum> csvResult) throws TopiaException {
+ throw new UnsupportedOperationException();
+ }
+
+ protected TopiaContext getTx() {
+ return tx;
+ }
+
+ protected <E extends TopiaEntity> TopiaDAO<E> getDAO(SammoaEntityEnum type) {
+ return persistenceHelper.getDAO(tx, type);
+ }
+
+}
Property changes on: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/AbstractImportStrategy.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java (rev 0)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -0,0 +1,80 @@
+package fr.ulr.sammoa.application.io.input.application.strategy;
+/*
+ * #%L
+ * SAMMOA :: Application
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * 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%
+ */
+
+import fr.ulr.sammoa.application.io.input.application.SammoaImportModelFactory;
+import fr.ulr.sammoa.persistence.SammoaEntityEnum;
+import fr.ulr.sammoa.persistence.SammoaPersistenceHelper;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.persistence.TopiaDAO;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.csv.in.CsvImportResult;
+import org.nuiton.topia.persistence.csv.in.TopiaCsvImports;
+import org.nuiton.topia.persistence.metadata.AssociationMeta;
+import org.nuiton.topia.persistence.metadata.TableMeta;
+import org.nuiton.util.csv.Import;
+import org.nuiton.util.csv.ImportToMap;
+
+import java.io.Reader;
+
+/**
+ * Strategy to import data (create all entites, no update possible).
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+public class DataImportStrategy extends AbstractImportStrategy {
+
+ public DataImportStrategy(SammoaImportModelFactory modelFactory,
+ TopiaContext tx,
+ SammoaPersistenceHelper persistenceHelper) {
+ super(modelFactory, tx, persistenceHelper);
+ }
+
+ @Override
+ public <E extends TopiaEntity> void importTable(Import<E> importer,
+ TableMeta<SammoaEntityEnum> meta,
+ Reader reader,
+ CsvImportResult<SammoaEntityEnum> csvResult) throws TopiaException {
+
+ TopiaDAO<E> dao = getDAO(meta.getSource());
+
+ TopiaCsvImports.importAllEntities(dao, meta, importer, csvResult);
+
+ }
+
+ @Override
+ public void importAssociation(AssociationMeta<SammoaEntityEnum> meta,
+ ImportToMap importer,
+ CsvImportResult<SammoaEntityEnum> csvResult) throws TopiaException {
+ TopiaCsvImports.importAssociation(getTx(),
+ meta,
+ importer,
+ csvResult,
+ 1000);
+ }
+
+
+}
Property changes on: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/DataImportStrategy.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/ReferentialImportStrategy.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/ReferentialImportStrategy.java (rev 0)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/ReferentialImportStrategy.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -0,0 +1,81 @@
+package fr.ulr.sammoa.application.io.input.application.strategy;
+/*
+ * #%L
+ * SAMMOA :: Application
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * 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%
+ */
+
+import com.google.common.collect.Maps;
+import fr.ulr.sammoa.application.io.input.application.SammoaImportModelFactory;
+import fr.ulr.sammoa.persistence.SammoaEntityEnum;
+import fr.ulr.sammoa.persistence.SammoaPersistenceHelper;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.persistence.TopiaDAO;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.csv.in.CsvImportResult;
+import org.nuiton.topia.persistence.csv.in.TopiaCsvImports;
+import org.nuiton.topia.persistence.metadata.TableMeta;
+import org.nuiton.util.csv.Import;
+
+import java.io.Reader;
+import java.util.Map;
+
+/**
+ * Strategy for referential import:
+ * <p/>
+ * No update (for the moment) just add new entities and for other get their
+ * db topiaid using the natural id of it.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+public class ReferentialImportStrategy extends AbstractImportStrategy {
+
+ public ReferentialImportStrategy(SammoaImportModelFactory modelFactory,
+ TopiaContext tx,
+ SammoaPersistenceHelper persistenceHelper) {
+ super(modelFactory, tx, persistenceHelper);
+ }
+
+ @Override
+ public <E extends TopiaEntity> void importTable(Import<E> importer,
+ TableMeta<SammoaEntityEnum> meta,
+ Reader reader,
+ CsvImportResult<SammoaEntityEnum> csvResult) throws TopiaException {
+ TopiaDAO<E> dao = getDAO(meta.getSource());
+
+ SammoaEntityEnum entityEnum = meta.getSource();
+
+ // create new universe
+ Map<String, TopiaEntity> universe = Maps.newTreeMap();
+
+ // keep it in model factory (will be used for foreign keys imports)
+ getModelFactory().getUniverse().put(entityEnum, universe);
+
+ TopiaCsvImports.importNotExistingEntities(dao,
+ meta,
+ universe,
+ importer,
+ csvResult);
+ }
+
+}
Property changes on: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/strategy/ReferentialImportStrategy.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java 2012-08-22 09:08:00 UTC (rev 456)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -39,25 +39,20 @@
import fr.ulr.sammoa.persistence.Observation;
import fr.ulr.sammoa.persistence.Route;
import fr.ulr.sammoa.persistence.SammoaDAOHelper;
-import fr.ulr.sammoa.persistence.SammoaDbMetas;
+import fr.ulr.sammoa.persistence.SammoaDbMeta;
import fr.ulr.sammoa.persistence.SammoaEntityEnum;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
-import org.nuiton.topia.persistence.TopiaDAO;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.csv.EntityCsvModel;
import org.nuiton.topia.persistence.csv.out.EntityAssociationExportModel;
import org.nuiton.topia.persistence.csv.out.ExportEntityVisitor;
import org.nuiton.topia.persistence.csv.out.ExportModelFactory;
-import org.nuiton.topia.persistence.csv.out.PrepareDataForExport;
import org.nuiton.topia.persistence.csv.out.TopiaCsvExports;
import org.nuiton.topia.persistence.metadata.AssociationMeta;
import org.nuiton.topia.persistence.metadata.ColumnMeta;
-import org.nuiton.topia.persistence.metadata.DbMeta;
-import org.nuiton.topia.persistence.metadata.MetaFilenameAware;
import org.nuiton.topia.persistence.metadata.TableMeta;
import org.nuiton.util.TimeLog;
import org.nuiton.util.ZipUtil;
@@ -85,6 +80,42 @@
private static final TimeLog TIME_LOG =
new TimeLog(ExportApplicationService.class);
+ private final ExportModelFactory<SammoaEntityEnum> defaultExportModelFactory = new ExportModelFactory<SammoaEntityEnum>() {
+ @Override
+ public <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta<SammoaEntityEnum> meta) {
+ EntityCsvModel<SammoaEntityEnum, E> model =
+ EntityCsvModel.newModel(config.getCsvSeparator(),
+ meta,
+ TopiaEntity.TOPIA_ID);
+
+
+ for (ColumnMeta columnMeta : meta) {
+ String propertyName = columnMeta.getName();
+ Class<?> type = columnMeta.getType();
+ if (columnMeta.isFK()) {
+
+ Class<TopiaEntity> entityType = (Class<TopiaEntity>) type;
+
+ // export foreign key value as his topiaId
+ model.addForeignKeyForExport(propertyName, entityType);
+
+ } else {
+ model.addDefaultColumn(propertyName, type);
+ }
+ }
+ return model;
+ }
+
+ @Override
+ public <E extends TopiaEntity> ExportModel<E> buildForExport(AssociationMeta<SammoaEntityEnum> associationMeta) {
+ ExportModel<E> model = EntityAssociationExportModel.newExportModel(
+ config.getCsvSeparator(),
+ associationMeta
+ );
+ return model;
+ }
+ };
+
public void exportApplication(ExportApplicationModel model) {
Preconditions.checkNotNull(model);
Preconditions.checkNotNull(model.getExportFile());
@@ -111,33 +142,45 @@
Iterable<String> flightIds = model.getFlightIds();
- CampaignStorage targetStorage = SammoaStorages.copyCampaignStorage(
- storage, targetDirectory, true, flightIds);
+ CampaignStorage targetStorage =
+ SammoaStorages.createCampaignStorage(targetDirectory,
+ storage.getId());
- fillAndsaveStorageProperties(targetStorage);
+ SammoaStorages.copyCampaignStorage(storage,
+ targetStorage,
+ flightIds);
+ fillAndSaveStorageProperties(targetStorage);
+
startTime = TIME_LOG.log(startTime, "exportApplication",
"after create Storage structure");
- File csvDirectory = targetStorage.getCsvDirectory();
-
TopiaContext tx = beginTransaction();
try {
- exportReferential(tx, csvDirectory);
- exportData(tx, csvDirectory, flightIds);
+
+ exportReferential(tx, targetStorage);
+
+ for (String flightId : flightIds) {
+ FlightStorage flightStorage =
+ targetStorage.getFlightStorage(flightId);
+ exportFlightData(tx,
+ flightStorage,
+ flightId);
+ }
+ } catch (IOException e) {
+ throw new SammoaTechnicalException("Could not create export file", e);
} finally {
endTransaction(tx);
}
compressZipFile(model.getExportFile(),
- targetStorage.getDirectory(),
- false);
+ targetStorage.getDirectory());
TIME_LOG.log(startTime, "exportApplication",
"after export db to csv files ");
}
- private void fillAndsaveStorageProperties(CampaignStorage storage) {
+ private void fillAndSaveStorageProperties(CampaignStorage storage) {
TopiaContext tx = beginTransaction();
@@ -166,58 +209,52 @@
} finally {
endTransaction(tx);
}
+ }
+ protected void exportReferential(TopiaContext tx, CampaignStorage storage) throws IOException {
- }
+ File csvDirectory = storage.getCsvDirectory();
- protected void exportReferential(TopiaContext tx, File csvDirectory) {
+ FileUtils.forceMkdir(csvDirectory);
- DbMeta<SammoaEntityEnum> dbMetas = persistence.getDbMetas();
+ SammoaDbMeta dbMetas = persistence.getDbMetas();
- SammoaEntityEnumPrepareDataForExport prepareDataForExport =
- new SammoaEntityEnumPrepareDataForExport(dbMetas, tx);
+ SammoaPrepareDataForExport prepareDataForExport =
+ new SammoaPrepareDataForExport(dbMetas, tx);
- MetaFilenameAware<SammoaEntityEnum>[] referencialEntries =
- SammoaDbMetas.getReferencialEntries(dbMetas);
+ List<TableMeta<SammoaEntityEnum>> referencialEntries =
+ dbMetas.getReferentialTables();
- for (MetaFilenameAware<SammoaEntityEnum> entry : referencialEntries) {
+ for (TableMeta<SammoaEntityEnum> tableMeta : referencialEntries) {
- File entryFile = new File(csvDirectory, entry.getFilename());
+ File entryFile = new File(csvDirectory, tableMeta.getFilename());
if (logger.isInfoEnabled()) {
- logger.info("Will export {} to {}", entry, entryFile);
+ logger.info("Will export {} to {}", tableMeta, entryFile);
}
- if (entry instanceof AssociationMeta) {
- AssociationMeta<SammoaEntityEnum> associationMeta =
- (AssociationMeta<SammoaEntityEnum>) entry;
- TopiaCsvExports.exportData(associationMeta,
- defaultExportModelFactory,
- prepareDataForExport,
- entryFile);
- } else {
- TableMeta<SammoaEntityEnum> tableMeta =
- (TableMeta<SammoaEntityEnum>) entry;
-
- TopiaCsvExports.exportData(tableMeta,
- defaultExportModelFactory,
- prepareDataForExport,
- entryFile);
- }
+ TopiaCsvExports.exportData(tableMeta,
+ defaultExportModelFactory,
+ prepareDataForExport,
+ entryFile);
}
}
- protected void exportData(TopiaContext tx,
- File csvDirectory,
- Iterable<String> flightIds) {
+ protected void exportFlightData(TopiaContext tx,
+ FlightStorage storage,
+ String flightId) throws IOException {
- DbMeta<SammoaEntityEnum> dbMetas = persistence.getDbMetas();
+ File csvDirectory = storage.getCsvDirectory();
+ FileUtils.forceMkdir(csvDirectory);
+
+ SammoaDbMeta dbMetas = persistence.getDbMetas();
+
Map<SammoaEntityEnum, TopiaCsvExports.EntityExportContext<SammoaEntityEnum>> exportContexts =
TopiaCsvExports.createReplicateEntityVisitorContexts(
defaultExportModelFactory,
- SammoaDbMetas.getDataEntries(dbMetas),
- SammoaDbMetas.getDataAssociationsEntries(dbMetas),
+ dbMetas.getDataTables(),
+ dbMetas.getDataAssociations(),
csvDirectory);
ExportEntityVisitor<SammoaEntityEnum> exportVisitor =
@@ -227,128 +264,40 @@
FlightService flightService = getService(FlightService.class);
try {
- for (String flightId : flightIds) {
- Flight flight = flightService.getFlight(tx, flightId);
- exportVisitor.export(flight);
+ Flight flight = flightService.getFlight(tx, flightId);
+ exportVisitor.export(flight);
- List<GeoPoint> geoPoints =
- flightService.getFlightGeoPoints(tx, flight);
- exportVisitor.export(geoPoints);
+ List<GeoPoint> geoPoints =
+ flightService.getFlightGeoPoints(tx, flight);
+ exportVisitor.export(geoPoints);
- List<Route> routes = flightService.getRoutes(tx, flight);
- exportVisitor.export(routes);
+ List<Route> routes = flightService.getRoutes(tx, flight);
+ exportVisitor.export(routes);
- List<Observation> observations =
- flightService.getObservations(tx, flight);
- exportVisitor.export(observations);
+ List<Observation> observations =
+ flightService.getObservations(tx, flight);
+ exportVisitor.export(observations);
- }
} finally {
IOUtils.closeQuietly(exportVisitor);
}
}
- private ExportModelFactory<SammoaEntityEnum> defaultExportModelFactory = new ExportModelFactory<SammoaEntityEnum>() {
- @Override
- public <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta<SammoaEntityEnum> meta) {
- EntityCsvModel<SammoaEntityEnum, E> model =
- EntityCsvModel.newModel(config.getCsvSeparator(),
- meta,
- TopiaEntity.TOPIA_ID);
+ protected void compressZipFile(File zipFile, File directory) {
-
- for (ColumnMeta columnMeta : meta) {
- String propertyName = columnMeta.getName();
- Class<?> type = columnMeta.getType();
- if (columnMeta.isFK()) {
-
- Class<TopiaEntity> entityType = (Class<TopiaEntity>) type;
-
- // export foreign key value as his topiaId
- model.addForeignKeyForExport(propertyName, entityType);
-
- } else {
- model.addDefaultColumn(propertyName, type);
- }
- }
- return model;
- }
-
- @Override
- public <E extends TopiaEntity> ExportModel<E> buildForExport(AssociationMeta<SammoaEntityEnum> associationMeta) {
- ExportModel<E> model = EntityAssociationExportModel.newExportModel(
- config.getCsvSeparator(),
- associationMeta
- );
- return model;
- }
- };
-
- protected void compressZipFile(File zipFile,
- File directory,
- boolean delete) {
-
try {
FileUtils.forceMkdir(zipFile.getParentFile());
try {
ZipUtil.compress(zipFile, directory);
} finally {
- if (delete) {
- FileUtils.deleteDirectory(directory);
- }
+ FileUtils.deleteDirectory(directory);
+
}
} catch (IOException e) {
throw new SammoaTechnicalException("Could not compress directory", e);
}
}
- protected static class SammoaEntityEnumPrepareDataForExport implements PrepareDataForExport<SammoaEntityEnum> {
-
- protected final DbMeta<SammoaEntityEnum> dbMetas;
-
- protected final TopiaContext tx;
-
- public SammoaEntityEnumPrepareDataForExport(DbMeta<SammoaEntityEnum> dbMetas, TopiaContext tx) {
- this.dbMetas = dbMetas;
- this.tx = tx;
- }
-
- @Override
- public <E extends TopiaEntity> List<E> prepareData(TableMeta<SammoaEntityEnum> tableMeta) {
-
- return getEntities(tx, tableMeta, null);
- }
-
- @Override
- public <E extends TopiaEntity> List<E> prepareData(AssociationMeta<SammoaEntityEnum> associationMeta) {
- TableMeta<SammoaEntityEnum> tableMeta = dbMetas.getTable(associationMeta.getSource());
- return getEntities(tx, tableMeta, "size(e." + associationMeta.getName() + ") > 0");
- }
-
- protected <E extends TopiaEntity> List<E> getEntities(TopiaContext tx,
- TableMeta<SammoaEntityEnum> tableMeta,
- String extraWhereQuery) {
-
- SammoaEntityEnum entityEnum = tableMeta.getSource();
- try {
- TopiaDAO<E> dao = SammoaDAOHelper.<E, TopiaDAO<E>>getDAO(
- tx, (Class<E>) entityEnum.getContract());
-
- // first query to count datas
-
- String hql = "FROM " + entityEnum.getImplementationFQN();
-
- if (StringUtils.isNotEmpty(extraWhereQuery)) {
- hql += " WHERE " + extraWhereQuery;
- }
-
- List<E> result = dao.findAllByQuery(hql);
- return result;
- } catch (TopiaException eee) {
- throw new SammoaTechnicalException("Could not obtain data", eee);
- }
- }
- }
}
Added: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/SammoaPrepareDataForExport.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/SammoaPrepareDataForExport.java (rev 0)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/SammoaPrepareDataForExport.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -0,0 +1,91 @@
+package fr.ulr.sammoa.application.io.output.application;
+/*
+ * #%L
+ * SAMMOA :: Application
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * 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%
+ */
+
+import fr.ulr.sammoa.application.SammoaTechnicalException;
+import fr.ulr.sammoa.persistence.SammoaEntityEnum;
+import org.apache.commons.lang3.StringUtils;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.persistence.TopiaDAO;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.csv.out.PrepareDataForExport;
+import org.nuiton.topia.persistence.metadata.AssociationMeta;
+import org.nuiton.topia.persistence.metadata.DbMeta;
+import org.nuiton.topia.persistence.metadata.TableMeta;
+
+import java.util.List;
+
+/**
+ * TODO
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+class SammoaPrepareDataForExport implements PrepareDataForExport<SammoaEntityEnum> {
+
+ protected final DbMeta<SammoaEntityEnum> dbMetas;
+
+ protected final TopiaContext tx;
+
+ public SammoaPrepareDataForExport(DbMeta<SammoaEntityEnum> dbMetas, TopiaContext tx) {
+ this.dbMetas = dbMetas;
+ this.tx = tx;
+ }
+
+ @Override
+ public <E extends TopiaEntity> List<E> prepareData(TableMeta<SammoaEntityEnum> tableMeta) {
+
+ return getEntities(tx, tableMeta, null);
+ }
+
+ @Override
+ public <E extends TopiaEntity> List<E> prepareData(AssociationMeta<SammoaEntityEnum> associationMeta) {
+ TableMeta<SammoaEntityEnum> tableMeta = dbMetas.getTable(associationMeta.getSource());
+ return getEntities(tx, tableMeta, "size(e." + associationMeta.getName() + ") > 0");
+ }
+
+ protected <E extends TopiaEntity> List<E> getEntities(TopiaContext tx,
+ TableMeta<SammoaEntityEnum> tableMeta,
+ String extraWhereQuery) {
+
+ SammoaEntityEnum entityEnum = tableMeta.getSource();
+ try {
+ TopiaDAO<E> dao = dbMetas.getPersistenceHelper().getDAO(tx, entityEnum);
+
+ // first query to count datas
+
+ String hql = "FROM " + entityEnum.getImplementationFQN();
+
+ if (StringUtils.isNotEmpty(extraWhereQuery)) {
+ hql += " WHERE " + extraWhereQuery;
+ }
+
+ List<E> result = dao.findAllByQuery(hql);
+ return result;
+ } catch (TopiaException eee) {
+ throw new SammoaTechnicalException("Could not obtain data", eee);
+ }
+ }
+}
Property changes on: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/SammoaPrepareDataForExport.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMeta.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMeta.java (rev 0)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMeta.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -0,0 +1,131 @@
+package fr.ulr.sammoa.persistence;
+/*
+ * #%L
+ * SAMMOA :: Persistence
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * 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%
+ */
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import org.nuiton.topia.persistence.TopiaPersistenceHelper;
+import org.nuiton.topia.persistence.metadata.AssociationMeta;
+import org.nuiton.topia.persistence.metadata.DbMeta;
+import org.nuiton.topia.persistence.metadata.TableMeta;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * All db metas for the sammoa persistence unit.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+public class SammoaDbMeta extends DbMeta<SammoaEntityEnum> {
+
+ private static final List<SammoaEntityEnum> REFERENTIAL_TYPES = ImmutableList.copyOf(Arrays.asList(
+ SammoaEntityEnum.Region,
+ SammoaEntityEnum.Species,
+ SammoaEntityEnum.Campaign,
+ SammoaEntityEnum.Observer,
+ SammoaEntityEnum.Sector,
+ SammoaEntityEnum.Strate,
+ SammoaEntityEnum.Transect
+ ));
+
+ private static final List<SammoaEntityEnum> DATA_TYPES = ImmutableList.copyOf(Arrays.asList(
+ SammoaEntityEnum.Flight,
+ SammoaEntityEnum.GeoPoint,
+ SammoaEntityEnum.ObserverPosition,
+ SammoaEntityEnum.TransectFlight,
+ SammoaEntityEnum.Observation,
+ SammoaEntityEnum.Route
+ ));
+
+ private final List<TableMeta<SammoaEntityEnum>> referentialTables;
+
+ private final List<AssociationMeta<SammoaEntityEnum>> referentialAssociations;
+
+ private final List<TableMeta<SammoaEntityEnum>> dataTables;
+
+ private final List<AssociationMeta<SammoaEntityEnum>> dataAssociations;
+
+ public static SammoaDbMeta newDbMeta(TopiaPersistenceHelper<SammoaEntityEnum> persistenceHelper) {
+ return new SammoaDbMeta(persistenceHelper);
+ }
+
+ SammoaDbMeta(TopiaPersistenceHelper<SammoaEntityEnum> persistenceHelper) {
+ super(persistenceHelper, SammoaEntityEnum.values());
+
+ {
+ // referential tables
+
+ List<TableMeta<SammoaEntityEnum>> result = Lists.newArrayList();
+ addTables(result, REFERENTIAL_TYPES);
+ referentialTables = ImmutableList.copyOf(result);
+ }
+
+ {
+ // referential associations
+
+ List<AssociationMeta<SammoaEntityEnum>> result = Lists.newArrayList();
+ addAssociations(result, REFERENTIAL_TYPES);
+ referentialAssociations = ImmutableList.copyOf(result);
+ }
+
+ {
+ // data tables
+
+ List<TableMeta<SammoaEntityEnum>> result = Lists.newArrayList();
+ addTables(result, DATA_TYPES);
+ dataTables = ImmutableList.copyOf(result);
+ }
+
+ {
+ // data associations
+
+ List<AssociationMeta<SammoaEntityEnum>> result = Lists.newArrayList();
+ addAssociations(result, DATA_TYPES);
+ dataAssociations = ImmutableList.copyOf(result);
+ }
+ }
+
+ public boolean isReferential(SammoaEntityEnum type) {
+ return REFERENTIAL_TYPES.contains(type);
+ }
+
+ public List<TableMeta<SammoaEntityEnum>> getReferentialTables() {
+ return referentialTables;
+ }
+
+ public List<AssociationMeta<SammoaEntityEnum>> getReferentialAssociations() {
+ return referentialAssociations;
+ }
+
+ public List<TableMeta<SammoaEntityEnum>> getDataTables() {
+ return dataTables;
+ }
+
+ public List<AssociationMeta<SammoaEntityEnum>> getDataAssociations() {
+ return dataAssociations;
+ }
+
+}
Property changes on: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMeta.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Deleted: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMetas.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMetas.java 2012-08-22 09:08:00 UTC (rev 456)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMetas.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -1,136 +0,0 @@
-package fr.ulr.sammoa.persistence;
-/*
- * #%L
- * SAMMOA :: Persistence
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2012 UMS 3462, Code Lutin
- * %%
- * 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%
- */
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Multimap;
-import org.nuiton.topia.persistence.metadata.DbMeta;
-import org.nuiton.topia.persistence.metadata.MetaFilenameAware;
-import org.nuiton.topia.persistence.metadata.Metadatas;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * Useful methods aroun meta datas of sammoa entities.
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @since 0.6
- */
-public class SammoaDbMetas {
-
- private static final SammoaEntityEnum[] EMPTY_ENTITY_TYPE_ARRAY =
- new SammoaEntityEnum[0];
-
- public static DbMeta<SammoaEntityEnum> newDbMetas(SammoaPersistenceHelper persistenceHelper) {
- return DbMeta.newDbMeta(persistenceHelper,
- SammoaEntityEnum.values(),
- EMPTY_ENTITY_TYPE_ARRAY
- );
- }
-
- /**
- * @return the entity types of data in correct order for replication
- * purpose.
- */
- public static SammoaEntityEnum[] getDataTypes() {
-
- List<SammoaEntityEnum> result = Lists.newLinkedList();
-
- result.add(SammoaEntityEnum.TransectFlight);
- result.add(SammoaEntityEnum.Flight);
- result.add(SammoaEntityEnum.Route);
- result.add(SammoaEntityEnum.Observation);
- result.add(SammoaEntityEnum.ObserverPosition);
- result.add(SammoaEntityEnum.GeoPoint);
-
- return result.toArray(new SammoaEntityEnum[result.size()]);
- }
-
- /**
- * @return the entity types of reference in correct order for copy
- * purpose (says import / export of all a database.
- */
- public static SammoaEntityEnum[] getReferenceTypes() {
- List<SammoaEntityEnum> result = Lists.newLinkedList();
-
- // with no dep
- result.add(SammoaEntityEnum.Region);
- result.add(SammoaEntityEnum.Species);
- result.add(SammoaEntityEnum.Campaign);
- result.add(SammoaEntityEnum.Observer);
- result.add(SammoaEntityEnum.Sector);
- result.add(SammoaEntityEnum.Strate);
- result.add(SammoaEntityEnum.Transect);
-
- return result.toArray(new SammoaEntityEnum[result.size()]);
- }
-
- public static MetaFilenameAware<SammoaEntityEnum>[] getAllEntries(DbMeta<SammoaEntityEnum> dbMeta) {
-
- List<MetaFilenameAware<SammoaEntityEnum>> entities = Lists.newArrayList();
- List<MetaFilenameAware<SammoaEntityEnum>> associations = Lists.newArrayList();
-
- Metadatas.addEntries(dbMeta, entities, associations, getReferenceTypes());
- Metadatas.addEntries(dbMeta, entities, associations, getDataTypes());
- entities.addAll(associations);
- return entities.toArray(new MetaFilenameAware[entities.size()]);
- }
-
- public static MetaFilenameAware<SammoaEntityEnum>[] getReferencialEntries(DbMeta<SammoaEntityEnum> dbMeta) {
-
- List<MetaFilenameAware<SammoaEntityEnum>> entities = Lists.newArrayList();
- List<MetaFilenameAware<SammoaEntityEnum>> associations = Lists.newArrayList();
- entities.addAll(associations);
- Metadatas.addEntries(dbMeta, entities, associations, getReferenceTypes());
-
- return entities.toArray(new MetaFilenameAware[entities.size()]);
- }
-
- public static Map<SammoaEntityEnum, MetaFilenameAware<SammoaEntityEnum>> getReferencialEntriesByType(DbMeta<SammoaEntityEnum> dbMeta) {
- List<MetaFilenameAware<SammoaEntityEnum>> entities = Lists.newArrayList();
- List<MetaFilenameAware<SammoaEntityEnum>> associations = Lists.newArrayList();
- entities.addAll(associations);
- Metadatas.addEntries(dbMeta, entities, associations, getReferenceTypes());
- return Metadatas.uniqueIndex(entities);
- }
-
-
- public static MetaFilenameAware<SammoaEntityEnum>[] getDataEntries(DbMeta<SammoaEntityEnum> dbMeta) {
-
- List<MetaFilenameAware<SammoaEntityEnum>> entities = Lists.newArrayList();
-
- Metadatas.addEntries(dbMeta, entities, null, getDataTypes());
- return entities.toArray(new MetaFilenameAware[entities.size()]);
- }
-
- public static Multimap<SammoaEntityEnum, MetaFilenameAware<SammoaEntityEnum>> getDataAssociationsEntries(DbMeta<SammoaEntityEnum> dbMeta) {
-
- List<MetaFilenameAware<SammoaEntityEnum>> associations = Lists.newArrayList();
-
- Metadatas.addEntries(dbMeta, null, associations, getDataTypes());
- return Metadatas.split(associations);
- }
-
-}
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java 2012-08-22 09:08:00 UTC (rev 456)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -32,7 +32,6 @@
import org.nuiton.topia.TopiaRuntimeException;
import org.nuiton.topia.framework.TopiaContextImplementor;
import org.nuiton.topia.persistence.TopiaEntity;
-import org.nuiton.topia.persistence.metadata.DbMeta;
import java.io.Closeable;
import java.util.Properties;
@@ -62,7 +61,7 @@
protected SammoaPersistenceHelper persistenceHelper;
- protected DbMeta<SammoaEntityEnum> dbMetas;
+ protected SammoaDbMeta dbMetas;
/**
* Constructor of SammoaPersistence with {@code dbConfiguration} for
@@ -201,9 +200,9 @@
return persistenceHelper;
}
- public DbMeta<SammoaEntityEnum> getDbMetas() {
+ public SammoaDbMeta getDbMetas() {
if (dbMetas == null) {
- dbMetas = SammoaDbMetas.newDbMetas(getPersistenceHelper());
+ dbMetas = SammoaDbMeta.newDbMeta(getPersistenceHelper());
}
return dbMetas;
}
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistenceHelper.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistenceHelper.java 2012-08-22 09:08:00 UTC (rev 456)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistenceHelper.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -1,4 +1,27 @@
package fr.ulr.sammoa.persistence;
+/*
+ * #%L
+ * SAMMOA :: Persistence
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * 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%
+ */
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
@@ -28,4 +51,10 @@
throw new TopiaRuntimeException(e);
}
}
+
+ @Override
+ public <E extends TopiaEntity> TopiaDAO<E> getDAO(TopiaContext tx, SammoaEntityEnum type) {
+ return (TopiaDAO<E>) getDAO(tx, type.getContract());
+ }
+
}
Property changes on: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistenceHelper.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision
+ Author Date Id Revision HeadURL
Copied: trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetaTest.java (from rev 455, trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetasTest.java)
===================================================================
--- trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetaTest.java (rev 0)
+++ trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetaTest.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -0,0 +1,121 @@
+package fr.ulr.sammoa.persistence;
+/*
+ * #%L
+ * SAMMOA :: Persistence
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * 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%
+ */
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.nuiton.topia.persistence.metadata.AssociationMeta;
+import org.nuiton.topia.persistence.metadata.TableMeta;
+
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Tests the{@link SammoaDbMeta}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+public class SammoaDbMetaTest {
+
+ protected SammoaDbMeta dbMetas;
+
+ @Before
+ public void setUp() throws Exception {
+ dbMetas = SammoaDbMeta.newDbMeta(new SammoaPersistenceHelper());
+ }
+
+ @Test
+ public void getReferencialTables() throws Exception {
+
+ List<TableMeta<SammoaEntityEnum>> entries =
+ dbMetas.getReferentialTables();
+
+ Assert.assertNotNull(entries);
+ Assert.assertEquals(7, entries.size());
+ Iterator<TableMeta<SammoaEntityEnum>> itr = entries.iterator();
+ assertTableMeta(itr.next(), SammoaEntityEnum.Region);
+ assertTableMeta(itr.next(), SammoaEntityEnum.Species);
+ assertTableMeta(itr.next(), SammoaEntityEnum.Campaign);
+ assertTableMeta(itr.next(), SammoaEntityEnum.Observer);
+ assertTableMeta(itr.next(), SammoaEntityEnum.Sector);
+ assertTableMeta(itr.next(), SammoaEntityEnum.Strate);
+ assertTableMeta(itr.next(), SammoaEntityEnum.Transect);
+ }
+
+ @Test
+ public void getReferencialAssociations() throws Exception {
+
+ List<AssociationMeta<SammoaEntityEnum>> entries =
+ dbMetas.getReferentialAssociations();
+
+ Assert.assertNotNull(entries);
+ Assert.assertTrue(entries.isEmpty());
+ }
+
+ @Test
+ public void getDataTables() throws Exception {
+
+ List<TableMeta<SammoaEntityEnum>> entries =
+ dbMetas.getDataTables();
+ Assert.assertNotNull(entries);
+ Assert.assertEquals(6, entries.size());
+ Iterator<TableMeta<SammoaEntityEnum>> itr = entries.iterator();
+ assertTableMeta(itr.next(), SammoaEntityEnum.Flight);
+ assertTableMeta(itr.next(), SammoaEntityEnum.GeoPoint);
+ assertTableMeta(itr.next(), SammoaEntityEnum.ObserverPosition);
+ assertTableMeta(itr.next(), SammoaEntityEnum.TransectFlight);
+ assertTableMeta(itr.next(), SammoaEntityEnum.Observation);
+ assertTableMeta(itr.next(), SammoaEntityEnum.Route);
+ }
+
+ @Test
+ public void getDataAssociations() throws Exception {
+
+ List<AssociationMeta<SammoaEntityEnum>> entries =
+ dbMetas.getDataAssociations();
+ Assert.assertNotNull(entries);
+ Assert.assertEquals(4, entries.size());
+ Iterator<AssociationMeta<SammoaEntityEnum>> itr = entries.iterator();
+ assertAssociationMeta(itr.next(), SammoaEntityEnum.Flight, SammoaEntityEnum.Observer);
+ assertAssociationMeta(itr.next(), SammoaEntityEnum.Flight, SammoaEntityEnum.TransectFlight);
+ assertAssociationMeta(itr.next(), SammoaEntityEnum.TransectFlight, SammoaEntityEnum.ObserverPosition);
+ assertAssociationMeta(itr.next(), SammoaEntityEnum.Route, SammoaEntityEnum.ObserverPosition);
+ }
+
+ protected void assertAssociationMeta(AssociationMeta<SammoaEntityEnum> meta,
+ SammoaEntityEnum source,
+ SammoaEntityEnum target) {
+ Assert.assertNotNull(meta);
+ Assert.assertEquals(source, meta.getSource());
+ Assert.assertEquals(target, ((AssociationMeta) meta).getTarget());
+ }
+
+ protected void assertTableMeta(TableMeta<SammoaEntityEnum> meta,
+ SammoaEntityEnum source) {
+ Assert.assertNotNull(meta);
+ Assert.assertEquals(source, meta.getSource());
+ }
+}
Property changes on: trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetaTest.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Deleted: trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetasTest.java
===================================================================
--- trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetasTest.java 2012-08-22 09:08:00 UTC (rev 456)
+++ trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetasTest.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -1,97 +0,0 @@
-package fr.ulr.sammoa.persistence;
-/*
- * #%L
- * SAMMOA :: Persistence
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2012 UMS 3462, Code Lutin
- * %%
- * 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%
- */
-
-import com.google.common.collect.Multimap;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.nuiton.topia.persistence.metadata.DbMeta;
-import org.nuiton.topia.persistence.metadata.MetaFilenameAware;
-
-/**
- * Tests the{@link SammoaDbMetas}.
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @since 0.6
- */
-public class SammoaDbMetasTest {
-
- protected DbMeta<SammoaEntityEnum> dbMetas;
-
-
- @Before
- public void setUp() throws Exception {
- dbMetas = SammoaDbMetas.newDbMetas(new SammoaPersistenceHelper());
-
- }
-
- @Test
- public void getAllEntries() throws Exception {
-
- MetaFilenameAware<SammoaEntityEnum>[] entries =
- SammoaDbMetas.getAllEntries(dbMetas);
- Assert.assertNotNull(entries);
- Assert.assertEquals(SammoaDbMetas.getReferenceTypes().length +
- SammoaDbMetas.getDataTypes().length +
- 4 /* (data associations) */,
- entries.length);
- }
-
- @Test
- public void getReferencialEntries() throws Exception {
-
- MetaFilenameAware<SammoaEntityEnum>[] entries =
- SammoaDbMetas.getReferencialEntries(dbMetas);
-
- Assert.assertNotNull(entries);
- Assert.assertEquals(SammoaDbMetas.getReferenceTypes().length,
- entries.length);
- }
-
- @Test
- public void getDataEntries() throws Exception {
-
- MetaFilenameAware<SammoaEntityEnum>[] entries =
- SammoaDbMetas.getDataEntries(dbMetas);
- Assert.assertNotNull(entries);
- Assert.assertEquals(SammoaDbMetas.getDataTypes().length,
- entries.length);
- }
-
- @Test
- public void getDataAssociationsEntries() throws Exception {
-
- Multimap<SammoaEntityEnum, MetaFilenameAware<SammoaEntityEnum>> entries =
- SammoaDbMetas.getDataAssociationsEntries(dbMetas);
- Assert.assertNotNull(entries);
- Assert.assertEquals(4, entries.size());
- Assert.assertTrue(entries.containsKey(SammoaEntityEnum.TransectFlight));
- Assert.assertEquals(1, entries.get(SammoaEntityEnum.TransectFlight).size());
- Assert.assertTrue(entries.containsKey(SammoaEntityEnum.Flight));
- Assert.assertEquals(2, entries.get(SammoaEntityEnum.Flight).size());
- Assert.assertTrue(entries.containsKey(SammoaEntityEnum.Route));
- Assert.assertEquals(1, entries.get(SammoaEntityEnum.Route).size());
- }
-}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java 2012-08-22 09:08:00 UTC (rev 456)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -194,12 +194,16 @@
ImportApplicationUIModel model = getModel();
List<FlightImportEntry> flightImportEntryList;
+ boolean existingCampaign;
Campaign campaign;
+
+
if (storage == null) {
// willReset model
flightImportEntryList = null;
campaign = null;
+ existingCampaign = false;
} else {
@@ -211,7 +215,7 @@
campaign = referentialService.getCampaignByNaturalId(naturalId);
- boolean existingCampaign = campaign != null;
+ existingCampaign = campaign != null;
if (logger.isInfoEnabled()) {
logger.info("Is campaign exist ? {}", existingCampaign);
@@ -243,7 +247,17 @@
}
}
- model.setCampaignExist(campaign != null);
+ CampaignStorage oldStorage;
+
+ if (existingCampaign) {
+
+ oldStorage = referentialService.getCampaignStorage(campaign.getTopiaId());
+ } else {
+ oldStorage = null;
+ }
+
+ model.setOldStorage(oldStorage);
+ model.setCampaignExist(existingCampaign);
model.setFlightEntries(flightImportEntryList);
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java 2012-08-22 09:08:00 UTC (rev 456)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java 2012-08-22 16:20:46 UTC (rev 457)
@@ -26,6 +26,7 @@
import com.google.common.collect.Lists;
import fr.ulr.sammoa.application.io.CampaignStorage;
import fr.ulr.sammoa.application.io.input.application.ImportApplicationModel;
+import fr.ulr.sammoa.persistence.Flight;
import org.jdesktop.beans.AbstractSerializableBean;
import java.io.File;
@@ -51,12 +52,17 @@
public static final String PROPERTY_STORAGE = "storage";
+ public static final String PROPERTY_OLD_STORAGE = "oldStorage";
+
/** File to import. */
protected File importFile;
/** Loaded campaign storage. */
protected CampaignStorage storage;
+ /** Old existing campaign storage. */
+ protected CampaignStorage oldStorage;
+
/** Is campaign exists ? */
protected boolean campaignExist;
@@ -93,6 +99,14 @@
firePropertyChange(PROPERTY_IMPORT_FILE_LOADED, false, isImportFileLoaded());
}
+ public CampaignStorage getOldStorage() {
+ return oldStorage;
+ }
+
+ public void setOldStorage(CampaignStorage oldStorage) {
+ this.oldStorage = oldStorage;
+ }
+
public boolean isCampaignExist() {
return campaignExist;
}
@@ -115,18 +129,26 @@
public ImportApplicationModel toModel() {
List<String> flightIds = Lists.newArrayList();
+ List<String> flightToRemoveIds = Lists.newArrayList();
for (FlightImportEntry entry : getFlightEntries()) {
if (!campaignExist || entry.isTreat()) {
//flight to import
flightIds.add(entry.getFlightStorage().getId());
+
+ Flight existingFlight = entry.getExistingFlight();
+ if (existingFlight!=null) {
+ flightToRemoveIds.add(existingFlight.getTopiaId());
+ }
}
}
ImportApplicationModel result = ImportApplicationModel.newModel(
getStorage(),
- flightIds
+ getOldStorage(),
+ flightIds,
+ flightToRemoveIds
);
return result;
}
Modified: trunk/src/site/rst/import-export.rst
===================================================================
--- trunk/src/site/rst/import-export.rst 2012-08-22 09:08:00 UTC (rev 456)
+++ trunk/src/site/rst/import-export.rst 2012-08-22 16:20:46 UTC (rev 457)
@@ -724,7 +724,16 @@
- Sector : sectorNumber, campaign^
- Strate : strateType, sector^
- Transect : name, strate^
+
- Flight : systemId, flightNumber, campaign^
+- GeoPoints
+- ObserverPosition
+- TransectFlight
+- Observation
+- Route
+
+
+
* Pas d'espèce commune entre deux régions ou sinon une copie sera effectuée
** Pas d'observateur commun entre deux campagnes ou sinon une copie sera effectuée
\ No newline at end of file
1
0
r456 - in trunk: sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/map sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map
by tchemit@users.forge.codelutin.com 22 Aug '12
by tchemit@users.forge.codelutin.com 22 Aug '12
22 Aug '12
Author: tchemit
Date: 2012-08-22 11:08:00 +0200 (Wed, 22 Aug 2012)
New Revision: 456
Url: http://forge.codelutin.com/repositories/revision/sammoa/456
Log:
fixes 1409: Probl?\195?\168me d'export d'observation (ne pas utiliser directement les sql.Date retourner par ToPIA)
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/map/ExportMapService.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapUIModel.java
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/map/ExportMapService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/map/ExportMapService.java 2012-08-22 08:37:49 UTC (rev 455)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/map/ExportMapService.java 2012-08-22 09:08:00 UTC (rev 456)
@@ -432,7 +432,8 @@
}
// compute route period
- Date beginTime = route.getBeginTime();
+ Date beginTime = new Date(route.getBeginTime().getTime());
+
Date routeEndTime;
if (nextRouteIndex < nbRoutes) {
@@ -446,6 +447,7 @@
routeEndTime = flight.getEndDate();
}
if (routeEndTime != null) {
+ routeEndTime = new Date(routeEndTime.getTime());
Preconditions.checkState(routeEndTime.after(beginTime),
String.format("Route debut de route %s - fin de route %s", beginTime, routeEndTime));
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapUIModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapUIModel.java 2012-08-22 08:37:49 UTC (rev 455)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapUIModel.java 2012-08-22 09:08:00 UTC (rev 456)
@@ -323,12 +323,13 @@
if (beginDate == null || beginDate.before(campaignBeginDate)) {
beginDate = campaignBeginDate;
}
+ beginDate = new Date(beginDate.getTime());
Date endDate = getEndDate();
Date campaignEndDate = getSelectedCampaign().getEndDate();
if (endDate == null || endDate.after(campaignEndDate)) {
endDate = campaignEndDate;
}
-
+ endDate = new Date(endDate.getTime());
ExportMapModel result = ExportMapModel.newModel(
getExportDirectory(),
filename,
1
0
r455 - in trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application: flightController io
by fdesbois@users.forge.codelutin.com 22 Aug '12
by fdesbois@users.forge.codelutin.com 22 Aug '12
22 Aug '12
Author: fdesbois
Date: 2012-08-22 10:37:49 +0200 (Wed, 22 Aug 2012)
New Revision: 455
Url: http://forge.codelutin.com/repositories/revision/sammoa/455
Log:
Move audioFile construction in FlightStorage
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java 2012-08-21 16:12:32 UTC (rev 454)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java 2012-08-22 08:37:49 UTC (rev 455)
@@ -782,14 +782,9 @@
protected void saveAudio(long delay) {
- String fileName = String.format(
- "%1$tF-%1$tH-%1$tM-%1$tS.%2$s.%3$s",
- currentRoute.getBeginTime(),
- currentRoute.getTopiaId(),
- getAudioRecorder().getOutputType().getExtension()
- );
+ String extension = getAudioRecorder().getOutputType().getExtension();
- File audioFile = flightStorage.getAudioFile(fileName);
+ File audioFile = flightStorage.getAudioFile(currentRoute, extension);
getAudioRecorder().record(audioFile, delay);
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java 2012-08-21 16:12:32 UTC (rev 454)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java 2012-08-22 08:37:49 UTC (rev 455)
@@ -29,6 +29,7 @@
import fr.ulr.sammoa.persistence.Flight;
import fr.ulr.sammoa.persistence.Region;
import org.apache.commons.lang3.builder.ToStringBuilder;
+import fr.ulr.sammoa.persistence.Route;
import org.nuiton.util.decorator.Decorator;
import java.io.File;
@@ -52,8 +53,16 @@
return new File(getDirectory(), "audio");
}
- public File getAudioFile(String filename) {
- return new File(getAudioDirectory(), filename);
+ public File getAudioFile(Route route, String ext) {
+
+ String fileName = String.format(
+ "%1$tF-%1$tH-%1$tM-%1$tS.%2$s.%3$s",
+ route.getBeginTime(),
+ route.getTopiaId(),
+ ext
+ );
+
+ return new File(getAudioDirectory(), fileName);
}
@Override
1
0
21 Aug '12
Author: tchemit
Date: 2012-08-21 18:12:32 +0200 (Tue, 21 Aug 2012)
New Revision: 454
Url: http://forge.codelutin.com/repositories/revision/sammoa/454
Log:
refs #1269: Import/Export base H2 (begin of import (referential are ok now)) + use last api from topia
Added:
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistenceHelper.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightImportEntry.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightTableModel.java
trunk/sammoa-ui-swing/src/main/resources/icons/action-information.png
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ReferentialService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationModel.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMetas.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java
trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetasTest.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/StartApp.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.css
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.jaxx
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/java-info.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/java-info.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java
trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -970,4 +970,17 @@
}
}
}
+
+ public Flight getFlightByNaturalId(Map<String, Object> naturalId) {
+ TopiaContext tx = beginTransaction();
+ try {
+ FlightDAO dao = SammoaDAOHelper.getFlightDAO(tx);
+ Flight result = dao.findByProperties(naturalId);
+ return result;
+ } catch (TopiaException e) {
+ throw new SammoaTechnicalException(e);
+ } finally {
+ endTransaction(tx);
+ }
+ }
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ReferentialService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ReferentialService.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ReferentialService.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -55,6 +55,7 @@
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import java.util.Set;
/**
@@ -64,6 +65,10 @@
*/
public class ReferentialService extends SammoaServiceSupport {
+ //------------------------------------------------------------------------//
+ //-- Region methods ------------------------------------------------------//
+ //------------------------------------------------------------------------//
+
public List<Region> getRegions() {
TopiaContext transaction = beginTransaction();
@@ -128,6 +133,45 @@
}
}
+ //------------------------------------------------------------------------//
+ //-- Species methods -----------------------------------------------------//
+ //------------------------------------------------------------------------//
+
+ public List<Species> getAllSpecies(Campaign campaign) {
+ Preconditions.checkNotNull(campaign);
+
+ TopiaContext transaction = beginTransaction();
+ try {
+ SpeciesDAO dao = SammoaDAOHelper.getSpeciesDAO(transaction);
+ List<Species> result = dao.findAllByRegion(campaign.getRegion());
+ return result;
+
+ } catch (TopiaException e) {
+ throw new TopiaRuntimeException(e);
+ } finally {
+ endTransaction(transaction);
+ }
+ }
+
+ public Collection<Species> getAllValidSpecies() {
+
+ TopiaContext transaction = beginTransaction();
+ try {
+
+ SpeciesDAO dao = SammoaDAOHelper.getSpeciesDAO(transaction);
+ Collection<Species> result = dao.findAllByLocalCreation(false);
+ return result;
+ } catch (TopiaException e) {
+ throw new TopiaRuntimeException(e);
+ } finally {
+ endTransaction(transaction);
+ }
+ }
+
+ //------------------------------------------------------------------------//
+ //-- Campaign methods ----------------------------------------------------//
+ //------------------------------------------------------------------------//
+
public List<Campaign> getCampaigns() {
TopiaContext transaction = beginTransaction();
@@ -144,6 +188,34 @@
}
}
+ public Campaign getCampaignByNaturalId(Map<String, Object> naturalId) {
+ TopiaContext tx = beginTransaction();
+ try {
+ CampaignDAO dao = SammoaDAOHelper.getCampaignDAO(tx);
+ Campaign result = dao.findByProperties(naturalId);
+ return result;
+ } catch (TopiaException e) {
+ throw new SammoaTechnicalException(e);
+ } finally {
+ endTransaction(tx);
+ }
+ }
+
+ public Campaign getCampaign(String topiaId) {
+ Preconditions.checkNotNull(topiaId);
+
+ TopiaContext transaction = beginTransaction();
+ try {
+ CampaignDAO dao = SammoaDAOHelper.getCampaignDAO(transaction);
+ Campaign result = dao.findByTopiaId(topiaId);
+ return result;
+ } catch (TopiaException e) {
+ throw new TopiaRuntimeException(e);
+ } finally {
+ endTransaction(transaction);
+ }
+ }
+
public String saveCampaign(Campaign campaign) {
Preconditions.checkNotNull(campaign);
@@ -205,21 +277,73 @@
}
}
- public Campaign getCampaign(String topiaId) {
- Preconditions.checkNotNull(topiaId);
+ public void deleteCampaign(String campaignId) {
+ Preconditions.checkNotNull(campaignId);
- TopiaContext transaction = beginTransaction();
+ TopiaContext tx = beginTransaction();
try {
- CampaignDAO dao = SammoaDAOHelper.getCampaignDAO(transaction);
- Campaign result = dao.findByTopiaId(topiaId);
- return result;
+ CampaignDAO dao = SammoaDAOHelper.getCampaignDAO(tx);
+
+ Campaign campaign = dao.findByTopiaId(campaignId);
+
+ Preconditions.checkNotNull(campaign);
+
+ FlightService flightService = getService(FlightService.class);
+
+ // delete all flights from db
+ List<Flight> flights = flightService.getFlights(tx, campaign);
+
+ for (Flight flight : flights) {
+ flightService.deleteFlightInDb(tx, flight.getTopiaId());
+ }
+
+ // delete observers and observerPositions
+ ObserverDAO observerDAO = SammoaDAOHelper.getObserverDAO(tx);
+ List<Observer> observers = observerDAO.findAllByCampaign(campaign);
+ ObserverPositionDAO observerPositionDAO =
+ SammoaDAOHelper.getObserverPositionDAO(tx);
+ Set<ObserverPosition> positions = Sets.newHashSet();
+ for (Observer observer : observers) {
+ positions.addAll(observerPositionDAO.findAllByObserver(observer));
+ }
+ observerDAO.deleteAll(observers);
+ observerPositionDAO.deleteAll(positions);
+
+ // delete transects
+ List<Transect> transects = getAllTransects(tx, campaign);
+ TransectDAO transectDAO = SammoaDAOHelper.getTransectDAO(tx);
+ transectDAO.deleteAll(transects);
+
+ // delete strates
+ List<Strate> strates = getAllStrates(tx, campaign);
+ StrateDAO strateDAO = SammoaDAOHelper.getStrateDAO(tx);
+ strateDAO.deleteAll(strates);
+
+ // delete sectors
+ SectorDAO sectorDAO = SammoaDAOHelper.getSectorDAO(tx);
+ List<Sector> sectors = sectorDAO.findAllByCampaign(campaign);
+ sectorDAO.deleteAll(sectors);
+
+ // delete campaign
+ dao.delete(campaign);
+
+ // commit
+ tx.commitTransaction();
+
} catch (TopiaException e) {
- throw new TopiaRuntimeException(e);
+ throw new SammoaTechnicalException(e);
} finally {
- endTransaction(transaction);
+ endTransaction(tx);
}
+
+ // delete campaign storage
+ deleteCampaignStorage(campaignId);
}
+ //------------------------------------------------------------------------//
+ //-- Transect methods ----------------------------------------------------//
+ //------------------------------------------------------------------------//
+
public List<Transect> getAllTransects(Campaign campaign) {
Preconditions.checkNotNull(campaign);
@@ -247,63 +371,23 @@
}
}
- public List<Strate> getAllStrates(Campaign campaign) {
- Preconditions.checkNotNull(campaign);
+ public Transect getTransect(String transectId) {
+ Preconditions.checkNotNull(transectId);
TopiaContext transaction = beginTransaction();
try {
- List<Strate> result = getAllStrates(transaction, campaign);
- return result;
- } finally {
- endTransaction(transaction);
- }
- }
-
- public List<Strate> getAllStrates(TopiaContext tx, Campaign campaign) {
- Preconditions.checkNotNull(tx);
- Preconditions.checkNotNull(campaign);
-
- try {
- StrateDAO dao = SammoaDAOHelper.getStrateDAO(tx);
- List<Strate> result = dao.findAllByCampaignOrderedByCode(campaign);
+ TransectDAO dao = SammoaDAOHelper.getTransectDAO(transaction);
+ Transect result = dao.findByTopiaId(transectId);
return result;
} catch (TopiaException e) {
throw new TopiaRuntimeException(e);
- }
- }
- public List<Species> getAllSpecies(Campaign campaign) {
- Preconditions.checkNotNull(campaign);
-
- TopiaContext transaction = beginTransaction();
- try {
- SpeciesDAO dao = SammoaDAOHelper.getSpeciesDAO(transaction);
- List<Species> result = dao.findAllByRegion(campaign.getRegion());
- return result;
-
- } catch (TopiaException e) {
- throw new TopiaRuntimeException(e);
} finally {
endTransaction(transaction);
}
}
- public Collection<Species> getAllValidSpecies() {
-
- TopiaContext transaction = beginTransaction();
- try {
-
- SpeciesDAO dao = SammoaDAOHelper.getSpeciesDAO(transaction);
- Collection<Species> result = dao.findAllByLocalCreation(false);
- return result;
- } catch (TopiaException e) {
- throw new TopiaRuntimeException(e);
- } finally {
- endTransaction(transaction);
- }
- }
-
public String createTransect(Transect transect) {
Preconditions.checkNotNull(transect);
@@ -334,23 +418,40 @@
}
}
- public Transect getTransect(String transectId) {
- Preconditions.checkNotNull(transectId);
+ //------------------------------------------------------------------------//
+ //-- Strate methods ------------------------------------------------------//
+ //------------------------------------------------------------------------//
+ public List<Strate> getAllStrates(Campaign campaign) {
+ Preconditions.checkNotNull(campaign);
+
TopiaContext transaction = beginTransaction();
try {
-
- TransectDAO dao = SammoaDAOHelper.getTransectDAO(transaction);
- Transect result = dao.findByTopiaId(transectId);
+ List<Strate> result = getAllStrates(transaction, campaign);
return result;
- } catch (TopiaException e) {
- throw new TopiaRuntimeException(e);
} finally {
endTransaction(transaction);
}
}
+ public List<Strate> getAllStrates(TopiaContext tx, Campaign campaign) {
+ Preconditions.checkNotNull(tx);
+ Preconditions.checkNotNull(campaign);
+
+ try {
+ StrateDAO dao = SammoaDAOHelper.getStrateDAO(tx);
+ List<Strate> result = dao.findAllByCampaignOrderedByCode(campaign);
+ return result;
+ } catch (TopiaException e) {
+ throw new TopiaRuntimeException(e);
+ }
+ }
+
+ //------------------------------------------------------------------------//
+ //-- Observer methods ----------------------------------------------------//
+ //------------------------------------------------------------------------//
+
public List<Observer> getAllObservers(Campaign campaign) {
Preconditions.checkNotNull(campaign);
@@ -372,69 +473,8 @@
}
}
- public void deleteCampaign(String campaignId) {
- Preconditions.checkNotNull(campaignId);
- TopiaContext tx = beginTransaction();
- try {
- CampaignDAO dao = SammoaDAOHelper.getCampaignDAO(tx);
- Campaign campaign = dao.findByTopiaId(campaignId);
-
- Preconditions.checkNotNull(campaign);
-
- FlightService flightService = getService(FlightService.class);
-
- // delete all flights from db
- List<Flight> flights = flightService.getFlights(tx, campaign);
-
- for (Flight flight : flights) {
- flightService.deleteFlightInDb(tx, flight.getTopiaId());
- }
-
- // delete observers and observerPositions
- ObserverDAO observerDAO = SammoaDAOHelper.getObserverDAO(tx);
- List<Observer> observers = observerDAO.findAllByCampaign(campaign);
- ObserverPositionDAO observerPositionDAO =
- SammoaDAOHelper.getObserverPositionDAO(tx);
- Set<ObserverPosition> positions = Sets.newHashSet();
- for (Observer observer : observers) {
- positions.addAll(observerPositionDAO.findAllByObserver(observer));
- }
- observerDAO.deleteAll(observers);
- observerPositionDAO.deleteAll(positions);
-
- // delete transects
- List<Transect> transects = getAllTransects(tx, campaign);
- TransectDAO transectDAO = SammoaDAOHelper.getTransectDAO(tx);
- transectDAO.deleteAll(transects);
-
- // delete strates
- List<Strate> strates = getAllStrates(tx, campaign);
- StrateDAO strateDAO = SammoaDAOHelper.getStrateDAO(tx);
- strateDAO.deleteAll(strates);
-
- // delete sectors
- SectorDAO sectorDAO = SammoaDAOHelper.getSectorDAO(tx);
- List<Sector> sectors = sectorDAO.findAllByCampaign(campaign);
- sectorDAO.deleteAll(sectors);
-
- // delete campaign
- dao.delete(campaign);
-
- // commit
- tx.commitTransaction();
-
- } catch (TopiaException e) {
- throw new SammoaTechnicalException(e);
- } finally {
- endTransaction(tx);
- }
-
- // delete campaign storage
- deleteCampaignStorage(campaignId);
- }
-
public void deleteAllData() {
Iterable<String> campaignIds;
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -23,13 +23,23 @@
* #L%
*/
+import com.google.common.base.Function;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import fr.ulr.sammoa.application.DecoratorService;
import fr.ulr.sammoa.persistence.Campaign;
+import fr.ulr.sammoa.persistence.Region;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
+import org.apache.commons.lang3.builder.ToStringBuilder;
import org.nuiton.util.decorator.Decorator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.File;
+import java.util.Iterator;
+import java.util.Map;
import java.util.Set;
/**
@@ -38,10 +48,16 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.6
*/
-public class CampaignStorage extends SammoaStorage<Campaign> {
+public class CampaignStorage extends SammoaStorage<Campaign> implements Iterable<FlightStorage> {
private static final long serialVersionUID = 1L;
+ /** Logger. */
+ private static final Logger logger =
+ LoggerFactory.getLogger(CampaignStorage.class);
+
+ protected Map<String, FlightStorage> flightStorages;
+
CampaignStorage(File dataDirectory, String id) {
super(dataDirectory, id, "campaign.properties");
}
@@ -64,14 +80,20 @@
public Set<String> getFlightIds() {
String[] files = getFlightDirectory().list(DirectoryFileFilter.INSTANCE);
- Set<String> result = Sets.newHashSet(files);
+ Set<String> result = files == null ?
+ Sets.<String>newHashSet() : Sets.newHashSet(files);
return result;
}
public FlightStorage getFlightStorage(String flightId) {
- FlightStorage flightStorage =
- new FlightStorage(getFlightDirectory(), flightId);
- return flightStorage;
+ Preconditions.checkNotNull(flightId);
+ FlightStorage result = getFlightStorages().get(flightId);
+ if (result == null) {
+
+ // create this new flight storage
+ addFlightInStore(result = getFlightToStorage().apply(flightId));
+ }
+ return result;
}
@Override
@@ -81,7 +103,63 @@
Decorator<Campaign> decorator =
decoratorService.getDecoratorByType(Campaign.class);
- String campaignName = decorator.toString(campaign);
- getProperties().put("name", campaignName);
+ putInProperties("name", decorator.toString(campaign));
+ putInProperties(Campaign.PROPERTY_CODE, campaign.getCode());
+ putInProperties(Campaign.PROPERTY_REGION + "." +
+ Region.PROPERTY_CODE, campaign.getRegion().getCode());
}
+
+ @Override
+ public Map<String, Object> getNaturalId() {
+ Map<String, Object> result = Maps.newHashMap();
+ addInMap(Campaign.PROPERTY_CODE, result);
+ addInMap(Campaign.PROPERTY_REGION + "." + Region.PROPERTY_CODE, result);
+ return result;
+ }
+
+ @Override
+ public Iterator<FlightStorage> iterator() {
+ return getFlightStorages().values().iterator();
+ }
+
+ protected Map<String, FlightStorage> getFlightStorages() {
+ if (flightStorages == null) {
+
+ flightStorages = Maps.newTreeMap();
+ for (FlightStorage s : Iterables.transform(getFlightIds(), getFlightToStorage())) {
+ addFlightInStore(s);
+ }
+ }
+ return flightStorages;
+ }
+
+ protected transient Function<String, FlightStorage> flightToStorage;
+
+ protected Function<String, FlightStorage> getFlightToStorage() {
+ if (flightToStorage == null) {
+ flightToStorage = new Function<String, FlightStorage>() {
+ @Override
+ public FlightStorage apply(String input) {
+ return new FlightStorage(getFlightDirectory(), input);
+ }
+ };
+ }
+ return flightToStorage;
+ }
+
+ protected void addFlightInStore(FlightStorage flightStorage) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Add flightStorage {} to store {}", flightStorage, this);
+ }
+ flightStorages.put(flightStorage.getId(), flightStorage);
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this).
+ append("directory", getDirectory()).
+ append("id", getId()).
+ append("nbFlightStoragesLoaded", flightStorages == null ? 0 : flightStorages.size()).
+ toString();
+ }
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -23,12 +23,16 @@
* #L%
*/
+import com.google.common.collect.Maps;
import fr.ulr.sammoa.application.DecoratorService;
+import fr.ulr.sammoa.persistence.Campaign;
import fr.ulr.sammoa.persistence.Flight;
+import fr.ulr.sammoa.persistence.Region;
+import org.apache.commons.lang3.builder.ToStringBuilder;
import org.nuiton.util.decorator.Decorator;
import java.io.File;
-import java.util.Properties;
+import java.util.Map;
/**
* Storage for a flight.
@@ -53,13 +57,33 @@
}
@Override
+ public Map<String, Object> getNaturalId() {
+ Map<String, Object> result = Maps.newHashMap();
+ addInMap(Flight.PROPERTY_SYSTEM_ID, result);
+ addIntInMap(Flight.PROPERTY_FLIGHT_NUMBER, result);
+ addInMap(Flight.PROPERTY_CAMPAIGN + "." + Campaign.PROPERTY_CODE, result);
+ addInMap(Flight.PROPERTY_CAMPAIGN + "." + Campaign.PROPERTY_REGION + "." + Region.PROPERTY_CODE, result);
+ return result;
+ }
+
+ @Override
public void fillProperties(Flight flight,
DecoratorService decoratorService) {
- Properties properties = getProperties();
Decorator<Flight> decorator =
decoratorService.getDecoratorByType(Flight.class);
- String flightName = decorator.toString(flight);
- properties.put("name", flightName);
+ putInProperties("name", decorator.toString(flight));
+ putInProperties(Flight.PROPERTY_SYSTEM_ID, flight.getSystemId());
+ putInProperties(Flight.PROPERTY_FLIGHT_NUMBER, flight.getFlightNumber());
+ putInProperties(Flight.PROPERTY_CAMPAIGN + "." + Campaign.PROPERTY_CODE, flight.getCampaign().getCode());
+ putInProperties(Flight.PROPERTY_CAMPAIGN + "." + Campaign.PROPERTY_REGION + "." + Region.PROPERTY_CODE, flight.getCampaign().getRegion().getCode());
}
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this).
+ append("directory", getDirectory()).
+ append("id", getId()).
+ toString();
+ }
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -34,6 +34,7 @@
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
+import java.util.Map;
import java.util.Properties;
/**
@@ -60,8 +61,11 @@
/** Name of the properties file of the storage. */
private final String propertiesFilename;
- public abstract void fillProperties(E entity, DecoratorService decoratorService);
+ public abstract Map<String, Object> getNaturalId();
+ public abstract void fillProperties(E entity,
+ DecoratorService decoratorService);
+
SammoaStorage(File dataDirectory,
String id,
String propertiesFilename) {
@@ -111,4 +115,22 @@
public void delete() throws IOException {
FileUtils.deleteDirectory(getDirectory());
}
+
+ protected void addInMap(String key, Map<String, Object> result) {
+ String property = getProperties().getProperty(key);
+ result.put(key, property);
+ }
+
+ protected void addIntInMap(String key, Map<String, Object> result) {
+ String property = getProperties().getProperty(key);
+ result.put(key, Integer.valueOf(property));
+ }
+
+ protected void putInProperties(String key, Object value) {
+ getProperties().put(key, String.valueOf(value));
+ }
+
+ public String getName() {
+ return getProperties().getProperty("name");
+ }
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -109,4 +109,18 @@
FileUtils.forceMkdir(storage.getDirectory());
FileUtils.forceMkdir(storage.getAudioDirectory());
}
+
+ public static void loadProperties(CampaignStorage storage) {
+
+ try {
+ storage.loadProperties();
+
+ for (FlightStorage flightStorage : storage) {
+ flightStorage.loadProperties();
+ }
+ } catch (IOException e) {
+ throw new SammoaTechnicalException(
+ "Could not load storage properties file", e);
+ }
+ }
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationModel.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationModel.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationModel.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -24,38 +24,36 @@
* #L%
*/
-import com.google.common.collect.Lists;
+import fr.ulr.sammoa.application.io.CampaignStorage;
-import java.io.File;
-import java.util.List;
-
/**
- * Model of sammoa import.
+ * Model of application import.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 0.6
*/
public class ImportApplicationModel {
- public static ImportApplicationModel newModel(File importFile,
- List<String> flightIds) {
+ public static ImportApplicationModel newModel(CampaignStorage storage,
+ Iterable<String> flightIds) {
ImportApplicationModel result = new ImportApplicationModel();
- result.importFile = importFile;
- result.flightIds = Lists.newArrayList(flightIds);
+ result.storage = storage;
+ result.flightIds = flightIds;
return result;
}
- /** Import file that contains all the stuff to import. */
- protected File importFile;
+ /** Loaded campaign storage. */
+ protected CampaignStorage storage;
+
/** All flight ids to import from the import file. */
- protected List<String> flightIds;
+ protected Iterable<String> flightIds;
- public File getImportFile() {
- return importFile;
+ public CampaignStorage getStorage() {
+ return storage;
}
- public List<String> getFlightIds() {
+ public Iterable<String> getFlightIds() {
return flightIds;
}
}
\ No newline at end of file
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -23,19 +23,45 @@
* #L%
*/
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.io.Files;
import fr.ulr.sammoa.application.SammoaServiceSupport;
import fr.ulr.sammoa.application.SammoaTechnicalException;
import fr.ulr.sammoa.application.io.CampaignStorage;
import fr.ulr.sammoa.application.io.SammoaStorages;
+import fr.ulr.sammoa.persistence.SammoaDbMetas;
+import fr.ulr.sammoa.persistence.SammoaEntityEnum;
+import fr.ulr.sammoa.persistence.SammoaPersistenceHelper;
+import org.apache.commons.io.Charsets;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.persistence.TopiaDAO;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.csv.EntityCsvModel;
+import org.nuiton.topia.persistence.csv.in.ImportModelFactory;
+import org.nuiton.topia.persistence.csv.in.TopiaCsvImports;
+import org.nuiton.topia.persistence.metadata.AssociationMeta;
+import org.nuiton.topia.persistence.metadata.ColumnMeta;
+import org.nuiton.topia.persistence.metadata.DbMeta;
+import org.nuiton.topia.persistence.metadata.MetaFilenameAware;
+import org.nuiton.topia.persistence.metadata.TableMeta;
import org.nuiton.util.TimeLog;
import org.nuiton.util.ZipUtil;
+import org.nuiton.util.csv.Import;
+import org.nuiton.util.csv.ImportModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
+import java.io.Reader;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
/**
* Service to import sammoa files.
@@ -52,24 +78,6 @@
private static final TimeLog timeLog =
new TimeLog(ImportApplicationService.class);
- public void importApplication(ImportApplicationModel model) {
-
- if (logger.isInfoEnabled()) {
- logger.info("Start Application import to {} :: {}",
- model.getImportFile());
- }
-
- long startTime = TimeLog.getTime();
-
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- //BOUH!
- }
-
- timeLog.log(startTime, "importApplication", "after Callback execution");
- }
-
public CampaignStorage loadCampaignStorage(File file) {
File tmpDirectory = context.getConfig().getTmpDirectory();
File deflateDirectory = new File(tmpDirectory, file.getName() + "_" + System.nanoTime());
@@ -88,6 +96,198 @@
String campaignId = campaignDirectory.getName();
CampaignStorage storage = SammoaStorages.getCampaignStorage(
deflateDirectory, campaignId);
+
+ SammoaStorages.loadProperties(storage);
+
return storage;
}
+
+ public void importApplication(ImportApplicationModel model) {
+
+ CampaignStorage storage = model.getStorage();
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Start Application import to {} :: {}",
+ storage);
+ }
+
+ long startTime = TimeLog.getTime();
+
+ DbMeta<SammoaEntityEnum> dbMetas = persistence.getDbMetas();
+ SammoaPersistenceHelper persistenceHelper = persistence.getPersistenceHelper();
+ MetaFilenameAware<SammoaEntityEnum>[] referencialEntries = SammoaDbMetas.getReferencialEntries(dbMetas);
+
+ List<String> missingEntries = Lists.newArrayList();
+ Map<MetaFilenameAware<SammoaEntityEnum>, File> fileMap = TopiaCsvImports.discoverEntries(
+ referencialEntries,
+ storage.getCsvDirectory(),
+ missingEntries);
+
+ Preconditions.checkState(
+ missingEntries.isEmpty(),
+ "It miss some csv files for referential import :" +
+ missingEntries);
+
+ Map<SammoaEntityEnum, Map<String, TopiaEntity>> universe = Maps.newTreeMap();
+ SammoaImportModelFactory modelFactory = new SammoaImportModelFactory(universe);
+
+ TopiaContext tx = beginTransaction();
+
+ try {
+
+ for (MetaFilenameAware<SammoaEntityEnum> entry : referencialEntries) {
+
+ File entryFile = fileMap.get(entry);
+ TopiaDAO<? extends TopiaEntity> dao = persistenceHelper.getDAO(tx, entry.getSource().getContract());
+ importReferential(dao,
+ modelFactory,
+ entryFile,
+ (TableMeta<SammoaEntityEnum>) entry);
+ }
+
+ tx.commitTransaction();
+
+ startTime = timeLog.log(startTime, "importApplication", "after referential import");
+ } catch (TopiaException e) {
+ throw new SammoaTechnicalException("Could not import", e);
+ } catch (IOException e) {
+ throw new SammoaTechnicalException("Could not import", e);
+ } finally {
+ endTransaction(tx);
+ }
+
+ try {
+ storage.delete();
+ } catch (IOException e) {
+ throw new SammoaTechnicalException(
+ "Could not delete storage", e);
+ }
+
+ timeLog.log(startTime, "importApplication", "after Callback execution");
+ }
+
+ protected <E extends TopiaEntity> void importReferential(TopiaDAO<E> dao,
+ SammoaImportModelFactory modelFactory,
+ File entryFile,
+ TableMeta<SammoaEntityEnum> meta) throws IOException, TopiaException {
+
+ SammoaEntityEnum entityEnum = meta.getSource();
+
+ // create new universe
+ Map<String, TopiaEntity> universe = Maps.newTreeMap();
+ modelFactory.getUniverse().put(entityEnum, universe);
+
+ Reader reader = Files.newReader(entryFile, Charsets.UTF_8);
+ try {
+ long s0 = TimeLog.getTime();
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Will import " + meta);
+ }
+ ImportModel<TopiaEntity> model = modelFactory.buildForImport(meta);
+ Import<TopiaEntity> importer = Import.newImport(model, reader);
+ try {
+
+ for (TopiaEntity entity : importer) {
+
+ String topiaId = entity.getTopiaId();
+
+ Map<String, Object> properties = meta.prepareCreate(entity, null);
+ E existingEntity = dao.findByProperties(properties);
+ if (existingEntity == null) {
+
+ // new entity to create
+ E entityToSave = dao.create(properties);
+ String newTopiaId = entityToSave.getTopiaId();
+ Date topiaCreateDate = entityToSave.getTopiaCreateDate();
+ meta.copy(entity, entityToSave);
+ entityToSave.setTopiaId(newTopiaId);
+ entityToSave.setTopiaCreateDate(topiaCreateDate);
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Create entity [{} becomes {}] with naturalId {}", new Object[]{topiaId, newTopiaId, properties});
+ }
+ universe.put(topiaId, entityToSave);
+ } else {
+ // existing entity, nothing to create
+ // just add a ref into universe to make translation possible by foreign keys
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Existing entity [{}] with naturalId {}, do not create anything", topiaId, properties);
+ }
+
+ universe.put(topiaId, existingEntity);
+ }
+
+ }
+
+ } finally {
+ importer.close();
+ }
+
+ timeLog.log(s0, "importFile::done");
+
+ s0 = TimeLog.getTime();
+
+ persistence.flushTransaction(dao.getContext());
+
+ timeLog.log(s0, "importFile::flushTransaction");
+ } finally {
+ reader.close();
+ }
+ }
+
+ protected class SammoaImportModelFactory implements ImportModelFactory<SammoaEntityEnum> {
+
+ final Map<SammoaEntityEnum, Map<String, TopiaEntity>> universe;
+
+ private SammoaImportModelFactory(Map<SammoaEntityEnum, Map<String, TopiaEntity>> universe) {
+ this.universe = universe;
+ }
+
+ public Map<SammoaEntityEnum, Map<String, TopiaEntity>> getUniverse() {
+ return universe;
+ }
+
+ public <E extends TopiaEntity> Import<E> newModel(TableMeta<SammoaEntityEnum> meta, Reader reader) {
+ ImportModel<E> model = buildForImport(meta);
+ Import<E> importer = Import.newImport(model, reader);
+ return importer;
+ }
+
+ @Override
+ public <E extends TopiaEntity> ImportModel<E> buildForImport(TableMeta<SammoaEntityEnum> meta) {
+
+ EntityCsvModel<SammoaEntityEnum, E> model = EntityCsvModel.newModel(
+ config.getCsvSeparator(),
+ meta,
+ TopiaEntity.TOPIA_ID
+ );
+
+ for (ColumnMeta columnMeta : meta) {
+ String propertyName = columnMeta.getName();
+ Class<?> type = columnMeta.getType();
+ if (!columnMeta.isFK()) {
+ model.addDefaultColumn(propertyName, type);
+ } else {
+
+ Class<TopiaEntity> entityType = (Class<TopiaEntity>) type;
+ SammoaEntityEnum entityEnum = SammoaEntityEnum.valueOf(entityType);
+ Map<String, TopiaEntity> entitiesbyId = universe.get(entityEnum);
+ model.addForeignKeyForImport(propertyName, entityType, entitiesbyId);
+ }
+ }
+ return model;
+ }
+
+ @Override
+ public ImportModel<Map<String, Object>> buildForImport(AssociationMeta<SammoaEntityEnum> meta) {
+ return null;
+ }
+
+ @Override
+ public boolean isNMAssociationMeta(AssociationMeta<SammoaEntityEnum> meta) {
+ return false;
+ }
+ }
}
\ No newline at end of file
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -221,7 +221,7 @@
csvDirectory);
ExportEntityVisitor<SammoaEntityEnum> exportVisitor =
- ExportEntityVisitor.newVisitor(dbMetas.getEntityEnumProvider(),
+ ExportEntityVisitor.newVisitor(dbMetas.getPersistenceHelper(),
exportContexts);
FlightService flightService = getService(FlightService.class);
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMetas.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMetas.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMetas.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -28,12 +28,12 @@
import org.nuiton.topia.persistence.metadata.DbMeta;
import org.nuiton.topia.persistence.metadata.MetaFilenameAware;
import org.nuiton.topia.persistence.metadata.Metadatas;
-import org.nuiton.topia.persistence.metadata.TopiaEntityEnumProvider;
import java.util.List;
+import java.util.Map;
/**
- * TODO
+ * Useful methods aroun meta datas of sammoa entities.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 0.6
@@ -43,8 +43,8 @@
private static final SammoaEntityEnum[] EMPTY_ENTITY_TYPE_ARRAY =
new SammoaEntityEnum[0];
- public static DbMeta<SammoaEntityEnum> newDbMetas() {
- return DbMeta.newDbMeta(new SammoaTopiaEntityEnumProvider(),
+ public static DbMeta<SammoaEntityEnum> newDbMetas(SammoaPersistenceHelper persistenceHelper) {
+ return DbMeta.newDbMeta(persistenceHelper,
SammoaEntityEnum.values(),
EMPTY_ENTITY_TYPE_ARRAY
);
@@ -77,12 +77,12 @@
// with no dep
result.add(SammoaEntityEnum.Region);
+ result.add(SammoaEntityEnum.Species);
result.add(SammoaEntityEnum.Campaign);
- result.add(SammoaEntityEnum.Strate);
+ result.add(SammoaEntityEnum.Observer);
result.add(SammoaEntityEnum.Sector);
+ result.add(SammoaEntityEnum.Strate);
result.add(SammoaEntityEnum.Transect);
- result.add(SammoaEntityEnum.Observer);
- result.add(SammoaEntityEnum.Species);
return result.toArray(new SammoaEntityEnum[result.size()]);
}
@@ -108,6 +108,15 @@
return entities.toArray(new MetaFilenameAware[entities.size()]);
}
+ public static Map<SammoaEntityEnum, MetaFilenameAware<SammoaEntityEnum>> getReferencialEntriesByType(DbMeta<SammoaEntityEnum> dbMeta) {
+ List<MetaFilenameAware<SammoaEntityEnum>> entities = Lists.newArrayList();
+ List<MetaFilenameAware<SammoaEntityEnum>> associations = Lists.newArrayList();
+ entities.addAll(associations);
+ Metadatas.addEntries(dbMeta, entities, associations, getReferenceTypes());
+ return Metadatas.uniqueIndex(entities);
+ }
+
+
public static MetaFilenameAware<SammoaEntityEnum>[] getDataEntries(DbMeta<SammoaEntityEnum> dbMeta) {
List<MetaFilenameAware<SammoaEntityEnum>> entities = Lists.newArrayList();
@@ -124,17 +133,4 @@
return Metadatas.split(associations);
}
- /**
- * Implementation of {@link TopiaEntityEnumProvider} for Sammoa.
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @since 0.6
- */
- public static class SammoaTopiaEntityEnumProvider implements TopiaEntityEnumProvider<SammoaEntityEnum> {
-
- @Override
- public <E> SammoaEntityEnum getEntityEnum(Class<E> type) {
- return SammoaEntityEnum.valueOf(type);
- }
- }
}
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -30,6 +30,7 @@
import org.nuiton.topia.TopiaException;
import org.nuiton.topia.TopiaNotFoundException;
import org.nuiton.topia.TopiaRuntimeException;
+import org.nuiton.topia.framework.TopiaContextImplementor;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.metadata.DbMeta;
@@ -59,6 +60,8 @@
protected AutoSaveListener autoSaveListener;
+ protected SammoaPersistenceHelper persistenceHelper;
+
protected DbMeta<SammoaEntityEnum> dbMetas;
/**
@@ -191,9 +194,16 @@
}
}
+ public SammoaPersistenceHelper getPersistenceHelper() {
+ if (persistenceHelper == null) {
+ persistenceHelper = new SammoaPersistenceHelper();
+ }
+ return persistenceHelper;
+ }
+
public DbMeta<SammoaEntityEnum> getDbMetas() {
if (dbMetas == null) {
- dbMetas = SammoaDbMetas.newDbMetas();
+ dbMetas = SammoaDbMetas.newDbMetas(getPersistenceHelper());
}
return dbMetas;
}
@@ -228,4 +238,7 @@
}
}
+ public void flushTransaction(TopiaContext tx) throws TopiaException {
+ ((TopiaContextImplementor) tx).getHibernate().flush();
+ }
}
Added: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistenceHelper.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistenceHelper.java (rev 0)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistenceHelper.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -0,0 +1,31 @@
+package fr.ulr.sammoa.persistence;
+
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.TopiaRuntimeException;
+import org.nuiton.topia.persistence.TopiaDAO;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.TopiaPersistenceHelper;
+
+/**
+ * Implementation of {@link TopiaPersistenceHelper} for Sammoa.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+public class SammoaPersistenceHelper implements TopiaPersistenceHelper<SammoaEntityEnum> {
+
+ @Override
+ public <E extends TopiaEntity> SammoaEntityEnum getEntityEnum(Class<E> type) {
+ return SammoaEntityEnum.valueOf(type);
+ }
+
+ @Override
+ public <E extends TopiaEntity> TopiaDAO<E> getDAO(TopiaContext tx, Class<E> type) {
+ try {
+ return SammoaDAOHelper.<E, TopiaDAO<E>>getDAO(tx, type);
+ } catch (TopiaException e) {
+ throw new TopiaRuntimeException(e);
+ }
+ }
+}
Property changes on: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistenceHelper.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Modified: trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetasTest.java
===================================================================
--- trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetasTest.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetasTest.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -43,7 +43,7 @@
@Before
public void setUp() throws Exception {
- dbMetas = SammoaDbMetas.newDbMetas();
+ dbMetas = SammoaDbMetas.newDbMetas(new SammoaPersistenceHelper());
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/StartApp.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/StartApp.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/StartApp.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -35,6 +35,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.swing.UIManager;
+import java.awt.Color;
import java.io.File;
import java.io.IOException;
import java.util.Locale;
@@ -89,6 +91,8 @@
}
}
+ UIManager.put("BlockingLayerUI.blockingColor", new Color(50,50,50));
+
MainUI mainUI = new MainUI(context);
mainUI.setVisible(true);
}
Added: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightImportEntry.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightImportEntry.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightImportEntry.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -0,0 +1,71 @@
+package fr.ulr.sammoa.ui.swing.io.input.application;
+/*
+ * #%L
+ * SAMMOA :: UI Swing
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * 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%
+ */
+
+import fr.ulr.sammoa.application.io.FlightStorage;
+import fr.ulr.sammoa.persistence.Flight;
+import org.jdesktop.beans.AbstractSerializableBean;
+
+/**
+ * Define a flight storage entry found in storage to import with his optional
+ * existing flight from db.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+public class FlightImportEntry extends AbstractSerializableBean {
+
+ private static final long serialVersionUID = 1L;
+
+ /** The storage of the flight loaded from the sammoa file. */
+ protected final FlightStorage flightStorage;
+
+ /** The optional existing flight loaded from db. */
+ protected final Flight existingFlight;
+
+ /** Flag to treat or not the incoming flight. */
+ protected boolean treat;
+
+ public FlightImportEntry(FlightStorage flightStorage,
+ Flight existingFlight) {
+ this.flightStorage = flightStorage;
+ this.existingFlight = existingFlight;
+ }
+
+ public FlightStorage getFlightStorage() {
+ return flightStorage;
+ }
+
+ public Flight getExistingFlight() {
+ return existingFlight;
+ }
+
+ public boolean isTreat() {
+ return treat;
+ }
+
+ public void setTreat(boolean treat) {
+ this.treat = treat;
+ }
+}
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightImportEntry.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightTableModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightTableModel.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightTableModel.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -0,0 +1,99 @@
+package fr.ulr.sammoa.ui.swing.io.input.application;
+/*
+ * #%L
+ * SAMMOA :: UI Swing
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * 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%
+ */
+
+import com.google.common.base.Preconditions;
+import jaxx.runtime.SwingUtil;
+
+import javax.swing.table.AbstractTableModel;
+import java.util.List;
+
+/**
+ * Table model with flight entries to import.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+public class FlightTableModel extends AbstractTableModel {
+
+ private static final long serialVersionUID = 1L;
+
+ protected final List<FlightImportEntry> data;
+
+ protected final boolean canSelect;
+
+ protected Class<?>[] COLUMN_TYPES = {String.class, Boolean.class};
+
+ public FlightTableModel(List<FlightImportEntry> data, boolean canSelect) {
+ Preconditions.checkNotNull(data);
+ this.data = data;
+ this.canSelect = canSelect;
+ }
+
+ @Override
+ public boolean isCellEditable(int rowIndex, int columnIndex) {
+ return canSelect && columnIndex == 1;
+ }
+
+ @Override
+ public Class<?> getColumnClass(int columnIndex) {
+ return COLUMN_TYPES[columnIndex];
+ }
+
+ @Override
+ public int getRowCount() {
+ return data.size();
+ }
+
+ @Override
+ public int getColumnCount() {
+ return canSelect ? 2 : 1;
+ }
+
+ @Override
+ public Object getValueAt(int rowIndex, int columnIndex) {
+ SwingUtil.ensureRowIndex(this, rowIndex);
+ SwingUtil.ensureColumnIndex(this, columnIndex);
+ FlightImportEntry flightImportEntry = data.get(rowIndex);
+
+ Object result = null;
+ switch (columnIndex) {
+ case 0:
+ result = flightImportEntry.getFlightStorage().getName();
+ break;
+ case 1:
+ result = flightImportEntry.isTreat();
+ break;
+ }
+ return result;
+ }
+
+ @Override
+ public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+ SwingUtil.ensureRowIndex(this, rowIndex);
+ SwingUtil.ensureColumnIndex(this, columnIndex);
+ FlightImportEntry flightImportEntry = data.get(rowIndex);
+ flightImportEntry.setTreat(Boolean.valueOf(aValue.toString()));
+ }
+}
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightTableModel.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.css
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.css 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.css 2012-08-21 16:12:32 UTC (rev 454)
@@ -39,4 +39,19 @@
#importButton {
text: "sammoa.action.importApplication";
+}
+
+#loadImportFileButton {
+ text: "sammoa.action.loadImportApplicationFile";
+ enabled:{model.isImportFileExist()}
+}
+
+#loadImportFileResultInfo {
+ actionIcon:"information";
+}
+
+#busyBlockLayerUI {
+ useIcon:false;
+ blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
+ block:{!model.isImportFileLoaded()};
}
\ No newline at end of file
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.jaxx
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.jaxx 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.jaxx 2012-08-21 16:12:32 UTC (rev 454)
@@ -30,8 +30,10 @@
fr.ulr.sammoa.ui.swing.SammoaUIContext
jaxx.runtime.swing.editor.FileEditor
+ jaxx.runtime.swing.BlockingLayerUI
java.awt.BorderLayout
+ javax.swing.UIManager
static org.nuiton.i18n.I18n._
</import>
@@ -56,6 +58,8 @@
<ImportApplicationUIHandler id='handler'
initializer='getContextValue(ImportApplicationUIHandler.class)'/>
+ <BlockingLayerUI id='busyBlockLayerUI'/>
+
<Table fill='both' constraints='BorderLayout.CENTER'>
<!-- import file -->
<row>
@@ -67,9 +71,37 @@
onActionPerformed='getModel().setImportFile(importFileEditor.getSelectedFile())'/>
</cell>
</row>
+ <!-- load import file -->
+ <row>
+ <cell fill='horizontal' weightx='1.0' columns='3'>
+ <JButton id='loadImportFileButton'
+ onActionPerformed='getHandler().loadStorage(model.getImportFile())'/>
+ </cell>
+ </row>
+ <!-- import file separator -->
+ <row>
+ <cell fill='horizontal' weightx='1.0' columns='3'>
+ <JSeparator id='importFileSeparator'/>
+ </cell>
+ </row>
+ <!-- load import file result -->
+ <row>
+ <cell fill='both' weightx='1.0' columns='3'>
+ <JPanel id='loadImportFileResultPanel' layout='{new BorderLayout()}'
+ decorator='boxed'>
+ <JLabel id='loadImportFileResultInfo'
+ constraints='BorderLayout.NORTH'/>
+ <JScrollPane id='loadImportFileResultFlightsPane'
+ constraints='BorderLayout.CENTER'>
+ <JTable id='loadImportFileResultFlightsTable'/>
+ </JScrollPane>
+ </JPanel>
+ </cell>
+ </row>
+
<!--import actions-->
<row>
- <cell columns='5' fill="both">
+ <cell columns='3' fill="both">
<JPanel layout='{new GridLayout(1,2,0,0)}'>
<JButton id='quitButton' onActionPerformed='getHandler().close()'/>
<JButton id='importButton'
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -23,25 +23,41 @@
* #L%
*/
+import com.google.common.collect.Lists;
import fr.ulr.sammoa.application.FlightService;
import fr.ulr.sammoa.application.ReferentialService;
import fr.ulr.sammoa.application.io.CampaignStorage;
+import fr.ulr.sammoa.application.io.FlightStorage;
import fr.ulr.sammoa.application.io.input.application.ImportApplicationModel;
import fr.ulr.sammoa.application.io.input.application.ImportApplicationService;
import fr.ulr.sammoa.persistence.Campaign;
+import fr.ulr.sammoa.persistence.Flight;
import fr.ulr.sammoa.ui.swing.SammoaScreen;
import fr.ulr.sammoa.ui.swing.SammoaUIContext;
import fr.ulr.sammoa.ui.swing.SammoaUIHandler;
import fr.ulr.sammoa.ui.swing.UIDecoratorService;
import fr.ulr.sammoa.ui.swing.util.SammoaUtil;
+import jaxx.runtime.SwingUtil;
+import jaxx.runtime.swing.editor.FileEditor;
+import org.nuiton.util.FileUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
+import java.util.List;
+import java.util.Map;
+import static org.nuiton.i18n.I18n._;
+import static org.nuiton.i18n.I18n.n_;
+
/**
* UI Handler fo {@link ImportApplicationUI}.
*
@@ -90,9 +106,13 @@
@Override
public void propertyChange(PropertyChangeEvent evt) {
- if (ImportApplicationUIModel.PROPERTY_STORAGE.equals(evt.getPropertyName())) {
+ String propertyName = evt.getPropertyName();
+ if (ImportApplicationUIModel.PROPERTY_STORAGE.equals(propertyName)) {
CampaignStorage newValue = (CampaignStorage) evt.getNewValue();
onCampaignStorageChanged(newValue);
+ } else if (ImportApplicationUIModel.PROPERTY_IMPORT_FILE_LOADED.equals(propertyName)) {
+ boolean newValue = (Boolean) evt.getNewValue();
+ onImportFileLoaded(newValue);
}
// else if (ImportApplicationUIModel.PROPERTY_FLIGHTS.equals(evt.getPropertyName())) {
// Collection<Flight> newValue = (Collection<Flight>) evt.getNewValue();
@@ -107,6 +127,26 @@
@Override
public void afterInitUI() {
+
+ // Boolean editor/renderer on table
+ {
+ JTable table = ui.getLoadImportFileResultFlightsTable();
+ TableCellEditor editor = table.getDefaultEditor(Boolean.class);
+ table.setDefaultEditor(boolean.class, editor);
+ TableCellRenderer renderer = table.getDefaultRenderer(Boolean.class);
+ table.setDefaultRenderer(boolean.class, renderer);
+ }
+
+ SwingUtil.setLayerUI(ui.getLoadImportFileResultPanel(),
+ ui.getBusyBlockLayerUI());
+
+ FileEditor importFileEditor = ui.getImportFileEditor();
+ String absolutePath = FileUtil.getCurrentDirectory().getAbsolutePath();
+ if (absolutePath.endsWith(File.separator + ".")) {
+ absolutePath = absolutePath.substring(0, absolutePath.length() - 2);
+ }
+ importFileEditor.setStartPath(absolutePath);
+ onImportFileLoaded(false);
}
@Override
@@ -128,11 +168,12 @@
public void importApplication() {
+ // get service model
+ ImportApplicationModel dataModel = getModel().toModel();
+
JFrame frame = ui.getParentContainer(JFrame.class);
SammoaUtil.updateBusyState(frame, true);
-
try {
- ImportApplicationModel dataModel = getModel().toModel();
importService.importApplication(dataModel);
} finally {
@@ -149,24 +190,111 @@
}
protected void onCampaignStorageChanged(CampaignStorage storage) {
- String campaignId = storage.getId();
- if (logger.isInfoEnabled()) {
- logger.info("Will load campaing {}", campaignId);
- }
- Campaign campaign = referentialService.getCampaign(campaignId);
ImportApplicationUIModel model = getModel();
+ List<FlightImportEntry> flightImportEntryList;
+ Campaign campaign;
+ if (storage == null) {
- if (campaign == null) {
+ // willReset model
+ flightImportEntryList = null;
+ campaign = null;
- // new campaign
- model.setNewCampaign(campaign);
} else {
- // existing campaign
- model.setExistingCampaign(campaign);
+ Map<String, Object> naturalId = storage.getNaturalId();
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Discover campaing {}", naturalId);
+ }
+
+ campaign = referentialService.getCampaignByNaturalId(naturalId);
+
+ boolean existingCampaign = campaign != null;
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Is campaign exist ? {}", existingCampaign);
+ }
+
+ flightImportEntryList = Lists.newArrayList();
+
+ for (FlightStorage flightStorage : storage) {
+
+ Map<String, Object> flightNaturalId = flightStorage.getNaturalId();
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Discover flight {}", flightNaturalId);
+ }
+ Flight flight = null;
+
+ if (existingCampaign) {
+
+ // try to find existing fligth from his natural id
+ flight = flightService.getFlightByNaturalId(flightNaturalId);
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Is flight exist ? {}", flight != null);
+ }
+ }
+
+ flightImportEntryList.add(
+ new FlightImportEntry(flightStorage, flight));
+ }
}
+
+ model.setCampaignExist(campaign != null);
+ model.setFlightEntries(flightImportEntryList);
}
+ protected void onImportFileLoaded(boolean newValue) {
+
+ JTable table = ui.getLoadImportFileResultFlightsTable();
+ JLabel label = ui.getLoadImportFileResultInfo();
+
+ String infoLabel;
+ if (newValue) {
+
+ // import file was loaded, let's add
+
+ ImportApplicationUIModel model = getModel();
+
+ String name = model.getStorage().getName();
+
+ boolean existingCampaign = model.isCampaignExist();
+
+ if (existingCampaign) {
+
+ table.setModel(new FlightTableModel(model.getFlightEntries(), true));
+
+ infoLabel =
+ _("sammoa.info.importApplication.importfile.loaded.on.existingCampaign", name);
+
+ SwingUtil.setI18nTableHeaderRenderer(
+ table,
+ n_("sammoa.importApplication.flightTable.column.flightName"),
+ n_("sammoa.importApplication.flightTable.column.flightName.tip"),
+ n_("sammoa.importApplication.flightTable.column.toTreat"),
+ n_("sammoa.importApplication.flightTable.column.toTreat.tip"));
+ } else {
+
+ table.setModel(new FlightTableModel(model.getFlightEntries(), false));
+ infoLabel = _("sammoa.info.importApplication.importfile.loaded.on.newCampaign", name);
+ SwingUtil.setI18nTableHeaderRenderer(
+ table,
+ n_("sammoa.importApplication.flightTable.column.flightName"),
+ n_("sammoa.importApplication.flightTable.column.flightName.tip"));
+ }
+
+ } else {
+
+ // nothing is loaded, just remove table model and change label
+
+ table.setModel(new DefaultTableModel());
+ infoLabel = _("sammoa.info.importApplication.no.importfile.loaded");
+ }
+
+ label.setText(infoLabel);
+ }
+
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -26,8 +26,6 @@
import com.google.common.collect.Lists;
import fr.ulr.sammoa.application.io.CampaignStorage;
import fr.ulr.sammoa.application.io.input.application.ImportApplicationModel;
-import fr.ulr.sammoa.persistence.Campaign;
-import fr.ulr.sammoa.persistence.Flight;
import org.jdesktop.beans.AbstractSerializableBean;
import java.io.File;
@@ -43,18 +41,14 @@
private static final long serialVersionUID = 1L;
- public static final String PROPERTY_EXISTING_CAMPAIGN = "existingCampaign";
+ public static final String PROPERTY_IMPORT_FILE = "importFile";
- public static final String PROPERTY_EXISTING_FLIGHTS = "existingFlights";
+ public static final String PROPERTY_CAMPAIGN_EXIST = "campaignExist";
- public static final String PROPERTY_NEW_CAMPAIGN = "newCampaign";
+ public static final String PROPERTY_IMPORT_FILE_EXIST = "importFileExist";
- public static final String PROPERTY_NEW_FLIGHTS = "newFlights";
+ public static final String PROPERTY_IMPORT_FILE_LOADED = "importFileLoaded";
- public static final String PROPERTY_SELECTED_FLIGHT_IDS = "selectedFlightIds";
-
- public static final String PROPERTY_IMPORT_FILE = "importFile";
-
public static final String PROPERTY_STORAGE = "storage";
/** File to import. */
@@ -63,21 +57,11 @@
/** Loaded campaign storage. */
protected CampaignStorage storage;
- /** Existing campaign. */
- protected Campaign existingCampaign;
+ /** Is campaign exists ? */
+ protected boolean campaignExist;
- /** existing existingFlights on db. */
- protected List<Flight> existingFlights;
+ protected List<FlightImportEntry> flightEntries;
- /** New campaign to import (read from the import file). */
- protected Campaign newCampaign;
-
- /** New existingFlights to import (read from the import file). */
- protected List<Flight> newFlights;
-
- /** Selected flight ids to imports. */
- protected List<String> selectedFlightIds;
-
public File getImportFile() {
return importFile;
}
@@ -86,8 +70,18 @@
File oldValue = this.importFile;
this.importFile = importFile;
firePropertyChange(PROPERTY_IMPORT_FILE, oldValue, importFile);
+ firePropertyChange(PROPERTY_IMPORT_FILE_EXIST, false, isImportFileExist());
+ firePropertyChange(PROPERTY_IMPORT_FILE_LOADED, false, isImportFileLoaded());
}
+ public boolean isImportFileExist() {
+ return importFile != null && importFile.isFile() && importFile.exists();
+ }
+
+ public boolean isImportFileLoaded() {
+ return isImportFileExist() && flightEntries != null;
+ }
+
public CampaignStorage getStorage() {
return storage;
}
@@ -96,66 +90,46 @@
CampaignStorage oldValue = this.storage;
this.storage = storage;
firePropertyChange(PROPERTY_STORAGE, oldValue, storage);
+ firePropertyChange(PROPERTY_IMPORT_FILE_LOADED, false, isImportFileLoaded());
}
- public Campaign getExistingCampaign() {
- return existingCampaign;
+ public boolean isCampaignExist() {
+ return campaignExist;
}
- public void setExistingCampaign(Campaign existingCampaign) {
- Campaign oldValue = this.existingCampaign;
- this.existingCampaign = existingCampaign;
- firePropertyChange(PROPERTY_EXISTING_CAMPAIGN, oldValue, existingCampaign);
+ public void setCampaignExist(boolean campaignExist) {
+ boolean oldValue = this.campaignExist;
+ this.campaignExist = campaignExist;
+ firePropertyChange(PROPERTY_CAMPAIGN_EXIST, oldValue, campaignExist);
}
- public List<Flight> getExistingFlights() {
- if (existingFlights == null) {
- existingFlights = Lists.newArrayList();
- }
- return existingFlights;
+ public List<FlightImportEntry> getFlightEntries() {
+ return flightEntries;
}
- public void setExistingFlights(List<Flight> existingFlights) {
- List<Flight> oldValue = this.existingFlights;
- this.existingFlights = existingFlights;
- firePropertyChange(PROPERTY_EXISTING_FLIGHTS, oldValue, existingFlights);
+ public void setFlightEntries(List<FlightImportEntry> flightEntries) {
+ this.flightEntries = flightEntries;
+ firePropertyChange(PROPERTY_IMPORT_FILE_EXIST, false, isImportFileLoaded());
}
- public List<Flight> getNewFlights() {
- return newFlights;
- }
+ public ImportApplicationModel toModel() {
- public void setNewFlights(List<Flight> newFlights) {
- List<Flight> oldValue = this.newFlights;
- this.newFlights = newFlights;
- firePropertyChange(PROPERTY_NEW_FLIGHTS, oldValue, newFlights);
- }
+ List<String> flightIds = Lists.newArrayList();
- public Campaign getNewCampaign() {
- return newCampaign;
- }
+ for (FlightImportEntry entry : getFlightEntries()) {
+ if (!campaignExist || entry.isTreat()) {
- public void setNewCampaign(Campaign newCampaign) {
- Campaign oldValue = this.newCampaign;
- this.newCampaign = newCampaign;
- firePropertyChange(PROPERTY_NEW_CAMPAIGN, oldValue, newCampaign);
- }
+ //flight to import
+ flightIds.add(entry.getFlightStorage().getId());
+ }
+ }
- public List<String> getSelectedFlightIds() {
- return selectedFlightIds;
- }
-
- public void setSelectedFlightIds(List<String> selectedFlightIds) {
- List<String> oldValue = this.selectedFlightIds;
- this.selectedFlightIds = selectedFlightIds;
- firePropertyChange(PROPERTY_SELECTED_FLIGHT_IDS, oldValue, selectedFlightIds);
- }
-
- public ImportApplicationModel toModel() {
ImportApplicationModel result = ImportApplicationModel.newModel(
- getImportFile(),
- getSelectedFlightIds()
+ getStorage(),
+ flightIds
);
return result;
}
+
+
}
\ No newline at end of file
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/java-info.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/java-info.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/java-info.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -4,3 +4,26 @@
* @since 0.6
*/
package fr.ulr.sammoa.ui.swing.io.input.application;
+/*
+ * #%L
+ * SAMMOA :: UI Swing
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * 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%
+ */
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/java-info.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision
+ Author Date Id Revision HeadURL
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/java-info.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/java-info.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/java-info.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -4,3 +4,26 @@
* @since 0.6
*/
package fr.ulr.sammoa.ui.swing.io.output.application;
+/*
+ * #%L
+ * SAMMOA :: UI Swing
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * 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%
+ */
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/java-info.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision
+ Author Date Id Revision HeadURL
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -1,4 +1,27 @@
package fr.ulr.sammoa.ui.swing.util;
+/*
+ * #%L
+ * SAMMOA :: UI Swing
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * 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%
+ */
import com.google.common.base.Predicate;
import com.google.common.base.Supplier;
Modified: trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties
===================================================================
--- trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties 2012-08-21 16:12:32 UTC (rev 454)
@@ -24,6 +24,7 @@
sammoa.action.home.tip=Home
sammoa.action.importApplication=Import
sammoa.action.left.tip=LEFT \: create a new Observation for the observer on the left side
+sammoa.action.loadImportApplicationFile=Load selected import file
sammoa.action.new=New
sammoa.action.next.tip=NEXT \: end previous effort and create a new LEG route for the next selected Transect
sammoa.action.nextTransect.tip=NEXT TRANSECT \: choose this transect to be the next one
@@ -75,6 +76,13 @@
sammoa.flightPanel.table.column.position.left=Left
sammoa.flightPanel.table.column.position.navigator=Nav
sammoa.flightPanel.table.column.position.right=Right
+sammoa.importApplication.flightTable.column.flightName=
+sammoa.importApplication.flightTable.column.flightName.tip=
+sammoa.importApplication.flightTable.column.toTreat=
+sammoa.importApplication.flightTable.column.toTreat.tip=
+sammoa.info.importApplication.importfile.loaded.on.existingCampaign=Import an existing campaign %s, please choose which flights of the following list to import
+sammoa.info.importApplication.importfile.loaded.on.newCampaign=Import a new campaign %s, all the flights of the following list will be imported
+sammoa.info.importApplication.no.importfile.loaded=No import file loaded, choose an file to import then press the 'load import file' button
sammoa.label.campaign=Campaign\:
sammoa.label.campaign.beginDate=Begin\:
sammoa.label.campaign.code=Code\:
Added: trunk/sammoa-ui-swing/src/main/resources/icons/action-information.png
===================================================================
(Binary files differ)
Property changes on: trunk/sammoa-ui-swing/src/main/resources/icons/action-information.png
___________________________________________________________________
Added: svn:mime-type
+ image/png
Added: svn:keywords
+ Author Date Id Revision HeadURL
1
0
r453 - trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing
by tchemit@users.forge.codelutin.com 21 Aug '12
by tchemit@users.forge.codelutin.com 21 Aug '12
21 Aug '12
Author: tchemit
Date: 2012-08-21 18:11:32 +0200 (Tue, 21 Aug 2012)
New Revision: 453
Url: http://forge.codelutin.com/repositories/revision/sammoa/453
Log:
deprecate some code
Modified:
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaColors.java
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaColors.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaColors.java 2012-08-21 16:10:41 UTC (rev 452)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaColors.java 2012-08-21 16:11:32 UTC (rev 453)
@@ -23,13 +23,16 @@
* #L%
*/
+import javax.swing.UIManager;
import java.awt.Color;
/**
* Created: 16/07/12
*
* @author fdesbois <desbois(a)codelutin.com>
+ * @deprecated since 0.6, should use {@link UIManager} instead.
*/
+@Deprecated
public final class SammoaColors {
private SammoaColors() {
1
0
Author: tchemit
Date: 2012-08-21 18:10:41 +0200 (Tue, 21 Aug 2012)
New Revision: 452
Url: http://forge.codelutin.com/repositories/revision/sammoa/452
Log:
fix import doc (set order of import of entities)
Modified:
trunk/src/site/rst/import-export.rst
Modified: trunk/src/site/rst/import-export.rst
===================================================================
--- trunk/src/site/rst/import-export.rst 2012-08-20 16:13:19 UTC (rev 451)
+++ trunk/src/site/rst/import-export.rst 2012-08-21 16:10:41 UTC (rev 452)
@@ -718,16 +718,13 @@
Les propriétés suffixés d'un ^ correspondent à des clés étrangères en base.
- Region : code
+- Species : code, region^ (*)
+- Campaign : code, region^
+- Observer : initials, campaign^ (**)
- Sector : sectorNumber, campaign^
- Strate : strateType, sector^
- Transect : name, strate^
-- Species : code, region^
-
- * Pas d'espèce commune entre deux régions ou sinon une copie sera effectuée
-
-- Observer : initials, campaign^
-
- * Pas d'observateur commun entre deux campagnes ou sinon une copie sera effectuée
-
-- Campaign : code, region^
- Flight : systemId, flightNumber, campaign^
+
+* Pas d'espèce commune entre deux régions ou sinon une copie sera effectuée
+** Pas d'observateur commun entre deux campagnes ou sinon une copie sera effectuée
\ No newline at end of file
1
0
r451 - in trunk: sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util
by fdesbois@users.forge.codelutin.com 20 Aug '12
by fdesbois@users.forge.codelutin.com 20 Aug '12
20 Aug '12
Author: fdesbois
Date: 2012-08-20 18:13:19 +0200 (Mon, 20 Aug 2012)
New Revision: 451
Url: http://forge.codelutin.com/repositories/revision/sammoa/451
Log:
refs #1204 : remove TransectTable and move behavior in FlightUIHandler
Added:
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java
Removed:
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectBooleanTableCell.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTable.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTableHandler.java
Modified:
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/ObservationDAOImpl.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextTransectAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUI.css
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUI.jaxx
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectFlightModel.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTableModel.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaUtil.java
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/ObservationDAOImpl.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/ObservationDAOImpl.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/ObservationDAOImpl.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -81,11 +81,7 @@
public List<E> findAllByFlightOrderedByObservationTime(Flight flight) {
- String ql = String.format("FROM %1$s WHERE %2$s = :flight ORDER BY %3$s",
- ObservationImpl.class.getSimpleName(),
- Observation.PROPERTY_FLIGHT,
- Observation.PROPERTY_OBSERVATION_TIME
- );
+ String ql = "FROM ObservationImpl WHERE flight = :flight ORDER BY observationTime";
try {
List<E> result = findAllByQuery(ql, "flight", flight);
@@ -97,11 +93,7 @@
public int findLastObservationNumber(Flight flight) {
- String ql = String.format("SELECT max(%1$s) FROM %2$s WHERE %3$s = :flight",
- Observation.PROPERTY_OBSERVATION_NUMBER,
- ObservationImpl.class.getSimpleName(),
- Observation.PROPERTY_FLIGHT
- );
+ String ql = "SELECT max(observationNumber) FROM ObservationImpl WHERE flight = :flight";
try {
Integer queryResult = findByQuery(Integer.class, ql, "flight", flight);
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextTransectAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextTransectAction.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextTransectAction.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -23,12 +23,11 @@
*/
package fr.ulr.sammoa.ui.swing.action;
-import fr.ulr.sammoa.persistence.TransectFlight;
+import fr.ulr.sammoa.ui.swing.flight.TransectFlightModel;
import jaxx.runtime.JAXXContext;
import org.nuiton.util.Resource;
-import javax.swing.Action;
-import javax.swing.JComponent;
+import javax.swing.*;
import java.awt.event.ActionEvent;
import static org.nuiton.i18n.I18n._;
@@ -42,7 +41,7 @@
private static final long serialVersionUID = 1L;
- public static final String CLIENT_PROPERTY_INDEX = "index";
+ public static final String CLIENT_PROPERTY_TRANSECT_FLIGHT = "transectFlight";
public NextTransectAction(JAXXContext context) {
super(Resource.getIcon("/icons/action-next-transect.png"), context);
@@ -52,15 +51,13 @@
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
- if (source instanceof JComponent) {
+ TransectFlightModel transectFlight = null;
+ if (source instanceof JComponent) {
JComponent component = (JComponent) e.getSource();
- Integer index = (Integer) component.getClientProperty(CLIENT_PROPERTY_INDEX);
+ transectFlight = (TransectFlightModel) component.getClientProperty(CLIENT_PROPERTY_TRANSECT_FLIGHT);
- if (index != null) {
- TransectFlight transectFlight = getFlight().getTransectFlight().get(index);
- getFlightController().setNextTransect(transectFlight);
- }
+ getFlightController().setNextTransect(transectFlight.getSource());
}
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUI.css
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUI.css 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUI.css 2012-08-20 16:13:19 UTC (rev 451)
@@ -142,6 +142,7 @@
}
#transectTable {
+ model:{transectTableModel};
selectionModel:{transectFlightSelectionModel};
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUI.jaxx
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUI.jaxx 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUI.jaxx 2012-08-20 16:13:19 UTC (rev 451)
@@ -31,6 +31,8 @@
javax.swing.ListSelectionModel
javax.swing.DefaultListSelectionModel
+ org.jdesktop.swingx.JXTable
+
com.bbn.openmap.gui.OverlayMapPanel
fr.ulr.sammoa.persistence.Flight
@@ -174,8 +176,7 @@
</Table>
<JScrollPane>
- <TransectTable id='transectTable'
- constructorParams='transectTableModel'/>
+ <JXTable id='transectTable'/>
</JScrollPane>
</JSplitPane>
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -42,7 +42,9 @@
import com.bbn.openmap.util.PropUtils;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
import com.google.common.base.Strings;
+import com.google.common.base.Supplier;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
@@ -95,27 +97,20 @@
import fr.ulr.sammoa.ui.swing.flight.layer.SimpleGeoPointLayer;
import fr.ulr.sammoa.ui.swing.flight.layer.TransectLayer;
import fr.ulr.sammoa.ui.swing.transect.TransectUI;
+import fr.ulr.sammoa.ui.swing.util.ButtonActionTableCellEditorRenderer;
import fr.ulr.sammoa.ui.swing.util.ColorTableCellRenderer;
import fr.ulr.sammoa.ui.swing.util.SammoaUtil;
import jaxx.runtime.JAXXObject;
import jaxx.runtime.SwingUtil;
import jaxx.runtime.swing.JAXXWidgetUtil;
import jaxx.runtime.swing.editor.cell.NumberCellEditor;
+import org.jdesktop.swingx.JXTable;
import org.nuiton.util.ApplicationConfig;
import org.nuiton.util.TimeLog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.AbstractButton;
-import javax.swing.Action;
-import javax.swing.ActionMap;
-import javax.swing.InputMap;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComponent;
-import javax.swing.KeyStroke;
-import javax.swing.ListCellRenderer;
-import javax.swing.ListSelectionModel;
+import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
@@ -123,6 +118,7 @@
import java.awt.event.ComponentListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
+import java.beans.IndexedPropertyChangeEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
@@ -357,113 +353,137 @@
timeLog.log(uiStartTime, "initUI");
+ long startTime = TimeLog.getTime();
+
+ // Strate ComboBox
+ {
+ JComboBox comboBox = ui.getStrateCombobox();
+
+ comboBox.setRenderer(decoratorService.newListCellRender(StrateModel.class));
+
+ StrateModel strateAll = getModel().getStrateAll();
+ SwingUtil.fillComboBox(comboBox, getModel().getStrates(), strateAll);
+
+ selectStrate(strateAll);
+ }
+
ListCellRenderer observerListCellRenderer =
decoratorService.newListCellRender(Observer.class);
+ // Observer List
{
- // init transect table
+ ui.getObserverSelector().setRenderer(
+ new ObserverListCellRenderer(observerListCellRenderer)
+ );
+ }
- TransectTable transectTable = ui.getTransectTable();
+ // Transect List
+ {
+ ui.getTransectList().setCellRenderer(
+ new TransectListCellRenderer(decoratorService.newListCellRender((TransectModel.class))));
+ }
- TransectTableModel transectTableModel = ui.getTransectTableModel();
+ // Transect Table
+ {
+ JXTable table = ui.getTransectTable();
- // for boolean
- TableCellRenderer booleanCellRenderer = transectTable.getDefaultRenderer(Boolean.class);
- TransectBooleanTableCell booleanTableCell = new TransectBooleanTableCell(booleanCellRenderer, transectTable.getActionButtons());
- transectTable.setDefaultRenderer(Boolean.class, booleanTableCell);
+ TransectTableModel tableModel = ui.getTransectTableModel();
- transectTable.setDefaultEditor(
- Observer.class,
- new ObserverTableCellEditor(transectTableModel.getReference(),
- observerListCellRenderer));
+ NumberCellEditor<Integer> numberCellEditor = JAXXWidgetUtil.newNumberTableCellEditor(Integer.class, false);
+ table.setDefaultEditor(Integer.class, numberCellEditor);
+ table.setDefaultEditor(int.class, numberCellEditor);
- transectTable.setDefaultRenderer(Observer.class,
- decoratorService.newTableCellRender(Observer.class));
+ TableCellRenderer stringRenderer = table.getDefaultRenderer(String.class);
- // Set specific renderer for NbTimes column
- TableCellRenderer defaultRenderer = transectTable.getDefaultRenderer(String.class);
- TransectCrossingNumberCellRenderer cellRenderer = new TransectCrossingNumberCellRenderer(defaultRenderer, transectTableModel);
- transectTable.getColumnModel().getColumn(TransectTableModel.TransectColumn.CROSSING_NUMBER.ordinal()).setCellRenderer(cellRenderer);
+ // OBSERVER columns (Left, Right, Nav, Co-Nav positions)
+ {
+ table.setDefaultEditor(
+ Observer.class,
+ new ObserverTableCellEditor(tableModel.getReference(), observerListCellRenderer)
+ );
- transectTable.setDefaultEditor(Boolean.class, booleanTableCell);
+ table.setDefaultRenderer(Observer.class,
+ decoratorService.newTableCellRender(Observer.class));
+ }
- NumberCellEditor<Integer> numberCellEditor = JAXXWidgetUtil.newNumberTableCellEditor(Integer.class, false);
- transectTable.setDefaultEditor(Integer.class, numberCellEditor);
- transectTable.setDefaultEditor(int.class, numberCellEditor);
+ // CROSSING_NUMBER column
+ {
+ TableColumn column = table.getColumn(TransectTableModel.TransectColumn.CROSSING_NUMBER.ordinal());
- // Position left column
+ TransectCrossingNumberCellRenderer cellRenderer =
+ new TransectCrossingNumberCellRenderer(stringRenderer, tableModel);
+
+ column.setCellRenderer(cellRenderer);
+ }
+
+ // LEFT position column
{
- TableColumn column = transectTable.getColumn(TransectTableModel.TransectColumn.POSITION_LEFT.ordinal());
- column.setHeaderRenderer(new ColorTableCellRenderer(defaultRenderer, SammoaColors.POSITION_LEFT_COLOR));
+ TableColumn column = table.getColumn(TransectTableModel.TransectColumn.POSITION_LEFT.ordinal());
+ column.setHeaderRenderer(new ColorTableCellRenderer(stringRenderer, SammoaColors.POSITION_LEFT_COLOR));
}
- // Position right column
+ // RIGHT position column
{
- TableColumn column = transectTable.getColumn(TransectTableModel.TransectColumn.POSITION_RIGHT.ordinal());
- column.setHeaderRenderer(new ColorTableCellRenderer(defaultRenderer, SammoaColors.POSITION_RIGHT_COLOR));
+ TableColumn column = table.getColumn(TransectTableModel.TransectColumn.POSITION_RIGHT.ordinal());
+ column.setHeaderRenderer(new ColorTableCellRenderer(stringRenderer, SammoaColors.POSITION_RIGHT_COLOR));
}
- transectTable.addHighlighter(
+ // ACTION column (Next Transect)
+ {
+ int columnIndex = TransectTableModel.TransectColumn.ACTION.ordinal();
+ TableColumn column = table.getColumnModel().getColumn(columnIndex);
+ ButtonActionTableCellEditorRenderer editorRenderer = new ButtonActionTableCellEditorRenderer(
+ NextTransectAction.CLIENT_PROPERTY_TRANSECT_FLIGHT,
+ new Supplier<Action>() {
+
+ @Override
+ public Action get() {
+ Action result = getActionMap().get("nextTransect");
+ return result;
+ }
+ },
+ new Predicate<Object>() {
+
+ @Override
+ public boolean apply(Object input) {
+ return !((TransectFlightModel) input).isDeleted();
+ }
+ });
+
+ column.setCellEditor(editorRenderer);
+ column.setCellRenderer(editorRenderer);
+ }
+
+ table.addHighlighter(
SammoaUtil.newColorHighlighter(
- new CurrentTransectHighlightPredicate(transectTableModel),
+ new CurrentTransectHighlightPredicate(tableModel),
SammoaColors.CURRENT_TRANSECT_ROW_COLOR)
);
- transectTable.addHighlighter(
+ table.addHighlighter(
SammoaUtil.newColorHighlighter(
- new NextTransectHighlightPredicate(transectTableModel),
+ new NextTransectHighlightPredicate(tableModel),
SammoaColors.NEXT_TRANSECT_ROW_COLOR)
);
- transectTable.setSortable(false);
+ table.setSortable(false);
}
- ui.getStrateCombobox().setRenderer(
- decoratorService.newListCellRender(StrateModel.class));
- ui.getObserverSelector().setRenderer(
- new ObserverListCellRenderer(observerListCellRenderer)
- );
- ui.getTransectList().setCellRenderer(
- new TransectListCellRenderer(decoratorService.newListCellRender((TransectModel.class))));
+ startTime = timeLog.log(startTime, "afterInitUI", "decoration done (editor/renderer)");
- long startTime = TimeLog.getTime();
-
- // Init the actions
initActions();
startTime = timeLog.log(startTime, "afterInitUI", "actions are created");
- // Add binding for Flight observers to update comboboxes references
- // based on flightObserverForPositions
getModel().getFlight().addPropertyChangeListener(
- Flight.PROPERTY_OBSERVER, new PropertyChangeListener() {
+ Flight.PROPERTY_OBSERVER, flightObserversListener);
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- Flight flight = (Flight) evt.getSource();
- List<Observer> observers = flightService.getFlightObserverForPositions(flight);
- getModel().setFlightObserverForPositions(observers);
- }
- });
+ getModel().addPropertyChangeListener(
+ FlightUIModel.PROPERTY_CURRENT_ROUTE, currentRouteListener);
- // Strate ComboBox
- StrateModel strateAll = getModel().getStrateAll();
- SwingUtil.fillComboBox(ui.getStrateCombobox(), getModel().getStrates(), strateAll);
- selectStrate(strateAll);
+ getModel().addPropertyChangeListener(
+ FlightUIModel.PROPERTY_NEXT_TRANSECT, nextTransectListener);
-// // Update current Transect depends on current Route
-// getModel().addPropertyChangeListener(
-// FlightUIModel.PROPERTY_CURRENT_ROUTE, new PropertyChangeListener() {
-//
-// @Override
-// public void propertyChange(PropertyChangeEvent evt) {
-//
-// setCurrentTransect((Route) evt.getOldValue(), false);
-//
-// setCurrentTransect((Route) evt.getNewValue(), true);
-// }
-// });
-
transectUi = new TransectUI(context);
transectUi.addComponentListener(transectUIListener);
@@ -500,10 +520,11 @@
@Override
public void onRouteAdded(Route route) {
+ getModel().setCurrentRoute(route);
+
if (route != null) {
getModel().addRoute(route);
}
- getModel().setCurrentRoute(route);
}
@Override
@@ -591,38 +612,9 @@
// Add elements to the flight
if (!Iterables.isEmpty(transects)) {
-// Flight flight = getModel().getFlight();
-//
-// // Ensure transect instances for all existing transectFlight
-// // FIXME-fdesbois-2012-07-18 : to avoid this manual binding we
-// // need to load all entities at startup in the same topiaContext
-// // for the moment, it's not possible because of the transect management,
-// // but it should be after cleaning import transect
-// for (TransectFlight transectFlight : flight.getTransectFlight()) {
-// Transect transect = transectFlight.getTransect();
-//
-// for (Transect newTransect : transects) {
-//
-// // Check if it's equal but not the same instance
-// if (transect.equals(newTransect) && transect != newTransect) {
-//
-// // Update the transect instance
-// transectFlight.setTransect(newTransect);
-//
-// // Fire the table for change
-// int rowIndex = ui.getTransectTableModel().getRowIndex(transectFlight);
-// ui.getTransectTableModel().fireTableRowsUpdated(rowIndex, rowIndex);
-//
-// if (logger.isDebugEnabled()) {
-// logger.debug(String.format("Transect instance %s change for previous TransectFlight %d", transect.getName(), rowIndex));
-// }
-// }
-// }
-// }
-
// Retrieve the last selected row from the table
- TransectTable table = ui.getTransectTable();
- int fromIndex = table.getLastSelectedRow();
+ JTable table = ui.getTransectTable();
+ int fromIndex = SammoaUtil.getLastSelectedRow(table);
if (fromIndex == -1) {
// Add after the last row
fromIndex = table.getRowCount();
@@ -647,17 +639,6 @@
int toIndex = fromIndex + newTransectFlights.size() - 1;
ui.getTransectTableModel().fireTableRowsInserted(fromIndex, toIndex);
-
-
-// // Retrieve real nbTimes for each new transect
-// Map<Transect, Long> transectRealNbTimes =
-// flightService.getTransectRealNbTimes(Lists.newArrayList(transects));
-// getModel().putAllTransectRealNbTimes(transectRealNbTimes);
-
- // Display the transects if flight is started
-// if (getFlightController().isRunning()) {
-// showOnlyFlightTransects(listModel.getSelectedReferences());
-// }
}
}
@@ -716,10 +697,10 @@
getModel().setActionMap(getActionMap());
initActions(getActionMap(), ui, getInputMap());
- List<JButton> actionButtons = ui.getTransectTable().getActionButtons();
- for (JButton actionButton : actionButtons) {
- initAction(getActionMap(), actionButton, getInputMap());
- }
+// List<JButton> actionButtons = ui.getTransectTable().getActionButtons();
+// for (JButton actionButton : actionButtons) {
+// initAction(getActionMap(), actionButton, getInputMap());
+// }
}
protected void putAction(String actionName, Action action) {
@@ -922,6 +903,54 @@
}
}
+ protected PropertyChangeListener flightObserversListener = new PropertyChangeListener() {
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+
+ // Add binding for Flight observers to update comboboxes references
+ // based on flightObserverForPositions
+ Flight flight = (Flight) evt.getSource();
+ List<Observer> observers = flightService.getFlightObserverForPositions(flight);
+ getModel().setFlightObserverForPositions(observers);
+
+ // Refresh all the table if some observer is removed (index = old collection size)
+ if (evt instanceof IndexedPropertyChangeEvent) {
+ int oldSize = ((IndexedPropertyChangeEvent) evt).getIndex();
+ int currentSize = getModel().getFlight().sizeObserver();
+
+ if (currentSize < oldSize) {
+ ui.getTransectTableModel().fireTableDataChanged();
+ }
+ }
+ }
+ };
+
+ protected PropertyChangeListener currentRouteListener = new PropertyChangeListener() {
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+
+ Route oldValue = (Route) evt.getOldValue();
+ if (oldValue != null) {
+ ui.getTransectTableModel().fireTableRowUpdated(oldValue.getTransectFlight());
+ }
+ Route newValue = (Route) evt.getNewValue();
+ if (newValue != null) {
+ ui.getTransectTableModel().fireTableRowUpdated(newValue.getTransectFlight());
+ }
+ }
+ };
+
+ protected PropertyChangeListener nextTransectListener = new PropertyChangeListener() {
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ ui.getTransectTableModel().fireTableRowUpdated((TransectFlight) evt.getOldValue());
+ ui.getTransectTableModel().fireTableRowUpdated((TransectFlight) evt.getNewValue());
+ }
+ };
+
protected PropertyChangeListener transectFlightListener = new PropertyChangeListener() {
@Override
@@ -951,11 +980,15 @@
@Override
public void stateChanged(DeviceStateEvent event) {
+ DeviceTechnicalException error = event.getError();
if (event.getOldValue() != DeviceState.ERROR &&
event.getNewValue() == DeviceState.ERROR &&
- event.getError() != null) {
+ error != null) {
- context.setStatusMessage(event.getError().getMessageWithCause());
+ if (logger.isErrorEnabled()) {
+ logger.error(error.getMessageWithCause(), error);
+ }
+ context.setStatusMessage(error.getMessageWithCause());
}
}
};
Deleted: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectBooleanTableCell.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectBooleanTableCell.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectBooleanTableCell.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -1,117 +0,0 @@
-package fr.ulr.sammoa.ui.swing.flight;
-/*
- * #%L
- * SAMMOA :: UI Swing
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2012 UMS 3462, Code Lutin
- * %%
- * 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%
- */
-
-import jaxx.runtime.swing.JAXXWidgetUtil;
-import jaxx.runtime.swing.editor.BooleanCellEditor;
-
-import javax.swing.AbstractCellEditor;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JTable;
-import javax.swing.table.TableCellEditor;
-import javax.swing.table.TableCellRenderer;
-import java.awt.Component;
-import java.util.List;
-
-/**
- * TODO
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @since TODO
- */
-public class TransectBooleanTableCell extends AbstractCellEditor
- implements TableCellRenderer, TableCellEditor {
-
- private static final long serialVersionUID = 1L;
-
- protected final BooleanCellEditor delegateEditor;
-
- protected final List<JButton> actionButtons;
-
- public TransectBooleanTableCell(TableCellRenderer cellRenderer,
- List<JButton> actionButtons) {
- delegateEditor = JAXXWidgetUtil.newBooleanTableCellEditor(cellRenderer);
- this.actionButtons = actionButtons;
- }
-
- @Override
- public Component getTableCellRendererComponent(JTable table,
- Object value,
- boolean isSelected,
- boolean hasFocus,
- int row,
- int column) {
-
- TransectTableModel.TransectColumn transectColumn =
- TransectTableModel.TransectColumn.valueOf(column);
-
- Component result = null;
- switch (transectColumn) {
-
- case DELETED:
- JComponent render = (JComponent) delegateEditor.getTableCellRendererComponent(
- table, value, isSelected, hasFocus, row, column);
-
- result = render;
- break;
- case ACTION:
- JButton button = actionButtons.get(row);
- button.setEnabled((Boolean) value);
- result = button;
-
- default:
- }
- return result;
- }
-
-
- @Override
- public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
-
- TransectTableModel.TransectColumn transectColumn =
- TransectTableModel.TransectColumn.valueOf(column);
-
- Component result = null;
- switch (transectColumn) {
-
- case DELETED:
- result = delegateEditor.getTableCellEditorComponent(
- table, value, isSelected, row, column);
- break;
- case ACTION:
- JButton button = actionButtons.get(row);
- button.setEnabled((Boolean) value);
- result = button;
-
- default:
- }
- return result;
- }
-
- @Override
- public Object getCellEditorValue() {
- return delegateEditor.getCellEditorValue();
- }
-}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectFlightModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectFlightModel.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectFlightModel.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -24,6 +24,7 @@
*/
import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import fr.ulr.sammoa.persistence.Flight;
@@ -159,4 +160,22 @@
protected Flight getFlight() {
return flightModel.getFlight();
}
+
+ public static Predicate<TransectFlightModel> withTransectFlight(TransectFlight transectFlight) {
+ return new WithTransectFlightPredicate(transectFlight);
+ }
+
+ protected static class WithTransectFlightPredicate implements Predicate<TransectFlightModel> {
+
+ protected TransectFlight transectFlight;
+
+ public WithTransectFlightPredicate(TransectFlight transectFlight) {
+ this.transectFlight = transectFlight;
+ }
+
+ @Override
+ public boolean apply(TransectFlightModel input) {
+ return transectFlight.equals(input.getSource());
+ }
+ }
}
Deleted: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTable.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTable.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTable.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -1,260 +0,0 @@
-/*
- * #%L
- * SAMMOA :: UI Swing
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2012 UMS 3462, Code Lutin
- * %%
- * 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%
- */
-package fr.ulr.sammoa.ui.swing.flight;
-
-import com.google.common.collect.Lists;
-import fr.ulr.sammoa.persistence.Flight;
-import fr.ulr.sammoa.persistence.Route;
-import fr.ulr.sammoa.persistence.TransectFlight;
-import fr.ulr.sammoa.ui.swing.SammoaColors;
-import fr.ulr.sammoa.ui.swing.SammoaUIContext;
-import fr.ulr.sammoa.ui.swing.action.NextTransectAction;
-import fr.ulr.sammoa.ui.swing.util.ColorTableCellRenderer;
-import org.jdesktop.swingx.JXTable;
-
-import javax.swing.Action;
-import javax.swing.ActionMap;
-import javax.swing.JButton;
-import javax.swing.event.TableModelEvent;
-import javax.swing.table.TableCellRenderer;
-import javax.swing.table.TableColumn;
-import java.beans.IndexedPropertyChangeEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.List;
-
-/**
- * Created: 15/06/12.
- * <p/>
- * TODO tchemit-2012-08-14 Remove this object, use a simple JTXTable and put
- * TODO tchemit-2012-08-14 all the init code in handler.
- *
- * @author fdesbois <desbois(a)codelutin.com>
- */
-public class TransectTable extends JXTable {
-
- private static final long serialVersionUID = 1L;
-
-// private static final Logger logger = LoggerFactory.getLogger(TransectTable.class);
-
-// protected static final ImageIcon ACTION_ICON = Resource.getIcon("/icons/action-next-transect.png");
-
-// protected TransectTableHandler handler;
-
- protected List<JButton> actionButtons;
-
- public TransectTable(TransectTableModel model) {
- super(model);
-
- for (int i = 0; i < getModel().getRowCount(); i++) {
- addActionButton(i);
- }
-
- PropertyChangeListener propertyChangeListener = new PropertyChangeListener() {
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- String propertyName = evt.getPropertyName();
-
- if (FlightUIModel.PROPERTY_CURRENT_ROUTE.equals(propertyName)) {
-
- onCurrentRouteChanged(
- (Route) evt.getOldValue(), (Route) evt.getNewValue());
-
- } else if (FlightUIModel.PROPERTY_NEXT_TRANSECT.equals(propertyName)) {
-
- onNextTransectChanged(
- (TransectFlight) evt.getOldValue(), (TransectFlight) evt.getNewValue());
-
-// } else if (Flight.PROPERTY_TRANSECT_FLIGHT.equals(propertyName)) {
-//
-// IndexedPropertyChangeEvent indexedEvent = (IndexedPropertyChangeEvent) evt;
-// onFlightTransectsAdded(indexedEvent);
-
- } else if (Flight.PROPERTY_OBSERVER.equals(propertyName)) {
-
- IndexedPropertyChangeEvent indexedEvent = (IndexedPropertyChangeEvent) evt;
- onFlightObserversChanged(indexedEvent);
- }
- }
- };
-
- Flight flight = getModel().getFlight();
- if (flight != null) {
-
- flight.addPropertyChangeListener(Flight.PROPERTY_TRANSECT_FLIGHT, propertyChangeListener);
- flight.addPropertyChangeListener(Flight.PROPERTY_OBSERVER, propertyChangeListener);
- }
-
- SammoaUIContext.getUIContext().getFlightUIHandler().getModel().addPropertyChangeListener(propertyChangeListener);
- }
-
-// public TransectTableHandler getHandler() {
-// return handler;
-// }
-
- public List<JButton> getActionButtons() {
- if (actionButtons == null) {
- actionButtons = Lists.newArrayList();
- }
- return actionButtons;
- }
-
- public int getLastSelectedRow() {
- int result;
- int nbRows = getSelectedRows().length;
- if (nbRows > 0) {
- result = getSelectedRows()[nbRows - 1];
-
- } else {
- // No line selected
- result = -1;
- }
- return result;
- }
-
- @Override
- public TransectTableModel getModel() {
- return (TransectTableModel) super.getModel();
- }
-
- @Override
- public void tableChanged(TableModelEvent e) {
-
- // On fire INSERT, create buttons associated with each new rows
- if (e.getType() == TableModelEvent.INSERT) {
-
- for (int i = e.getFirstRow(); i <= e.getLastRow(); i++) {
- addActionButton(i);
- }
- }
-
- super.tableChanged(e);
- }
-
- public JButton addActionButton(int index) {
-
- JButton result = new JButton();
-
- // use client property used in Action to retrieve the correct transect
- result.putClientProperty(NextTransectAction.CLIENT_PROPERTY_INDEX, index);
- result.putClientProperty("actionName", "nextTransect");
-
- ActionMap actionMap = getModel().getReference().getActionMap();
- if (actionMap != null) {
- Action nextTransectAction = FlightUIHandler.getAction(actionMap, "nextTransect");
- result.setAction(nextTransectAction);
- }
-
-// result.setIcon(ACTION_ICON);
-// result.addActionListener(new ActionListener() {
-//
-// @Override
-// public void actionPerformed(ActionEvent e) {
-// JButton button = (JButton) e.getSource();
-// int index = (Integer) button.getClientProperty("index");
-// TransectFlight transectFlight = getModel().getRow(index);
-// getHandler().setNextTransect(transectFlight);
-// }
-// });
-
- getActionButtons().add(index, result);
-
- return result;
- }
-
- /**
- * Initialize column header colors for position left and position right
- *
- * @see ColorTableCellRenderer
- */
- protected void initPositionColumnHeaderColors() {
-
- TableCellRenderer defaultRenderer = getDefaultRenderer(String.class);
-
- // Position left column
- {
- TableColumn column = getColumn(TransectTableModel.TransectColumn.POSITION_LEFT.ordinal());
- column.setHeaderRenderer(new ColorTableCellRenderer(defaultRenderer, SammoaColors.POSITION_LEFT_COLOR));
- }
-
- // Position right column
- {
- TableColumn column = getColumn(TransectTableModel.TransectColumn.POSITION_RIGHT.ordinal());
- column.setHeaderRenderer(new ColorTableCellRenderer(defaultRenderer, SammoaColors.POSITION_RIGHT_COLOR));
- }
- }
-
- public void onCurrentRouteChanged(Route oldValue, Route newValue) {
-
- // Change of flight route status : begin, add, cb, end
-
- if (oldValue != null) {
- TransectFlight transect = oldValue.getTransectFlight();
- if (transect != null) {
- updateTransectRow(transect);
- }
- }
- if (newValue != null) {
- TransectFlight transect = newValue.getTransectFlight();
- if (transect != null) {
- updateTransectRow(transect);
- }
- }
- }
-
- public void onNextTransectChanged(TransectFlight oldValue, TransectFlight newValue) {
-
- if (oldValue != null) {
- updateTransectRow(oldValue);
- }
- if (newValue != null) {
- updateTransectRow(newValue);
- }
- }
-
-// public void onFlightTransectsAdded(IndexedPropertyChangeEvent evt) {
-//
-// int index = evt.getIndex();
-//
-// getModel().fireTableRowsInserted(index, index);
-// }
-
- public void onFlightObserversChanged(IndexedPropertyChangeEvent evt) {
-
- // Refresh all the table if some observer is removed (index = old collection size)
- int oldSize = evt.getIndex();
- int currentSize = getModel().getFlight().sizeObserver();
-
- if (currentSize < oldSize) {
- getModel().fireTableDataChanged();
- }
- }
-
- protected void updateTransectRow(TransectFlight transectFlight) {
-
- int index = getModel().getTransectFlightModel(transectFlight).getIndex();
-
- getModel().fireTableRowsUpdated(index, index);
- }
-}
Deleted: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTableHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTableHandler.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTableHandler.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -1,160 +0,0 @@
-/*
- * #%L
- * SAMMOA :: UI Swing
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2012 UMS 3462, Code Lutin
- * %%
- * 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%
- */
-package fr.ulr.sammoa.ui.swing.flight;
-
-import fr.ulr.sammoa.persistence.Flight;
-import fr.ulr.sammoa.persistence.Route;
-import fr.ulr.sammoa.persistence.TransectFlight;
-import fr.ulr.sammoa.ui.swing.SammoaUIContext;
-
-import java.beans.IndexedPropertyChangeEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
-/**
- * Created: 18/06/12
- * FIXME tchemit-2012-08-14 Remove this handler
- *
- * @author fdesbois <desbois(a)codelutin.com>
- * @deprecated I will remove this before release 0.6
- */
-@Deprecated
-public class TransectTableHandler implements PropertyChangeListener {
-
- protected TransectTable view;
-
- public TransectTableHandler(TransectTable view) {
- this.view = view;
- }
-
- @Deprecated
- public FlightUIModel getFlightUIModel() {
- return SammoaUIContext.getUIContext().getFlightUIHandler().getModel();
- }
-
- public void init() {
- getFlightUIModel().addPropertyChangeListener(this);
-
- Flight flight = getModel().getFlight();
- if (flight != null) {
- flight.addPropertyChangeListener(Flight.PROPERTY_TRANSECT_FLIGHT, this);
- flight.addPropertyChangeListener(Flight.PROPERTY_OBSERVER, this);
- }
- }
-
- public TransectTableModel getModel() {
- return view.getModel();
- }
-
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
-
- String propertyName = evt.getPropertyName();
-
- if (FlightUIModel.PROPERTY_CURRENT_ROUTE.equals(propertyName)) {
-
- onCurrentRouteChanged(
- (Route) evt.getOldValue(), (Route) evt.getNewValue());
-
- } else if (FlightUIModel.PROPERTY_NEXT_TRANSECT.equals(propertyName)) {
-
- onNextTransectChanged(
- (TransectFlight) evt.getOldValue(), (TransectFlight) evt.getNewValue());
-
-// } else if (Flight.PROPERTY_TRANSECT_FLIGHT.equals(propertyName)) {
-//
-// IndexedPropertyChangeEvent indexedEvent = (IndexedPropertyChangeEvent) evt;
-// onFlightTransectsAdded(indexedEvent);
-
- } else if (Flight.PROPERTY_OBSERVER.equals(propertyName)) {
-
- IndexedPropertyChangeEvent indexedEvent = (IndexedPropertyChangeEvent) evt;
- onFlightObserversChanged(indexedEvent);
- }
- }
-//
-// public void onFlightChanged(Flight oldValue, Flight newValue) {
-//
-// if (oldValue != null) {
-// oldValue.removePropertyChangeListener(this);
-// }
-// newValue.addPropertyChangeListener(Flight.PROPERTY_TRANSECT_FLIGHT, this);
-// newValue.addPropertyChangeListener(Flight.PROPERTY_OBSERVER, this);
-//
-// getModel().fireTableDataChanged();
-// }
-
- public void onCurrentRouteChanged(Route oldValue, Route newValue) {
-
- // Change of flight route status : begin, add, cb, end
-
- if (oldValue != null) {
- TransectFlight transect = oldValue.getTransectFlight();
- if (transect != null) {
- updateTransectRow(transect);
- }
- }
- if (newValue != null) {
- TransectFlight transect = newValue.getTransectFlight();
- if (transect != null) {
- updateTransectRow(transect);
- }
- }
- }
-
- public void onNextTransectChanged(TransectFlight oldValue, TransectFlight newValue) {
-
- if (oldValue != null) {
- updateTransectRow(oldValue);
- }
- if (newValue != null) {
- updateTransectRow(newValue);
- }
- }
-
-// public void onFlightTransectsAdded(IndexedPropertyChangeEvent evt) {
-//
-// int index = evt.getIndex();
-//
-// getModel().fireTableRowsInserted(index, index);
-// }
-
- public void onFlightObserversChanged(IndexedPropertyChangeEvent evt) {
-
- // Refresh all the table if some observer is removed (index = old collection size)
- int oldSize = evt.getIndex();
- int currentSize = getModel().getFlight().sizeObserver();
-
- if (currentSize < oldSize) {
- getModel().fireTableDataChanged();
- }
- }
-
- protected void updateTransectRow(TransectFlight transectFlight) {
-
- int index = getModel().getTransectFlightModel(transectFlight).getIndex();
-
- getModel().fireTableRowsUpdated(index, index);
- }
-}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTableModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTableModel.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTableModel.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -24,7 +24,6 @@
*/
package fr.ulr.sammoa.ui.swing.flight;
-import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import fr.ulr.sammoa.persistence.Flight;
@@ -36,7 +35,7 @@
import fr.ulr.sammoa.persistence.TransectFlight;
import fr.ulr.sammoa.ui.swing.util.SammoaUtil;
-import javax.swing.SwingUtilities;
+import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import java.util.List;
@@ -70,18 +69,6 @@
return reference.getNextTransect();
}
- @Deprecated
- public TransectFlightModel getTransectFlightModel(final TransectFlight transectFlight) {
- TransectFlightModel result = Iterables.find(getTransectFlights(), new Predicate<TransectFlightModel>() {
-
- @Override
- public boolean apply(TransectFlightModel input) {
- return input.getSource().equals(transectFlight);
- }
- });
- return result;
- }
-
public List<TransectFlightModel> getTransectFlights() {
return reference.getTransectFlights();
}
@@ -90,10 +77,21 @@
return getTransectFlights().get(index);
}
-// public int getRowIndex(TransectFlightModel transectFlight) {
-// return Iterables.indexOf(getTransectFlights(), Predicates.equalTo(transectFlight));
-// }
+ public int getRowIndex(final TransectFlight transectFlight) {
+ int result = Iterables.indexOf(
+ getTransectFlights(),
+ TransectFlightModel.withTransectFlight(transectFlight)
+ );
+ return result;
+ }
+ public void fireTableRowUpdated(TransectFlight transectFlight) {
+ if (transectFlight != null) {
+ int index = getRowIndex(transectFlight);
+ fireTableRowsUpdated(index, index);
+ }
+ }
+
@Override
public String getColumnName(int column) {
List<String> labels = TransectColumn.getLabels();
@@ -281,12 +279,11 @@
ACTION(
_("sammoa.flightPanel.table.column.action"),
true,
- Boolean.class
+ TransectFlightModel.class
) {
@Override
public Object getValue(int index, TransectFlightModel bean) {
- // Action is available if bean is not deleted
- return !bean.isDeleted();
+ return bean;
}
@Override
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -23,6 +23,7 @@
* #L%
*/
+import com.google.common.base.Supplier;
import fr.ulr.sammoa.application.FlightService;
import fr.ulr.sammoa.application.device.DeviceState;
import fr.ulr.sammoa.application.device.DeviceStateEvent;
@@ -47,6 +48,7 @@
import fr.ulr.sammoa.ui.swing.observations.action.MoveToPreviousEditableCellAction;
import fr.ulr.sammoa.ui.swing.observations.action.MoveToPreviousRowEditableAction;
import fr.ulr.sammoa.ui.swing.util.AbstractRowHighlightPredicate;
+import fr.ulr.sammoa.ui.swing.util.ButtonActionTableCellEditorRenderer;
import fr.ulr.sammoa.ui.swing.util.SammoaUtil;
import fr.ulr.sammoa.ui.swing.util.TableDataChangeListener;
import fr.ulr.sammoa.ui.swing.util.TextCellEditor;
@@ -66,16 +68,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.AbstractCellEditor;
-import javax.swing.Action;
-import javax.swing.DefaultCellEditor;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JTable;
-import javax.swing.JTextField;
-import javax.swing.ListCellRenderer;
-import javax.swing.ListSelectionModel;
-import javax.swing.SwingUtilities;
+import javax.swing.*;
import javax.swing.border.LineBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
@@ -85,9 +78,7 @@
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Rectangle;
+import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
@@ -441,7 +432,17 @@
// set renderer and editor as button for circle back action
int circleBack = ObservationTableModel.ObservationColumn.CIRCLE_BACK.ordinal();
- CircleBackEditorRenderer editorRenderer = new CircleBackEditorRenderer(getFlightUIModel());
+ ButtonActionTableCellEditorRenderer editorRenderer = new ButtonActionTableCellEditorRenderer(
+ CircleBackAction.CLIENT_PROPERTY_OBSERVATION,
+ new Supplier<Action>() {
+
+ @Override
+ public Action get() {
+ return FlightUIHandler.getAction(getFlightUIModel().getActionMap(), "circleBack");
+ }
+ },
+ null
+ );
TableColumn column = dataTable.getColumnModel().getColumn(circleBack);
column.setCellEditor(editorRenderer);
@@ -751,50 +752,50 @@
return model.getBean(rowIndex);
}
}
+//
+// /**
+// * Editeur/renderer des observations sous forme de bouton permettant
+// * de rentrer en mode circle back sur l'observation choisie.
+// */
+// public static class CircleBackEditorRenderer extends AbstractCellEditor
+// implements TableCellRenderer, TableCellEditor {
+//
+// private static final long serialVersionUID = 1L;
+//
+//
+// private final FlightUIModel fligthModel;
+//
+// public CircleBackEditorRenderer(FlightUIModel fligthModel) {
+// this.fligthModel = fligthModel;
+// }
+//
+// @Override
+// public Object getCellEditorValue() {
+// return null;
+// }
+//
+// @Override
+// public Component getTableCellEditorComponent(JTable table,
+// Object value, boolean isSelected, int row, int column) {
+// final Observation observation = (Observation) value;
+// final JButton result = new JButton();
+// // FIXME-fdesbois-2012-07-08 : improve that, can't do any init... on new button, action is retrieve from actionMap
+// if (fligthModel.getActionMap() != null) {
+// Action circleBackAction = FlightUIHandler.getAction(fligthModel.getActionMap(), "circleBack");
+// result.setAction(circleBackAction);
+// }
+// result.putClientProperty(CircleBackAction.CLIENT_PROPERTY_OBSERVATION, observation);
+// return result;
+// }
+//
+// @Override
+// public Component getTableCellRendererComponent(JTable table,
+// Object value, boolean isSelected, boolean hasFocus, int row,
+// int column) {
+// return getTableCellEditorComponent(table, value, isSelected, row, column);
+// }
+// }
- /**
- * Editeur/renderer des observations sous forme de bouton permettant
- * de rentrer en mode circle back sur l'observation choisie.
- */
- public static class CircleBackEditorRenderer extends AbstractCellEditor
- implements TableCellRenderer, TableCellEditor {
-
- private static final long serialVersionUID = 1L;
-
-
- private final FlightUIModel fligthModel;
-
- public CircleBackEditorRenderer(FlightUIModel fligthModel) {
- this.fligthModel = fligthModel;
- }
-
- @Override
- public Object getCellEditorValue() {
- return null;
- }
-
- @Override
- public Component getTableCellEditorComponent(JTable table,
- Object value, boolean isSelected, int row, int column) {
- final Observation observation = (Observation) value;
- final JButton result = new JButton();
- // FIXME-fdesbois-2012-07-08 : improve that, can't do any init... on new button, action is retrieve from actionMap
- if (fligthModel.getActionMap() != null) {
- Action circleBackAction = FlightUIHandler.getAction(fligthModel.getActionMap(), "circleBack");
- result.setAction(circleBackAction);
- }
- result.putClientProperty(CircleBackAction.CLIENT_PROPERTY_OBSERVATION, observation);
- return result;
- }
-
- @Override
- public Component getTableCellRendererComponent(JTable table,
- Object value, boolean isSelected, boolean hasFocus, int row,
- int column) {
- return getTableCellEditorComponent(table, value, isSelected, row, column);
- }
- }
-
public static class ObservationForSelectedRouteHighlightPredicate extends AbstractRowHighlightPredicate {
protected FlightUIModel UIModel;
Added: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -0,0 +1,75 @@
+package fr.ulr.sammoa.ui.swing.util;
+
+import com.google.common.base.Predicate;
+import com.google.common.base.Supplier;
+import com.google.common.collect.Maps;
+
+import javax.swing.*;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
+import java.awt.*;
+import java.util.Map;
+
+/**
+ * Created: 20/08/12
+ *
+ * @author fdesbois <florian.desbois(a)codelutin.com>
+ */
+public class ButtonActionTableCellEditorRenderer extends AbstractCellEditor
+ implements TableCellRenderer, TableCellEditor {
+
+ protected String actionPropertyName;
+
+ protected Supplier<Action> actionSupplier;
+
+ protected Predicate<Object> enabledPredicate;
+
+ protected Map<Object, JButton> cache;
+
+ public ButtonActionTableCellEditorRenderer(String actionPropertyName,
+ Supplier<Action> actionSupplier,
+ Predicate<Object> enabledPredicate) {
+
+ this.actionPropertyName = actionPropertyName;
+ this.actionSupplier = actionSupplier;
+ this.enabledPredicate = enabledPredicate;
+ this.cache = Maps.newHashMap();
+ }
+
+ @Override
+ public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
+ Component result = getButton(value);
+ if (enabledPredicate != null) {
+ result.setEnabled(enabledPredicate.apply(value));
+ }
+ return result;
+ }
+
+ @Override
+ public Object getCellEditorValue() {
+ return null;
+ }
+
+ @Override
+ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+ Component result = getButton(value);
+ if (enabledPredicate != null) {
+ result.setEnabled(enabledPredicate.apply(value));
+ }
+ return result;
+ }
+
+ protected JButton getButton(Object bean) {
+ JButton result = cache.get(bean);
+ if (result == null) {
+
+ result = new JButton();
+
+ result.putClientProperty(actionPropertyName, bean);
+ result.setAction(actionSupplier.get());
+
+ cache.put(bean, result);
+ }
+ return result;
+ }
+}
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaUtil.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaUtil.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaUtil.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -36,18 +36,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.Action;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JFrame;
-import javax.swing.JOptionPane;
-import javax.swing.JRootPane;
-import javax.swing.KeyStroke;
-import javax.swing.UIManager;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Cursor;
-import java.awt.Dimension;
+import javax.swing.*;
+import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
@@ -261,4 +251,17 @@
JOptionPane.YES_NO_OPTION);
return i == JOptionPane.YES_OPTION;
}
+
+ public static int getLastSelectedRow(JTable table) {
+ int result;
+ int nbRows = table.getSelectedRows().length;
+ if (nbRows > 0) {
+ result = table.getSelectedRows()[nbRows - 1];
+
+ } else {
+ // No line selected
+ result = -1;
+ }
+ return result;
+ }
}
1
0