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
- 446 discussions
r375 - trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence
by tchemit@users.forge.codelutin.com 09 Aug '12
by tchemit@users.forge.codelutin.com 09 Aug '12
09 Aug '12
Author: tchemit
Date: 2012-08-09 11:47:15 +0200 (Thu, 09 Aug 2012)
New Revision: 375
Url: http://forge.codelutin.com/repositories/revision/sammoa/375
Log:
move some generated code to none generated code
Added:
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/ObservationStatus.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Position.java
Added: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/ObservationStatus.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/ObservationStatus.java (rev 0)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/ObservationStatus.java 2012-08-09 09:47:15 UTC (rev 375)
@@ -0,0 +1,13 @@
+package fr.ulr.sammoa.persistence;
+
+
+public enum ObservationStatus {
+ RECAPTURE,
+ NEW,
+ NO_RECAPTURE,
+ CIRCLE_BACK;
+
+ public String getName() {
+ return name();
+ }
+} //ObservationStatus
Property changes on: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/ObservationStatus.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Position.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Position.java (rev 0)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Position.java 2012-08-09 09:47:15 UTC (rev 375)
@@ -0,0 +1,14 @@
+package fr.ulr.sammoa.persistence;
+
+public enum Position {
+ NAVIGATOR,
+ FRONT_LEFT,
+ FRONT_RIGHT,
+ BACK_LEFT,
+ BACK_RIGHT,
+ CO_NAVIGATOR;
+
+ public String getName() {
+ return name();
+ }
+} //Position
Property changes on: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Position.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
1
0
09 Aug '12
Author: fdesbois
Date: 2012-08-09 11:35:36 +0200 (Thu, 09 Aug 2012)
New Revision: 374
Url: http://forge.codelutin.com/repositories/revision/sammoa/374
Log:
Fix some bugs + add some minor improvements
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceTechnicalException.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/GeoPoints.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaUIContext.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/CircleBackAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/campaign/CampaignUIHandler.java
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/region/RegionUIHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/Importer.java
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/ShpImporter.java
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-08 18:26:33 UTC (rev 373)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-08-09 09:35:36 UTC (rev 374)
@@ -745,7 +745,7 @@
logger.trace(String.format(
"ObserverPosition : %s, %s, %s",
elmt.getTopiaId(),
- elmt.getObserver().getInitials(),
+ (elmt.getObserver() != null ? elmt.getObserver().getInitials() : "N/A"),
elmt.getPosition())
);
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java 2012-08-08 18:26:33 UTC (rev 373)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java 2012-08-09 09:35:36 UTC (rev 374)
@@ -476,7 +476,7 @@
KEY_ADD("ui." + PROPERTY_ADD,
_("sammoa.config.ui.add"),
- "pressed F6",
+ "pressed F7",
KeyStroke.class,
false,
false),
@@ -504,7 +504,7 @@
KEY_CIRCLE_BACK("ui." + PROPERTY_CIRCLE_BACK,
_("sammoa.config.ui.circleBack"),
- "pressed F7",
+ "pressed F11",
KeyStroke.class,
false,
false);
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceTechnicalException.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceTechnicalException.java 2012-08-08 18:26:33 UTC (rev 373)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceTechnicalException.java 2012-08-09 09:35:36 UTC (rev 374)
@@ -43,6 +43,14 @@
this.source = source;
}
+ public String getMessageWithCause() {
+ String result = getMessage();
+ if (getCause() != null) {
+ result += " : " + getCause().getMessage();
+ }
+ return result;
+ }
+
public DeviceManager getSource() {
return source;
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java 2012-08-08 18:26:33 UTC (rev 373)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java 2012-08-09 09:35:36 UTC (rev 374)
@@ -117,8 +117,10 @@
@Override
public void stop() {
- timer.cancel();
- timer = null;
+ if (timer != null) {
+ timer.cancel();
+ timer = null;
+ }
}
@Override
@@ -179,9 +181,7 @@
} catch (DeviceTechnicalException ex) {
// We use ERROR, because this task is during start
- // Error is generally the same as previous one from first open() call,
- // no need to propagate it
- setState(DeviceState.ERROR, null);
+ setState(DeviceState.ERROR, ex);
if (logger.isErrorEnabled()) {
logger.error("Can't open GPS device. Try again in "
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/GeoPoints.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/GeoPoints.java 2012-08-08 18:26:33 UTC (rev 373)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/GeoPoints.java 2012-08-09 09:35:36 UTC (rev 374)
@@ -46,18 +46,21 @@
List<GeoPoint> result = Lists.newArrayList();
- List<Date> geoPointDates = FluentIterable
- .from(geoPoints)
- .transform(toDate())
- .toSortedImmutableList(Ordering.natural());
+ if (!geoPoints.isEmpty()) {
- int index = 0;
- for (Date date : dates) {
+ List<Date> geoPointDates = FluentIterable
+ .from(geoPoints)
+ .transform(toDate())
+ .toSortedImmutableList(Ordering.natural());
- // We continue starting from the previous index to avoid loop on all the date list
- index = getClosestDateIndex(index > 0 ? index - 1 : 0, geoPointDates, date);
+ int index = 0;
+ for (Date date : dates) {
- result.add(geoPoints.get(index));
+ // We continue starting from the previous index to avoid loop on all the date list
+ index = getClosestDateIndex(index > 0 ? index - 1 : 0, geoPointDates, date);
+
+ result.add(geoPoints.get(index));
+ }
}
return result;
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java 2012-08-08 18:26:33 UTC (rev 373)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java 2012-08-09 09:35:36 UTC (rev 374)
@@ -76,6 +76,10 @@
this.ui = ui;
}
+ public MainUI getUI() {
+ return ui;
+ }
+
public SammoaContext getAppContext() {
return context.getAppContext();
}
@@ -127,6 +131,8 @@
} else {
+ SammoaUtil.updateBusyState(ui, true);
+
if (currentBody != null) {
SammoaUI<?> body = (SammoaUI<?>) currentBody;
body.getHandler().onCloseUI();
@@ -178,6 +184,8 @@
}
ui.setScreen(screen);
+
+ SammoaUtil.updateBusyState(ui, false);
}
}
@@ -301,7 +309,7 @@
flightUIHandler.getFlightController().openGpsDevice(gpsConfig);
} catch (DeviceTechnicalException ex) {
logger.error("Error on new GpsHandler", ex);
- SammoaUtil.showError(ui, ex);
+ SammoaUtil.showErrorMessage(ui, ex.getMessageWithCause());
}
}
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaUIContext.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaUIContext.java 2012-08-08 18:26:33 UTC (rev 373)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaUIContext.java 2012-08-09 09:35:36 UTC (rev 374)
@@ -164,6 +164,10 @@
mainUIHandler.setScreen(SammoaScreen.EXPORT_MAP);
}
+ public void setStatusMessage(String message) {
+ mainUIHandler.getUI().getStatus().setStatus(message);
+ }
+
public void open() {
context.open();
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/CircleBackAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/CircleBackAction.java 2012-08-08 18:26:33 UTC (rev 373)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/CircleBackAction.java 2012-08-09 09:35:36 UTC (rev 374)
@@ -23,6 +23,7 @@
*/
package fr.ulr.sammoa.ui.swing.action;
+import com.google.common.collect.Iterables;
import fr.ulr.sammoa.persistence.Observation;
import fr.ulr.sammoa.persistence.Route;
import fr.ulr.sammoa.persistence.RouteType;
@@ -60,7 +61,7 @@
if (observation == null) {
List<Observation> obsList = getModel().getObservations();
- observation = obsList.get(obsList.size());
+ observation = Iterables.getLast(obsList);
}
getFlightController().circleBack(observation);
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/campaign/CampaignUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/campaign/CampaignUIHandler.java 2012-08-08 18:26:33 UTC (rev 373)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/campaign/CampaignUIHandler.java 2012-08-09 09:35:36 UTC (rev 374)
@@ -37,6 +37,7 @@
import fr.ulr.sammoa.ui.swing.region.RegionUIModel;
import fr.ulr.sammoa.ui.swing.util.CsvImporter;
import fr.ulr.sammoa.ui.swing.util.Importer;
+import fr.ulr.sammoa.ui.swing.util.SammoaUtil;
import fr.ulr.sammoa.ui.swing.util.ShpImporter;
import jaxx.runtime.swing.ErrorDialogUI;
import jaxx.runtime.validator.swing.SwingValidatorMessageTableRenderer;
@@ -167,7 +168,9 @@
boolean success = true;
Campaign campaign = getModel().newBean();
-
+
+ SammoaUtil.updateBusyState(ui, true);
+
String campaignId = getReferentialService().saveCampaign(campaign);
getModel().setId(campaignId);
@@ -207,12 +210,14 @@
success &= observerImporter.readFile(ui, observerFile);
}
+ SammoaUtil.updateBusyState(ui, false);
+
if (success) {
context.setCampaignId(campaignId);
close();
}
- } catch (IllegalArgumentException e) {
+ } catch (Exception e) {
ErrorDialogUI.showError(e);
}
}
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-08 18:26:33 UTC (rev 373)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-09 09:35:36 UTC (rev 374)
@@ -239,14 +239,16 @@
flightController.openGpsDevice(getConfig().getGpsConfig());
} catch (DeviceTechnicalException ex) {
logger.error("Error on GPS init", ex);
- SammoaUtil.showError(ui, ex);
+ SammoaUtil.showErrorMessage(ui, ex.getMessageWithCause());
+ SammoaUtil.updateBusyState(context.getMainUIHandler().getUI(), true);
}
try {
flightController.openAudioDevice();
} catch (DeviceTechnicalException ex) {
logger.error("Error on Audio init", ex);
- SammoaUtil.showError(ui, ex);
+ SammoaUtil.showErrorMessage(ui, ex.getMessageWithCause());
+ SammoaUtil.updateBusyState(context.getMainUIHandler().getUI(), true);
}
flightController.addListener(this);
@@ -885,7 +887,7 @@
event.getNewValue() == DeviceState.ERROR &&
event.getError() != null) {
- SammoaUtil.showError(ui, event.getError());
+ context.setStatusMessage(event.getError().getMessageWithCause());
}
}
};
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/region/RegionUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/region/RegionUIHandler.java 2012-08-08 18:26:33 UTC (rev 373)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/region/RegionUIHandler.java 2012-08-09 09:35:36 UTC (rev 374)
@@ -120,6 +120,8 @@
// Prepare new instance
Region region = getModel().newBean();
+ SammoaUtil.updateBusyState(ui, true);
+
// Save the entity
String regionId = getReferentialService().saveRegion(region);
getModel().setId(regionId);
@@ -134,15 +136,17 @@
);
}
- success &= speciesImporter.readFile(ui, speciesFile);
+ success = speciesImporter.readFile(ui, speciesFile);
}
+ SammoaUtil.updateBusyState(ui, false);
+
// Close on success
if (success) {
ui.getCloseButton().doClick();
}
- } catch (IllegalArgumentException e) {
+ } catch (Exception e) {
ErrorDialogUI.showError(e);
}
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/Importer.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/Importer.java 2012-08-08 18:26:33 UTC (rev 373)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/Importer.java 2012-08-09 09:35:36 UTC (rev 374)
@@ -27,9 +27,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.JOptionPane;
-import javax.swing.UIManager;
-import java.awt.Component;
+import javax.swing.*;
+import java.awt.*;
import java.io.File;
import java.io.IOException;
@@ -48,8 +47,12 @@
try {
+ SammoaUtil.updateBusyState(ui, true);
+
String successMessage = onActionPerformed(file);
+ SammoaUtil.updateBusyState(ui, false);
+
JOptionPane.showMessageDialog(ui, successMessage);
result = true;
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-08 18:26:33 UTC (rev 373)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaUtil.java 2012-08-09 09:35:36 UTC (rev 374)
@@ -26,7 +26,6 @@
import com.google.common.base.Joiner;
import com.google.common.base.Throwables;
-import fr.ulr.sammoa.application.device.DeviceTechnicalException;
import jaxx.runtime.JAXXUtil;
import jaxx.runtime.SwingUtil;
import org.apache.commons.beanutils.NestedNullException;
@@ -208,7 +207,7 @@
return file == null ? incoming : new File(file);
}
- public static void updateBusyState(JComponent ui, boolean busy) {
+ public static void updateBusyState(Component ui, boolean busy) {
if (busy) {
// ui bloquee
if (logger.isDebugEnabled()) {
@@ -224,11 +223,7 @@
}
}
- public static void showError(Component ui, DeviceTechnicalException ex) {
- String message = ex.getMessage();
- if (ex.getCause() != null) {
- message += " : " + ex.getCause().getMessage();
- }
+ public static void showErrorMessage(Component ui, String message) {
JOptionPane.showMessageDialog(
ui,
message,
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ShpImporter.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ShpImporter.java 2012-08-08 18:26:33 UTC (rev 373)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ShpImporter.java 2012-08-09 09:35:36 UTC (rev 374)
@@ -47,76 +47,69 @@
@Override
protected String onActionPerformed(File file) throws IOException {
- String result;
- try {
-
- File dbfFile;
- String fileName = file.getName();
- File sourceDirectory = file.getParentFile();
-
- String ext = Files.getFileExtension(fileName);
- int extIndex = fileName.lastIndexOf(ext);
- final String fileNameWithoutExt = fileName.substring(0, extIndex);
+ File dbfFile;
+ String fileName = file.getName();
+ File sourceDirectory = file.getParentFile();
+ String ext = Files.getFileExtension(fileName);
+ int extIndex = fileName.lastIndexOf(ext);
+ final String fileNameWithoutExt = fileName.substring(0, extIndex);
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Source directory '" + sourceDirectory.getAbsolutePath() + "' and fileName '" + fileNameWithoutExt + "'");
+ }
+
+ if (!ext.equals("dbf")) {
+
+ fileName = fileNameWithoutExt + "dbf";
+
if (logger.isDebugEnabled()) {
- logger.debug("Source directory '" + sourceDirectory.getAbsolutePath() + "' and fileName '" + fileNameWithoutExt + "'");
+ logger.debug(String.format("Use dbfFile %s for import", fileName));
}
- if (!ext.equals("dbf")) {
+ dbfFile = new File(sourceDirectory, fileName);
- fileName = fileNameWithoutExt + "dbf";
-
- if (logger.isDebugEnabled()) {
- logger.debug(String.format("Use dbfFile %s for import", fileName));
- }
-
- dbfFile = new File(sourceDirectory, fileName);
-
- if (!dbfFile.exists()) {
- throw new FileNotFoundException("Can't found dbf file '" + dbfFile.getAbsolutePath() + "' for import");
- }
-
- } else {
- dbfFile = file;
+ if (!dbfFile.exists()) {
+ throw new FileNotFoundException("Can't found dbf file '" + dbfFile.getAbsolutePath() + "' for import");
}
-
- DbfImport<E> importer = new DbfImport<E>(getModel(), dbfFile.toURI().toURL());
-
- result = onActionPerformed(importer);
- String[] files = sourceDirectory.list(new FilenameFilter() {
+ } else {
+ dbfFile = file;
+ }
- @Override
- public boolean accept(File dir, String fullName) {
- String extension = Files.getFileExtension(fullName);
- int extIndex = fullName.lastIndexOf(extension);
- String name = fullName.substring(0, extIndex);
- if (logger.isDebugEnabled()) {
- logger.debug(String.format("Read file : %s [ext = %s] -> check equals for %s",
- fullName,
- extension,
- name)
- );
- }
- return fileNameWithoutExt.equals(name);
- }
- });
+ DbfImport<E> importer = new DbfImport<E>(getModel(), dbfFile.toURI().toURL());
- for (String name : files) {
- String extension = Files.getFileExtension(name);
- File sourceFile = new File(sourceDirectory, name);
- File targetFile = new File(getCopyDirectory(), getCopyFileName() + "." + extension);
- if (logger.isInfoEnabled()) {
- logger.info(String.format("Copy file '%1$s' to '%2$s'",
- sourceFile.getAbsolutePath(),
- targetFile.getAbsolutePath())
+ String result = onActionPerformed(importer);
+
+ String[] files = sourceDirectory.list(new FilenameFilter() {
+
+ @Override
+ public boolean accept(File dir, String fullName) {
+ String extension = Files.getFileExtension(fullName);
+ int extIndex = fullName.lastIndexOf(extension);
+ String name = fullName.substring(0, extIndex);
+ if (logger.isDebugEnabled()) {
+ logger.debug(String.format("Read file : %s [ext = %s] -> check equals for %s",
+ fullName,
+ extension,
+ name)
);
}
- FileUtils.copyFile(sourceFile, targetFile);
+ return fileNameWithoutExt.equals(name);
}
+ });
- } catch (IOException e) {
- throw e;
+ for (String name : files) {
+ String extension = Files.getFileExtension(name);
+ File sourceFile = new File(sourceDirectory, name);
+ File targetFile = new File(getCopyDirectory(), getCopyFileName() + "." + extension);
+ if (logger.isInfoEnabled()) {
+ logger.info(String.format("Copy file '%1$s' to '%2$s'",
+ sourceFile.getAbsolutePath(),
+ targetFile.getAbsolutePath())
+ );
+ }
+ FileUtils.copyFile(sourceFile, targetFile);
}
return result;
}
1
0
08 Aug '12
Author: fdesbois
Date: 2012-08-08 20:26:33 +0200 (Wed, 08 Aug 2012)
New Revision: 373
Url: http://forge.codelutin.com/repositories/revision/sammoa/373
Log:
refs #1378 : improve errors
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceState.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceStateEvent.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorder.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderDefault.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderMock.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsConfig.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsHandlerGpsylon.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java
trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/DeviceStateLED.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBarHandler.java
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/io/exportMap/ExportMapUIModel.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java
trunk/sammoa-ui-swing/src/main/resources/logback.xml
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java 2012-08-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -37,7 +37,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.KeyStroke;
+import javax.swing.*;
import java.io.File;
import java.io.IOException;
import java.net.URL;
@@ -432,7 +432,7 @@
"true",
Boolean.class
),
- /** Time in seconds before timeout (NO_DATA, NO_DEVICE) */
+ /** Time in seconds before timeout (ERROR, NO_DEVICE) */
CAMPAIGN_ID("campaign.id",
n_("sammoa.config.campaign.id"),
null,
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceState.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceState.java 2012-08-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceState.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -37,5 +37,5 @@
/** voyant vert : reception de données */
RECORDING,
/** voyant rouge clignotant : périphirique prêt mais aucune données */
- NO_DATA
+ ERROR
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceStateEvent.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceStateEvent.java 2012-08-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceStateEvent.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -36,6 +36,8 @@
protected DeviceState newValue;
+ protected DeviceTechnicalException error;
+
public DeviceStateEvent(DeviceManager source, DeviceState oldValue, DeviceState newValue) {
this.source = source;
this.oldValue = oldValue;
@@ -53,4 +55,12 @@
public DeviceState getNewValue() {
return newValue;
}
+
+ public DeviceTechnicalException getError() {
+ return error;
+ }
+
+ public void setError(DeviceTechnicalException error) {
+ this.error = error;
+ }
}
\ No newline at end of file
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorder.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorder.java 2012-08-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorder.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -27,7 +27,6 @@
import javax.sound.sampled.AudioFileFormat;
import java.io.File;
-import java.io.IOException;
/**
* Recorder of audio files. Two recorder are used and a delay between recording
@@ -51,9 +50,8 @@
*
* @param outputFile File to record
* @param delaySeconds Delay for previous recording
- * @throws IOException for recording issues on the file
*/
- void record(File outputFile, long delaySeconds) throws IOException;
+ void record(File outputFile, long delaySeconds);
/**
* Stop the current recording after {@code delaySeconds}.
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderDefault.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderDefault.java 2012-08-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderDefault.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -129,13 +129,15 @@
return state;
}
- protected void setState(DeviceState state) {
+ public void setState(DeviceState state, DeviceTechnicalException error) {
DeviceState oldValue = getState();
this.state = state;
// Fire on listeners
for (DeviceStateListener listener : listeners) {
- listener.stateChanged(new DeviceStateEvent(this, oldValue, state));
+ DeviceStateEvent event = new DeviceStateEvent(this, oldValue, state);
+ event.setError(error);
+ listener.stateChanged(event);
}
}
@@ -174,26 +176,26 @@
// Start using the line for recording
dataLine.start();
- setState(DeviceState.READY);
+ setState(DeviceState.READY, null);
if (logger.isInfoEnabled()) {
logger.info("Audio line is ready");
}
} catch (IllegalArgumentException e) {
- setState(DeviceState.NO_DEVICE);
+ setState(DeviceState.NO_DEVICE, null);
throw new DeviceTechnicalException(this, "Can't open audio device", e);
} catch (IllegalStateException e) {
- setState(DeviceState.NO_DEVICE);
+ setState(DeviceState.NO_DEVICE, null);
throw new DeviceTechnicalException(this, "Can't open audio device", e);
} catch (SecurityException e) {
- setState(DeviceState.NO_DEVICE);
+ setState(DeviceState.NO_DEVICE, null);
throw new DeviceTechnicalException(this, "Can't open audio device", e);
} catch (LineUnavailableException e) {
- setState(DeviceState.NO_DEVICE);
+ setState(DeviceState.NO_DEVICE, null);
throw new DeviceTechnicalException(this, "Can't open audio device", e);
}
}
@@ -214,9 +216,9 @@
}
@Override
- public void record(File outputFile, long delaySeconds) throws IOException {
+ public void record(File outputFile, long delaySeconds) {
- if (DeviceState.NO_DATA == state) {
+ if (DeviceState.NO_DEVICE == state) {
if (logger.isWarnEnabled()) {
logger.warn("Can't record " + outputFile.getAbsolutePath() + ", no available dataLine");
}
@@ -231,37 +233,45 @@
"You must start the AudioRecorder to initialize " +
"the audio line before call record method");
+ try {
+ // Start recorder1
+ if (currentRecorder == null) {
+ recorder1 = new Recorder(outputFile, this, audioFormat, lineReader);
+ currentRecorder = recorder1;
- // Start recorder1
- if (currentRecorder == null) {
- recorder1 = new Recorder(outputFile, audioFormat, outputType, lineReader);
- currentRecorder = recorder1;
+ // Stop recorder1 if recording and start recorder2
+ } else if (currentRecorder == recorder1) {
- // Stop recorder1 if recording and start recorder2
- } else if (currentRecorder == recorder1) {
+ if (recorder1.isRecording()) {
+ recorder1.stop(delaySeconds);
+ }
- if (recorder1.isRecording()) {
- recorder1.stop(delaySeconds);
- }
+ if (recorder2 != null && recorder2.isRecording()) {
+ recorder2.stop();
+ }
+ recorder2 = new Recorder(outputFile, this, audioFormat, lineReader);
+ currentRecorder = recorder2;
- if (recorder2 != null && recorder2.isRecording()) {
- recorder2.stop();
- }
- recorder2 = new Recorder(outputFile, audioFormat, outputType, lineReader);
- currentRecorder = recorder2;
+ // Stop recorder2 if recording and start recorder1
+ } else if (currentRecorder == recorder2) {
- // Stop recorder2 if recording and start recorder1
- } else if (currentRecorder == recorder2) {
+ if (recorder2.isRecording()) {
+ recorder2.stop(delaySeconds);
+ }
- if (recorder2.isRecording()) {
- recorder2.stop(delaySeconds);
+ if (recorder1.isRecording()) {
+ recorder1.stop();
+ }
+ recorder1 = new Recorder(outputFile, this, audioFormat, lineReader);
+ currentRecorder = recorder1;
}
- if (recorder1.isRecording()) {
- recorder1.stop();
- }
- recorder1 = new Recorder(outputFile, audioFormat, outputType, lineReader);
- currentRecorder = recorder1;
+ } catch (IOException e) {
+ setState(DeviceState.ERROR,
+ new DeviceTechnicalException(this,
+ "Error on saving file "
+ + outputFile.getAbsolutePath(), e)
+ );
}
}
@@ -301,7 +311,7 @@
dataLine.close();
dataLine = null;
- setState(DeviceState.NO_DEVICE);
+ setState(DeviceState.NO_DEVICE, null);
}
}
@@ -331,7 +341,7 @@
if (!recorders.isEmpty()) {
- setState(DeviceState.RECORDING);
+ setState(DeviceState.RECORDING, null);
numBytesRead = dataLine.read(buffer, 0, bufferSize);
synchronized (recorders) {
@@ -341,7 +351,7 @@
}
} else {
- setState(DeviceState.READY);
+ setState(DeviceState.READY, null);
}
}
@@ -359,10 +369,10 @@
protected static class Recorder {
+ protected AudioRecorderDefault audioRecorder;
+
protected AudioFormat audioFormat;
- protected AudioFileFormat.Type outputType;
-
protected ByteArrayOutputStream bufferStream;
protected String outputFilePath;
@@ -396,8 +406,8 @@
}
public Recorder(File outputFile,
+ AudioRecorderDefault audioRecorder,
AudioFormat audioFormat,
- AudioFileFormat.Type outputType,
DataLineReader lineReader) throws IOException {
this.outputFilePath = outputFile.getAbsolutePath();
@@ -407,10 +417,10 @@
} else {
logger.info("Use existing file '{}' to continue recording", outputFilePath);
}
+ this.outputStream = new BufferedOutputStream(new FileOutputStream(outputFile, true));
this.bufferStream = new ByteArrayOutputStream();
- this.outputStream = new BufferedOutputStream(new FileOutputStream(outputFile, true));
this.audioFormat = audioFormat;
- this.outputType = outputType;
+ this.audioRecorder = audioRecorder;
this.lineReader = lineReader;
this.lineReader.addRecorder(this);
@@ -500,10 +510,13 @@
try {
logger.debug("Save in file {}", outputFilePath);
- AudioSystem.write(audioStream, outputType, outputStream);
+ AudioSystem.write(audioStream, audioRecorder.getOutputType(), outputStream);
} catch (IOException e) {
logger.error("Can't record file {}", outputFilePath, e);
+ audioRecorder.setState(DeviceState.ERROR,
+ new DeviceTechnicalException(audioRecorder,
+ "Error on saving file " + outputFilePath, e));
} finally {
try {
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderMock.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderMock.java 2012-08-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderMock.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -30,7 +30,6 @@
import javax.sound.sampled.AudioFileFormat;
import java.io.File;
-import java.io.IOException;
import java.util.Set;
/**
@@ -63,7 +62,7 @@
}
@Override
- public void record(File outputFile, long delaySeconds) throws IOException {
+ public void record(File outputFile, long delaySeconds) {
// do nothing
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java 2012-08-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -67,7 +67,7 @@
/**
* Value to check the number of timer update failures before the DeviceState
- * becomes {@link DeviceState#NO_DATA}
+ * becomes {@link DeviceState#ERROR}
*/
protected int nbFailuresMax;
@@ -101,8 +101,8 @@
if (getState() == DeviceState.READY) {
if (logger.isDebugEnabled()) {
- logger.debug("Start scheduling GpsHandler every "
- + periodMilliseconds + " milliseconds");
+ logger.debug("Start scheduling GpsHandler to retrieve data every "
+ + config.getCheckPeriod() + " seconds");
}
timer = new Timer();
@@ -151,12 +151,15 @@
return gpsLocationListeners;
}
- protected void setState(DeviceState state) {
+ public void setState(DeviceState state, DeviceTechnicalException error) {
DeviceState oldValue = getState();
this.state = state;
+ // Fire on listeners
for (DeviceStateListener listener : deviceStateListeners) {
- listener.stateChanged(new DeviceStateEvent(this, oldValue, state));
+ DeviceStateEvent event = new DeviceStateEvent(this, oldValue, state);
+ event.setError(error);
+ listener.stateChanged(event);
}
}
@@ -175,12 +178,14 @@
} catch (DeviceTechnicalException ex) {
- // We use NO_DATA, because this task is during start
- setState(DeviceState.NO_DATA);
+ // We use ERROR, because this task is during start
+ // Error is generally the same as previous one from first open() call,
+ // no need to propagate it
+ setState(DeviceState.ERROR, null);
if (logger.isErrorEnabled()) {
logger.error("Can't open GPS device. Try again in "
- + this.scheduledExecutionTime() + " milliseconds", ex);
+ + config.getCheckPeriod() + " seconds", ex);
}
}
}
@@ -208,12 +213,19 @@
// Data is unavailable
if (location == null && nbFailures >= nbFailuresMax) {
- setState(DeviceState.NO_DATA);
+ setState(DeviceState.ERROR,
+ new DeviceTechnicalException(BaseGpsHandler.this,
+ String.format("The GPS signal is lost after %d seconds ! " +
+ "The application will try again in %d seconds",
+ config.getTimeout(),
+ config.getCheckPeriod())
+ )
+ );
// GPS is recording
} else {
- setState(DeviceState.RECORDING);
+ setState(DeviceState.RECORDING, null);
// Fire events for location change
for (GpsLocationListener listener : gpsLocationListeners) {
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java 2012-08-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -73,7 +73,7 @@
// } else {
// if (started) {
// if (r.nextInt(32) > 25) {
-// newState = DeviceState.NO_DATA;
+// newState = DeviceState.ERROR;
// } else {
// newState = DeviceState.RECORDING;
// }
@@ -94,7 +94,7 @@
@Override
public void open() throws DeviceTechnicalException {
- setState(DeviceState.READY);
+ setState(DeviceState.READY, null);
}
@Override
@@ -108,7 +108,7 @@
@Override
public void close() throws DeviceTechnicalException {
- setState(DeviceState.NO_DEVICE);
+ setState(DeviceState.NO_DEVICE, null);
}
@Override
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsConfig.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsConfig.java 2012-08-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsConfig.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -111,7 +111,7 @@
"2",
Integer.class
),
- /** Time in seconds before timeout (NO_DATA, NO_DEVICE) */
+ /** Time in seconds before timeout (ERROR, NO_DEVICE) */
GPS_TIMEOUT("gps.timeout",
n_("sammoa.config.gps.timeout"),
"10",
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsHandlerGpsylon.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsHandlerGpsylon.java 2012-08-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsHandlerGpsylon.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -127,18 +127,18 @@
logger.info("Connected to GPS device");
- setState(DeviceState.READY);
+ setState(DeviceState.READY, null);
} catch (GPSException ex) {
- setState(DeviceState.NO_DEVICE);
+ setState(DeviceState.NO_DEVICE, null);
throw new DeviceTechnicalException(this, "Can't open GPS device", ex);
}
}
@Override
- public void close() {
+ public void close() throws DeviceTechnicalException {
stop();
@@ -158,9 +158,10 @@
logger.info("GPS device is closed");
- setState(DeviceState.NO_DEVICE);
+ setState(DeviceState.NO_DEVICE, null);
} catch (GPSException e) {
+ setState(DeviceState.ERROR, null);
throw new DeviceTechnicalException(this, "Can't close GPS device", e);
}
}
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-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -61,7 +61,6 @@
import org.slf4j.LoggerFactory;
import java.io.File;
-import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;
@@ -787,11 +786,7 @@
File audioFile = new File(audioDir, fileName);
- try {
- getAudioRecorder().record(audioFile, delay);
- } catch (IOException e) {
- throw Throwables.propagate(e);
- }
+ getAudioRecorder().record(audioFile, delay);
}
protected Date saveGPS(TopiaContext transaction,
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java 2012-08-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -29,6 +29,7 @@
import com.bbn.openmap.dataAccess.shape.EsriShapeExport;
import com.bbn.openmap.omGraphics.OMGraphic;
import com.bbn.openmap.omGraphics.OMPoint;
+import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
@@ -47,7 +48,6 @@
import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
-import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -106,6 +106,10 @@
}
public void exportGeoPointsMap(ExportMapModel dataModel) {
+ Preconditions.checkNotNull(dataModel.getCampaign());
+ Preconditions.checkNotNull(dataModel.getBeginDate());
+ Preconditions.checkNotNull(dataModel.getEndDate());
+
if (logger.isInfoEnabled()) {
logger.info("Start GeoPointsMap export to " +
dataModel.getExportDirectory() + "::" +
@@ -134,9 +138,7 @@
List<Flight> campaignFlights = context.getFlightService().getFlights(dataModel.getCampaign());
// Filter on period
- Date beginDate = dataModel.getBeginDate() == null ? campaign.getBeginDate() : dataModel.getBeginDate();
- Date endDate = dataModel.getEndDate() == null ? campaign.getEndDate() : dataModel.getEndDate();
- final PeriodDates period = new PeriodDates(beginDate, endDate);
+ final PeriodDates period = new PeriodDates(dataModel.getBeginDate(), dataModel.getEndDate());
Iterable<Flight> flights = Iterables.filter(campaignFlights, new Predicate<Flight>() {
@Override
Modified: trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.java
===================================================================
--- trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.java 2012-08-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -89,10 +89,10 @@
exportDirectory,
"export-geoPoints.shp",
campaign,
+ campaign.getBeginDate(),
+ campaign.getEndDate(),
null,
null,
- null,
- null,
null
);
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/DeviceStateLED.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/DeviceStateLED.java 2012-08-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/DeviceStateLED.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -56,10 +56,6 @@
protected DeviceState state;
- public DeviceStateLED() {
-// stateChanged(DeviceState.NO_DEVICE);
- }
-
protected static final ImageIcon NO_DEVICE_ICON = Resource.getIcon("/icons/device/nodevice.png");
protected static final ImageIcon READY_ICON = Resource.getIcon("/icons/device/ready.png");
protected static final ImageIcon RECORDING_ICON = Resource.getIcon("/icons/device/recording.png");
@@ -67,13 +63,17 @@
@Override
public void stateChanged(DeviceStateEvent event) {
+ setState(event.getNewValue());
+ }
+
+ public void setState(DeviceState state) {
DeviceState oldValue = getState();
- this.state = event.getNewValue();
-
+ this.state = state;
+
if (oldValue != state) {
logger.debug("[{}] Update LED status: {}",
- getClass().getSimpleName(), state);
+ getClass().getSimpleName(), state);
switch (state) {
case NO_DEVICE:
@@ -85,7 +85,7 @@
case RECORDING:
setIcon(RECORDING_ICON);
break;
- case NO_DATA:
+ case ERROR:
setIcon(NO_DATA_ICON);
break;
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBarHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBarHandler.java 2012-08-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBarHandler.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -24,6 +24,8 @@
*/
package fr.ulr.sammoa.ui.swing.flight;
+import fr.ulr.sammoa.application.device.audio.AudioRecorder;
+import fr.ulr.sammoa.application.device.gps.GpsHandler;
import fr.ulr.sammoa.application.flightController.FlightState;
import fr.ulr.sammoa.persistence.Route;
import fr.ulr.sammoa.ui.swing.BaseHandler;
@@ -53,9 +55,16 @@
public void init() {
getFlightUIModel().addPropertyChangeListener(this);
- getFlightController().getAudioRecorder().addDeviceStateListener(view.getAudioLED());
- getFlightController().getGpsHandler().addDeviceStateListener(view.getGpsLED());
- getFlightController().getGpsHandler().addGpsLocationListener(getModel());
+
+ AudioRecorder audioRecorder = getFlightController().getAudioRecorder();
+ view.getAudioLED().setState(audioRecorder.getState());
+ audioRecorder.addDeviceStateListener(view.getAudioLED());
+
+ GpsHandler gpsHandler = getFlightController().getGpsHandler();
+ view.getGpsLED().setState(gpsHandler.getState());
+ gpsHandler.addDeviceStateListener(view.getGpsLED());
+ gpsHandler.addGpsLocationListener(getModel());
+
if (FlightState.OFF_EFFORT.equals(getFlightUIModel().getFlightState())) {
getModel().setEffortPanelColor(SammoaColors.ON_EFFORT_BACKGROUND_COLOR);
}
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-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -52,6 +52,9 @@
import fr.ulr.sammoa.application.ReferentialService;
import fr.ulr.sammoa.application.SammoaConfig;
import fr.ulr.sammoa.application.SammoaContext;
+import fr.ulr.sammoa.application.device.DeviceState;
+import fr.ulr.sammoa.application.device.DeviceStateEvent;
+import fr.ulr.sammoa.application.device.DeviceStateListener;
import fr.ulr.sammoa.application.device.DeviceTechnicalException;
import fr.ulr.sammoa.application.device.gps.GpsLocationEvent;
import fr.ulr.sammoa.application.device.gps.GpsLocationListener;
@@ -197,7 +200,7 @@
// TODO-fdesbois-2012-07-19 : load all this data in the same transaction
// TODO-fdesbois-2012-07-19 : to avoid separated instances of same entities
- // TODO-fdesbois-2012-07-19 : like Transect or ObserverPosition
+ // TODO-fdesbois-2012-07-19 : like ObserverPosition or use proper Model like TransectModel
Flight flight = getFlightService().getFlight(flightId);
Preconditions.checkNotNull(flight);
Campaign campaign = flight.getCampaign();
@@ -235,19 +238,21 @@
try {
flightController.openGpsDevice(getConfig().getGpsConfig());
} catch (DeviceTechnicalException ex) {
- logger.error("Error on FlightController init", ex);
+ logger.error("Error on GPS init", ex);
SammoaUtil.showError(ui, ex);
}
try {
flightController.openAudioDevice();
} catch (DeviceTechnicalException ex) {
- logger.error("Error on FlightController init", ex);
+ logger.error("Error on Audio init", ex);
SammoaUtil.showError(ui, ex);
}
flightController.addListener(this);
flightController.getGpsHandler().addGpsLocationListener(gpsLocationListener);
+ flightController.getGpsHandler().addDeviceStateListener(deviceStateListener);
+ flightController.getAudioRecorder().addDeviceStateListener(deviceStateListener);
flightController.init();
@@ -872,6 +877,19 @@
}
};
+ protected DeviceStateListener deviceStateListener = new DeviceStateListener() {
+
+ @Override
+ public void stateChanged(DeviceStateEvent event) {
+ if (event.getOldValue() != DeviceState.ERROR &&
+ event.getNewValue() == DeviceState.ERROR &&
+ event.getError() != null) {
+
+ SammoaUtil.showError(ui, event.getError());
+ }
+ }
+ };
+
protected GpsLocationListener gpsLocationListener = new GpsLocationListener() {
@Override
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/exportMap/ExportMapUIModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/exportMap/ExportMapUIModel.java 2012-08-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/exportMap/ExportMapUIModel.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -317,12 +317,24 @@
List<Species> speciesToUse = Species2.getSelectedSpecies(
getSpecies(), getSelectedSpecies(), getSelectedSpeciesTypes());
+ // Ensure bounds for beginDate and enDate
+ Date beginDate = getBeginDate();
+ Date campaignBeginDate = getSelectedCampaign().getBeginDate();
+ if (beginDate == null || beginDate.before(campaignBeginDate)) {
+ beginDate = campaignBeginDate;
+ }
+ Date endDate = getEndDate();
+ Date campaignEndDate = getSelectedCampaign().getEndDate();
+ if (endDate == null || endDate.after(campaignEndDate)) {
+ endDate = campaignEndDate;
+ }
+
ExportMapModel result = ExportMapModel.newModel(
getExportDirectory(),
filename,
getSelectedCampaign(),
- getBeginDate(),
- getEndDate(),
+ beginDate,
+ endDate,
getSelectedStrates(),
getSelectedRouteTypes(),
speciesToUse
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-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java 2012-08-08 18:26:33 UTC (rev 373)
@@ -552,7 +552,7 @@
@Override
public void stateChanged(DeviceStateEvent event) {
DeviceState state = event.getNewValue();
- if (DeviceState.NO_DATA == state) {
+ if (DeviceState.ERROR == state) {
ui.getObservationTable().setBackground(DEVICE_ERROR_BACKGROUND_COLOR);
} else {
Modified: trunk/sammoa-ui-swing/src/main/resources/logback.xml
===================================================================
--- trunk/sammoa-ui-swing/src/main/resources/logback.xml 2012-08-08 18:26:09 UTC (rev 372)
+++ trunk/sammoa-ui-swing/src/main/resources/logback.xml 2012-08-08 18:26:33 UTC (rev 373)
@@ -47,7 +47,7 @@
<!--</rollingPolicy>-->
<!--</appender>-->
- <logger name="fr.ulr.sammoa" level="DEBUG"/>
+ <logger name="fr.ulr.sammoa" level="INFO"/>
<root level="ERROR">
<!--<appender-ref ref="FILE"/>-->
1
0
r372 - in trunk: sammoa-application sammoa-application/src/main/java/fr/ulr/sammoa/application/map sammoa-application/src/main/resources/i18n sammoa-application/src/test/java/fr/ulr/sammoa/application sammoa-application/src/test/java/fr/ulr/sammoa/application/map sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util
by fdesbois@users.forge.codelutin.com 08 Aug '12
by fdesbois@users.forge.codelutin.com 08 Aug '12
08 Aug '12
Author: fdesbois
Date: 2012-08-08 20:26:09 +0200 (Wed, 08 Aug 2012)
New Revision: 372
Url: http://forge.codelutin.com/repositories/revision/sammoa/372
Log:
refs #1203 : implement Shp export for Flight GeoPoints
Added:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfColumnModel.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfImport.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfTableModelBuilder.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfTimestampConverter.java
trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/
trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/DbfTimestampConverterTest.java
trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.java
Removed:
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/DbfImport.java
Modified:
trunk/sammoa-application/pom.xml
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java
trunk/sammoa-application/src/main/resources/i18n/sammoa-application_en_GB.properties
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/util/ShpImporter.java
Modified: trunk/sammoa-application/pom.xml
===================================================================
--- trunk/sammoa-application/pom.xml 2012-08-08 16:50:09 UTC (rev 371)
+++ trunk/sammoa-application/pom.xml 2012-08-08 18:26:09 UTC (rev 372)
@@ -88,6 +88,11 @@
<artifactId>nuiton-csv</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.bbn</groupId>
+ <artifactId>openmap</artifactId>
+ </dependency>
+
<!-- test dependencies -->
<dependency>
<groupId>junit</groupId>
Added: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfColumnModel.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfColumnModel.java (rev 0)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfColumnModel.java 2012-08-08 18:26:09 UTC (rev 372)
@@ -0,0 +1,62 @@
+package fr.ulr.sammoa.application.map;
+
+import com.bbn.openmap.dataAccess.shape.DbfTableModel;
+
+/**
+ * Note: there is an existing {@link com.bbn.openmap.dataAccess.shape.DbfTableModelFactory.Column}
+ * class.
+ * <p/>
+ * Created: 07/08/12
+ *
+ * @author fdesbois <florian.desbois(a)codelutin.com>
+ */
+public class DbfColumnModel {
+
+ protected String name;
+
+ protected byte type;
+
+ protected int length;
+
+ protected byte decimalCount;
+
+ protected int index;
+
+ public DbfColumnModel(String name, byte type) {
+ this.name = name;
+ this.type = type;
+ this.index = -1;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public byte getType() {
+ return type;
+ }
+
+ public int getLength() {
+ return length;
+ }
+
+ public void setLength(int length) {
+ this.length = length;
+ }
+
+ public int getDecimalCount() {
+ return decimalCount;
+ }
+
+ public void setDecimalCount(int decimalCount) {
+ this.decimalCount = (byte) decimalCount;
+ }
+
+ public int getIndex() {
+ return index;
+ }
+
+ public void setIndex(int index) {
+ this.index = index;
+ }
+}
Property changes on: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfColumnModel.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Copied: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfImport.java (from rev 371, trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/DbfImport.java)
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfImport.java (rev 0)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfImport.java 2012-08-08 18:26:09 UTC (rev 372)
@@ -0,0 +1,129 @@
+package fr.ulr.sammoa.application.map;
+/*
+ * #%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.bbn.openmap.dataAccess.shape.DbfTableModel;
+import com.google.common.base.Throwables;
+import com.google.common.collect.Lists;
+import org.nuiton.util.csv.Import;
+import org.nuiton.util.csv.ImportModel;
+import org.nuiton.util.csv.ImportRuntimeException;
+import org.nuiton.util.csv.ImportableColumn;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.List;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * Created: 25/07/12
+ *
+ * @author fdesbois <desbois(a)codelutin.com>
+ */
+public class DbfImport<E> extends Import<E> {
+
+ private static final Logger logger = LoggerFactory.getLogger(DbfImport.class);
+
+ protected DbfTableModel source;
+
+ protected Iterator<List<Object>> records;
+
+ protected List<Object> record;
+
+ public DbfImport(ImportModel<E> model, URL fileUrl) {
+ // Use dummy reader for superclass Import that manage by default csv files
+ super(model, new Reader() {
+
+ @Override
+ public int read(char[] cbuf, int off, int len) throws IOException {
+ return -1;
+ }
+
+ @Override
+ public void close() throws IOException {
+ }
+ });
+
+ try {
+ // FIXME-fdesbois-2012-07-26 : there is an issue with encoding, don't know how to customize it
+ this.source = DbfTableModel.read(fileUrl);
+
+ } catch (Exception e) {
+ throw Throwables.propagate(e);
+ }
+ this.records = source.getRecords();
+ }
+
+ @Override
+ protected <T> String readValue(ImportableColumn<E, T> field, int lineNumber) {
+ try {
+
+ int columnNumber = source.getColumnIndexForName(field.getHeaderName());
+
+ String value = String.valueOf(record.get(columnNumber));
+
+ return value;
+
+ } catch (Exception e) {
+ throw new ImportRuntimeException(
+ _("csv.import.error.unableToReadField",
+ field.getHeaderName(), lineNumber), e);
+ }
+ }
+
+ @Override
+ public void close() {
+ // nothing to do
+ }
+
+ @Override
+ protected boolean readRow() throws ImportRuntimeException {
+ boolean result;
+ if (records.hasNext()) {
+ record = records.next();
+ if (logger.isTraceEnabled()) {
+ logger.trace("Read record {}", record);
+ }
+ result = true;
+
+ } else {
+ result = false;
+ }
+ return result;
+ }
+
+ @Override
+ protected String[] getHeaders() throws ImportRuntimeException {
+ List<String> list = Lists.newArrayList();
+ for (int index = 0; index < source.getColumnCount(); index++) {
+ list.add(source.getColumnName(index));
+ }
+ return list.toArray(new String[list.size()]);
+ }
+}
Property changes on: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfImport.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/map/DbfTableModelBuilder.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfTableModelBuilder.java (rev 0)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfTableModelBuilder.java 2012-08-08 18:26:09 UTC (rev 372)
@@ -0,0 +1,178 @@
+package fr.ulr.sammoa.application.map;
+
+import com.bbn.openmap.dataAccess.shape.DbfTableModel;
+import com.google.common.base.Function;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created: 07/08/12
+ *
+ * @author fdesbois <florian.desbois(a)codelutin.com>
+ */
+public class DbfTableModelBuilder {
+
+ public static final int DEFAULT_STRING_LENGTH = 64;
+
+ public static final int DEFAULT_INTEGER_LENGTH = 8;
+
+ public static final String DATE_FORMAT_PATTERN = "yyyyMMdd";
+
+ public static final DateFormat DATE_FORMAT = new SimpleDateFormat(DATE_FORMAT_PATTERN);
+
+ protected List<DbfColumnModel> columns;
+
+ protected Map<String, DbfColumnModel> columnMap;
+
+ protected DbfTableModel model;
+
+ public DbfTableModelBuilder() {
+ columns = Lists.newArrayList();
+ }
+
+ public DbfTableModelBuilder dbfColumn(DbfColumnModel column) {
+ if (column.getIndex() != -1) {
+ columns.add(column.getIndex(), column);
+ } else {
+ column.setIndex(columns.size());
+ columns.add(column);
+ }
+ return this;
+ }
+
+ public DbfColumnModel newStringColumn(String name) {
+ DbfColumnModel result = new DbfColumnModel(name, DbfTableModel.TYPE_CHARACTER);
+ result.setLength(DEFAULT_STRING_LENGTH);
+ return result;
+ }
+
+ public DbfColumnModel newIntegerColumn(String name) {
+ DbfColumnModel result = new DbfColumnModel(name, DbfTableModel.TYPE_NUMERIC);
+ result.setLength(DEFAULT_INTEGER_LENGTH);
+ return result;
+ }
+
+ public DbfColumnModel newDoubleColumn(String name, int length, int decimalCount) {
+ DbfColumnModel result = new DbfColumnModel(name, DbfTableModel.TYPE_NUMERIC);
+ result.setLength(length);
+ result.setDecimalCount(decimalCount);
+ return result;
+ }
+
+ public DbfColumnModel newTimestampColumn(String name) {
+ DbfColumnModel result = new DbfColumnModel(name, DbfTableModel.TYPE_TIMESTAMP);
+ return result;
+ }
+
+ public DbfColumnModel newDateColumn(String name) {
+ DbfColumnModel result = new DbfColumnModel(name, DbfTableModel.TYPE_DATE);
+ result.setLength(DATE_FORMAT_PATTERN.length());
+ return result;
+ }
+
+ public DbfTableModelBuilder stringColumn(String name) {
+ return dbfColumn(newStringColumn(name));
+ }
+
+ public DbfTableModelBuilder integerColumn(String name) {
+ return dbfColumn(newIntegerColumn(name));
+ }
+
+ public DbfTableModelBuilder doubleColumn(String name, int length, int decimalCount) {
+ return dbfColumn(newDoubleColumn(name, length, decimalCount));
+ }
+
+ public DbfTableModelBuilder timestampColumn(String name) {
+ return dbfColumn(newTimestampColumn(name));
+ }
+
+ public DbfTableModelBuilder dateColumn(String name) {
+ return dbfColumn(newDateColumn(name));
+ }
+
+ public DbfTableModelBuilder build() {
+ model = new DbfTableModel(columns.size());
+ model.setWritable(true);
+
+ for (int i = 0; i < columns.size(); i++) {
+ DbfColumnModel columnModel = columns.get(i);
+ model.setColumnName(i, columnModel.getName());
+ model.setType(i, columnModel.getType());
+ model.setLength(i, columnModel.getLength());
+ model.setDecimalCount(i, (byte) columnModel.getDecimalCount());
+ }
+ columnMap = Maps.uniqueIndex(columns,
+ new Function<DbfColumnModel, String>() {
+
+ @Override
+ public String apply(DbfColumnModel input) {
+ return input.getName();
+ }
+ });
+ return this;
+ }
+
+ public DbfTableModel getModel() {
+ return model;
+ }
+
+ public void setValue(int rowIndex, String columnName, Object value) {
+ Preconditions.checkState(model != null, "Model must be built before setting values");
+
+ DbfColumnModel column = columnMap.get(columnName);
+
+ int columnIndex = column.getIndex();
+ value = cleanValue(value, column.getType());
+ model.setValueAt(value, rowIndex, columnIndex);
+ }
+
+ public int addValues(Map<String, Object> values) {
+ Preconditions.checkState(model != null, "Model must be built before adding values");
+
+ model.addBlankRecord();
+ int rowIndex = model.getRowCount() - 1;
+ for (Map.Entry<String, Object> entry : values.entrySet()) {
+ setValue(rowIndex, entry.getKey(), entry.getValue());
+ }
+ return rowIndex;
+ }
+
+ protected Object cleanValue(Object value, byte type) {
+
+ Object result = value;
+ if (DbfTableModel.isNumericalType(type)) {
+
+ // FIX for Integer Format error in DbfTableModel#getStringForType
+ if (value instanceof Integer) {
+ result = Double.valueOf(String.valueOf(value));
+ }
+ }
+ else if (DbfTableModel.TYPE_TIMESTAMP == type) {
+
+ // FIX for Date : no format is done
+ if (value instanceof Date) {
+ Date date = (Date) value;
+
+ result = DbfTimestampConverter.toString(date);
+ }
+ }
+ else if (DbfTableModel.TYPE_DATE == type) {
+
+ // FIX for Date : no format is done
+ if (value instanceof Date) {
+ Date date = (Date) value;
+
+ result = DATE_FORMAT.format(date);
+ }
+ }
+ return result;
+ }
+
+}
Property changes on: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfTableModelBuilder.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/map/DbfTimestampConverter.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfTimestampConverter.java (rev 0)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfTimestampConverter.java 2012-08-08 18:26:09 UTC (rev 372)
@@ -0,0 +1,92 @@
+package fr.ulr.sammoa.application.map;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+import org.nuiton.util.DateUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+/**
+ * Created: 08/08/12
+ *
+ * @author fdesbois <florian.desbois(a)codelutin.com>
+ */
+public final class DbfTimestampConverter {
+
+ protected static final Long HOUR_MULT = 3600000L;
+ protected static final Long MINUTE_MULT = 60000L;
+ protected static final Long SECOND_MULT = 1000L;
+
+
+ private static final Logger logger = LoggerFactory.getLogger(DbfTimestampConverter.class);
+
+ private DbfTimestampConverter() {
+ // static class
+ }
+
+ public static String toString(Date date) {
+
+ Calendar calendar = new GregorianCalendar();
+ calendar.setTime(date);
+
+ Calendar refCalendar = getReferenceCalendar();
+
+ long dateValue = DateUtil.getDifferenceInDays(refCalendar.getTime(), date);
+ long timeValue = calendar.get(Calendar.HOUR_OF_DAY) * HOUR_MULT
+ + calendar.get(Calendar.MINUTE) * MINUTE_MULT
+ + calendar.get(Calendar.SECOND) * SECOND_MULT;
+
+ String result = dateValue + " " + timeValue;
+ return result;
+ }
+
+ public static Date toDate(String timestamp) {
+ Preconditions.checkArgument(Strings.nullToEmpty(timestamp).trim().contains(" "),
+ "A space is missing between the date and time values");
+
+ String[] values = timestamp.split(" ");
+
+ Long dateValue = Long.parseLong(values[0]);
+ Long timeValue = Long.parseLong(values[1]);
+
+ Calendar refCalendar = getReferenceCalendar();
+
+ Calendar resultCalendar = new GregorianCalendar();
+ resultCalendar.setTime(refCalendar.getTime());
+
+ resultCalendar.add(Calendar.DATE, dateValue.intValue());
+
+ Long hours = timeValue / HOUR_MULT;
+ Long timeWithoutHours = timeValue - hours * HOUR_MULT;
+ Long minutes = timeWithoutHours / MINUTE_MULT;
+ Long seconds = (timeWithoutHours - minutes * MINUTE_MULT) / SECOND_MULT;
+
+ resultCalendar.set(Calendar.HOUR_OF_DAY, hours.intValue());
+ resultCalendar.set(Calendar.MINUTE, minutes.intValue());
+ resultCalendar.set(Calendar.SECOND, seconds.intValue());
+
+ if (logger.isDebugEnabled()) {
+ logger.debug(String.format("DateValue=%d, TimeValue=%d, Hours=%d, Minutes=%d, Seconds=%d, Result=%s",
+ dateValue,
+ timeValue,
+ hours,
+ minutes,
+ seconds,
+ resultCalendar)
+ );
+ }
+
+ return resultCalendar.getTime();
+ }
+
+ private static Calendar getReferenceCalendar() {
+ Calendar result = new GregorianCalendar(4713, 0, 1);
+ result.set(Calendar.ERA, GregorianCalendar.BC);
+ return result;
+ }
+
+}
Property changes on: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfTimestampConverter.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/map/ExportMapService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java 2012-08-08 16:50:09 UTC (rev 371)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java 2012-08-08 18:26:09 UTC (rev 372)
@@ -23,12 +23,34 @@
* #L%
*/
+import com.bbn.openmap.dataAccess.shape.DbfTableModel;
+import com.bbn.openmap.dataAccess.shape.EsriGraphicList;
+import com.bbn.openmap.dataAccess.shape.EsriPointList;
+import com.bbn.openmap.dataAccess.shape.EsriShapeExport;
+import com.bbn.openmap.omGraphics.OMGraphic;
+import com.bbn.openmap.omGraphics.OMPoint;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Maps;
import fr.ulr.sammoa.application.SammoaConfig;
import fr.ulr.sammoa.application.SammoaContext;
+import fr.ulr.sammoa.persistence.Campaign;
+import fr.ulr.sammoa.persistence.Flight;
+import fr.ulr.sammoa.persistence.GeoPoint;
+import fr.ulr.sammoa.persistence.Region;
import fr.ulr.sammoa.persistence.SammoaPersistence;
+import org.nuiton.util.PeriodDates;
+import org.nuiton.util.TimeLog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.File;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
/**
* Export map service
*
@@ -40,16 +62,21 @@
private static final Logger logger =
LoggerFactory.getLogger(ExportMapService.class);
+ private static final TimeLog timeLog = new TimeLog(ExportMapService.class);
+
protected SammoaContext context;
protected SammoaConfig config;
protected SammoaPersistence persistence;
+ protected DateFormat timeFormat;
+
public ExportMapService(SammoaContext context) {
this.context = context;
this.persistence = context.getPersistence();
this.config = context.getConfig();
+ this.timeFormat = new SimpleDateFormat("HHmmss");
}
public void exportEffortsMap(ExportMapModel dataModel) {
@@ -84,10 +111,90 @@
dataModel.getExportDirectory() + "::" +
dataModel.getExportFilename());
}
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
+ long startTime = TimeLog.getTime();
+
+ Campaign campaign = dataModel.getCampaign();
+ Region region = campaign.getRegion();
+
+ DbfTableModelBuilder builder = new DbfTableModelBuilder()
+ .stringColumn("REGION")
+ .stringColumn("CAMPAIGN")
+ .integerColumn("FLIGHT")
+ .stringColumn("COMPUTER")
+ .dateColumn("DATE")
+ .stringColumn("HHMMSS")
+ .doubleColumn("LAT", 19, 11)
+ .doubleColumn("LON", 19, 11)
+ .doubleColumn("SPEED", 19, 11)
+ .doubleColumn("ALTITUDE", 19, 11)
+ .build();
+
+ EsriGraphicList graphicList = new EsriPointList();
+ List<Flight> campaignFlights = context.getFlightService().getFlights(dataModel.getCampaign());
+
+ // Filter on period
+ Date beginDate = dataModel.getBeginDate() == null ? campaign.getBeginDate() : dataModel.getBeginDate();
+ Date endDate = dataModel.getEndDate() == null ? campaign.getEndDate() : dataModel.getEndDate();
+ final PeriodDates period = new PeriodDates(beginDate, endDate);
+ Iterable<Flight> flights = Iterables.filter(campaignFlights, new Predicate<Flight>() {
+
+ @Override
+ public boolean apply(Flight input) {
+ return period.between(input.getBeginDate());
+ }
+ });
+
+ // Export for each flight
+ Map<String, Object> record = Maps.newHashMap();
+ for (Flight flight : flights) {
+
+ if (logger.isInfoEnabled()) {
+ logger.info(String.format("Export GeoPoints from flight %d - %s - %s - %s",
+ flight.getFlightNumber(),
+ flight.getSystemId(),
+ campaign.getCode(),
+ region.getCode())
+ );
+ }
+
+ List<GeoPoint> geoPoints = context.getFlightService().getFlightGeoPoints(flight);
+
+ // One record by GeoPoint
+ for (GeoPoint geoPoint : geoPoints) {
+
+ record.clear();
+
+ record.put("REGION", region.getCode());
+ record.put("CAMPAIGN", campaign.getCode());
+ record.put("FLIGHT", flight.getFlightNumber());
+ record.put("COMPUTER", flight.getSystemId());
+ record.put("DATE", geoPoint.getRecordTime());
+ record.put("HHMMSS", timeFormat.format(geoPoint.getRecordTime()));
+ record.put("LAT", geoPoint.getLatitude());
+ record.put("LON", geoPoint.getLongitude());
+ record.put("SPEED", geoPoint.getSpeed());
+ record.put("ALTITUDE", geoPoint.getAltitude());
+
+ builder.addValues(record);
+
+ if (logger.isTraceEnabled()) {
+ logger.trace("Record={}", record);
+ }
+
+ OMGraphic graphic = new OMPoint(geoPoint.getLatitude(), geoPoint.getLongitude());
+ graphicList.add(graphic);
+ }
}
+
+ startTime = timeLog.log(startTime, "exportGeoPointsMap", "after building EsriGraphicList and DbfTableModel");
+
+ // Execute export with EsriShapeExport
+ DbfTableModel tableModel = builder.getModel();
+ String pathFile = new File(dataModel.getExportDirectory(), dataModel.getExportFilename()).getAbsolutePath();
+ EsriShapeExport shapeExport = new EsriShapeExport(graphicList, tableModel, pathFile);
+ shapeExport.export();
+
+ timeLog.log(startTime, "exportGeoPointsMap", "after EsriShapeExport execution");
}
}
Modified: trunk/sammoa-application/src/main/resources/i18n/sammoa-application_en_GB.properties
===================================================================
--- trunk/sammoa-application/src/main/resources/i18n/sammoa-application_en_GB.properties 2012-08-08 16:50:09 UTC (rev 371)
+++ trunk/sammoa-application/src/main/resources/i18n/sammoa-application_en_GB.properties 2012-08-08 18:26:09 UTC (rev 372)
@@ -1,3 +1,4 @@
+csv.import.error.unableToReadField=
sammoa.config.admin.email=Administrator's email
sammoa.config.application.site.url=Website URL of the application
sammoa.config.application.version=Version of the application
Added: trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/DbfTimestampConverterTest.java
===================================================================
--- trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/DbfTimestampConverterTest.java (rev 0)
+++ trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/DbfTimestampConverterTest.java 2012-08-08 18:26:09 UTC (rev 372)
@@ -0,0 +1,32 @@
+package fr.ulr.sammoa.application.map;
+
+import junit.framework.Assert;
+import org.junit.Test;
+import org.nuiton.util.DateUtil;
+
+import java.util.Date;
+
+/**
+ * Created: 08/08/12
+ *
+ * @author fdesbois <florian.desbois(a)codelutin.com>
+ */
+public class DbfTimestampConverterTest {
+
+ @Test
+ public void testToString() throws Exception {
+
+ Date date = DateUtil.createDate(52, 2, 19, 5, 3, 2007);
+ String result = DbfTimestampConverter.toString(date);
+// Assert.assertEquals(result, "2454488 68572000");
+ Assert.assertEquals(result, "2454165 68572000");
+ }
+
+ @Test
+ public void testToDate() throws Exception {
+
+ Date expected = DateUtil.createDate(52, 2, 19, 5, 3, 2007);
+ Date result = DbfTimestampConverter.toDate("2454165 68572000");
+ Assert.assertEquals(expected, result);
+ }
+}
Property changes on: trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/DbfTimestampConverterTest.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.java
===================================================================
--- trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.java (rev 0)
+++ trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.java 2012-08-08 18:26:09 UTC (rev 372)
@@ -0,0 +1,222 @@
+package fr.ulr.sammoa.application.map;
+
+import com.google.common.collect.Lists;
+import fr.ulr.sammoa.application.FlightService;
+import fr.ulr.sammoa.application.SammoaConfig;
+import fr.ulr.sammoa.application.SammoaContext;
+import fr.ulr.sammoa.application.csv.DoubleToIntegerValueParser;
+import fr.ulr.sammoa.persistence.Campaign;
+import fr.ulr.sammoa.persistence.CampaignImpl;
+import fr.ulr.sammoa.persistence.Flight;
+import fr.ulr.sammoa.persistence.FlightImpl;
+import fr.ulr.sammoa.persistence.GeoPoint;
+import fr.ulr.sammoa.persistence.GeoPointDAO;
+import fr.ulr.sammoa.persistence.GeoPointImpl;
+import fr.ulr.sammoa.persistence.Region;
+import fr.ulr.sammoa.persistence.RegionImpl;
+import fr.ulr.sammoa.persistence.SammoaDAOHelper;
+import fr.ulr.sammoa.persistence.SammoaDatabase;
+import junit.framework.Assert;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.util.DateUtil;
+import org.nuiton.util.csv.Common;
+import org.nuiton.util.csv.ImportModel;
+import org.nuiton.util.csv.ImportableColumn;
+import org.nuiton.util.csv.ModelBuilder;
+import org.nuiton.util.csv.ValueSetter;
+
+import java.io.File;
+import java.net.URL;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created: 08/08/12
+ *
+ * @author fdesbois <florian.desbois(a)codelutin.com>
+ */
+public class ExportMapServiceTest {
+
+ public SammoaConfig config =
+ new SammoaConfig("sammoa-test.properties");
+
+ @Rule
+ public SammoaDatabase database = new SammoaDatabase("/" +
+ config.getApplicationConfig().getConfigFileName(), config.getAutoCommitDelay());
+
+ protected TopiaContext transaction;
+
+ @Before
+ public void setUp() throws TopiaException {
+ transaction = database.beginTransaction();
+ }
+
+ @After
+ public void tearDown() throws TopiaException {
+ database.endTransaction(transaction);
+ }
+
+ @Test
+ public void testExportGeoPointsMap() throws Exception {
+
+ SammoaContext context = new SammoaContext(config, database.getPersistence());
+
+ Campaign campaign = database.createCampaign("PACOMM", "FRANCE");
+ campaign.setBeginDate(DateUtil.createDate(1, 1, 2012));
+ campaign.setEndDate(DateUtil.createDate(31, 12, 2012));
+
+ FlightService flightService = new FlightService(context);
+ Flight flight = flightService.createFlight(campaign);
+
+ flight.setBeginDate(DateUtil.createDate(18, 0, 12, 18, 7, 2012));
+
+ createGeoPoint(DateUtil.createDate(30, 15, 12, 18, 7, 2012), 1, 2, flight);
+ createGeoPoint(DateUtil.createDate(39, 18, 12, 18, 7, 2012), 3, 4, flight);
+
+ transaction.commitTransaction();
+
+ ExportMapService exportMapService = new ExportMapService(context);
+
+ File exportDirectory = database.getTestBasedir();
+
+ ExportMapModel exportMapModel = ExportMapModel.newModel(
+ exportDirectory,
+ "export-geoPoints.shp",
+ campaign,
+ null,
+ null,
+ null,
+ null,
+ null
+ );
+
+ exportMapService.exportGeoPointsMap(exportMapModel);
+
+ Assert.assertTrue(new File(exportDirectory, "export-geoPoints.shp").exists());
+ Assert.assertTrue(new File(exportDirectory, "export-geoPoints.dbf").exists());
+ Assert.assertTrue(new File(exportDirectory, "export-geoPoints.shx").exists());
+
+ URL fileUrl = new File(exportDirectory, "export-geoPoints.dbf").toURI().toURL();
+ DbfImport<GeoPoint> dbfImport = new DbfImport<GeoPoint>(new GeoPointImportModel(), fileUrl);
+
+ List<GeoPoint> results = Lists.newArrayList(dbfImport);
+
+ Assert.assertEquals(2, results.size());
+ {
+ GeoPoint result = results.get(0);
+ Flight resultFlight = result.getFlight();
+ Campaign resultCampaign = resultFlight.getCampaign();
+ Region resultRegion = resultCampaign.getRegion();
+ Assert.assertEquals("FRANCE", resultRegion.getCode());
+ Assert.assertEquals("PACOMM", resultCampaign.getCode());
+ Assert.assertEquals(1, resultFlight.getFlightNumber());
+ Assert.assertEquals("A", resultFlight.getSystemId());
+ Assert.assertEquals(DateUtil.createDate(30, 15, 12, 18, 7, 2012), result.getRecordTime());
+ Assert.assertEquals(1., result.getLatitude());
+ Assert.assertEquals(2., result.getLongitude());
+ Assert.assertEquals(0., result.getAltitude());
+ Assert.assertEquals(0., result.getSpeed());
+ }
+ {
+ GeoPoint result = results.get(1);
+ Flight resultFlight = result.getFlight();
+ Campaign resultCampaign = resultFlight.getCampaign();
+ Region resultRegion = resultCampaign.getRegion();
+ Assert.assertEquals("FRANCE", resultRegion.getCode());
+ Assert.assertEquals("PACOMM", resultCampaign.getCode());
+ Assert.assertEquals(1, resultFlight.getFlightNumber());
+ Assert.assertEquals("A", resultFlight.getSystemId());
+ Assert.assertEquals(DateUtil.createDate(39, 18, 12, 18, 7, 2012), result.getRecordTime());
+ Assert.assertEquals(3., result.getLatitude());
+ Assert.assertEquals(4., result.getLongitude());
+ Assert.assertEquals(0., result.getAltitude());
+ Assert.assertEquals(0., result.getSpeed());
+ }
+ }
+
+ protected GeoPoint createGeoPoint(Date date,
+ double latitude,
+ double longitude,
+ Flight flight)
+ throws TopiaException {
+
+ GeoPointDAO transectDAO = SammoaDAOHelper.getGeoPointDAO(transaction);
+ GeoPoint result = transectDAO.create();
+ result.setRecordTime(date);
+ result.setLatitude(latitude);
+ result.setLongitude(longitude);
+ result.setFlight(flight);
+
+ return result;
+ }
+
+ protected class GeoPointImportModel implements ImportModel<GeoPoint> {
+
+ @Override
+ public char getSeparator() {
+ return ' ';
+ }
+
+ @Override
+ public void pushCsvHeaderNames(List<String> headerNames) {
+ }
+
+ @Override
+ public GeoPoint newEmptyInstance() {
+ Region region = new RegionImpl();
+ Campaign campaign = new CampaignImpl();
+ campaign.setRegion(region);
+ Flight flight = new FlightImpl();
+ flight.setCampaign(campaign);
+ GeoPoint result = new GeoPointImpl();
+ result.setFlight(flight);
+ return result;
+ }
+
+ @Override
+ public Iterable<ImportableColumn<GeoPoint, Object>> getColumnsForImport() {
+ ModelBuilder builder = new ModelBuilder();
+ builder.newMandatoryColumn("REGION", "flight.campaign.region.code");
+ builder.newMandatoryColumn("CAMPAIGN", "flight.campaign.code");
+ builder.newMandatoryColumn("FLIGHT", "flight.flightNumber", new DoubleToIntegerValueParser());
+ builder.newMandatoryColumn("COMPUTER", "flight.systemId");
+ builder.newMandatoryColumn("DATE", "recordTime", new Common.DateValue(DbfTableModelBuilder.DATE_FORMAT_PATTERN));
+ builder.newMandatoryColumn("HHMMSS", new Common.DateValue("HHmmss"), new GeoPointTimeValueSetter());
+ builder.newMandatoryColumn("LAT", "latitude", Common.DOUBLE_PRIMITIVE);
+ builder.newMandatoryColumn("LON", "longitude", Common.DOUBLE_PRIMITIVE);
+ builder.newMandatoryColumn("SPEED", "speed", Common.DOUBLE_PRIMITIVE);
+ builder.newMandatoryColumn("ALTITUDE", "altitude", Common.DOUBLE_PRIMITIVE);
+ return builder.getColumnsForImport();
+ }
+ }
+
+ protected class GeoPointTimeValueSetter implements ValueSetter<GeoPoint, Date> {
+
+ @Override
+ public void set(GeoPoint object, Date value) throws Exception {
+ Date recordTime = object.getRecordTime();
+// if (recordTime != null) {
+ Calendar resultCalendar = Calendar.getInstance();
+ resultCalendar.setTime(recordTime);
+
+ Calendar valueCalendar = Calendar.getInstance();
+ valueCalendar.setTime(value);
+ resultCalendar.set(Calendar.HOUR_OF_DAY, valueCalendar.get(Calendar.HOUR_OF_DAY));
+ resultCalendar.set(Calendar.MINUTE, valueCalendar.get(Calendar.MINUTE));
+ resultCalendar.set(Calendar.SECOND, valueCalendar.get(Calendar.SECOND));
+
+ object.setRecordTime(resultCalendar.getTime());
+
+// } else {
+// object.setRecordTime(value);
+// }
+ }
+
+ }
+}
Property changes on: trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.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/flight/FlightUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-08 16:50:09 UTC (rev 371)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-08 18:26:09 UTC (rev 372)
@@ -208,9 +208,9 @@
List<Route> routes = getFlightService().getRoutes(flight);
List<GeoPoint> geoPoints = getFlightService().getFlightGeoPoints(flight);
- if (logger.isDebugEnabled()) {
+ if (logger.isTraceEnabled()) {
for (GeoPoint geoPoint : geoPoints) {
- logger.debug(String.format("GeoPoint={%1$tH:%1$tM:%1$tS,%2$f,%3$f}",
+ logger.trace(String.format("GeoPoint={%1$tH:%1$tM:%1$tS,%2$f,%3$f}",
geoPoint.getRecordTime(),
geoPoint.getLatitude(),
geoPoint.getLongitude())
Deleted: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/DbfImport.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/DbfImport.java 2012-08-08 16:50:09 UTC (rev 371)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/DbfImport.java 2012-08-08 18:26:09 UTC (rev 372)
@@ -1,129 +0,0 @@
-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.bbn.openmap.dataAccess.shape.DbfTableModel;
-import com.google.common.base.Throwables;
-import com.google.common.collect.Lists;
-import org.nuiton.util.csv.Import;
-import org.nuiton.util.csv.ImportModel;
-import org.nuiton.util.csv.ImportRuntimeException;
-import org.nuiton.util.csv.ImportableColumn;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.net.URL;
-import java.util.Iterator;
-import java.util.List;
-
-import static org.nuiton.i18n.I18n._;
-
-/**
- * Created: 25/07/12
- *
- * @author fdesbois <desbois(a)codelutin.com>
- */
-public class DbfImport<E> extends Import<E> {
-
- private static final Logger logger = LoggerFactory.getLogger(DbfImport.class);
-
- protected DbfTableModel source;
-
- protected Iterator<List<Object>> records;
-
- protected List<Object> record;
-
- public DbfImport(ImportModel<E> model, URL fileUrl) {
- // Use dummy reader for superclass Import that manage by default csv files
- super(model, new Reader() {
-
- @Override
- public int read(char[] cbuf, int off, int len) throws IOException {
- return -1;
- }
-
- @Override
- public void close() throws IOException {
- }
- });
-
- try {
- // FIXME-fdesbois-2012-07-26 : there is an issue with encoding, don't know how to customize it
- this.source = DbfTableModel.read(fileUrl);
-
- } catch (Exception e) {
- throw Throwables.propagate(e);
- }
- this.records = source.getRecords();
- }
-
- @Override
- protected <T> String readValue(ImportableColumn<E, T> field, int lineNumber) {
- try {
-
- int columnNumber = source.getColumnIndexForName(field.getHeaderName());
-
- String value = String.valueOf(record.get(columnNumber));
-
- return value;
-
- } catch (Exception e) {
- throw new ImportRuntimeException(
- _("csv.import.error.unableToReadField",
- field.getHeaderName(), lineNumber), e);
- }
- }
-
- @Override
- public void close() {
- // nothing to do
- }
-
- @Override
- protected boolean readRow() throws ImportRuntimeException {
- boolean result;
- if (records.hasNext()) {
- record = records.next();
- if (logger.isTraceEnabled()) {
- logger.trace("Read record {}", record);
- }
- result = true;
-
- } else {
- result = false;
- }
- return result;
- }
-
- @Override
- protected String[] getHeaders() throws ImportRuntimeException {
- List<String> list = Lists.newArrayList();
- for (int index = 0; index < source.getColumnCount(); index++) {
- list.add(source.getColumnName(index));
- }
- return list.toArray(new String[list.size()]);
- }
-}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ShpImporter.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ShpImporter.java 2012-08-08 16:50:09 UTC (rev 371)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ShpImporter.java 2012-08-08 18:26:09 UTC (rev 372)
@@ -24,6 +24,7 @@
*/
import com.google.common.io.Files;
+import fr.ulr.sammoa.application.map.DbfImport;
import org.apache.commons.io.FileUtils;
import org.nuiton.util.csv.ImportModel;
import org.slf4j.Logger;
1
0
Author: tchemit
Date: 2012-08-08 18:50:09 +0200 (Wed, 08 Aug 2012)
New Revision: 371
Url: http://forge.codelutin.com/repositories/revision/sammoa/371
Log:
updates to nuiton-utils 2.5.3 and jaxx 2.5.4
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-08-08 16:00:02 UTC (rev 370)
+++ trunk/pom.xml 2012-08-08 16:50:09 UTC (rev 371)
@@ -109,7 +109,7 @@
<!-- libraries version -->
- <nuitonUtilsVersion>2.5.2</nuitonUtilsVersion>
+ <nuitonUtilsVersion>2.5.3</nuitonUtilsVersion>
<nuitonI18nVersion>2.4.1</nuitonI18nVersion>
<eugenePluginVersion>2.4.2</eugenePluginVersion>
@@ -121,7 +121,7 @@
<h2Version>1.3.168</h2Version>
<postgresqlVersion>9.1-901-1.jdbc4</postgresqlVersion>
- <jaxxVersion>2.5.4-SNAPSHOT</jaxxVersion>
+ <jaxxVersion>2.5.4</jaxxVersion>
<swingXVersion>1.6.4</swingXVersion>
<xworkVersion>2.3.4</xworkVersion>
1
0
r370 - in trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing: campaign region
by tchemit@users.forge.codelutin.com 08 Aug '12
by tchemit@users.forge.codelutin.com 08 Aug '12
08 Aug '12
Author: tchemit
Date: 2012-08-08 18:00:02 +0200 (Wed, 08 Aug 2012)
New Revision: 370
Url: http://forge.codelutin.com/repositories/revision/sammoa/370
Log:
fixes 1384: Probl?\195?\168me de filtres sur les extensions de fichier dans les ?\195?\169diteurs (Windows)
Modified:
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/campaign/CampaignUI.css
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/region/RegionUI.css
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/campaign/CampaignUI.css
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/campaign/CampaignUI.css 2012-08-08 15:58:36 UTC (rev 369)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/campaign/CampaignUI.css 2012-08-08 16:00:02 UTC (rev 370)
@@ -22,6 +22,11 @@
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
+
+FileEditor {
+ acceptAllFileFilterUsed:false;
+}
+
#campaignRegionLabel {
text:"sammoa.label.campaign.region";
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/region/RegionUI.css
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/region/RegionUI.css 2012-08-08 15:58:36 UTC (rev 369)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/region/RegionUI.css 2012-08-08 16:00:02 UTC (rev 370)
@@ -22,6 +22,11 @@
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
+
+FileEditor {
+ acceptAllFileFilterUsed:false;
+}
+
#regionCodeLabel {
text:"sammoa.label.region.code";
}
1
0
Author: tchemit
Date: 2012-08-08 17:58:36 +0200 (Wed, 08 Aug 2012)
New Revision: 369
Url: http://forge.codelutin.com/repositories/revision/sammoa/369
Log:
add default goal on assembly profile
Modified:
trunk/sammoa-ui-swing/pom.xml
Modified: trunk/sammoa-ui-swing/pom.xml
===================================================================
--- trunk/sammoa-ui-swing/pom.xml 2012-08-08 12:39:52 UTC (rev 368)
+++ trunk/sammoa-ui-swing/pom.xml 2012-08-08 15:58:36 UTC (rev 369)
@@ -384,6 +384,7 @@
</property>
</activation>
<build>
+ <defaultGoal>package</defaultGoal>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
1
0
r368 - trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/exportMap
by tchemit@users.forge.codelutin.com 08 Aug '12
by tchemit@users.forge.codelutin.com 08 Aug '12
08 Aug '12
Author: tchemit
Date: 2012-08-08 14:39:52 +0200 (Wed, 08 Aug 2012)
New Revision: 368
Url: http://forge.codelutin.com/repositories/revision/sammoa/368
Log:
create ExportMapModel
Modified:
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/exportMap/ExportMapUIHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/exportMap/ExportMapUIModel.java
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/exportMap/ExportMapUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/exportMap/ExportMapUIHandler.java 2012-08-08 12:38:50 UTC (rev 367)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/exportMap/ExportMapUIHandler.java 2012-08-08 12:39:52 UTC (rev 368)
@@ -106,15 +106,9 @@
ExportMapUIModel model = new ExportMapUIModel();
List<Campaign> campaigns = getReferentialService().getCampaigns();
+ //TODO-tchemit-2012-08-03 add an null campaign (for test purpose, should be removed...)
campaigns.add(0, null);
model.setCampaigns(campaigns);
-
-// List<String> speciesTypes = getReferentialService().getAllSpeciesTypes();
-// model.setSpeciesTypes(StringRefs.toRefs(speciesTypes));
-//
-// List<Species> species = getReferentialService().getAllSpecies();
-// model.setSpecies(species);
-
model.setRouteTypes(Lists.newArrayList(RouteType.values()));
String campaignId = context.getCampaignId();
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/exportMap/ExportMapUIModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/exportMap/ExportMapUIModel.java 2012-08-08 12:38:50 UTC (rev 367)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/exportMap/ExportMapUIModel.java 2012-08-08 12:39:52 UTC (rev 368)
@@ -28,6 +28,7 @@
import fr.ulr.sammoa.persistence.Campaign;
import fr.ulr.sammoa.persistence.RouteType;
import fr.ulr.sammoa.persistence.Species;
+import fr.ulr.sammoa.persistence.Species2;
import fr.ulr.sammoa.persistence.Strate;
import fr.ulr.sammoa.persistence.StringRef;
import org.jdesktop.beans.AbstractSerializableBean;
@@ -312,6 +313,10 @@
}
public ExportMapModel toModel(String filename) {
+
+ List<Species> speciesToUse = Species2.getSelectedSpecies(
+ getSpecies(), getSelectedSpecies(), getSelectedSpeciesTypes());
+
ExportMapModel result = ExportMapModel.newModel(
getExportDirectory(),
filename,
@@ -320,8 +325,7 @@
getEndDate(),
getSelectedStrates(),
getSelectedRouteTypes(),
- getSelectedSpecies(),
- getSelectedSpeciesTypes()
+ speciesToUse
);
return result;
}
1
0
r367 - trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence
by tchemit@users.forge.codelutin.com 08 Aug '12
by tchemit@users.forge.codelutin.com 08 Aug '12
08 Aug '12
Author: tchemit
Date: 2012-08-08 14:38:50 +0200 (Wed, 08 Aug 2012)
New Revision: 367
Url: http://forge.codelutin.com/repositories/revision/sammoa/367
Log:
add revert method (StringRef to String
Modified:
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/StringRefs.java
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/StringRefs.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/StringRefs.java 2012-08-08 12:37:23 UTC (rev 366)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/StringRefs.java 2012-08-08 12:38:50 UTC (rev 367)
@@ -37,7 +37,6 @@
*/
public class StringRefs {
-
public static List<StringRef> toRefs(List<String> strings) {
List<StringRef> result =
@@ -45,6 +44,13 @@
return result;
}
+ public static List<String> toStrings(List<StringRef> strings) {
+
+ List<String> result =
+ Lists.newArrayList(Iterables.transform(strings, TO_STRING_FUNCTION));
+ return result;
+ }
+
protected static Function<String, StringRef> TO_STRING_REF_FUNCTION =
new Function<String, StringRef>() {
1
0
r366 - trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence
by tchemit@users.forge.codelutin.com 08 Aug '12
by tchemit@users.forge.codelutin.com 08 Aug '12
08 Aug '12
Author: tchemit
Date: 2012-08-08 14:37:23 +0200 (Wed, 08 Aug 2012)
New Revision: 366
Url: http://forge.codelutin.com/repositories/revision/sammoa/366
Log:
add method to compute selected filter for Species and SpeciesTypes
Modified:
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Species2.java
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Species2.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Species2.java 2012-08-08 12:36:48 UTC (rev 365)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Species2.java 2012-08-08 12:37:23 UTC (rev 366)
@@ -23,8 +23,12 @@
* #L%
*/
+import com.google.common.base.Function;
import com.google.common.collect.Lists;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Multimaps;
import com.google.common.collect.Sets;
+import org.apache.commons.collections.CollectionUtils;
import java.util.Collection;
import java.util.List;
@@ -49,4 +53,61 @@
}
return Lists.newArrayList(types);
}
+
+ /**
+ * Given a universe of species ({@code allSpecies}, and selected
+ * species ({@code selectedSpecies}) and selected species
+ * types ({@code speciesTypeSelected}), get all selected species.
+ * <p/>
+ * <strong>Note:</strong> if no species types are selected, then selects
+ * all of them (means at the end selected all species).
+ * <p/>
+ * <strong>Note:</strong> if all species are selected, then returns an
+ * empty list (usage of empty selected filter).
+ *
+ * @param allSpecies universe of definied species
+ * @param selectedSpecies selected species
+ * @param speciesTypeSelected selected species types (if empty then all are selected).
+ * @return the list of selected species (empty if all species are selected).
+ */
+ public static List<Species> getSelectedSpecies(List<Species> allSpecies,
+ List<Species> selectedSpecies,
+ List<StringRef> speciesTypeSelected) {
+ Set<Species> result = Sets.newHashSet();
+
+ // add all selected species
+ result.addAll(selectedSpecies);
+
+ if (CollectionUtils.isEmpty(speciesTypeSelected)) {
+
+ // no sepecies type selected : means select all types --> all species
+
+ } else {
+
+ // there is some selected species types
+
+ Multimap<String, Species> speciesByType =
+ Multimaps.index(allSpecies, TO_SPECIES_TYPE);
+
+ for (StringRef typeRef : speciesTypeSelected) {
+ String type = typeRef.getValue();
+ Collection<Species> speciesForType = speciesByType.get(type);
+ result.addAll(speciesForType);
+ }
+ }
+
+ if (result.size() == allSpecies.size()) {
+
+ // all species selected, so use none
+ result.clear();
+ }
+ return Lists.newArrayList(result);
+ }
+
+ protected static Function<Species, String> TO_SPECIES_TYPE = new Function<Species, String>() {
+ @Override
+ public String apply(Species input) {
+ return input.getType();
+ }
+ };
}
1
0