Tutti-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
January 2013
- 4 participants
- 143 discussions
r219 - trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation
by kmorin@users.forge.codelutin.com 18 Jan '13
by kmorin@users.forge.codelutin.com 18 Jan '13
18 Jan '13
Author: kmorin
Date: 2013-01-18 09:03:47 +0100 (Fri, 18 Jan 2013)
New Revision: 219
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/219
Log:
debug build #175
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-17 17:08:09 UTC (rev 218)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-18 08:03:47 UTC (rev 219)
@@ -286,8 +286,10 @@
@Override
public void propertyChange(PropertyChangeEvent evt) {
- boolean valid = (boolean) evt.getNewValue();
- ui.getSaveButton().setEnabled(valid);
+ Boolean valid = (Boolean) evt.getNewValue();
+ if (valid != null) {
+ ui.getSaveButton().setEnabled(valid);
+ }
}
});
}
1
0
17 Jan '13
Author: kmorin
Date: 2013-01-17 18:08:09 +0100 (Thu, 17 Jan 2013)
New Revision: 218
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/218
Log:
- improve the error table
- readd the save button in the fishing operation edition screen
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTableModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingRowModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SwingValidatorMessageWidget.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIModel.java
trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java 2013-01-17 17:08:09 UTC (rev 218)
@@ -36,22 +36,12 @@
import fr.ifremer.tutti.ui.swing.content.program.EditProgramUI;
import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI;
import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
-import java.awt.BorderLayout;
-import java.awt.Component;
import java.awt.Desktop;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.net.URL;
import java.util.Calendar;
-import javax.swing.JButton;
import javax.swing.JComponent;
-import javax.swing.JMenuItem;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
import javax.swing.JToolBar;
import jaxx.runtime.swing.AboutPanel;
import jaxx.runtime.swing.ErrorDialogUI;
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java 2013-01-17 17:08:09 UTC (rev 218)
@@ -33,6 +33,7 @@
import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler;
import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
+import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
@@ -45,15 +46,17 @@
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.List;
+import javax.swing.CellRendererPane;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JList;
+import javax.swing.JScrollPane;
+import javax.swing.JViewport;
import javax.swing.border.EmptyBorder;
-import javax.swing.event.PopupMenuEvent;
-import javax.swing.event.PopupMenuListener;
+import javax.swing.plaf.basic.BasicComboPopup;
import jaxx.runtime.SwingUtil;
import static org.nuiton.i18n.I18n._;
@@ -207,36 +210,6 @@
return result;
}
});
- newProtocolCombo.addMouseListener(new MouseAdapter() {
-
- @Override
- public void mouseEntered(MouseEvent e) {
- newProtocolCombo.showPopup();
- }
-
- });
-// newProtocolCombo.addPopupMenuListener(new PopupMenuListener() {
-//
-// @Override
-// public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
-// newProtocolCombo.getComponentPopupMenu().addMouseListener(new MouseAdapter() {
-//
-// @Override
-// public void mouseExited(MouseEvent e) {
-// newProtocolCombo.hidePopup();
-// }
-//
-// });
-// }
-//
-// @Override
-// public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
-// }
-//
-// @Override
-// public void popupMenuCanceled(PopupMenuEvent e) {
-// }
-// });
newProtocolCombo.setModel(protocolActions);
model.addPropertyChangeListener(SelectCruiseUIModel.PROPERTY_PROGRAM, new PropertyChangeListener() {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-01-17 17:08:09 UTC (rev 218)
@@ -418,14 +418,9 @@
horizontalAlignment: {JLabel.CENTER};
}
-#createFishingOperationActions {
- visible: {!model.isPersisted()};
-}
-
#saveButton {
actionIcon: save;
text: "tutti.action.save";
- enabled: {model.isValid()};
}
#cancelButton {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-17 17:08:09 UTC (rev 218)
@@ -36,6 +36,7 @@
import fr.ifremer.tutti.service.PersistenceService;
import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel;
import fr.ifremer.tutti.ui.swing.MainUI;
+import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentTabUI;
import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentTabUIModel;
import fr.ifremer.tutti.ui.swing.content.operation.fishing.gearshooting.GearShootingTabUI;
@@ -67,8 +68,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.1
*/
-public class EditFishingOperationUIHandler extends AbstractTuttiTabContainerUIHandler<EditFishingOperationUIModel>
- implements TabHandler {
+public class EditFishingOperationUIHandler extends AbstractTuttiTabContainerUIHandler<EditFishingOperationUIModel> {
/** Logger. */
private static final Log log =
@@ -267,6 +267,32 @@
hydrologyModel.setAvailableCaracteristics(persistenceService.getAllFishingOperationHydrologicCaracteristic());
setCustomTab(3, hydrologyModel);
+ if (TuttiUIContext.VALIDATION_CONTEXT_VALIDATE.equals(model.getValidationContext())) {
+ PropertyChangeListener pcl = new PropertyChangeListener() {
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ boolean allModelsValid = areAllModelsValid();
+ ui.getSaveButton().setEnabled(allModelsValid);
+ }
+ };
+ gearShootingModel.addPropertyChangeListener(AbstractTuttiBeanUIModel.PROPERTY_VALID, pcl);
+ environmentModel.addPropertyChangeListener(AbstractTuttiBeanUIModel.PROPERTY_VALID, pcl);
+ hydrologyModel.addPropertyChangeListener(AbstractTuttiBeanUIModel.PROPERTY_VALID, pcl);
+ model.addPropertyChangeListener(AbstractTuttiBeanUIModel.PROPERTY_VALID, pcl);
+
+ } else {
+ model.addPropertyChangeListener(AbstractTuttiBeanUIModel.PROPERTY_VALID, new PropertyChangeListener() {
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ boolean valid = (boolean) evt.getNewValue();
+ ui.getSaveButton().setEnabled(valid);
+ }
+ });
+ }
+
+
MainUI main = ui.getContextValue(MainUI.class, MainUI.class.getName());
main.clearValidators();
main.registerValidator(ui.getValidator());
@@ -294,36 +320,6 @@
}
@Override
- protected boolean onTabChanged(int currentIndex, int newIndex) {
- boolean result = super.onTabChanged(currentIndex, newIndex);
- if (result && currentIndex != newIndex && currentIndex >= 0) {
- CustomTab currentTab = (CustomTab) getTabPanel().getTabComponentAt(currentIndex);
- AbstractTuttiBeanUIModel model = currentTab.getModel();
- result = model.isValid();
-
- if (result && !model.isCreate() && model.isModify()) {
- save();
- }
- }
- return result;
- }
-
- @Override
- public boolean onHideTab() {
- AbstractTuttiBeanUIModel model = getModel();
- boolean result = model.isValid();
- if (result && !model.isCreate() && model.isModify()) {
- save();
- }
- return result;
- }
-
- @Override
- public void onShowTab() {
- log.info("show tab");
- }
-
- @Override
protected EditFishingOperationUIModel getModel() {
return ui.getModel();
}
@@ -333,10 +329,6 @@
//------------------------------------------------------------------------//
public void clearFishingOperation() {
- if (fishingOperationMonitor.wasModified()) {
- save();
- }
-
EditFishingOperationUIModel model = getModel();
model.fromBean(new FishingOperation());
@@ -348,11 +340,6 @@
}
public void selectFishingOperation(FishingOperation bean) {
-
- if (fishingOperationMonitor.wasModified()) {
- save();
- }
-
boolean empty = bean == null;
EditFishingOperationUIModel model = getModel();
@@ -418,17 +405,11 @@
public void cancel() {
- String id = getModel().getId();
-
if (log.isInfoEnabled()) {
- log.info("Cancel edition for fishingOperation: " + id);
+ log.info("Cancel edition for fishingOperation ");
}
- boolean newBean = StringUtils.isBlank(id);
-
- if (newBean) {
- // cancel to create a new fishingOperation
- parentUi.getHandler().closeCurrentFishingOperation();
- }
+ // cancel to create a new fishingOperation
+ parentUi.getHandler().closeCurrentFishingOperation();
}
public void save() {
@@ -448,7 +429,7 @@
// save modified fishing operation
FishingOperation toSave = beanToSave.toBean();
-
+
showInformationMessage(
"[ Trait - Caractéristiques générales ] " +
"Sauvegarde des modifications de " + decorate(toSave) +
@@ -567,5 +548,13 @@
ui.getLocationComboBox().setData(location);
}
}
+
+ protected boolean areAllModelsValid() {
+ GearShootingTabUIModel gearShootingModel = ui.getGearShootingTabContent().getModel();
+ EnvironmentTabUIModel environmentModel = ui.getEnvironmentTabContent().getModel();
+ HydrologyTabUIModel hydrologyModel = ui.getHydrologyTabContent().getModel();
+ return getModel().isValid() && gearShootingModel.isValid()
+ && environmentModel.isValid() && hydrologyModel.isValid();
+ }
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-01-17 17:08:09 UTC (rev 218)
@@ -134,7 +134,7 @@
* @since 0.2
*/
protected boolean empty;
-
+
protected Cruise cruise;
protected String stationNumber;
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIHandler.java 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIHandler.java 2013-01-17 17:08:09 UTC (rev 218)
@@ -110,15 +110,8 @@
log.info("Row " + row + " was modified, will save it");
}
- showInformationMessage(
- "[ Trait - Environnement ] " +
- "Sauvegarde des modifications de " + row + ".");
-
saveRow(row);
- // clear modified flag on the monitor
- rowMonitor.clearModified();
- getModel().setModify(false);
}
}
}
@@ -191,7 +184,7 @@
super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow);
getModel().setRemoveCaracteristicEnabled(newRow != null);
}
-
+
//------------------------------------------------------------------------//
//-- Public methods --//
//------------------------------------------------------------------------//
@@ -214,7 +207,7 @@
EnvironmentTabUIModel model = getModel();
model.setModify(true);
- model.setValid(row.isValid());
+ recomputeRowValidState(row);
}
/** Resets the table with the data from the database */
@@ -281,15 +274,12 @@
FishingOperation fishingOperation = getModel().getFishingOperation();
Preconditions.checkNotNull(fishingOperation);
- fishingOperation.getEnvironmentCaracteristics().remove(row.getKey());
-
- if (TuttiEntities.isNew(fishingOperation)) {
-
- fishingOperation = persistenceService.createFishingOperation(fishingOperation);
- } else {
- persistenceService.saveFishingOperation(fishingOperation);
+ CaracteristicMap caracteristicMap = fishingOperation.getEnvironmentCaracteristics();
+ if (caracteristicMap != null) {
+ caracteristicMap.remove(row.getKey());
}
+
//add the row in the combo
BeanComboBox keyCombo = ui.getNewRowKey();
keyCombo.addItem(row.getKey());
@@ -301,6 +291,8 @@
// refresh all the table
getTableModel().fireTableRowsDeleted(rowIndex, rowIndex);
+ getModel().removeRowInError(row);
+
}
//------------------------------------------------------------------------//
@@ -309,19 +301,16 @@
protected void saveRow(EnvironmentRowModel row) {
- FishingOperation fishingOperation = getModel().getFishingOperation();
- Preconditions.checkNotNull(fishingOperation);
+ if (row.isValid()) {
+ FishingOperation fishingOperation = getModel().getFishingOperation();
+ Preconditions.checkNotNull(fishingOperation);
- if (fishingOperation.getEnvironmentCaracteristics() == null) {
- fishingOperation.setEnvironmentCaracteristics(new CaracteristicMap());
- }
- fishingOperation.getEnvironmentCaracteristics().put(row.getKey(), row.getValue());
-
- if (TuttiEntities.isNew(fishingOperation)) {
+ if (fishingOperation.getEnvironmentCaracteristics() == null) {
+ fishingOperation.setEnvironmentCaracteristics(new CaracteristicMap());
+ }
- fishingOperation = persistenceService.createFishingOperation(fishingOperation);
- } else {
- persistenceService.saveFishingOperation(fishingOperation);
+ fishingOperation.getEnvironmentCaracteristics().put(row.getKey(), row.getValue());
}
}
+
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIModel.java 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIModel.java 2013-01-17 17:08:09 UTC (rev 218)
@@ -24,11 +24,14 @@
* #L%
*/
+import com.google.common.collect.Lists;
import fr.ifremer.tutti.persistence.entities.CaracteristicMap;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUIModel;
import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
import org.nuiton.util.beans.Binder;
import org.nuiton.util.beans.BinderModelBuilder;
@@ -103,4 +106,5 @@
this.removeCaracteristicEnabled = removeCaracteristicEnabled;
firePropertyChange(PROPERTY_REMOVE_CARACTERISTIC_ENABLED, oldValue, removeCaracteristicEnabled);
}
+
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTableModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTableModel.java 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTableModel.java 2013-01-17 17:08:09 UTC (rev 218)
@@ -26,7 +26,6 @@
import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel;
import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier;
-
import javax.swing.table.TableColumnModel;
import static org.nuiton.i18n.I18n.n_;
@@ -59,4 +58,5 @@
EnvironmentRowModel result = new EnvironmentRowModel();
return result;
}
+
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingRowModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingRowModel.java 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingRowModel.java 2013-01-17 17:08:09 UTC (rev 218)
@@ -28,6 +28,8 @@
import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel;
import fr.ifremer.tutti.ui.swing.util.table.CaracteristicRow;
import java.io.Serializable;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.nuiton.util.beans.Binder;
import org.nuiton.util.beans.BinderFactory;
@@ -38,6 +40,8 @@
public class GearShootingRowModel extends AbstractTuttiBeanUIModel<CaracteristicRow, GearShootingRowModel> {
private static final long serialVersionUID = 1L;
+
+ private static final Log log = LogFactory.getLog(GearShootingRowModel.class);
public static final String PROPERTY_KEY = "key";
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIHandler.java 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIHandler.java 2013-01-17 17:08:09 UTC (rev 218)
@@ -32,7 +32,9 @@
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.service.DecoratorService;
+import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUI;
+import fr.ifremer.tutti.ui.swing.util.TabHandler;
import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
import fr.ifremer.tutti.ui.swing.util.editor.CaracteristicValueEditor;
import fr.ifremer.tutti.ui.swing.util.editor.CaracteristicValueRenderer;
@@ -111,15 +113,8 @@
log.info("Row " + row + " was modified, will save it");
}
- showInformationMessage(
- "[ Trait - Engin ] " +
- "Sauvegarde des modifications de " + row + ".");
-
saveRow(row);
- // clear modified flag on the monitor
- rowMonitor.clearModified();
- getModel().setModify(false);
}
}
}
@@ -194,7 +189,7 @@
super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow);
getModel().setRemoveCaracteristicEnabled(newRow != null);
}
-
+
//------------------------------------------------------------------------//
//-- Public methods --//
//------------------------------------------------------------------------//
@@ -217,7 +212,7 @@
GearShootingTabUIModel model = getModel();
model.setModify(true);
- model.setValid(row.isValid());
+ recomputeRowValidState(row);
}
/** Resets the table with the data from the database */
@@ -283,13 +278,9 @@
FishingOperation fishingOperation = getModel().getFishingOperation();
Preconditions.checkNotNull(fishingOperation);
- fishingOperation.getGearShootingCaracteristics().remove(row.getKey());
-
- if (TuttiEntities.isNew(fishingOperation)) {
-
- fishingOperation = persistenceService.createFishingOperation(fishingOperation);
- } else {
- persistenceService.saveFishingOperation(fishingOperation);
+ CaracteristicMap caracteristicMap = fishingOperation.getGearShootingCaracteristics();
+ if (caracteristicMap != null) {
+ caracteristicMap.remove(row.getKey());
}
//add the row in the combo
@@ -303,6 +294,8 @@
// refresh all the table
getTableModel().fireTableRowsDeleted(rowIndex, rowIndex);
+ getModel().removeRowInError(row);
+
}
//------------------------------------------------------------------------//
@@ -310,21 +303,15 @@
//------------------------------------------------------------------------//
protected void saveRow(GearShootingRowModel row) {
+ if (row.isValid()) {
+ FishingOperation fishingOperation = getModel().getFishingOperation();
+ Preconditions.checkNotNull(fishingOperation);
- FishingOperation fishingOperation = getModel().getFishingOperation();
- Preconditions.checkNotNull(fishingOperation);
-
- if (fishingOperation.getGearShootingCaracteristics() == null) {
- fishingOperation.setGearShootingCaracteristics(new CaracteristicMap());
+ if (fishingOperation.getGearShootingCaracteristics() == null) {
+ fishingOperation.setGearShootingCaracteristics(new CaracteristicMap());
+ }
+ fishingOperation.getGearShootingCaracteristics().put(row.getKey(), row.getValue());
}
- fishingOperation.getGearShootingCaracteristics().put(row.getKey(), row.getValue());
-
- if (TuttiEntities.isNew(fishingOperation)) {
-
- fishingOperation = persistenceService.createFishingOperation(fishingOperation);
- } else {
- persistenceService.saveFishingOperation(fishingOperation);
- }
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIHandler.java 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIHandler.java 2013-01-17 17:08:09 UTC (rev 218)
@@ -33,9 +33,11 @@
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.service.DecoratorService;
+import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUI;
import fr.ifremer.tutti.ui.swing.util.HydrologicCaracteristicUtil;
import fr.ifremer.tutti.ui.swing.util.HydrologicCaracteristicUtil.Type;
+import fr.ifremer.tutti.ui.swing.util.TabHandler;
import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
import fr.ifremer.tutti.ui.swing.util.editor.CaracteristicValueEditor;
import fr.ifremer.tutti.ui.swing.util.editor.CaracteristicValueRenderer;
@@ -127,15 +129,8 @@
log.info("Row " + row + " was modified, will save it");
}
- showInformationMessage(
- "[ Trait - Hydro ] " +
- "Sauvegarde des modifications de " + row + ".");
-
saveRow(row);
- // clear modified flag on the monitor
- rowMonitor.clearModified();
- getModel().setModify(false);
}
}
}
@@ -246,7 +241,7 @@
super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow);
getModel().setRemoveCaracteristicEnabled(newRow != null);
}
-
+
//------------------------------------------------------------------------//
//-- Public methods --//
//------------------------------------------------------------------------//
@@ -269,7 +264,7 @@
HydrologyTabUIModel model = getModel();
model.setModify(true);
- model.setValid(row.isValid());
+ recomputeRowValidState(row);
}
/** Resets the table with the data from the database */
@@ -349,16 +344,13 @@
Map<Type, Caracteristic> caracteristics = availableGlobalCaracteristics.get(row.getKey());
for (Type type : caracteristics.keySet()) {
Caracteristic caracteristic = caracteristics.get(type);
- fishingOperation.getHydrologyCaracteristics().remove(caracteristic);
+
+ CaracteristicMap caracteristicMap = fishingOperation.getHydrologyCaracteristics();
+ if (caracteristicMap != null) {
+ caracteristicMap.remove(caracteristic);
+ }
}
- if (TuttiEntities.isNew(fishingOperation)) {
-
- fishingOperation = persistenceService.createFishingOperation(fishingOperation);
- } else {
- persistenceService.saveFishingOperation(fishingOperation);
- }
-
//add the row in the combo
BeanComboBox keyCombo = ui.getNewRowKey();
keyCombo.addItem(row.getKey());
@@ -370,6 +362,7 @@
// refresh all the table
getTableModel().fireTableRowsDeleted(rowIndex, rowIndex);
+ getModel().removeRowInError(row);
}
//------------------------------------------------------------------------//
@@ -377,37 +370,31 @@
//------------------------------------------------------------------------//
protected void saveRow(HydrologyRowModel row) {
+ if (row.isValid()) {
+ FishingOperation fishingOperation = getModel().getFishingOperation();
+ Preconditions.checkNotNull(fishingOperation);
- FishingOperation fishingOperation = getModel().getFishingOperation();
- Preconditions.checkNotNull(fishingOperation);
-
- if (fishingOperation.getHydrologyCaracteristics() == null) {
- fishingOperation.setHydrologyCaracteristics(new CaracteristicMap());
- }
- Map<Type, Caracteristic> caracteristics = availableGlobalCaracteristics.get(row.getKey());
- CaracteristicMap map = new CaracteristicMap();
- for (Type type : caracteristics.keySet()) {
- Serializable value = null;
- switch (type) {
- case START:
- value = row.getGearShootingStartValue();
- break;
- case END:
- value = row.getGearShootingEndValue();
- break;
- case AVERAGE:
- value = row.getAverageValue();
+ if (fishingOperation.getHydrologyCaracteristics() == null) {
+ fishingOperation.setHydrologyCaracteristics(new CaracteristicMap());
}
- map.put(caracteristics.get(type), value);
+ Map<Type, Caracteristic> caracteristics = availableGlobalCaracteristics.get(row.getKey());
+ CaracteristicMap map = new CaracteristicMap();
+ for (Type type : caracteristics.keySet()) {
+ Serializable value = null;
+ switch (type) {
+ case START:
+ value = row.getGearShootingStartValue();
+ break;
+ case END:
+ value = row.getGearShootingEndValue();
+ break;
+ case AVERAGE:
+ value = row.getAverageValue();
+ }
+ map.put(caracteristics.get(type), value);
+ }
+ fishingOperation.getHydrologyCaracteristics().putAll(map);
}
- fishingOperation.getHydrologyCaracteristics().putAll(map);
-
- if (TuttiEntities.isNew(fishingOperation)) {
-
- fishingOperation = persistenceService.createFishingOperation(fishingOperation);
- } else {
- persistenceService.saveFishingOperation(fishingOperation);
- }
}
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIModel.java 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTabUIModel.java 2013-01-17 17:08:09 UTC (rev 218)
@@ -30,10 +30,14 @@
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUIModel;
import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
import org.nuiton.util.beans.Binder;
import org.nuiton.util.beans.BinderModelBuilder;
import java.util.List;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
/**
@@ -43,6 +47,8 @@
public class HydrologyTabUIModel extends AbstractTuttiTableUIModel<FishingOperation, HydrologyRowModel, HydrologyTabUIModel> {
private static final long serialVersionUID = 1L;
+
+ private static final Log log = LogFactory.getLog(HydrologyTabUIModel.class);
public static final String TITLE = "tutti.label.tab.fishingOperation.hydrology";
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java 2013-01-17 17:08:09 UTC (rev 218)
@@ -32,6 +32,8 @@
import java.awt.Component;
import javax.swing.DefaultSingleSelectionModel;
import javax.swing.JTabbedPane;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
/**
* UI containing a tab panel.
@@ -42,6 +44,8 @@
*/
public abstract class AbstractTuttiTabContainerUIHandler<M> extends AbstractTuttiUIHandler<M> {
+ private final static Log log = LogFactory.getLog(AbstractTuttiTabContainerUIHandler.class);
+
protected AbstractTuttiTabContainerUIHandler(TuttiUIContext context) {
super(context);
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SwingValidatorMessageWidget.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SwingValidatorMessageWidget.java 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SwingValidatorMessageWidget.java 2013-01-17 17:08:09 UTC (rev 218)
@@ -25,8 +25,14 @@
* #L%
*/
+import java.awt.Component;
+import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.HierarchyBoundsAdapter;
+import java.awt.event.HierarchyEvent;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
@@ -46,7 +52,10 @@
import jaxx.runtime.validator.swing.SwingValidatorUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.jdesktop.swingx.JXTitledPanel;
+import static org.nuiton.i18n.I18n._;
+
/**
* Button which opens a popup containing a table with the errors found
* by registered validators.
@@ -64,6 +73,8 @@
protected JTable errorTable = new JTable();
+ protected Point popupPosition = null;
+
public SwingValidatorMessageWidget() {
super(SwingUtil.createActionIcon("table-error"));
@@ -80,9 +91,20 @@
JScrollPane scrollPanel = new JScrollPane(errorTable);
scrollPanel.setColumnHeaderView(errorTable.getTableHeader());
- popup.add(scrollPanel);
+
+ JXTitledPanel titledPanel = new JXTitledPanel(_("tutti.errorTable.title"), scrollPanel);
+ popup.add(titledPanel);
+ popup.setTitle(_("tutti.errorTable.title"));
popup.setSize(800, 300);
+ popup.setAlwaysOnTop(true);
+ popup.setUndecorated(true);
+ ComponentResizer cr = new ComponentResizer();
+ cr.registerComponent(popup);
+ ComponentMover cm = new ComponentMover();
+ cm.setDragInsets(cr.getDragInsets());
+ cm.registerComponent(popup);
+
addActionListener(new ActionListener() {
@Override
@@ -94,15 +116,40 @@
}
}
});
+
popup.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
setSelected(false);
}
-
+
});
+ popup.addComponentListener(new ComponentAdapter() {
+
+ @Override
+ public void componentMoved(ComponentEvent e) {
+ Component component = e.getComponent();
+ if (component.isShowing()) {
+ popupPosition = component.getLocationOnScreen();
+ }
+ }
+
+ });
+
+ addHierarchyBoundsListener(new HierarchyBoundsAdapter() {
+
+ @Override
+ public void ancestorMoved(HierarchyEvent e) {
+ if (popupPosition == null && isShowing()) {
+ Point point = new Point(getLocationOnScreen());
+ point.translate(-popup.getWidth() + getWidth(), -popup.getHeight());
+ popup.setLocation(point);
+ }
+ }
+ });
+
// add a auto-close action
JRootPane rootPane = popup.getRootPane();
@@ -119,6 +166,7 @@
setSelected(false);
}
});
+
}
/**
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableModel.java 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableModel.java 2013-01-17 17:08:09 UTC (rev 218)
@@ -227,6 +227,7 @@
@Override
public final void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+ log.info("setValueAt " + aValue);
R entry = getEntry(rowIndex);
ColumnIdentifier<R> propertyName = getPropertyName(columnIndex);
setValueAt(aValue, rowIndex, columnIndex, propertyName, entry);
@@ -252,6 +253,7 @@
int columnIndex,
ColumnIdentifier<R> propertyName,
R entry) {
+ log.info("setValueAt " + aValue);
propertyName.setValue(entry, aValue);
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java 2013-01-17 17:08:09 UTC (rev 218)
@@ -619,7 +619,12 @@
// apply it to row
row.setValid(valid);
- getModel().setValid(valid);
+
+ if (valid) {
+ getModel().removeRowInError(row);
+ } else {
+ getModel().addRowInError(row);
+ }
}
//------------------------------------------------------------------------//
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIModel.java 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIModel.java 2013-01-17 17:08:09 UTC (rev 218)
@@ -25,10 +25,18 @@
*/
import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel;
+import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentRowModel;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.HashSet;
import org.nuiton.util.beans.Binder;
import java.util.List;
+import java.util.Set;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
/**
* @param <E> type of incoming bean to edit
@@ -41,14 +49,30 @@
private static final long serialVersionUID = 1L;
+ private static final Log log = LogFactory.getLog(AbstractTuttiTableUIModel.class);
+
public static final String PROPERTY_ROWS = "rows";
+
+ public static final String PROPERTY_ROWS_IN_ERROR = "rowsInError";
protected List<R> rows;
+
+ protected Set<R> rowsInError;
protected AbstractTuttiTableUIModel(Class<E> entityType,
Binder<E, B> fromBeanBinder,
Binder<B, E> toBeanBinder) {
super(entityType, fromBeanBinder, toBeanBinder);
+ addPropertyChangeListener(PROPERTY_ROWS_IN_ERROR, new PropertyChangeListener() {
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ Set<EnvironmentRowModel> rowsInErorr = (Set<EnvironmentRowModel>) evt.getNewValue();
+ log.info(PROPERTY_ROWS_IN_ERROR + " changed " + rowsInErorr);
+ setValid(rowsInErorr == null || rowsInErorr.isEmpty());
+ }
+ });
+ setRowsInError(new HashSet<R>());
}
public List<R> getRows() {
@@ -63,9 +87,36 @@
// always propagates (since empty list will not fire and we want it)
firePropertyChange(PROPERTY_ROWS, null, rows);
+
+ Set<R> rowsInError = Sets.newHashSet();
+ for (R row : rows) {
+ if (!row.isValid()) {
+ rowsInError.add(row);
+ }
+ }
+ setRowsInError(rowsInError);
}
public int getRowCount() {
return rows == null ? 0 : rows.size();
}
+
+ public Set<R> getRowsInError() {
+ return rowsInError;
+ }
+
+ public void setRowsInError(Set<R> rowsInError) {
+ this.rowsInError = rowsInError;
+ firePropertyChange(PROPERTY_ROWS_IN_ERROR, null, rowsInError);
+ }
+
+ public void addRowInError(R row) {
+ rowsInError.add(row);
+ firePropertyChange(PROPERTY_ROWS_IN_ERROR, null, rowsInError);
+ }
+
+ public void removeRowInError(R row) {
+ rowsInError.remove(row);
+ firePropertyChange(PROPERTY_ROWS_IN_ERROR, null, rowsInError);
+ }
}
\ No newline at end of file
Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-01-17 16:50:14 UTC (rev 217)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-01-17 17:08:09 UTC (rev 218)
@@ -58,6 +58,7 @@
tutti.config.ui.shortcut.closePopup=Fermer une popup
tutti.config.ui.showNumberEditorButton=Afficher le pavé numérique de saisie
tutti.duration.format=dj Hh m'm'
+tutti.errorTable.title=Table d'erreurs
tutti.label.attachmentEditor.file=Fichier
tutti.label.attachmentEditor.fileComment=Commentaire
tutti.label.attachmentEditor.fileName=Nom
1
0
17 Jan '13
Author: tchemit
Date: 2013-01-17 17:50:14 +0100 (Thu, 17 Jan 2013)
New Revision: 217
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/217
Log:
ajout nombre de poche / navire / engin sur l'?\195?\169cran de trait
ajout de quelques validation sur la taille des champs
renommage de certains champs
Modified:
trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java
trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo
trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUI.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java
trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-error-validation.xml
trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-validation.xml
trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml
trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIModel-error-validation.xml
trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel-error-validation.xml
trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties
Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo
===================================================================
(Binary files differ)
Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java
===================================================================
--- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java 2013-01-17 16:50:14 UTC (rev 217)
@@ -161,7 +161,7 @@
createdCruise.setBeginDate(null);
createdCruise.setEndDate(null);
createdCruise.setComment(null);
- createdCruise.setPoche(null);
+ createdCruise.setTrawlNet(null);
createdCruise = service.createCruise(cruise);
assertNotNull(createdCruise);
assertNotNull(createdCruise.getId());
@@ -172,7 +172,7 @@
assertEquals(createdCruise.getBeginDate(), reloadedCruise.getBeginDate());
assertEquals(createdCruise.getEndDate(), reloadedCruise.getEndDate());
assertEquals(createdCruise.getComment(), reloadedCruise.getComment());
- assertEquals(createdCruise.getPoche(), reloadedCruise.getPoche());
+ assertEquals(createdCruise.getTrawlNet(), reloadedCruise.getTrawlNet());
assertNull(reloadedCruise.getHeadOfMission());
assertNotNull(reloadedCruise.getVessel());
assertEquals(createdCruise.getVessel().get(0), reloadedCruise.getVessel().get(0));
Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java
===================================================================
--- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-01-17 16:50:14 UTC (rev 217)
@@ -102,7 +102,7 @@
registerMultiJXPathDecorator(Program.class, "${name}$s", SEPARATOR, " - ");
registerMultiJXPathDecorator(Cruise.class, "${name}$s", SEPARATOR, " - ");
registerMultiJXPathDecorator(TuttiProtocol.class, "${name}$s", SEPARATOR, " - ");
- registerMultiJXPathDecorator(FishingOperation.class, "${stationNumber}$s#${fishingOperationNumber}$s#${date}$td/%3$tm/%3$tY", SEPARATOR, " - ");
+ registerMultiJXPathDecorator(FishingOperation.class, "${stationNumber}$s#${fishingOperationNumber}$s#${gearShootingStartDate}$td/%3$tm/%3$tY", SEPARATOR, " - ");
registerMultiJXPathDecorator(Zone.class, "${label}$s#${name}$s", SEPARATOR, " - ");
registerMultiJXPathDecorator(Vessel.class, "${name}$s#${internalRegistrationCode}$s", SEPARATOR, " - ");
registerMultiJXPathDecorator(Country.class, "${label}$s#${name}$s", SEPARATOR, " - ");
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUI.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUI.java 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUI.java 2013-01-17 16:50:14 UTC (rev 217)
@@ -51,6 +51,13 @@
* @since 0.1
*/
public static final String INT_2_DIGITS_PATTERN = "\\d{0,2}";
+
+ /**
+ * Pattern to use for signed numeric values in editors with max 2 digits.
+ *
+ * @since 1.0
+ */
+ public static final String SIGNED_INT_2_DIGITS_PATTERN = "-?\\d{0,2}";
/**
* Pattern to use for short numeric values in editors with max 3 digits.
@@ -60,6 +67,13 @@
public static final String INT_3_DIGITS_PATTERN = "\\d{0,3}";
/**
+ * Pattern to use for singed numeric values in editors with max 3 digits.
+ *
+ * @since 1.0
+ */
+ public static final String SIGNED_INT_3_DIGITS_PATTERN = "-?\\d{0,3}";
+
+ /**
* Pattern to use for short numeric values in editors with max 4 digits.
*
* @since 0.2
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css 2013-01-17 16:50:14 UTC (rev 217)
@@ -113,14 +113,14 @@
formats: {"dd/MM/yyyy"};
}
-#pocheLabel {
- text: "tutti.label.cruise.poche";
- labelFor: {pocheField};
+#trawlNetLabel {
+ text: "tutti.label.cruise.trawlNet";
+ labelFor: {trawlNetField};
}
-#pocheField {
- property: poche;
- model: {model.getPoche()};
+#trawlNetField {
+ property: trawlNet;
+ model: {model.getTrawlNet()};
useFloat: false;
numberPattern: {INT_1_DIGITS_PATTERN};
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx 2013-01-17 16:50:14 UTC (rev 217)
@@ -80,7 +80,7 @@
<field name='year' component='yearField'/>
<field name='surveyPart' component='surveyPartField'/>
<field name='name' component='nameField'/>
- <field name='poche' component='pocheField'/>
+ <field name='trawlNet' component='trawlNetField'/>
<field name='country' component='countryComboBox'/>
<field name='beginDate' component='beginDateField'/>
<field name='endDate' component='endDateField'/>
@@ -132,10 +132,10 @@
onActionPerformed='handler.generateCampaignName()'/>
</cell>
<cell>
- <JLabel id='pocheLabel'/>
+ <JLabel id='trawlNetLabel'/>
</cell>
<cell weightx='0.3'>
- <NumberEditor id='pocheField' constructorParams='this'/>
+ <NumberEditor id='trawlNetField' constructorParams='this'/>
</cell>
</row>
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java 2013-01-17 16:50:14 UTC (rev 217)
@@ -36,19 +36,17 @@
import fr.ifremer.tutti.ui.swing.MainUI;
import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.TuttiUI;
-import fr.ifremer.tutti.ui.swing.TuttiUIContext;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.List;
import jaxx.runtime.JAXXUtil;
import jaxx.runtime.context.JAXXContextEntryDef;
import jaxx.runtime.validator.swing.SwingValidator;
-import jaxx.runtime.validator.swing.SwingValidatorMessageTableRenderer;
-import jaxx.runtime.validator.swing.SwingValidatorUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.List;
+
/**
* Handler of UI {@link EditCruiseUI}.
*
@@ -108,7 +106,7 @@
Program program =
persistenceService.getProgram(context.getProgramId());
model.setProgram(program);
- model.setPoche(1);
+ model.setTrawlNet(1);
if (log.isDebugEnabled()) {
log.debug("Will create a new cruise from program: " + program);
@@ -182,7 +180,7 @@
EditCruiseUIModel model = getModel();
model.setVesselType(VesselTypeEnum.ALL);
-
+
// Change vessel list and gear list when vessel type changes
model.addPropertyChangeListener(EditCruiseUIModel.PROPERTY_VESSEL_TYPE, new PropertyChangeListener() {
@Override
@@ -200,14 +198,14 @@
// compute new selected vessel list
List<Vessel> newSelectedVessel = Lists.newArrayList();
- if (selectedVessel!=null) {
+ if (selectedVessel != null) {
newSelectedVessel.addAll(selectedVessel);
}
newSelectedVessel.retainAll(newVesselList);
// compute new selected gear list
List<Gear> newSelectedGear = Lists.newArrayList();
- if (selectedGear!=null) {
+ if (selectedGear != null) {
newSelectedGear.addAll(selectedGear);
}
newSelectedGear.retainAll(newGearList);
@@ -252,7 +250,7 @@
// if new fishingOperation can already cancel his creation
model.setModify(model.isCreate());
-
+
MainUI main = ui.getContextValue(MainUI.class, MainUI.class.getName());
main.clearValidators();
main.registerValidator(validator);
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel.java 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel.java 2013-01-17 16:50:14 UTC (rev 217)
@@ -67,7 +67,7 @@
public static final String PROPERTY_YEAR = "year";
- public static final String PROPERTY_POCHE = "poche";
+ public static final String PROPERTY_TRAWL_NET = "trawlNet";
public static final String PROPERTY_BEGIN_DATE = "beginDate";
@@ -77,6 +77,12 @@
public static final String PROPERTY_VESSEL_TYPE = "vesselType";
+ public static final String PROPERTY_VESSEL_TYPE_ALL = "vesselTypeAll";
+
+ public static final String PROPERTY_VESSEL_TYPE_SCIENTIFIC = "vesselTypeScientific";
+
+ public static final String PROPERTY_VESSEL_TYPE_FISHING = "vesselTypeFishing";
+
protected Program program;
protected Country country;
@@ -97,7 +103,7 @@
protected Integer year;
- protected Integer poche;
+ protected Integer trawlNet;
protected Date beginDate;
@@ -178,14 +184,14 @@
firePropertyChange(PROPERTY_CAN_GENERATE_NAME, null, isCanGenerateName());
}
- public Integer getPoche() {
- return poche;
+ public Integer getTrawlNet() {
+ return trawlNet;
}
- public void setPoche(Integer poche) {
- Object oldValue = getPoche();
- this.poche = poche;
- firePropertyChange(PROPERTY_POCHE, oldValue, poche);
+ public void setTrawlNet(Integer trawlNet) {
+ Object oldValue = getTrawlNet();
+ this.trawlNet = trawlNet;
+ firePropertyChange(PROPERTY_TRAWL_NET, oldValue, trawlNet);
}
public Date getBeginDate() {
@@ -255,9 +261,9 @@
Object oldValue = getVesselType();
this.vesselType = vesselType;
firePropertyChange(PROPERTY_VESSEL_TYPE, oldValue, vesselType);
- firePropertyChange("vesselTypeAll", oldAll, isVesselTypeAll());
- firePropertyChange("vesselTypeScientific", oldScientific, isVesselTypeScientific());
- firePropertyChange("vesselTypeFishing", oldFishing, isVesselTypeFishing());
+ firePropertyChange(PROPERTY_VESSEL_TYPE_ALL, oldAll, isVesselTypeAll());
+ firePropertyChange(PROPERTY_VESSEL_TYPE_SCIENTIFIC, oldScientific, isVesselTypeScientific());
+ firePropertyChange(PROPERTY_VESSEL_TYPE_FISHING, oldFishing, isVesselTypeFishing());
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-01-17 16:50:14 UTC (rev 217)
@@ -153,6 +153,43 @@
selected: {model.isUseSexagecimalFormat() ? "DMS" : "DD"};
}
+#traitVesselPanel {
+ border: {BorderFactory.createTitledBorder((String)null)};
+}
+#vesselLabel {
+ text: "tutti.label.fishingOperation.vessel";
+ labelFor: {vesselComboBox};
+}
+
+#vesselComboBox {
+ property: vessel;
+ selectedItem: {model.getVessel()};
+}
+
+#gearLabel {
+ text: "tutti.label.fishingOperation.gear";
+ labelFor: {gearComboBox};
+}
+
+#gearComboBox {
+ property: gear;
+ selectedItem: {model.getGear()};
+}
+
+#trawlNetNumberLabel {
+ text: "tutti.label.fishingOperation.trawlNetNumber";
+ labelFor: {trawlNetNumberField};
+}
+
+#trawlNetNumberField {
+ showReset: false;
+ useFloat: false;
+ useSign: false;
+ numberPattern: {INT_1_DIGITS_PATTERN};
+ property: trawlNetNumber;
+ model: {model.getTrawlNetNumber()};
+}
+
.degree {
showReset: false;
useFloat: false;
@@ -180,7 +217,7 @@
#gearShootingStartLongitudeDMSDegreeField {
property: gearShootingStartLongitudeDegree;
model: {model.getGearShootingStartLongitudeDegree()};
- numberPattern: {"-?" + INT_3_DIGITS_PATTERN};
+ numberPattern: {SIGNED_INT_3_DIGITS_PATTERN};
}
#gearShootingStartLongitudeDMSMinuteField {
@@ -208,7 +245,7 @@
#gearShootingStartLatitudeDMSDegreeField {
property: gearShootingStartLatitudeDegree;
model: {model.getGearShootingStartLatitudeDegree()};
- numberPattern: {"-?" + INT_2_DIGITS_PATTERN};
+ numberPattern: {SIGNED_INT_2_DIGITS_PATTERN};
}
#gearShootingStartLatitudeDMSMinuteField {
@@ -246,7 +283,7 @@
#gearShootingEndLongitudeDMSDegreeField {
property: gearShootingEndLongitudeDegree;
model: {model.getGearShootingEndLongitudeDegree()};
- numberPattern: {"-?" + INT_3_DIGITS_PATTERN};
+ numberPattern: {SIGNED_INT_3_DIGITS_PATTERN};
}
#gearShootingEndLongitudeDMSMinuteField {
@@ -274,7 +311,7 @@
#gearShootingEndLatitudeDMSDegreeField {
property: gearShootingEndLatitudeDegree;
model: {model.getGearShootingEndLatitudeDegree()};
- numberPattern: {"-?" + INT_2_DIGITS_PATTERN};
+ numberPattern: {SIGNED_INT_2_DIGITS_PATTERN};
}
#gearShootingEndLatitudeDMSMinuteField {
@@ -338,25 +375,25 @@
selected: {model.isFishingOperationRectiligne()};
}
-#distanceChaluteeLabel {
- text: "tutti.label.fishingOperation.distanceChalutee";
- labelFor: {distanceChaluteeField};
+#trawlDistanceLabel {
+ text: "tutti.label.fishingOperation.trawlDistance";
+ labelFor: {trawlDistanceField};
}
-#distanceChaluteeField {
- property: distanceChalutee;
- model: {model.getDistanceChalutee()};
+#trawlDistanceField {
+ property: trawlDistance;
+ model: {model.getTrawlDistance()};
useFloat: false;
numberPattern: {INT_6_DIGITS_PATTERN};
enabled: {!model.isFishingOperationRectiligne()};
}
-#dureeLabel {
- text: "tutti.label.fishingOperation.duree";
- labelFor: {dureeField};
+#durationLabel {
+ text: "tutti.label.fishingOperation.duration";
+ labelFor: {durationField};
}
-#dureeField {
+#durationField {
text: {fr.ifremer.tutti.ui.swing.util.TuttiUIUtil.getDuration(
model.getGearShootingStartDate(), model.getGearShootingEndDate(), "tutti.duration.format")};
enabled: false;
@@ -369,7 +406,7 @@
#commentPane {
columnHeaderView: {new JLabel(_("tutti.label.comment"))};
- minimumSize: {new Dimension(10,50)};
+ /*minimumSize: {new Dimension(10,50)};*/
}
#commentField {
@@ -393,10 +430,10 @@
#cancelButton {
actionIcon: cancel;
- text: "tutti.action.cancel";
+ text:"tutti.action.cancel";
}
#importCasinoButton {
- actionIcon: casino-import;
- text: "tutti.action.casino-import";
+ actionIcon: casino-import;
+ text: "tutti.action.casino-import";
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-01-17 16:50:14 UTC (rev 217)
@@ -27,7 +27,9 @@
<import>
fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation
fr.ifremer.tutti.persistence.entities.data.FishingOperation
+ fr.ifremer.tutti.persistence.entities.referential.Gear
fr.ifremer.tutti.persistence.entities.referential.Person
+ fr.ifremer.tutti.persistence.entities.referential.Vessel
fr.ifremer.tutti.ui.swing.util.editor.SimpleTimeEditor
fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentTabUI
@@ -77,7 +79,7 @@
<SwingValidatorMessageTableModel id='errorTableModel'/>
<BeanValidator id='validator' context='validate' bean='model'
- errorTableModel='errorTableModel'
+ errorTableModel='errorTableModel'
uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'>
<field name='stationNumber' component='stationNumberField'/>
<field name='fishingOperationNumber'
@@ -85,22 +87,41 @@
<field name='gearShootingStartDate' component='gearShootingStartDateField'/>
<field name='comment' component='commentField'/>
<field name='saisisseur' component='saisisseurList'/>
- <field name='gearShootingStartLatitude' component='gearShootingStartLatitudeDDField'/>
- <field name='gearShootingStartLatitudeDegree' component='gearShootingStartLatitudeDMSDegreeField'/>
- <field name='gearShootingStartLatitudeMinute' component='gearShootingStartLatitudeDMSMinuteField'/>
- <field name='gearShootingStartLatitudeSecond' component='gearShootingStartLatitudeDMSSecondField'/>
- <field name='gearShootingStartLongitude' component='gearShootingStartLongitudeDDField'/>
- <field name='gearShootingStartLongitudeDegree' component='gearShootingStartLongitudeDMSDegreeField'/>
- <field name='gearShootingStartLongitudeMinute' component='gearShootingStartLongitudeDMSMinuteField'/>
- <field name='gearShootingStartLongitudeSecond' component='gearShootingStartLongitudeDMSSecondField'/>
- <field name='gearShootingEndLatitude' component='gearShootingEndLatitudeDDField'/>
- <field name='gearShootingEndLatitudeDegree' component='gearShootingEndLatitudeDMSDegreeField'/>
- <field name='gearShootingEndLatitudeMinute' component='gearShootingEndLatitudeDMSMinuteField'/>
- <field name='gearShootingEndLatitudeSecond' component='gearShootingEndLatitudeDMSSecondField'/>
- <field name='gearShootingEndLongitude' component='gearShootingEndLongitudeDDField'/>
- <field name='gearShootingEndLongitudeDegree' component='gearShootingEndLongitudeDMSDegreeField'/>
- <field name='gearShootingEndLongitudeMinute' component='gearShootingEndLongitudeDMSMinuteField'/>
- <field name='gearShootingEndLongitudeSecond' component='gearShootingEndLongitudeDMSSecondField'/>
+ <field name='vessel' component='vesselComboBox'/>
+ <field name='gear' component='gearComboBox'/>
+ <field name='trawlNetNumber' component='trawlNetNumberField'/>
+ <field name='gearShootingStartLatitude'
+ component='gearShootingStartLatitudeDDField'/>
+ <field name='gearShootingStartLatitudeDegree'
+ component='gearShootingStartLatitudeDMSDegreeField'/>
+ <field name='gearShootingStartLatitudeMinute'
+ component='gearShootingStartLatitudeDMSMinuteField'/>
+ <field name='gearShootingStartLatitudeSecond'
+ component='gearShootingStartLatitudeDMSSecondField'/>
+ <field name='gearShootingStartLongitude'
+ component='gearShootingStartLongitudeDDField'/>
+ <field name='gearShootingStartLongitudeDegree'
+ component='gearShootingStartLongitudeDMSDegreeField'/>
+ <field name='gearShootingStartLongitudeMinute'
+ component='gearShootingStartLongitudeDMSMinuteField'/>
+ <field name='gearShootingStartLongitudeSecond'
+ component='gearShootingStartLongitudeDMSSecondField'/>
+ <field name='gearShootingEndLatitude'
+ component='gearShootingEndLatitudeDDField'/>
+ <field name='gearShootingEndLatitudeDegree'
+ component='gearShootingEndLatitudeDMSDegreeField'/>
+ <field name='gearShootingEndLatitudeMinute'
+ component='gearShootingEndLatitudeDMSMinuteField'/>
+ <field name='gearShootingEndLatitudeSecond'
+ component='gearShootingEndLatitudeDMSSecondField'/>
+ <field name='gearShootingEndLongitude'
+ component='gearShootingEndLongitudeDDField'/>
+ <field name='gearShootingEndLongitudeDegree'
+ component='gearShootingEndLongitudeDMSDegreeField'/>
+ <field name='gearShootingEndLongitudeMinute'
+ component='gearShootingEndLongitudeDMSMinuteField'/>
+ <field name='gearShootingEndLongitudeSecond'
+ component='gearShootingEndLongitudeDMSSecondField'/>
</BeanValidator>
<CardLayout2Ext id='gearShootingStartLongitudeLayout'
@@ -111,7 +132,7 @@
constructorParams='this, "gearShootingEndLongitudePanel"'/>
<CardLayout2Ext id='gearShootingEndLatitudeLayout'
constructorParams='this, "gearShootingEndLatitudePanel"'/>
-
+
<JPanel id='fishingOperationPane' constraints='BorderLayout.CENTER'
layout='{new BorderLayout()}'>
@@ -119,32 +140,28 @@
<tab id='traitGeneralTab'>
<Table fill='both' id='generalForm'>
- <!-- Numero station / Numéro trait / Date -->
+ <!-- Numero station / Numéro trait / Numéro de poche -->
<row>
- <cell columns='6'>
- <Table fill="both" weightx='1'>
- <row>
- <cell>
- <JPanel layout="{new BorderLayout()}">
- <JLabel id='stationNumberLabel'
- constraints='BorderLayout.WEST'/>
- <JTextField id='stationNumberField'
- constraints='BorderLayout.CENTER'
- onKeyReleased='handler.setText(event, "stationNumber")'/>
- </JPanel>
- </cell>
- <cell>
- <JPanel layout="{new BorderLayout()}">
- <JLabel id='fishingOperationNumberLabel'
- constraints='BorderLayout.WEST'/>
- <NumberEditor id='fishingOperationNumberField'
- constraints='BorderLayout.CENTER'
- constructorParams='this'/>
- </JPanel>
- </cell>
- </row>
- </Table>
+ <cell>
+ <JLabel id='stationNumberLabel'/>
</cell>
+ <cell weightx='0.3'>
+ <JTextField id='stationNumberField'
+ onKeyReleased='handler.setText(event, "stationNumber")'/>
+ </cell>
+ <cell>
+ <JLabel id='fishingOperationNumberLabel'/>
+ </cell>
+ <cell weightx='0.3'>
+ <NumberEditor id='fishingOperationNumberField'
+ constructorParams='this'/>
+ </cell>
+ <cell>
+ <JLabel id='trawlNetNumberLabel'/>
+ </cell>
+ <cell weightx='0.3'>
+ <NumberEditor id='trawlNetNumberField' constructorParams='this'/>
+ </cell>
</row>
<!-- Strate d'association / Sous Strate / Localité -->
@@ -183,9 +200,9 @@
<cell>
<JPanel layout="{new GridLayout(1,0)}">
<JRadioButton id='gearShootingCoordinatesDDRadio'
- onActionPerformed='handler.setUseSexagecimalFormat(false)'/>
+ onActionPerformed='handler.setUseSexagecimalFormat(false)'/>
<JRadioButton id='gearShootingCoordinatesDMSRadio'
- onActionPerformed='handler.setUseSexagecimalFormat(true)'/>
+ onActionPerformed='handler.setUseSexagecimalFormat(true)'/>
</JPanel>
</cell>
<cell>
@@ -208,34 +225,44 @@
</cell>
<cell weightx='1'>
<JPanel id='gearShootingStartLatitudePanel'>
- <NumberEditor id='gearShootingStartLatitudeDDField' constraints='"DD"'
+ <NumberEditor id='gearShootingStartLatitudeDDField'
+ constraints='"DD"'
constructorParams='this'/>
- <JPanel layout="{new GridLayout(1,0)}" constraints='"DMS"'>
- <NumberEditor id='gearShootingStartLatitudeDMSDegreeField'
- constructorParams='this' styleClass='degree'/>
-
- <NumberEditor id='gearShootingStartLatitudeDMSMinuteField'
- constructorParams='this' styleClass='minute'/>
-
- <NumberEditor id='gearShootingStartLatitudeDMSSecondField'
- constructorParams='this' styleClass='second'/>
+ <JPanel layout="{new GridLayout(1,0)}"
+ constraints='"DMS"'>
+ <NumberEditor
+ id='gearShootingStartLatitudeDMSDegreeField'
+ constructorParams='this' styleClass='degree'/>
+
+ <NumberEditor
+ id='gearShootingStartLatitudeDMSMinuteField'
+ constructorParams='this' styleClass='minute'/>
+
+ <NumberEditor
+ id='gearShootingStartLatitudeDMSSecondField'
+ constructorParams='this' styleClass='second'/>
</JPanel>
-<!-- -->
+ <!-- -->
</JPanel>
</cell>
<cell weightx='1'>
<JPanel id='gearShootingStartLongitudePanel'>
- <NumberEditor id='gearShootingStartLongitudeDDField' constraints='"DD"'
+ <NumberEditor id='gearShootingStartLongitudeDDField'
+ constraints='"DD"'
constructorParams='this'/>
- <JPanel layout="{new GridLayout(1,0)}" constraints='"DMS"'>
- <NumberEditor id='gearShootingStartLongitudeDMSDegreeField'
- constructorParams='this' styleClass='degree'/>
-
- <NumberEditor id='gearShootingStartLongitudeDMSMinuteField'
- constructorParams='this' styleClass='minute'/>
-
- <NumberEditor id='gearShootingStartLongitudeDMSSecondField'
- constructorParams='this' styleClass='second'/>
+ <JPanel layout="{new GridLayout(1,0)}"
+ constraints='"DMS"'>
+ <NumberEditor
+ id='gearShootingStartLongitudeDMSDegreeField'
+ constructorParams='this' styleClass='degree'/>
+
+ <NumberEditor
+ id='gearShootingStartLongitudeDMSMinuteField'
+ constructorParams='this' styleClass='minute'/>
+
+ <NumberEditor
+ id='gearShootingStartLongitudeDMSSecondField'
+ constructorParams='this' styleClass='second'/>
</JPanel>
</JPanel>
</cell>
@@ -254,33 +281,43 @@
</cell>
<cell weightx='1'>
<JPanel id='gearShootingEndLatitudePanel'>
- <NumberEditor id='gearShootingEndLatitudeDDField' constraints='"DD"'
+ <NumberEditor id='gearShootingEndLatitudeDDField'
+ constraints='"DD"'
constructorParams='this'/>
- <JPanel layout="{new GridLayout(1,0)}" constraints='"DMS"'>
- <NumberEditor id='gearShootingEndLatitudeDMSDegreeField'
- constructorParams='this' styleClass='degree'/>
-
- <NumberEditor id='gearShootingEndLatitudeDMSMinuteField'
- constructorParams='this' styleClass='minute'/>
-
- <NumberEditor id='gearShootingEndLatitudeDMSSecondField'
- constructorParams='this' styleClass='second'/>
+ <JPanel layout="{new GridLayout(1,0)}"
+ constraints='"DMS"'>
+ <NumberEditor
+ id='gearShootingEndLatitudeDMSDegreeField'
+ constructorParams='this' styleClass='degree'/>
+
+ <NumberEditor
+ id='gearShootingEndLatitudeDMSMinuteField'
+ constructorParams='this' styleClass='minute'/>
+
+ <NumberEditor
+ id='gearShootingEndLatitudeDMSSecondField'
+ constructorParams='this' styleClass='second'/>
</JPanel>
</JPanel>
</cell>
<cell weightx='1'>
<JPanel id='gearShootingEndLongitudePanel'>
- <NumberEditor id='gearShootingEndLongitudeDDField' constraints='"DD"'
+ <NumberEditor id='gearShootingEndLongitudeDDField'
+ constraints='"DD"'
constructorParams='this'/>
- <JPanel layout="{new GridLayout(1,0)}" constraints='"DMS"'>
- <NumberEditor id='gearShootingEndLongitudeDMSDegreeField'
- constructorParams='this' styleClass='degree'/>
-
- <NumberEditor id='gearShootingEndLongitudeDMSMinuteField'
- constructorParams='this' styleClass='minute'/>
-
- <NumberEditor id='gearShootingEndLongitudeDMSSecondField'
- constructorParams='this' styleClass='second'/>
+ <JPanel layout="{new GridLayout(1,0)}"
+ constraints='"DMS"'>
+ <NumberEditor
+ id='gearShootingEndLongitudeDMSDegreeField'
+ constructorParams='this' styleClass='degree'/>
+
+ <NumberEditor
+ id='gearShootingEndLongitudeDMSMinuteField'
+ constructorParams='this' styleClass='minute'/>
+
+ <NumberEditor
+ id='gearShootingEndLongitudeDMSSecondField'
+ constructorParams='this' styleClass='second'/>
</JPanel>
</JPanel>
</cell>
@@ -305,9 +342,9 @@
</cell>
<cell>
<JPanel layout="{new BorderLayout()}">
- <JLabel id='distanceChaluteeLabel'
+ <JLabel id='trawlDistanceLabel'
constraints='BorderLayout.WEST'/>
- <NumberEditor id='distanceChaluteeField'
+ <NumberEditor id='trawlDistanceField'
constraints='BorderLayout.CENTER'
constructorParams='this'/>
</JPanel>
@@ -317,8 +354,10 @@
</cell>
<cell>
<JPanel layout="{new BorderLayout()}">
- <JLabel id='dureeLabel' constraints='BorderLayout.WEST'/>
- <JTextField id='dureeField' constraints='BorderLayout.CENTER'/>
+ <JLabel id='durationLabel'
+ constraints='BorderLayout.WEST'/>
+ <JTextField id='durationField'
+ constraints='BorderLayout.CENTER'/>
</JPanel>
</cell>
</row>
@@ -363,15 +402,39 @@
</row>
<!-- Saisisseur -->
- <row weighty='0.3'>
+ <row weighty='0.2'>
<cell columns='6'>
- <BeanDoubleList id='saisisseurList' genericType='Person'/>
+ <JPanel layout='{new GridLayout(1,0)}'>
+ <BeanDoubleList id='saisisseurList' genericType='Person'/>
+ <Table fill="both" weightx='1' id='traitVesselPanel'>
+ <row>
+ <cell anchor='west'>
+ <JLabel id='vesselLabel'/>
+ </cell>
+ <cell weightx="1.0" fill="both">
+ <BeanComboBox id='vesselComboBox'
+ constructorParams='this'
+ genericType='Vessel'/>
+ </cell>
+ </row>
+ <row>
+ <cell anchor='west'>
+ <JLabel id='gearLabel'/>
+ </cell>
+ <cell>
+ <BeanComboBox id='gearComboBox'
+ constructorParams='this'
+ genericType='Gear'/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
</cell>
</row>
<!-- Commentaire -->
- <row weighty='0.3' fill='both'>
- <cell columns='6' fill='both'>
+ <row weighty='0.8'>
+ <cell columns='6'>
<JScrollPane id='commentPane'
onFocusGained='commentField.requestFocus()'>
<JTextArea id='commentField'
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-17 16:50:14 UTC (rev 217)
@@ -29,7 +29,9 @@
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
import fr.ifremer.tutti.persistence.entities.data.Program;
import fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation;
+import fr.ifremer.tutti.persistence.entities.referential.Gear;
import fr.ifremer.tutti.persistence.entities.referential.Person;
+import fr.ifremer.tutti.persistence.entities.referential.Vessel;
import fr.ifremer.tutti.persistence.entities.referential.Zone;
import fr.ifremer.tutti.service.PersistenceService;
import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel;
@@ -103,10 +105,13 @@
EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE,
EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_DATE,
EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_RECTILIGNE,
- EditFishingOperationUIModel.PROPERTY_DISTANCE_CHALUTEE,
+ EditFishingOperationUIModel.PROPERTY_TRAWL_DISTANCE,
EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_VALID,
EditFishingOperationUIModel.PROPERTY_LOCATION,
EditFishingOperationUIModel.PROPERTY_SAISISSEUR,
+ EditFishingOperationUIModel.PROPERTY_VESSEL,
+ EditFishingOperationUIModel.PROPERTY_GEAR,
+ EditFishingOperationUIModel.PROPERTY_POCHE_NUMBER,
EditFishingOperationUIModel.PROPERTY_COMMENT);
}
@@ -185,6 +190,14 @@
persistenceService.getAllPerson(),
model.getSaisisseur());
+ initBeanComboBox(ui.getVesselComboBox(),
+ Lists.<Vessel>newArrayList(),
+ null);
+
+ initBeanComboBox(ui.getGearComboBox(),
+ Lists.<Gear>newArrayList(),
+ null);
+
Program program = TuttiUIUtil.getProgram(ui);
Preconditions.checkNotNull(program,
"Could not find program in ui context");
@@ -352,6 +365,12 @@
FishingOperationLocation subStrata = bean.getSubStrata();
FishingOperationLocation location = bean.getLocation();
+ // update gear universe
+ ui.getGearComboBox().setData(Lists.newArrayList(bean.getCruise().getGear()));
+
+ // update vessel universe
+ ui.getVesselComboBox().setData(Lists.newArrayList(bean.getCruise().getVessel()));
+
model.fromBean(bean);
// to be sure combo list will be reloaded
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-01-17 16:50:14 UTC (rev 217)
@@ -108,8 +108,10 @@
public static final String PROPERTY_FISHING_OPERATION_RECTILIGNE = "fishingOperationRectiligne";
- public static final String PROPERTY_DISTANCE_CHALUTEE = "distanceChalutee";
+ public static final String PROPERTY_TRAWL_DISTANCE = "trawlDistance";
+ public static final String PROPERTY_TRAWL_NET_NUMBER = "trawlNetNumber";
+
public static final String PROPERTY_FISHING_OPERATION_VALID = "fishingOperationValid";
public static final String PROPERTY_LOCATION = "location";
@@ -124,6 +126,8 @@
public static final String PROPERTY_VALIDATION_CONTEXT = "validationContext";
+ public static final String PROPERTY_POCHE_NUMBER = "trawlNetNumber";
+
/**
* Flag when there is no fishing operation selected.
*
@@ -165,7 +169,7 @@
protected boolean fishingOperationRectiligne;
- protected Float distanceChalutee;
+ protected Float trawlDistance;
protected Boolean fishingOperationValid;
@@ -183,6 +187,8 @@
protected Vessel vessel;
+ protected Integer trawlNetNumber;
+
protected static Binder<EditFishingOperationUIModel, FishingOperation> toBeanBinder =
BinderFactory.newBinder(EditFishingOperationUIModel.class,
FishingOperation.class);
@@ -530,14 +536,14 @@
firePropertyChange(PROPERTY_FISHING_OPERATION_RECTILIGNE, oldValue, fishingOperationRectiligne);
}
- public Float getDistanceChalutee() {
- return distanceChalutee;
+ public Float getTrawlDistance() {
+ return trawlDistance;
}
- public void setDistanceChalutee(Float distanceChalutee) {
- Object oldValue = getDistanceChalutee();
- this.distanceChalutee = distanceChalutee;
- firePropertyChange(PROPERTY_DISTANCE_CHALUTEE, oldValue, distanceChalutee);
+ public void setTrawlDistance(Float trawlDistance) {
+ Object oldValue = getTrawlDistance();
+ this.trawlDistance = trawlDistance;
+ firePropertyChange(PROPERTY_TRAWL_DISTANCE, oldValue, trawlDistance);
}
public Boolean getFishingOperationValid() {
@@ -613,6 +619,16 @@
firePropertyChange(PROPERTY_VESSEL, oldValue, vessel);
}
+ public Integer getTrawlNetNumber() {
+ return trawlNetNumber;
+ }
+
+ public void setTrawlNetNumber(Integer trawlNetNumber) {
+ Object oldValue = getTrawlNetNumber();
+ this.trawlNetNumber = trawlNetNumber;
+ firePropertyChange(PROPERTY_TRAWL_NET_NUMBER, oldValue, trawlNetNumber);
+ }
+
@Override
protected FishingOperation newEntity() {
return fishingOperation;
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-01-17 16:50:14 UTC (rev 217)
@@ -112,6 +112,11 @@
List<FishingOperation> fishingOperations =
persistenceService.getAllFishingOperation(cruiseId);
+
+ //TODO make sure to use selection cruise ?
+ for (FishingOperation fishingOperation : fishingOperations) {
+ fishingOperation.setCruise(cruise);
+ }
model.setFishingOperation(fishingOperations);
if (log.isInfoEnabled()) {
@@ -199,12 +204,12 @@
//TODO Should select gear from possible one ?
Gear gear = newFishingOperation.getCruise().getGear(0);
newFishingOperation.setGear(gear);
+ newFishingOperation.setTrawlNetNumber(1);
// by default use the current day with no time information
Date currentDate = DateUtils.setMinutes(
DateUtils.setHours(new Date(), 0), 0);
- newFishingOperation.setDate(currentDate);
newFishingOperation.setGearShootingStartDate(currentDate);
newFishingOperation.setGearShootingEndDate(currentDate);
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java 2013-01-17 16:50:14 UTC (rev 217)
@@ -26,8 +26,6 @@
import com.google.common.collect.Lists;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.jdesktop.beans.AbstractSerializableBean;
import java.util.List;
@@ -40,22 +38,16 @@
*/
public class FishingOperationsUIModel extends AbstractSerializableBean {
- private static final Log log = LogFactory.getLog(FishingOperationsUIModel.class);
-
private static final long serialVersionUID = 1L;
public static final String PROPERTY_FISHING_OPERATION = "fishingOperation";
public static final String PROPERTY_SELECTED_FISHING_OPERATION = "selectedFishingOperation";
-// public static final String PROPERTY_CRUISE = "cruise";
-
protected List<FishingOperation> fishingOperation;
protected FishingOperation selectedFishingOperation;
-// protected Cruise cruise;
-
public List<FishingOperation> getFishingOperation() {
return fishingOperation;
}
@@ -99,14 +91,4 @@
this.selectedFishingOperation = selectedFishingOperation;
firePropertyChange(PROPERTY_SELECTED_FISHING_OPERATION, oldValue, selectedFishingOperation);
}
-
-// public Cruise getCruise() {
-// return cruise;
-// }
-//
-// public void setCruise(Cruise cruise) {
-// Object oldValue = getCruise();
-// this.cruise = cruise;
-// firePropertyChange(PROPERTY_CRUISE, oldValue, cruise);
-// }
}
Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-error-validation.xml
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-error-validation.xml 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-error-validation.xml 2013-01-17 16:50:14 UTC (rev 217)
@@ -45,9 +45,9 @@
</field-validator>
</field>
- <field name="poche">
+ <field name="trawlNet">
<field-validator type="required" short-circuit="true">
- <message>tutti.validator.error.cruise.poche.required</message>
+ <message>tutti.validator.error.cruise.trawlNet.required</message>
</field-validator>
</field>
@@ -106,4 +106,11 @@
</field-validator>
</field>
+ <field name="comment">
+ <field-validator type="stringlength" short-circuit="true">
+ <param name="maxLength">2000</param>
+ <message>tutti.validator.error.comment.too.long##${maxLength}</message>
+ </field-validator>
+ </field>
+
</validators>
Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-validation.xml
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-validation.xml 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-validation.xml 2013-01-17 16:50:14 UTC (rev 217)
@@ -35,6 +35,13 @@
</message>
</field-validator>
+ <field-validator type="stringlength" short-circuit="true">
+ <param name="maxLength">40</param>
+ <message>
+ tutti.validator.error.fishingOperation.stationNumber.too.long##${maxLength}
+ </message>
+ </field-validator>
+
</field>
<field name="fishingOperationNumber">
@@ -54,4 +61,11 @@
</field-validator>
</field>
+
+ <field name="comment">
+ <field-validator type="stringlength" short-circuit="true">
+ <param name="maxLength">2000</param>
+ <message>tutti.validator.error.comment.too.long##${maxLength}</message>
+ </field-validator>
+ </field>
</validators>
Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml 2013-01-17 16:50:14 UTC (rev 217)
@@ -35,6 +35,16 @@
</message>
</field-validator>
+ <field-validator type="fieldexpressionwithparams" short-circuit="true">
+ <param name="intParams">size:40</param>
+ <param name="expression">
+ <![CDATA[ stationNumber.length() < ints.size ]]>
+ </param>
+ <message>
+ tutti.validator.error.fishingOperation.stationNumber.too.long##${ints.size}
+ </message>
+ </field-validator>
+
</field>
<field name="fishingOperationNumber">
@@ -344,4 +354,11 @@
</field>
+ <field name="comment">
+ <field-validator type="stringlength" short-circuit="true">
+ <param name="maxLength">2000</param>
+ <message>tutti.validator.error.comment.too.long##${maxLength}</message>
+ </field-validator>
+ </field>
+
</validators>
Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIModel-error-validation.xml
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIModel-error-validation.xml 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIModel-error-validation.xml 2013-01-17 16:50:14 UTC (rev 217)
@@ -42,4 +42,12 @@
</field-validator>
</field>
+
+ <field name="comment">
+ <field-validator type="stringlength" short-circuit="true">
+ <param name="maxLength">2000</param>
+ <message>tutti.validator.error.comment.too.long##${maxLength}</message>
+ </field-validator>
+ </field>
+
</validators>
Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel-error-validation.xml
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel-error-validation.xml 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel-error-validation.xml 2013-01-17 16:50:14 UTC (rev 217)
@@ -32,4 +32,11 @@
</field-validator>
</field>
+ <field name="comment">
+ <field-validator type="stringlength" short-circuit="true">
+ <param name="maxLength">2000</param>
+ <message>tutti.validator.error.comment.too.long##${maxLength}</message>
+ </field-validator>
+ </field>
+
</validators>
\ No newline at end of file
Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties
===================================================================
--- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-01-17 16:31:22 UTC (rev 216)
+++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-01-17 16:50:14 UTC (rev 217)
@@ -88,9 +88,9 @@
tutti.label.cruise.country=Pays
tutti.label.cruise.endDate=Date de fin
tutti.label.cruise.name=Nom
-tutti.label.cruise.poche=Nombre de poches
tutti.label.cruise.program=Série
tutti.label.cruise.surveyPart=Série partielle
+tutti.label.cruise.trawlNet=Nombre de poches
tutti.label.cruise.year=Année
tutti.label.filterSpeciesBatchMode.label=Filtre
tutti.label.filterSpeciesBatchMode.label.tip=Pour filtrer les lots
@@ -109,11 +109,12 @@
tutti.label.filterVesselType.scientific.tip=Uniquement les navires scientifiques
tutti.label.fishingOperation.date=Date
tutti.label.fishingOperation.distanceChalutee=Distance chalutée
-tutti.label.fishingOperation.duree=Durée
+tutti.label.fishingOperation.duration=Durée
tutti.label.fishingOperation.fishingOperationInvalid=Trait invalide
tutti.label.fishingOperation.fishingOperationNumber=Numéro de Trait
tutti.label.fishingOperation.fishingOperationRectiligne=Trait rectiligne
tutti.label.fishingOperation.fishingOperationValid=Trait valide
+tutti.label.fishingOperation.gear=Engin
tutti.label.fishingOperation.gearDate=Date
tutti.label.fishingOperation.gearLatitude=Latitude
tutti.label.fishingOperation.gearLongitude=Longitude
@@ -126,6 +127,9 @@
tutti.label.fishingOperation.stationNumber=Code Station
tutti.label.fishingOperation.strata=Strate
tutti.label.fishingOperation.subStrata=Sous strate
+tutti.label.fishingOperation.trawlDistance=Distance chalutée
+tutti.label.fishingOperation.trawlNetNumber=Numéro de poche
+tutti.label.fishingOperation.vessel=Navire
tutti.label.frequencyConfiguration.lengthStepCaracteristic=Type de mesure
tutti.label.frequencyConfiguration.maxStep=Classe max
tutti.label.frequencyConfiguration.minStep=Classe min
@@ -298,13 +302,15 @@
tutti.validator.error.cruise.headOfMission.required=Au moins un chef de mission doit être sélectionné
tutti.validator.error.cruise.headOfSortRoom.required=Au moins un responsable de salle de tri doit être sélectionné
tutti.validator.error.cruise.name.required=Le nom de la campagne est obligatoire
-tutti.validator.error.cruise.poche.required=Le nombre de poche est obligatoire
tutti.validator.error.cruise.program.required=La série est obligatoire
+tutti.validator.error.cruise.trawlNet.required=Le nombre de poche est obligatoire
tutti.validator.error.cruise.vessel.required=Au moins un bateau doit être sélectionné
tutti.validator.error.cruise.year.required=L'année est obligatoire
+tutti.validator.error.comment.too.long=Taille de commentaire trop longue (limitée à %s caractères)
tutti.validator.error.fishingOperation.date.required=La date du fishingOperation est obligatoire
tutti.validator.error.fishingOperation.fishingOperationNumber.required=Le numéro de trait est obligatoire
tutti.validator.error.fishingOperation.stationNumber.required=Le numéro de station est obligatoire
+tutti.validator.error.fishingOperation.stationNumber.too.long=Valeur trop longue (limitée à %s caractères)
tutti.validator.error.program.name.required=Le nom de la série est obligatoire
tutti.validator.error.program.zone.required=La zone de la série est obligatoire
tutti.validator.error.protocol.name.required=Le nom du protocol est obligatoire
1
0
r216 - in trunk/tutti-persistence-adagio/src: main/java/fr/ifremer/tutti/persistence/service main/resources test/java/fr/ifremer/tutti/persistence/service
by blavenier@users.forge.codelutin.com 17 Jan '13
by blavenier@users.forge.codelutin.com 17 Jan '13
17 Jan '13
Author: blavenier
Date: 2013-01-17 17:31:22 +0100 (Thu, 17 Jan 2013)
New Revision: 216
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/216
Log:
ref refs #1920: [Persistence] Adagio Donn?\195?\169es th?\195?\169matiques
- Start implementation of FishingOperation.create()
- Change date store in CruiseService.create()
Modified:
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml
trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java
trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceTest.java
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-01-17 13:55:41 UTC (rev 215)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-01-17 16:31:22 UTC (rev 216)
@@ -27,6 +27,7 @@
import com.google.common.collect.Lists;
import fr.ifremer.adagio.core.dao.administration.user.PersonDao;
import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip;
+import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.ObservedFishingTrip;
import fr.ifremer.adagio.core.dao.data.survey.scientificCruise.ScientificCruise;
import fr.ifremer.adagio.core.dao.data.survey.scientificCruise.ScientificCruiseDao;
import fr.ifremer.adagio.core.dao.referential.QualityFlagDao;
@@ -300,15 +301,24 @@
if (copyIfNull && source.getYear() == null && source.getBeginDate() == null) {
target.setDepartureDateTime(null);
} else if (source.getBeginDate() != null) {
- target.setDepartureDateTime(source.getBeginDate());
+ calendar.setTime(source.getBeginDate());
+ calendar.set(Calendar.SECOND, 0);
+ calendar.set(Calendar.MILLISECOND, 0);
+ target.setDepartureDateTime(calendar.getTime());
}
// EndDate
if (copyIfNull && source.getEndDate() == null) {
target.setReturnDateTime(null);
} else if (source.getEndDate() != null) {
- target.setReturnDateTime(source.getEndDate());
+ calendar.setTime(source.getEndDate());
+ calendar.set(Calendar.SECOND, 0);
+ calendar.set(Calendar.MILLISECOND, 0);
+ target.setReturnDateTime(calendar.getTime());
}
+
+ // Poche
+ // TODO BLA : voir si le PSFM exists
// Comment
if (copyIfNull && source.getComment() == null) {
@@ -340,7 +350,12 @@
// Default values :
target.setSynchronizationStatus(SynchronizationStatus.DIRTY.getValue());
if (target.getCreationDate() == null) {
- target.setCreationDate(new Date());
+ calendar.setTime(new Date());
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
+ calendar.set(Calendar.MINUTE, 0);
+ calendar.set(Calendar.SECOND, 0);
+ calendar.set(Calendar.MILLISECOND, 0);
+ target.setCreationDate(calendar.getTime());
}
if (target.getManagerPerson() != null) {
target.setRecorderPerson(target.getManagerPerson());
@@ -348,18 +363,18 @@
}
// FishingTrip
- FishingTrip fishingTrip = null;
+ ObservedFishingTrip fishingTrip = null;
if (target.getFishingTrips() == null || target.getFishingTrips().size() == 0) {
- fishingTrip = FishingTrip.Factory.newInstance();
+ fishingTrip = ObservedFishingTrip.Factory.newInstance();
if (target.getFishingTrips() == null) {
- target.setFishingTrips(Lists.newArrayList(fishingTrip));
+ target.setFishingTrips(Lists.newArrayList((FishingTrip)fishingTrip));
fishingTrip.setScientificCruise(target);
} else {
target.getFishingTrips().add(fishingTrip);
fishingTrip.setScientificCruise(target);
}
} else {
- fishingTrip = target.getFishingTrips().iterator().next();
+ fishingTrip = (ObservedFishingTrip)target.getFishingTrips().iterator().next();
}
// Fill fishing trip with scientificCruise info:
@@ -403,9 +418,7 @@
}
}
- // Save miscDataBuffer into comments
- // TODO BLA : vérifier que les UI Allegro n'utilise pas ce commentaires,
- // mais bien celui de scientificCruise
+ // Save miscDataBuffer into fishing trip comments, because it's not used in Allegro
fishingTrip.setComments(miscDataBuffer.toString());
}
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java 2013-01-17 13:55:41 UTC (rev 215)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java 2013-01-17 16:31:22 UTC (rev 216)
@@ -24,13 +24,43 @@
* #L%
*/
+import fr.ifremer.adagio.core.dao.data.operation.FishingOperationDao;
+import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip;
+import fr.ifremer.adagio.core.dao.data.survey.scientificCruise.ScientificCruise;
+import fr.ifremer.adagio.core.dao.data.survey.scientificCruise.ScientificCruiseDao;
+import fr.ifremer.adagio.core.dao.data.vessel.feature.use.GearUseFeatures;
+import fr.ifremer.adagio.core.dao.data.vessel.position.VesselPosition;
+import fr.ifremer.adagio.core.dao.referential.QualityFlagDao;
+import fr.ifremer.adagio.core.dao.referential.gear.Gear;
+import fr.ifremer.adagio.core.dao.referential.gear.GearDao;
+import fr.ifremer.adagio.core.dao.referential.location.Location;
+import fr.ifremer.adagio.core.dao.referential.location.LocationDao;
+import fr.ifremer.adagio.core.dao.technical.synchronization.SynchronizationStatus;
+import fr.ifremer.tutti.persistence.entities.data.Cruise;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
+import fr.ifremer.tutti.persistence.entities.data.Program;
+import fr.ifremer.tutti.persistence.entities.referential.Country;
+import fr.ifremer.tutti.persistence.entities.referential.Person;
+import fr.ifremer.tutti.persistence.entities.referential.Vessel;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.hibernate.type.IntegerType;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DataRetrievalFailureException;
import org.springframework.stereotype.Service;
+import com.google.common.collect.Lists;
+
+import java.sql.Timestamp;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.Iterator;
import java.util.List;
+import javax.annotation.Resource;
+
/**
* @author tchemit <chemit(a)codelutin.com>
* @since 0.3
@@ -42,6 +72,26 @@
private static final Log log =
LogFactory.getLog(FishingOperationPersistenceServiceImpl.class);
+ @Autowired(required = true)
+ protected ReferentialPersistenceService referentielService;
+
+ @Resource(name = "fishingOperationDao")
+ protected FishingOperationDao fishingOperationDao;
+
+ @Resource(name = "gearDao")
+ protected GearDao gearDao;
+
+ @Resource(name = "locationDao")
+ protected LocationDao locationDao;
+
+ @Resource(name = "scientificCruiseDao")
+ protected ScientificCruiseDao scientificCruiseDao;
+
+ @Resource(name = "qualityFlagDao")
+ protected QualityFlagDao qualityFlagDao;
+
+ protected Calendar calendar = new GregorianCalendar();
+
@Override
public List<FishingOperation> getAllFishingOperation(String cruiseId) {
return null;
@@ -49,14 +99,242 @@
@Override
public FishingOperation getFishingOperation(String id) {
- return null;
+ Object[] source = queryUnique(
+ "fishingOperation",
+ "fishingOperationId", IntegerType.INSTANCE, Integer.valueOf(id));
+
+ if (source == null) {
+ throw new DataRetrievalFailureException("Could not retrieve fishingOperation with id=" + id);
+ }
+ FishingOperation result = new FishingOperation();
+ result.setId(id);
+
+ // Cruise :
+ // do load load Cruise here, because it will be attach upper in the call stack
+
+ int colIndex=0;
+
+ // Start date
+ calendar.setTimeInMillis(((Timestamp) source[colIndex++]).getTime());
+ int millisecond = calendar.get(Calendar.MILLISECOND);
+ if (millisecond > 0) {
+ // Recognize a fake date : see method beanToEntity()
+ result.setGearShootingStartDate(null);
+ }
+ else {
+ result.setGearShootingStartDate(calendar.getTime());
+ }
+
+ // End date
+ result.setGearShootingEndDate((Date) source[colIndex++]);
+
+ // Comment :
+ result.setComment((String) source[colIndex++]);
+
+ // Gear :
+ Integer gearId = (Integer)source[colIndex++];
+ if (gearId != null) {
+ // TODO TC : activer un cache sur getGear()
+ fr.ifremer.tutti.persistence.entities.referential.Gear gear = referentielService.getGear(gearId);
+ result.setGear(gear);
+ }
+
+ return result;
}
@Override
public FishingOperation createFishingOperation(FishingOperation bean) {
- return null;
+ if (bean == null) {
+ throw new IllegalArgumentException("fishingOperation could not be null");
+ }
+ if (bean.getCruise() == null || bean.getCruise().getId() == null) {
+ throw new IllegalArgumentException("fishingOperation.getCruise() could not be null");
+ }
+ fr.ifremer.adagio.core.dao.data.operation.FishingOperation fishingOperation = fr.ifremer.adagio.core.dao.data.operation.FishingOperation.Factory.newInstance();
+ beanToEntity(bean, fishingOperation, true);
+ fishingOperationDao.create(fishingOperation);
+
+ bean.setId(String.valueOf(fishingOperation.getId()));
+ return bean;
}
+
+ protected void beanToEntity(FishingOperation source, fr.ifremer.adagio.core.dao.data.operation.FishingOperation target, boolean copyIfNull) {
+ //StringBuffer miscDataBuffer = new StringBuffer();
+ ScientificCruise scientificCruise = null;
+ FishingTrip fishingtrip = target.getFishingTrip();
+ if (fishingtrip == null) {
+ // TODO BLA éviter ici un rechargement de fishingTrip :
+ scientificCruise = scientificCruiseDao.load(Integer.valueOf(source.getCruise().getId()));
+ fishingtrip = scientificCruise.getFishingTrips().iterator().next();
+ fishingtrip.getOperations().add(target); // Inverse link
+ }
+ else {
+ scientificCruise = fishingtrip.getScientificCruise();
+ }
+ // Link to parent fishing trip
+ target.setFishingTrip(fishingtrip);
+ // Store previous start/stop position
+ VesselPosition startPosition = null;
+ VesselPosition endPosition = null;
+ if (target.getVesselPositions() != null) {
+ for (Iterator iterator = target.getVesselPositions().iterator(); iterator.hasNext();) {
+ VesselPosition position = (VesselPosition) iterator.next();
+ if (position.getDateTime() != null && position.getDateTime().equals(target.getStartDateTime())) {
+ startPosition = position;
+ }
+ else if (position.getDateTime() == null || position.getDateTime().equals(target.getEndDateTime())) {
+ endPosition = position;
+ }
+ }
+ }
+
+ // StationNumber
+ if (copyIfNull && source.getStationNumber() == null) {
+ // TODO BL : where to store station number
+ } else if (source.getStationNumber() != null) {
+ //source.getStationNumber();
+ // TODO BL : where to store station number
+ }
+
+ // OP N°
+ if (copyIfNull && source.getFishingOperationNumber() == null) {
+ // TODO BL : where to store OP N°
+ } else if (source.getFishingOperationNumber() != null) {
+ //source.getStationNumber();
+ // TODO BL : where to store OP N°
+ }
+
+ // Start date :
+ if (copyIfNull && source.getGearShootingStartDate() == null) {
+ target.setStartDateTime(null);
+ target.setFishingStartDateTime(null);
+ } else if (source.getGearShootingStartDate() != null) {
+ calendar.setTime(source.getGearShootingStartDate());
+ // Reset millisecond (as need for Allegro)
+ calendar.set(Calendar.MILLISECOND, 0);
+ target.setStartDateTime(calendar.getTime());
+ target.setFishingStartDateTime(calendar.getTime());
+ }
+
+ // End date :
+ if (copyIfNull && source.getGearShootingEndDate() == null) {
+ target.setEndDateTime(null);
+ target.setFishingEndDateTime(null);
+ } else if (source.getGearShootingEndDate() != null) {
+ calendar.setTime(source.getGearShootingEndDate());
+ // Reset millisecond (as need for Allegro)
+ calendar.set(Calendar.MILLISECOND, 0);
+ target.setEndDateTime(calendar.getTime());
+ target.setFishingEndDateTime(calendar.getTime());
+ }
+
+ // Comment
+ if (copyIfNull && source.getComment() == null) {
+ target.setComments(null);
+ } else if (source.getComment() != null) {
+ target.setComments(source.getComment());
+ }
+
+ // Vessel
+ target.setVessel(fishingtrip.getVessel());
+
+ // Quality Flag :
+ if (target.getQualityFlag() == null) {
+ target.setQualityFlag(qualityFlagDao.load(enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED));
+ }
+
+ // Settings not null properties :
+ if (target.getStartDateTime() == null) {
+ // Generate a fake departureDate (precision=minute) then add 1 millisecond
+ calendar.setTime(scientificCruise.getDepartureDateTime());
+ calendar.set(Calendar.SECOND, 0);
+ calendar.set(Calendar.MILLISECOND, 1);
+ target.setStartDateTime(calendar.getTime());
+ target.setFishingStartDateTime(calendar.getTime());
+ }
+
+ // Gear Use Features
+ GearUseFeatures gearUseFeature = null;
+ if (target.getGearUseFeatures() == null || target.getGearUseFeatures().size() == 0) {
+ gearUseFeature = GearUseFeatures.Factory.newInstance();
+ if (target.getGearUseFeatures() == null) {
+ target.setGearUseFeatures(Lists.newArrayList(gearUseFeature));
+ gearUseFeature.setOperation(target);
+ } else {
+ target.getGearUseFeatures().add(gearUseFeature);
+ gearUseFeature.setOperation(target);
+ }
+ } else {
+ gearUseFeature = target.getGearUseFeatures().iterator().next();
+ }
+
+ // Fill fishing trip with scientificCruise info:
+ gearUseFeature.setStartDate(target.getStartDateTime());
+ if (gearUseFeature.getStartDate() == null) {
+ gearUseFeature.setStartDate(scientificCruise.getDepartureDateTime());
+ }
+ gearUseFeature.setEndDate(target.getEndDateTime());
+ gearUseFeature.setVessel(target.getVessel());
+ gearUseFeature.setProgram(scientificCruise.getProgram());
+ if (gearUseFeature.getCreationDate() == null) {
+ calendar.setTime(new Date());
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
+ calendar.set(Calendar.MINUTE, 0);
+ calendar.set(Calendar.SECOND, 0);
+ calendar.set(Calendar.MILLISECOND, 0);
+ gearUseFeature.setCreationDate(calendar.getTime());
+ }
+ if (gearUseFeature.getQualityFlag() == null) {
+ gearUseFeature.setQualityFlag(qualityFlagDao.load(enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED));
+ }
+
+ // Gear
+ if (copyIfNull && source.getGear() == null) {
+ gearUseFeature.setGear(null);
+ } else if (source.getGear() != null && source.getGear().getId() != null) {
+ Gear gear = gearDao.load(Integer.valueOf(source.getGear().getId()));
+ gearUseFeature.setGear(gear);
+ }
+
+ // Start position :
+ if (startPosition == null) {
+ startPosition = VesselPosition.Factory.newInstance();
+ startPosition.setOperation(target);
+ if (target.getVesselPositions() == null) {
+ target.setVesselPositions(Lists.newArrayList(startPosition));
+ }
+ }
+ startPosition.setDateTime(target.getStartDateTime());
+ startPosition.setLatitude(source.getGearShootingStartLatitude());
+ startPosition.setLongitude(source.getGearShootingStartLongitude());
+ startPosition.setVessel(target.getVessel());
+ startPosition.setProgram(scientificCruise.getProgram());
+ startPosition.setRecorderDepartment(scientificCruise.getRecorderDepartment());
+ startPosition.setQualityFlag(target.getQualityFlag());
+
+ if (endPosition == null) {
+ endPosition = VesselPosition.Factory.newInstance();
+ endPosition.setOperation(target);
+ target.getVesselPositions().add(endPosition);
+ }
+ endPosition.setDateTime(target.getEndDateTime());
+ if (endPosition.getDateTime() == null) {
+ calendar.setTime(startPosition.getDateTime());
+ calendar.set(Calendar.MILLISECOND, 1);
+ endPosition.setDateTime(calendar.getTime());
+ }
+ endPosition.setLatitude(source.getGearShootingEndLatitude());
+ endPosition.setLongitude(source.getGearShootingEndLongitude());
+ endPosition.setVessel(target.getVessel());
+ endPosition.setProgram(scientificCruise.getProgram());
+ endPosition.setRecorderDepartment(scientificCruise.getRecorderDepartment());
+ endPosition.setQualityFlag(target.getQualityFlag());
+
+ // Save miscDataBuffer into comments
+ //gearUseFeature.setComments(miscDataBuffer.toString());
+ }
+
@Override
public FishingOperation saveFishingOperation(FishingOperation bean) {
return null;
Modified: trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml
===================================================================
--- trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml 2013-01-17 13:55:41 UTC (rev 215)
+++ trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml 2013-01-17 16:31:22 UTC (rev 216)
@@ -161,6 +161,23 @@
]]>
<query-param name="cruiseId" type="java.lang.Integer"/>
</query>
+
+ <query cacheable="true" name="fishingOperation">
+ <![CDATA[
+ SELECT
+ o.startDateTime as startDateTime,
+ o.endDateTime as endDateTime,
+ o.comments as comments,
+ guf.gear.id as gearId
+ FROM
+ FishingOperationImpl o
+ INNER JOIN o.gearUseFeatures guf
+ WHERE
+ o.id=:fishingOperationId
+ ]]>
+ <query-param name="fishingOperationId" type="java.lang.Integer"/>
+ </query>
+
<!-- ===================================================================== -->
<!-- === Requete techniques sur référentiels [REF-TXXX] === -->
Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java
===================================================================
--- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java 2013-01-17 13:55:41 UTC (rev 215)
+++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java 2013-01-17 16:31:22 UTC (rev 216)
@@ -95,7 +95,7 @@
cruise.setId(null);
- cruise.setName("CGFS_2013");
+ cruise.setName("Unit-test-" + System.currentTimeMillis());
cruise.setProgram(programService.getProgram(programCode));
@@ -142,7 +142,19 @@
if (log.isInfoEnabled()) {
log.info("Created cruise: " + createdCruise.getId());
}
+
+ // Reload cruise :
+ Cruise reloadedCruise = service.getCruise(createdCruise.getId());
+ calendar.setTime(createdCruise.getBeginDate());
+ calendar.set(Calendar.SECOND, 0);
+ calendar.set(Calendar.MILLISECOND, 0);
+ assertEquals(calendar.getTime(), reloadedCruise.getBeginDate());
+ calendar.setTime(createdCruise.getEndDate());
+ calendar.set(Calendar.SECOND, 0);
+ calendar.set(Calendar.MILLISECOND, 0);
+ assertEquals(calendar.getTime(), reloadedCruise.getEndDate());
+
// New cruise, with empty optional values
createdCruise.setId(null);
createdCruise.setHeadOfMission(null);
@@ -155,7 +167,7 @@
assertNotNull(createdCruise.getId());
assertEquals(cruise.getName(), createdCruise.getName());
- Cruise reloadedCruise = service.getCruise(createdCruise.getId());
+ reloadedCruise = service.getCruise(createdCruise.getId());
assertEquals(createdCruise.getBeginDate(), reloadedCruise.getBeginDate());
assertEquals(createdCruise.getEndDate(), reloadedCruise.getEndDate());
@@ -178,7 +190,7 @@
cruise.setId(null);
cruise = service.createCruise(cruise);
- cruise.setName("unit-TEST");
+ cruise.setName("Unit-test-" + System.currentTimeMillis());
Cruise savedCruise = service.saveCruise(cruise);
assertNotNull(savedCruise);
Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceTest.java
===================================================================
--- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceTest.java 2013-01-17 13:55:41 UTC (rev 215)
+++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceTest.java 2013-01-17 16:31:22 UTC (rev 216)
@@ -24,45 +24,134 @@
* #L%
*/
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+
import fr.ifremer.tutti.persistence.DatabaseResource;
+import fr.ifremer.tutti.persistence.entities.data.Cruise;
+import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
+import fr.ifremer.tutti.persistence.entities.referential.Gear;
+
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Ignore;
import org.junit.Test;
+import static org.junit.Assert.*;
/**
* @author tchemit <chemit(a)codelutin.com>
* @since 0.3
*/
-@Ignore
+
public class FishingOperationPersistenceServiceTest {
@ClassRule
public static final DatabaseResource dbResource = new DatabaseResource();
protected FishingOperationPersistenceService service;
+
+ protected ReferentialPersistenceService referentialService;
+ protected ProgramPersistenceService programService;
+
+ protected CruisePersistenceService cruiseService;
+
+ protected Cruise cruise = null;
+
+
@Before
public void setUp() throws Exception {
service = TuttiPersistenceServiceLocator.getFishingOperationPersistenceService();
+ cruiseService = TuttiPersistenceServiceLocator.getCruisePersistenceService();
+ referentialService = TuttiPersistenceServiceLocator.getReferentialPersistenceService();
+ programService = TuttiPersistenceServiceLocator.getProgramPersistenceService();
+
}
@Test
+ @Ignore
public void getAllFishingOperation(/*String cruiseId*/) {
}
@Test
+ @Ignore
public void getFishingOperation(/*String id*/) {
}
@Test
public void createFishingOperation(/*FishingOperation bean*/) {
+ Calendar calendar = new GregorianCalendar();
+ // Duplicate an existing cruise, to attach new fishing operations
+ cruise = cruiseService.getCruise(dbResource.getFixtures().cruiseId());
+ cruise.setId(null);
+ cruise.setName("Unit-test-" + System.currentTimeMillis());
+ cruise.setBeginDate(new Date());
+ cruise.setEndDate(null);
+ cruise = cruiseService.createCruise(cruise);
+ assertNotNull(cruise.getId());
+
+ // Create new fishing operation :
+ FishingOperation fishingOperation = new FishingOperation();
+
+ // Set properties (with optional value to null)
+ fishingOperation.setCruise(cruise);
+ fishingOperation.setStationNumber("1");
+ fishingOperation.setFishingOperationNumber(new Integer(1));
+ fishingOperation.setGearShootingStartDate(null);
+ fishingOperation.setGearShootingEndDate(null);
+ fishingOperation.setGear(null);
+
+ // Store fishing operation into database :
+ FishingOperation createdFishingOperation = service.createFishingOperation(fishingOperation);
+ assertNotNull("Fishing operation ID must not be null after creation in database", createdFishingOperation);
+ assertNotNull(createdFishingOperation.getId());
+ // TODO BLA : add asserts on other properties
+
+ // Trying to relaod this fishing operation
+ FishingOperation reloadedFishingOperation = service.getFishingOperation(createdFishingOperation.getId());
+ assertNotNull(reloadedFishingOperation);
+ assertNull(reloadedFishingOperation.getGearShootingStartDate());
+
+ // Set properties
+ fishingOperation.setId(null);
+ fishingOperation.setStationNumber("2");
+ fishingOperation.setFishingOperationNumber(new Integer(2));
+ calendar.setTime(new Date());
+ calendar.set(Calendar.HOUR_OF_DAY, 1);
+ fishingOperation.setGearShootingStartDate(calendar.getTime());
+ calendar.setTime(new Date());
+ calendar.set(Calendar.HOUR_OF_DAY, 10);
+ fishingOperation.setGearShootingEndDate(calendar.getTime());
+
+ fishingOperation.setGearShootingStartLatitude(33.2541f);
+ fishingOperation.setGearShootingStartLongitude(-5.514f);
+ fishingOperation.setGearShootingEndLatitude(33.7441f);
+ fishingOperation.setGearShootingEndLongitude(-5.597f);
+
+ List<Gear> gears = referentialService.getAllFishingGear();
+ assertNotNull(gears);
+ assertTrue(gears.size() > 0);
+ fishingOperation.setGear(gears.get(0));
+
+ // Store fishing operation into database :
+ createdFishingOperation = service.createFishingOperation(fishingOperation);
+ assertNotNull("Fishing operation ID must not be null after creation in database", createdFishingOperation);
+ assertNotNull(createdFishingOperation.getId());
+ assertNotNull(createdFishingOperation.getGear());
+ //assertEquals(fishingOperation.getGearShootingStartLatitude(), createdFishingOperation.getGearShootingStartLatitude());
+ //assertEquals(fishingOperation.getGearShootingStartLongitude(), createdFishingOperation.getGearShootingStartLongitude());
+ //assertEquals(fishingOperation.getGearShootingEndLatitude(), createdFishingOperation.getGearShootingEndLatitude());
+ //assertEquals(fishingOperation.getGearShootingEndLongitude(), createdFishingOperation.getGearShootingEndLongitude());
+
}
@Test
+ @Ignore
public void saveFishingOperation(/*FishingOperation bean*/) {
}
1
0
17 Jan '13
Author: tchemit
Date: 2013-01-17 14:55:41 +0100 (Thu, 17 Jan 2013)
New Revision: 215
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/215
Log:
refs #1920: [Persistence] Adagio Donn?\195?\169es th?\195?\169matiques - add specific vessel and gear in FishingOperation
refs #1919: [Persistence] Adagio r?\195?\169f?\195?\169rentiel (keep only no calculated pmfm + improve their type (NUMERIC, TEXT or QUALITATIVE via an enum)
refs #1824: [PROTOCOLE] - Gestion des param?\195?\168tres suivis par esp?\195?\168ces (review SampleCategoryEnum and add lengthStep)
usage of protocole where it is possible
Modified:
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml
trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java
trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/RessourceClassLoader.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java
trunk/tutti-persistence/src/main/xmi/tutti-persistence.properties
trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CaracteristicValueEditor.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CaracteristicValueRenderer.java
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/RessourceClassLoader.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/RessourceClassLoader.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/RessourceClassLoader.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -99,6 +99,7 @@
"search predicate can not be null");
this.searchInDirectoriesPredicate = Predicates.and(searchInDirectoriesPredicate, predicate);
}
+
public void setSearchInDirectoriesPredicate(Predicate<String> searchInDirectoriesPredicate) {
Preconditions.checkNotNull(searchInDirectoriesPredicate,
"search predicate can not be null");
@@ -109,8 +110,8 @@
public URL findResource(String name) {
URL result = null;
if (searchInDirectoriesPredicate.apply(name)) {
- if (log.isInfoEnabled()) {
- log.info("findResource [" + name + "] in [" + directories + ']');
+ if (log.isDebugEnabled()) {
+ log.debug("findResource [" + name + "] in " + directories);
}
result = getLoader().findResource(name);
}
@@ -124,8 +125,8 @@
public Enumeration<URL> findResources(String name) throws IOException {
Enumeration<URL> result = null;
if (searchInDirectoriesPredicate.apply(name)) {
- if (log.isInfoEnabled()) {
- log.info("findResources [" + name + "] in [" + directories + ']');
+ if (log.isDebugEnabled()) {
+ log.debug("findResources [" + name + "] in " + directories);
}
result = getLoader().findResources(name);
}
@@ -139,9 +140,9 @@
public URL getResource(String name) {
URL result = null;
if (searchInDirectoriesPredicate.apply(name)) {
- if (log.isInfoEnabled()) {
- log.info("getResource [" + name + "] in [" +
- directories + ']');
+ if (log.isDebugEnabled()) {
+ log.debug("getResource [" + name + "] in " +
+ directories);
}
result = getLoader().getResource(name);
}
@@ -155,8 +156,8 @@
public Enumeration<URL> getResources(String name) throws IOException {
Enumeration<URL> result = null;
if (searchInDirectoriesPredicate.apply(name)) {
- if (log.isInfoEnabled()) {
- log.info("getResources [" + name + "] in [" + directories + ']');
+ if (log.isDebugEnabled()) {
+ log.debug("getResources [" + name + "] in " + directories);
}
result = getLoader().getResources(name);
}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -32,6 +32,7 @@
import com.google.common.collect.Maps;
import fr.ifremer.tutti.persistence.entities.data.FishingOperationAware;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
+import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType;
import java.util.Collection;
import java.util.Collections;
@@ -167,4 +168,30 @@
}
};
}
+
+ public static CaracteristicType getType(boolean isAlpha,
+ boolean isQualitative) {
+ CaracteristicType result;
+ if (isAlpha) {
+ result = CaracteristicType.TEXT;
+ } else if (isQualitative) {
+ result = CaracteristicType.QUALITATIVE;
+ } else {
+ result = CaracteristicType.NUMBER;
+ }
+ return result;
+ }
+
+ public static boolean isNumberCaracteristic(Caracteristic c) {
+ return CaracteristicType.NUMBER == c.getCaracteristicType();
+ }
+
+ public static boolean isTextCaracteristic(Caracteristic c) {
+ return CaracteristicType.TEXT == c.getCaracteristicType();
+ }
+
+ public static boolean isQualitativeCaracteristic(Caracteristic c) {
+ return CaracteristicType.QUALITATIVE == c.getCaracteristicType();
+ }
+
}
Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.properties
===================================================================
--- trunk/tutti-persistence/src/main/xmi/tutti-persistence.properties 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-persistence/src/main/xmi/tutti-persistence.properties 2013-01-17 13:55:41 UTC (rev 215)
@@ -42,5 +42,7 @@
fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol.attribute.hydrologyPmfmId.stereotype=ordered
fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol.attribute.species.stereotype=ordered
fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol.attribute.sampleCategoryOrder.stereotype=ordered
+fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol.attribute.benthosSpeciesId.stereotype=ordered
+fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol.attribute.planktonSpeciesId.stereotype=ordered
fr.ifremer.tutti.persistence.entities.referential.Caracteristic.attribute.qualitativeValue.stereotype=ordered
Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo
===================================================================
(Binary files differ)
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -28,9 +28,11 @@
import fr.ifremer.adagio.core.dao.referential.StatusDao;
import fr.ifremer.adagio.core.dao.referential.taxon.TaxonNameExtendDao;
import fr.ifremer.adagio.core.dao.referential.taxon.TaxonRefTaxVO;
+import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.entities.referential.AbstractTuttiReferentialEntity;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
+import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType;
import fr.ifremer.tutti.persistence.entities.referential.Country;
import fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation;
import fr.ifremer.tutti.persistence.entities.referential.Gear;
@@ -446,16 +448,19 @@
result.setMatrixName((String) source[2]);
result.setFractionName((String) source[3]);
result.setMethodName((String) source[4]);
- result.setNumberType((Boolean) source[5]);
- result.setQualitativeType((Boolean) source[6]);
+ CaracteristicType type = TuttiEntities.getType((Boolean) source[5],
+ (Boolean) source[6]);
+ result.setCaracteristicType(type);
result.setSignifFiguresNumber((Integer) source[7]);
result.setMaximumNumberDecimals((Integer) source[8]);
result.setPrecision((Float) source[9]);
result.setUnit((String) source[10]);
setStatus((fr.ifremer.adagio.core.dao.referential.Status) source[11], result);
- if (result.isQualitativeType()) {
+ if (TuttiEntities.isQualitativeCaracteristic(result)) {
+ // load qualitative values
+
Iterator<Object[]> sources = queryListWithStatus(
"pmfmQualitativeValues",
"pmfmId", IntegerType.INSTANCE, pmfmId);
Modified: trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml
===================================================================
--- trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml 2013-01-17 13:55:41 UTC (rev 215)
@@ -185,6 +185,7 @@
FROM PmfmImpl p
WHERE
p.status.code IN (:statusValidCode, :statusTemporaryCode)
+ AND p.parameter.isCalculated = false
AND p.id= :pmfmId
]]>
<query-param name="pmfmId" type="java.lang.Integer"/>
@@ -230,6 +231,7 @@
FROM PmfmImpl p
WHERE
p.status.code IN (:statusValidCode, :statusTemporaryCode)
+ AND p.parameter.isCalculated = false
AND p.matrix.id= :matrixId
]]>
<query-param name="matrixId" type="java.lang.Integer"/>
@@ -257,6 +259,7 @@
FROM PmfmImpl p
WHERE
p.status.code IN (:statusValidCode, :statusTemporaryCode)
+ AND p.parameter.isCalculated = false
AND p.parameter.parameterGroup.id= :parameterGroupId
]]>
<query-param name="parameterGroupId" type="java.lang.Integer"/>
Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java
===================================================================
--- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceTest.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -284,10 +284,7 @@
@Test
public void getSizeCategoryCaracteristic() {
Caracteristic result = service.getSizeCategoryCaracteristic();
- Assert.assertNotNull(result);
- Assert.assertTrue(result.isQualitativeType());
- Assert.assertNotNull(result.getQualitativeValue());
- Assert.assertEquals(6, result.sizeQualitativeValue());
+ assertCaracteristicQualitative(result, 6);
persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.SizeCategory.name(), result);
assertCaracteristicSize(result, storage.getSizeCategoryCaracteristic());
}
@@ -295,10 +292,7 @@
@Test
public void getSexCaracteristic() {
Caracteristic result = service.getSexCaracteristic();
- Assert.assertNotNull(result);
- Assert.assertTrue(result.isQualitativeType());
- Assert.assertNotNull(result.getQualitativeValue());
- Assert.assertEquals(4, result.sizeQualitativeValue());
+ assertCaracteristicQualitative(result, 4);
persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.SexCategory.name(), result);
assertCaracteristicSize(result, storage.getSexCaracteristic());
}
@@ -306,10 +300,7 @@
@Test
public void getSortedUnsortedCaracteristic() {
Caracteristic result = service.getSortedUnsortedCaracteristic();
- Assert.assertNotNull(result);
- Assert.assertTrue(result.isQualitativeType());
- Assert.assertNotNull(result.getQualitativeValue());
- Assert.assertEquals(2, result.sizeQualitativeValue());
+ assertCaracteristicQualitative(result, 2);
persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.SortedUnsortedCategory.name(), result);
assertCaracteristicSize(result, storage.getSortedUnsortedCaracteristic());
}
@@ -317,10 +308,7 @@
@Test
public void getMaturityCaracteristic() {
Caracteristic result = service.getMaturityCaracteristic();
- Assert.assertNotNull(result);
- Assert.assertTrue(result.isQualitativeType());
- Assert.assertNotNull(result.getQualitativeValue());
- Assert.assertEquals(10, result.sizeQualitativeValue());
+ assertCaracteristicQualitative(result, 10);
persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.MaturityCategory.name(), result);
assertCaracteristicSize(result, storage.getMaturityCaracteristic());
}
@@ -328,10 +316,7 @@
@Test
public void getMacroWasteCategoryCaracteristic() {
Caracteristic result = service.getMacroWasteCategoryCaracteristic();
- Assert.assertNotNull(result);
- Assert.assertTrue(result.isQualitativeType());
- Assert.assertNotNull(result.getQualitativeValue());
- Assert.assertEquals(10, result.sizeQualitativeValue());
+ assertCaracteristicQualitative(result, 10);
persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.MacroWasteCategory.name(), result);
assertCaracteristicSize(result, storage.getMacroWasteCategoryCaracteristic());
}
@@ -339,10 +324,7 @@
@Test
public void getMacroWasteSizeCategoryCaracteristic() {
Caracteristic result = service.getMacroWasteSizeCategoryCaracteristic();
- Assert.assertNotNull(result);
- Assert.assertTrue(result.isQualitativeType());
- Assert.assertNotNull(result.getQualitativeValue());
- Assert.assertEquals(10, result.sizeQualitativeValue());
+ assertCaracteristicQualitative(result, 10);
persist(Caracteristic.class, ReferentialPersistenceServiceDevImpl.CaracteristicEnum.MacroWasteSizeCategory.name(), result);
assertCaracteristicSize(result, storage.getMacroWasteSizeCategoryCaracteristic());
}
@@ -378,11 +360,21 @@
}
+ protected void assertCaracteristicQualitative(Caracteristic result, int nbValues) {
+ Assert.assertNotNull(result);
+ Assert.assertNotNull(result.getCaracteristicType());
+ Assert.assertTrue(TuttiEntities.isQualitativeCaracteristic(result));
+ Assert.assertNotNull(result.getQualitativeValue());
+ Assert.assertEquals(nbValues, result.sizeQualitativeValue());
+ }
+
protected void assertCaracteristicSize(Caracteristic incoming,
Caracteristic caracteristic) {
Assert.assertNotNull(incoming);
Assert.assertNotNull(caracteristic);
Assert.assertEquals(incoming, caracteristic);
+ Assert.assertEquals(incoming.getCaracteristicType(),
+ caracteristic.getCaracteristicType());
Assert.assertEquals(incoming.sizeQualitativeValue(),
caracteristic.sizeQualitativeValue());
}
Modified: trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java
===================================================================
--- trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-persistence-dev/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceDevFixtures.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -29,6 +29,7 @@
import fr.ifremer.tutti.persistence.entities.IdAware;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
+import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType;
import fr.ifremer.tutti.persistence.entities.referential.Country;
import fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation;
import fr.ifremer.tutti.persistence.entities.referential.Gear;
@@ -458,7 +459,7 @@
ca.setId(UUID.randomUUID().toString());
ca.setName(name);
ca.setCategory(category);
- ca.setQualitativeType(true);
+ ca.setCaracteristicType(CaracteristicType.QUALITATIVE);
ca.setQualitativeValue(Lists.<CaracteristicQualitativeValue>newArrayList());
putInCache(Caracteristic.class, category, ca);
return ca;
@@ -469,7 +470,7 @@
ca.setId(UUID.randomUUID().toString());
ca.setName(name);
ca.setCategory(category);
- ca.setNumberType(true);
+ ca.setCaracteristicType(CaracteristicType.NUMBER);
putInCache(Caracteristic.class, category, ca);
return ca;
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -24,6 +24,7 @@
* #L%
*/
+import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
import fr.ifremer.tutti.persistence.entities.data.Program;
@@ -32,9 +33,7 @@
import fr.ifremer.tutti.persistence.entities.referential.Zone;
import fr.ifremer.tutti.service.PersistenceService;
import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel;
-import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler;
import fr.ifremer.tutti.ui.swing.MainUI;
-import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentTabUI;
import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentTabUIModel;
import fr.ifremer.tutti.ui.swing.content.operation.fishing.gearshooting.GearShootingTabUI;
@@ -45,20 +44,21 @@
import fr.ifremer.tutti.ui.swing.util.CustomTab;
import fr.ifremer.tutti.ui.swing.util.TabHandler;
import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
-import java.awt.BorderLayout;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.List;
-import javax.swing.DefaultSingleSelectionModel;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTabbedPane;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import java.awt.BorderLayout;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.List;
+
/**
* Handler for UI {@link EditFishingOperationUI}.
*
@@ -66,7 +66,7 @@
* @since 0.1
*/
public class EditFishingOperationUIHandler extends AbstractTuttiTabContainerUIHandler<EditFishingOperationUIModel>
- implements TabHandler {
+ implements TabHandler {
/** Logger. */
private static final Log log =
@@ -173,7 +173,7 @@
@Override
public void afterInitUI() {
-
+
ui.getFishingOperationValidPanel().remove(
ui.getFishingOperationResetRadio());
@@ -184,10 +184,11 @@
initBeanList(ui.getSaisisseurList(),
persistenceService.getAllPerson(),
model.getSaisisseur());
-
- String programId = context.getProgramId();
- Program program = persistenceService.getProgram(programId);
+ Program program = TuttiUIUtil.getProgram(ui);
+ Preconditions.checkNotNull(program,
+ "Could not find program in ui context");
+
Zone zone = program.getZone();
FishingOperationLocation strata = model.getStrata();
@@ -227,21 +228,21 @@
initBeanComboBox(ui.getSubStrataComboBox(), subStratas, subStrata);
initBeanComboBox(ui.getLocationComboBox(), locations, location);
-
+
model.setEmpty(true);
changeValidatorContext(model.getValidationContext(), ui.getValidator());
listenValidatorValid(ui.getValidator(), model);
-
+
setCustomTab(0, model);
listModelIsModify(model);
-
+
//init gear shooting
GearShootingTabUIModel gearShootingModel =
ui.getGearShootingTabContent().getModel();
gearShootingModel.setAvailableCaracteristics(persistenceService.getAllFishingOperationGearCaracteristic());
setCustomTab(1, gearShootingModel);
-
+
//init environment
EnvironmentTabUIModel environmentModel =
ui.getEnvironmentTabContent().getModel();
@@ -252,23 +253,23 @@
HydrologyTabUIModel hydrologyModel = ui.getHydrologyTabContent().getModel();
hydrologyModel.setAvailableCaracteristics(persistenceService.getAllFishingOperationHydrologicCaracteristic());
setCustomTab(3, hydrologyModel);
-
+
MainUI main = ui.getContextValue(MainUI.class, MainUI.class.getName());
main.clearValidators();
main.registerValidator(ui.getValidator());
-
+
}
-
+
@Override
public void onCloseUI() {
if (log.isInfoEnabled()) {
log.info("closing: " + ui);
}
-
+
MainUI main = ui.getContextValue(MainUI.class, MainUI.class.getName());
main.clearValidators();
-
+
closeUI(ui.getGearShootingTabContent());
closeUI(ui.getEnvironmentTabContent());
closeUI(ui.getHydrologyTabContent());
@@ -293,7 +294,7 @@
}
return result;
}
-
+
@Override
public boolean onHideTab() {
AbstractTuttiBeanUIModel model = getModel();
@@ -322,17 +323,17 @@
if (fishingOperationMonitor.wasModified()) {
save();
}
-
+
EditFishingOperationUIModel model = getModel();
model.fromBean(new FishingOperation());
-
+
model.setModify(false);
fishingOperationMonitor.clearModified();
-
+
model.setEmpty(true);
-
+
}
-
+
public void selectFishingOperation(FishingOperation bean) {
if (fishingOperationMonitor.wasModified()) {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -29,7 +29,9 @@
import fr.ifremer.tutti.persistence.entities.data.Cruise;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
import fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation;
+import fr.ifremer.tutti.persistence.entities.referential.Gear;
import fr.ifremer.tutti.persistence.entities.referential.Person;
+import fr.ifremer.tutti.persistence.entities.referential.Vessel;
import fr.ifremer.tutti.persistence.spatial.SexagecimalPosition;
import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel;
import org.nuiton.util.beans.Binder;
@@ -116,6 +118,10 @@
public static final String PROPERTY_SAISISSEUR = "saisisseur";
+ public static final String PROPERTY_VESSEL = "vessel";
+
+ public static final String PROPERTY_GEAR = "gear";
+
public static final String PROPERTY_VALIDATION_CONTEXT = "validationContext";
/**
@@ -173,6 +179,10 @@
protected String validationContext;
+ protected Gear gear;
+
+ protected Vessel vessel;
+
protected static Binder<EditFishingOperationUIModel, FishingOperation> toBeanBinder =
BinderFactory.newBinder(EditFishingOperationUIModel.class,
FishingOperation.class);
@@ -385,7 +395,7 @@
calendar.setTime(gearShootingStartDate);
calendar.set(Calendar.SECOND, 0);
this.gearShootingStartDate = calendar.getTime();
-
+
} else {
this.gearShootingStartDate = null;
}
@@ -503,7 +513,7 @@
calendar.setTime(gearShootingEndDate);
calendar.set(Calendar.SECOND, 0);
this.gearShootingEndDate = calendar.getTime();
-
+
} else {
this.gearShootingEndDate = null;
}
@@ -583,6 +593,26 @@
firePropertyChange(PROPERTY_VALIDATION_CONTEXT, oldValue, validationContext);
}
+ public Gear getGear() {
+ return gear;
+ }
+
+ public void setGear(Gear gear) {
+ Object oldValue = getGear();
+ this.gear = gear;
+ firePropertyChange(PROPERTY_GEAR, oldValue, gear);
+ }
+
+ public Vessel getVessel() {
+ return vessel;
+ }
+
+ public void setVessel(Vessel vessel) {
+ Object oldValue = getVessel();
+ this.vessel = vessel;
+ firePropertyChange(PROPERTY_VESSEL, oldValue, vessel);
+ }
+
@Override
protected FishingOperation newEntity() {
return fishingOperation;
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -28,24 +28,23 @@
import fr.ifremer.tutti.persistence.entities.data.Cruise;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
+import fr.ifremer.tutti.persistence.entities.referential.Gear;
+import fr.ifremer.tutti.persistence.entities.referential.Vessel;
import fr.ifremer.tutti.service.PersistenceService;
-import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler;
-import fr.ifremer.tutti.ui.swing.MainUI;
import fr.ifremer.tutti.ui.swing.TuttiUI;
import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel;
import fr.ifremer.tutti.ui.swing.util.AbstractTuttiTabContainerUIHandler;
-import fr.ifremer.tutti.ui.swing.util.TabHandler;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.util.decorator.Decorator;
+import javax.swing.JTabbedPane;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Date;
import java.util.List;
-import javax.swing.DefaultSingleSelectionModel;
-import javax.swing.JTabbedPane;
import static org.nuiton.i18n.I18n._;
@@ -86,25 +85,31 @@
// load existing cruise
Cruise cruise = persistenceService.getCruise(cruiseId);
- model.setCruise(cruise);
+ // store it in context
+ TuttiUIUtil.setCruise(ui, cruise);
+ TuttiUIUtil.setProgram(ui, cruise.getProgram());
+
+// model.setCruise(cruise);
+
+ TuttiProtocol protocol;
if (getContext().isProtocolFilled()) {
// load existing protocol
- TuttiProtocol protocol =
- persistenceService.getProtocol(getContext().getProtocolId());
+ protocol = persistenceService.getProtocol(getContext().getProtocolId());
if (log.isInfoEnabled()) {
log.info("Loading existing protocol: " + protocol);
}
- ui.setContextValue(protocol);
} else {
// remove any previous existing protocol
- ui.removeContextValue(TuttiProtocol.class);
+ protocol = null;
}
+ TuttiUIUtil.setProtocol(ui, protocol);
+
List<FishingOperation> fishingOperations =
persistenceService.getAllFishingOperation(cruiseId);
model.setFishingOperation(fishingOperations);
@@ -161,16 +166,16 @@
// when quitting ui, let's de-select fishingOperation (will save any changes)
selectFishingOperation(null);
-
+
closeUI(ui.getFishingOperationTabContent());
- closeUI(ui.getCatchesTabContent());
+ closeUI(ui.getCatchesTabContent());
}
@Override
protected FishingOperationsUIModel getModel() {
return ui.getModel();
}
-
+
@Override
protected JTabbedPane getTabPanel() {
return ui.getTabPane();
@@ -179,23 +184,30 @@
public void createNewFishingOperation() {
FishingOperationsUIModel model = getModel();
-
+
// deselect selected fishingOperation
model.setSelectedFishingOperation(null);
// use a new empty fishingOperation
FishingOperation newFishingOperation = new FishingOperation();
- newFishingOperation.setCruise(model.getCruise());
+ newFishingOperation.setCruise(TuttiUIUtil.getCruise(ui));
+ //TODO Should select vessel from possible one ?
+ Vessel vessel = newFishingOperation.getCruise().getVessel(0);
+ newFishingOperation.setVessel(vessel);
+
+ //TODO Should select gear from possible one ?
+ Gear gear = newFishingOperation.getCruise().getGear(0);
+ newFishingOperation.setGear(gear);
+
// by default use the current day with no time information
- Date currentDate = new Date();
- currentDate = DateUtils.setHours(currentDate, 0);
- currentDate = DateUtils.setMinutes(currentDate, 0);
+ Date currentDate = DateUtils.setMinutes(
+ DateUtils.setHours(new Date(), 0), 0);
newFishingOperation.setDate(currentDate);
newFishingOperation.setGearShootingStartDate(currentDate);
newFishingOperation.setGearShootingEndDate(currentDate);
-
+
selectFishingOperation(newFishingOperation);
}
@@ -226,12 +238,12 @@
// repaint tabs
ui.getTabPane().repaint();
-
+
} else {
ui.getFishingOperationTabContent().getHandler().clearFishingOperation();
}
}
-
+
public void closeCurrentFishingOperation() {
ui.getFishingOperationTabContent().getHandler().selectFishingOperation(null);
ui.getCatchesTabContent().getHandler().selectFishingOperation(null, "");
@@ -246,13 +258,14 @@
FishingOperation savedFishingOperation;
if (create) {
+
savedFishingOperation = persistenceService.createFishingOperation(toSave);
model.addFishingOperation(savedFishingOperation);
model.setSelectedFishingOperation(savedFishingOperation);
-
+
} else {
savedFishingOperation = persistenceService.saveFishingOperation(toSave);
-
+
// add the saved fishingOperation to fishingOperation list
List<FishingOperation> data = model.getFishingOperation();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -25,13 +25,13 @@
*/
import com.google.common.collect.Lists;
-import fr.ifremer.tutti.persistence.entities.data.Cruise;
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
-import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdesktop.beans.AbstractSerializableBean;
+import java.util.List;
+
/**
* Model fo UI {@link FishingOperationsUI}.
*
@@ -48,13 +48,13 @@
public static final String PROPERTY_SELECTED_FISHING_OPERATION = "selectedFishingOperation";
- public static final String PROPERTY_CRUISE = "cruise";
+// public static final String PROPERTY_CRUISE = "cruise";
protected List<FishingOperation> fishingOperation;
protected FishingOperation selectedFishingOperation;
- protected Cruise cruise;
+// protected Cruise cruise;
public List<FishingOperation> getFishingOperation() {
return fishingOperation;
@@ -71,15 +71,15 @@
this.fishingOperation.add(fishingOperation);
firePropertyChange(PROPERTY_FISHING_OPERATION, oldValue, this.fishingOperation);
}
-
+
public void removeFishingOperation(FishingOperation fishingOperation) {
Object oldValue = Lists.newArrayList(getFishingOperation());
this.fishingOperation.remove(fishingOperation);
firePropertyChange(PROPERTY_FISHING_OPERATION, oldValue, this.fishingOperation);
}
-
- public void updateFishingOperation(FishingOperation oldFishingOperation,
- FishingOperation newFishingOperation) {
+
+ public void updateFishingOperation(FishingOperation oldFishingOperation,
+ FishingOperation newFishingOperation) {
int oldFishingOperationIndex = fishingOperation.indexOf(oldFishingOperation);
fishingOperation.remove(oldFishingOperation);
if (oldFishingOperationIndex >= 0) {
@@ -89,7 +89,7 @@
}
firePropertyChange(PROPERTY_FISHING_OPERATION, null, fishingOperation);
}
-
+
public FishingOperation getSelectedFishingOperation() {
return selectedFishingOperation;
}
@@ -100,13 +100,13 @@
firePropertyChange(PROPERTY_SELECTED_FISHING_OPERATION, oldValue, selectedFishingOperation);
}
- public Cruise getCruise() {
- return cruise;
- }
-
- public void setCruise(Cruise cruise) {
- Object oldValue = getCruise();
- this.cruise = cruise;
- firePropertyChange(PROPERTY_CRUISE, oldValue, cruise);
- }
+// public Cruise getCruise() {
+// return cruise;
+// }
+//
+// public void setCruise(Cruise cruise) {
+// Object oldValue = getCruise();
+// this.cruise = cruise;
+// firePropertyChange(PROPERTY_CRUISE, oldValue, cruise);
+// }
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -53,6 +53,7 @@
import fr.ifremer.tutti.ui.swing.content.operation.catches.species.split.SplitSpeciesBatchUI;
import fr.ifremer.tutti.ui.swing.content.operation.catches.species.split.SplitSpeciesBatchUIModel;
import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.editor.AttachmentCellComponent;
import fr.ifremer.tutti.ui.swing.util.editor.LongTextCellComponent;
import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction;
@@ -410,13 +411,44 @@
List<Species> allSpecies;
- TuttiProtocol protocol = ui.getContextValue(TuttiProtocol.class);
+ TuttiProtocol protocol = null;
+ if (context.isProtocolFilled()) {
+
+ // get loaded protocol
+
+ protocol = TuttiUIUtil.getProtocol(ui);
+ Preconditions.checkNotNull(protocol,
+ "Could not find protocol in ui context");
+ }
+
Multimap<Species, SampleCategoryType> speciesSampleCategories =
HashMultimap.create();
- if (protocol != null) {
+ if (protocol == null) {
+ // no protocol, use default values
+
+ samplingOrder = Lists.newArrayList(
+ SampleCategoryType.sortedUnsorted,
+ SampleCategoryType.size,
+ SampleCategoryType.sex,
+ SampleCategoryType.maturity,
+ SampleCategoryType.age);
+
+ allSpecies = Lists.newArrayList(
+ persistenceService.getAllSpecies());
+
+ // each species can use any category
+ for (Species species : allSpecies) {
+ speciesSampleCategories.put(species, SampleCategoryType.sortedUnsorted);
+ speciesSampleCategories.put(species, SampleCategoryType.size);
+ speciesSampleCategories.put(species, SampleCategoryType.sex);
+ speciesSampleCategories.put(species, SampleCategoryType.maturity);
+ speciesSampleCategories.put(species, SampleCategoryType.age);
+ }
+ } else {
+
// fill sampling order from protocol
List<SampleCategoryEnum> sampleCategoryOrder =
@@ -443,28 +475,6 @@
speciesSampleCategories.put(species, SampleCategoryType.maturity);
speciesSampleCategories.put(species, SampleCategoryType.age);
}
- } else {
-
- // no protocol, use default values
-
- samplingOrder = Lists.newArrayList(
- SampleCategoryType.sortedUnsorted,
- SampleCategoryType.size,
- SampleCategoryType.sex,
- SampleCategoryType.maturity,
- SampleCategoryType.age);
-
- allSpecies = Lists.newArrayList(
- persistenceService.getAllSpecies());
-
- // each species can use any category
- for (Species species : allSpecies) {
- speciesSampleCategories.put(species, SampleCategoryType.sortedUnsorted);
- speciesSampleCategories.put(species, SampleCategoryType.size);
- speciesSampleCategories.put(species, SampleCategoryType.sex);
- speciesSampleCategories.put(species, SampleCategoryType.maturity);
- speciesSampleCategories.put(species, SampleCategoryType.age);
- }
}
if (log.isInfoEnabled()) {
@@ -477,7 +487,9 @@
JXTable table = getTable();
+ // can show / hide some columns in model
table.setColumnControlVisible(true);
+
// create table column model
TableCellRenderer defaultRenderer =
table.getDefaultRenderer(Object.class);
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -26,13 +26,18 @@
import com.ezware.oxbow.swingbits.util.Preconditions;
import com.google.common.collect.Lists;
+import fr.ifremer.tutti.persistence.entities.TuttiEntities;
+import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol;
+import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.ui.swing.TuttiUI;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel;
import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIHandler;
import fr.ifremer.tutti.ui.swing.util.Cancelable;
import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
+import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler;
import jaxx.runtime.validator.swing.SwingValidatorMessageTableRenderer;
import jaxx.runtime.validator.swing.SwingValidatorUtil;
@@ -67,6 +72,12 @@
*/
private final SpeciesFrequencyUI ui;
+ private TuttiProtocol protocol;
+
+ private Map<String, SpeciesProtocol> speciesProtocol;
+
+ private Map<String, Caracteristic> lengthSteCaracteristic;
+
public SpeciesFrequencyUIHandler(TuttiUIContext context,
SpeciesFrequencyUI ui) {
super(context,
@@ -154,8 +165,20 @@
SpeciesBatchUIHandler.FREQUENCY_LENGTH_CONTEXT_ENTRY.getContextValue(ui);
Preconditions.checkNotNull(lengthStepCaracterics);
+ lengthSteCaracteristic = TuttiEntities.splitById(lengthStepCaracterics);
+
SpeciesFrequencyUIModel model = getModel();
+ if (context.isProtocolFilled()) {
+
+ // get loaded protocol
+ protocol = TuttiUIUtil.getProtocol(ui);
+ Preconditions.checkNotNull(protocol,
+ "Could not find protocol in ui context");
+
+ speciesProtocol = TuttiEntities.splitById(protocol.getSpecies());
+ }
+
//TODO Use protocol to have lengthStepCaracteristic to use (if any protocol)
initBeanComboBox(ui.getLengthStepCaracteristicComboBox(),
lengthStepCaracterics,
@@ -352,38 +375,81 @@
public void editBatch(SpeciesBatchRowModel speciesBatch) {
- List<SpeciesFrequencyRowModel> frequency = null;
-
Caracteristic lengthStepCaracteristic = null;
- if (speciesBatch != null) {
- frequency = speciesBatch.getFrequency();
- }
+ Float lengthStep = 1f;
List<SpeciesFrequencyRowModel> editFrequency = Lists.newArrayList();
- if (frequency != null) {
+ if (speciesBatch != null) {
- SpeciesFrequencyTableModel tableModel = getTableModel();
+ List<SpeciesFrequencyRowModel> frequency =
+ speciesBatch.getFrequency();
- for (SpeciesFrequencyRowModel rowModel : frequency) {
+ // try to load existing frequency
- SpeciesFrequencyRowModel newRow = tableModel.createNewRow();
- newRow.setLengthStepCaracteristic(rowModel.getLengthStepCaracteristic());
- newRow.setLengthStep(rowModel.getLengthStep());
- newRow.setNumber(rowModel.getNumber());
- newRow.setComputedWeight(rowModel.getComputedWeight());
- editFrequency.add(newRow);
- }
+ if (frequency != null) {
- if (CollectionUtils.isNotEmpty(frequency)) {
- lengthStepCaracteristic =
- frequency.get(0).getLengthStepCaracteristic();
+ SpeciesFrequencyTableModel tableModel = getTableModel();
+
+ for (SpeciesFrequencyRowModel rowModel : frequency) {
+
+ SpeciesFrequencyRowModel newRow = tableModel.createNewRow();
+ newRow.setLengthStepCaracteristic(rowModel.getLengthStepCaracteristic());
+ newRow.setLengthStep(rowModel.getLengthStep());
+ newRow.setNumber(rowModel.getNumber());
+ newRow.setComputedWeight(rowModel.getComputedWeight());
+ editFrequency.add(newRow);
+ }
+
+ if (CollectionUtils.isNotEmpty(frequency)) {
+
+ // use first frequency row length step caracteristics
+
+ SpeciesFrequencyRowModel rowModel = frequency.get(0);
+ lengthStepCaracteristic = rowModel.getLengthStepCaracteristic();
+ lengthStep = rowModel.getLengthStep();
+
+ if (log.isInfoEnabled()) {
+ log.info("Use existing lengthStep " +
+ "caracteristic / step " +
+ decorate(lengthStepCaracteristic) + " / " +
+ lengthStep);
+ }
+ }
+ } else {
+
+ // not frequency, guess from protocol (if any)
+
+ if (protocol != null) {
+
+ Species species = speciesBatch.getSpecies();
+
+ SpeciesProtocol sProtocol =
+ speciesProtocol.get(species.getId());
+
+ if (sProtocol != null) {
+
+
+ String lengthStepPmfmId = sProtocol.getLengthStepPmfmId();
+
+ lengthStepCaracteristic =
+ lengthSteCaracteristic.get(lengthStepPmfmId);
+ lengthStep = sProtocol.getLengthStep();
+
+ if (log.isInfoEnabled()) {
+ log.info("Use existing from protocol lengthStep " +
+ "caracteristic / step " +
+ decorate(lengthStepCaracteristic) + " / " +
+ lengthStep);
+ }
+ }
+ }
}
}
- if (log.isInfoEnabled()) {
- log.info("Will edit batch row: " + speciesBatch + " with " +
- editFrequency.size() + " frequency");
+ if (log.isDebugEnabled()) {
+ log.debug("Will edit batch row: " + speciesBatch + " with " +
+ editFrequency.size() + " frequency");
}
SpeciesFrequencyUIModel model = getModel();
@@ -392,25 +458,9 @@
ui.getValidator().setBean(model);
model.setRows(editFrequency);
+ model.setStep(lengthStep);
+ model.setLengthStepCaracteristic(lengthStepCaracteristic);
- if (lengthStepCaracteristic == null) {
-
- // no lengthStep caracteristic to apply make sure it is not setted.
- if (log.isInfoEnabled()) {
- log.info("No lengthStepCaracteristic to set.");
- }
- model.setLengthStepCaracteristic(null);
- } else {
-
- // apply existing lengthStepCaracteristic
-
- if (log.isInfoEnabled()) {
- log.info("Use lengthStepCaracteristic: " +
- lengthStepCaracteristic.getName());
- }
- model.setLengthStepCaracteristic(lengthStepCaracteristic);
- }
-
// keep batch (will be used to push back editing entry)
model.setBatch(speciesBatch);
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -66,23 +66,23 @@
EditProtocolSpeciesRowModel.PROPERTY_LENGTH_STEP_PMFM,
n_("tutti.table.protocol.species.header.lengthStep"),
n_("tutti.table.protocol.species.header.lengthStep"));
-
+
public static final ColumnIdentifier<EditProtocolSpeciesRowModel> WEIGHT_ENABLED = ColumnIdentifier.newId(
EditProtocolSpeciesRowModel.PROPERTY_WEIGHT_ENABLED,
n_("tutti.table.protocol.species.header.weight"),
n_("tutti.table.protocol.species.header.weight"));
-
+
public static final ColumnIdentifier<EditProtocolSpeciesRowModel> COUNT_IF_NO_FREQUENCY_ENABLED = ColumnIdentifier.newId(
EditProtocolSpeciesRowModel.PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED,
n_("tutti.table.protocol.species.header.countIfNoFrequency"),
n_("tutti.table.protocol.species.header.countIfNoFrequency"));
-
+
public static final ColumnIdentifier<EditProtocolSpeciesRowModel> CALCIFY_SAMPLE_ENABLED = ColumnIdentifier.newId(
EditProtocolSpeciesRowModel.PROPERTY_CALCIFY_SAMPLE_ENABLED,
n_("tutti.table.protocol.species.header.calcifySample"),
n_("tutti.table.protocol.species.header.calcifySample"));
-
+
private static final long serialVersionUID = 1L;
public EditProtocolSpeciesTableModel(TableColumnModel columnModel) {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -29,6 +29,7 @@
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import fr.ifremer.tutti.persistence.entities.TuttiEntities;
import fr.ifremer.tutti.persistence.entities.data.SampleCategoryEnum;
@@ -44,15 +45,6 @@
import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler;
import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.TableColumnModelEvent;
-import javax.swing.event.TableColumnModelListener;
-import javax.swing.table.TableColumn;
-import javax.swing.table.TableColumnModel;
import jaxx.runtime.swing.editor.bean.BeanDoubleList;
import jaxx.runtime.validator.swing.SwingValidator;
import org.apache.commons.collections.CollectionUtils;
@@ -61,7 +53,17 @@
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.table.DefaultTableColumnModelExt;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.TableColumnModelEvent;
+import javax.swing.event.TableColumnModelListener;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableColumnModel;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
/**
* TODO
*
@@ -98,14 +100,11 @@
public EditProtocolUIHandler(TuttiUI parentUi, EditProtocolUI ui) {
super(parentUi.getHandler().getContext());
this.ui = ui;
- columToSampleCategory = HashBiMap.create(SampleCategoryEnum.values().length-1);
+ columToSampleCategory = HashBiMap.create(SampleCategoryEnum.values().length - 1);
columToSampleCategory.put(EditProtocolSpeciesTableModel.SIZE_ENABLED, SampleCategoryEnum.size);
columToSampleCategory.put(EditProtocolSpeciesTableModel.SEX_ENABLED, SampleCategoryEnum.sex);
columToSampleCategory.put(EditProtocolSpeciesTableModel.MATURITY_ENABLED, SampleCategoryEnum.maturity);
columToSampleCategory.put(EditProtocolSpeciesTableModel.AGE_ENABLED, SampleCategoryEnum.age);
- columToSampleCategory.put(EditProtocolSpeciesTableModel.WEIGHT_ENABLED, SampleCategoryEnum.weight);
- columToSampleCategory.put(EditProtocolSpeciesTableModel.COUNT_IF_NO_FREQUENCY_ENABLED, SampleCategoryEnum.countIfNoFrequency);
- columToSampleCategory.put(EditProtocolSpeciesTableModel.CALCIFY_SAMPLE_ENABLED, SampleCategoryEnum.calcifySample);
}
//------------------------------------------------------------------------//
@@ -201,7 +200,7 @@
initUI(ui);
EditProtocolUIModel model = getModel();
-
+
// load protocol if existing
String protocolId = context.getProtocolId();
@@ -218,7 +217,7 @@
// load existing protocol
protocol = persistenceService.getProtocol(protocolId);
Boolean mustClone = ui.getContextValue(Boolean.class, MainUIHandler.CLONE_PROTOCOL);
-
+
model.fromBean(protocol);
if (mustClone != null && mustClone) {
ui.setContextValue(false, MainUIHandler.CLONE_PROTOCOL);
@@ -228,7 +227,7 @@
SwingValidator validator = ui.getValidator();
listenValidatorValid(validator, model);
-
+
MainUI main = ui.getContextValue(MainUI.class, MainUI.class.getName());
main.clearValidators();
main.registerValidator(validator);
@@ -249,6 +248,10 @@
getDecorator(Caracteristic.class, null),
Lists.newArrayList(allLengthStepPmfm.values()));
+ addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.WEIGHT_ENABLED, table);
+ addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.COUNT_IF_NO_FREQUENCY_ENABLED, table);
+ addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.CALCIFY_SAMPLE_ENABLED, table);
+
Map<SampleCategoryEnum, ColumnIdentifier<EditProtocolSpeciesRowModel>> sampleCategoryToColumn = columToSampleCategory.inverse();
List<SampleCategoryEnum> sampleCategoryOrder = model.getSampleCategoryOrder();
@@ -369,13 +372,13 @@
MainUI main = ui.getContextValue(MainUI.class, MainUI.class.getName());
main.clearValidators();
}
-
+
@Override
protected void onAfterSelectedRowChanged(int oldRowIndex,
EditProtocolSpeciesRowModel oldRow,
int newRowIndex,
EditProtocolSpeciesRowModel newRow) {
-
+
super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow);
getModel().setRemoveSpeciesEnabled(newRow != null);
}
@@ -416,16 +419,27 @@
}
bean.setHydrologyPmfmId(allIds);
- List<SampleCategoryEnum> sampleOrder = Lists.newArrayList();
+ // find out sampling order
+
TableColumnModel columnModel = getTable().getColumnModel();
- for (int i = 0; i < columnModel.getColumnCount(); i++) {
+ int columnCount = columnModel.getColumnCount();
+ Map<Integer, SampleCategoryEnum> sampleCategoryOrders = Maps.newTreeMap();
+
+ for (int i = 0; i < columnCount; i++) {
+
TableColumn column = columnModel.getColumn(i);
- ColumnIdentifier identifier = (ColumnIdentifier) column.getIdentifier();
+ ColumnIdentifier<EditProtocolSpeciesRowModel> identifier = (ColumnIdentifier<EditProtocolSpeciesRowModel>) column.getIdentifier();
SampleCategoryEnum sampleCategory = columToSampleCategory.get(identifier);
if (sampleCategory != null) {
- sampleOrder.add(sampleCategory);
+
+ // found a sample category, keep it
+ sampleCategoryOrders.put(i, sampleCategory);
}
}
+
+ List<SampleCategoryEnum> sampleOrder =
+ Lists.newArrayList(sampleCategoryOrders.values());
+
bean.setSampleCategoryOrder(sampleOrder);
TuttiProtocol saved;
@@ -456,10 +470,10 @@
log.info("addRow 6");
selectFirstInCombo(ui.getSpeciesComboBox());
log.info("addRow 7");
-
+
// getModel().setModify(true);
}
-
+
/** Removes a species */
public void removeSpecies() {
int rowIndex = getTable().getSelectedRow();
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -26,7 +26,6 @@
import com.google.common.collect.Lists;
import fr.ifremer.tutti.persistence.entities.data.SampleCategoryEnum;
-import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol;
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel;
@@ -54,7 +53,7 @@
public static final String PROPERTY_HYDROLOGY_PMFM_ID = "hydrologyPmfmId";
public static final String PROPERTY_SAMPLE_CATEGORY_ORDER = "sampleCategoryOrder";
-
+
public static final String PROPERTY_REMOVE_SPECIES_ENABLED = "removeSpeciesEnabled";
protected String name;
@@ -72,11 +71,8 @@
SampleCategoryEnum.size,
SampleCategoryEnum.sex,
SampleCategoryEnum.maturity,
- SampleCategoryEnum.age,
- SampleCategoryEnum.weight,
- SampleCategoryEnum.countIfNoFrequency,
- SampleCategoryEnum.calcifySample);
-
+ SampleCategoryEnum.age);
+
/**
* Can user remove a selected species?
*
@@ -178,7 +174,7 @@
this.sampleCategoryOrder = sampleCategoryOrder;
firePropertyChange(PROPERTY_SAMPLE_CATEGORY_ORDER, oldValue, sampleCategoryOrder);
}
-
+
public boolean isRemoveSpeciesEnabled() {
return removeSpeciesEnabled;
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -26,9 +26,12 @@
*/
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
+import org.nuiton.util.beans.Binder;
+import org.nuiton.util.beans.BinderFactory;
/**
* @author kmorin <kmorin(a)codelutin.com>
+ * @author tchemit <chemit(a)codelutin.com>
* @since 0.3
*/
public class HydrologicCaracteristicUtil {
@@ -39,6 +42,8 @@
AVERAGE
}
+ protected static Binder<Caracteristic, Caracteristic> caracteristicBinder;
+
public static String getGlobalName(String name) {
if (name.charAt(name.length() - 2) == '_') {
name = name.substring(0, name.length() - 2);
@@ -46,21 +51,15 @@
return name;
}
- public static Caracteristic createGlobalCaracteristic(String name, Caracteristic toClone) {
- Caracteristic caracteristic = new Caracteristic();
- caracteristic.setName(name);
- caracteristic.setId(name);
- if (toClone != null) {
- caracteristic.setCategory(toClone.getCategory());
- caracteristic.setPrecision(toClone.getPrecision());
- caracteristic.setMaximumNumberDecimals(toClone.getMaximumNumberDecimals());
- caracteristic.setSignifFiguresNumber(toClone.getSignifFiguresNumber());
- caracteristic.setNumberType(toClone.isNumberType());
- caracteristic.setQualitativeType(toClone.isQualitativeType());
- caracteristic.setQualitativeValue(toClone.getQualitativeValue());
- caracteristic.setUnit(toClone.getUnit());
+ public static Caracteristic createGlobalCaracteristic(String name,
+ Caracteristic source) {
+ Caracteristic result = new Caracteristic();
+ if (source != null) {
+ getCaracteristicBinder().copy(source, result);
}
- return caracteristic;
+ result.setName(name);
+ result.setId(name);
+ return result;
}
public static Type getTypeOfCaracteristic(Caracteristic caracteristic) {
@@ -81,4 +80,12 @@
}
return result;
}
+
+ protected static Binder<Caracteristic, Caracteristic> getCaracteristicBinder() {
+ if (caracteristicBinder == null) {
+ caracteristicBinder =
+ BinderFactory.newBinder(Caracteristic.class);
+ }
+ return caracteristicBinder;
+ }
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -25,15 +25,13 @@
*/
import com.google.common.base.Preconditions;
+import fr.ifremer.tutti.persistence.entities.data.Cruise;
+import fr.ifremer.tutti.persistence.entities.data.Program;
+import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
import fr.ifremer.tutti.service.TuttiServiceTechnicalException;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Cursor;
-import java.io.File;
-import java.text.DateFormat;
-import java.util.Date;
-import javax.swing.JOptionPane;
-import javax.swing.UIManager;
+import jaxx.runtime.JAXXContext;
+import jaxx.runtime.JAXXUtil;
+import jaxx.runtime.context.JAXXContextEntryDef;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang3.time.DurationFormatUtils;
import org.apache.commons.logging.Log;
@@ -42,6 +40,14 @@
import org.jdesktop.swingx.decorator.Highlighter;
import org.nuiton.util.FileUtil;
+import javax.swing.JOptionPane;
+import javax.swing.UIManager;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Cursor;
+import java.io.File;
+import java.util.Date;
+
import static org.nuiton.i18n.I18n._;
/**
@@ -59,6 +65,54 @@
// never instanciate util class
}
+ private static final JAXXContextEntryDef<Program> PROGRAM_ENTRY =
+ JAXXUtil.newContextEntryDef("loadedProgram", Program.class);
+
+ private static final JAXXContextEntryDef<Cruise> CRUISE_ENTRY =
+ JAXXUtil.newContextEntryDef("loadedCruise", Cruise.class);
+
+ private static final JAXXContextEntryDef<TuttiProtocol> PROTOCOL_ENTRY =
+ JAXXUtil.newContextEntryDef("loadedProtocol", TuttiProtocol.class);
+
+ public static Program getProgram(JAXXContext context) {
+ return PROGRAM_ENTRY.getContextValue(context);
+ }
+
+ public static Cruise getCruise(JAXXContext context) {
+ return CRUISE_ENTRY.getContextValue(context);
+ }
+
+ public static TuttiProtocol getProtocol(JAXXContext context) {
+ return PROTOCOL_ENTRY.getContextValue(context);
+ }
+
+ public static void setProgram(JAXXContext context, Program value) {
+ if (value == null) {
+
+ PROGRAM_ENTRY.removeContextValue(context);
+ } else {
+
+ PROGRAM_ENTRY.setContextValue(context, value);
+ }
+ }
+
+ public static void setCruise(JAXXContext context, Cruise value) {
+ if (value == null) {
+ CRUISE_ENTRY.removeContextValue(context);
+ } else {
+ CRUISE_ENTRY.setContextValue(context, value);
+ }
+ }
+
+ public static void setProtocol(JAXXContext context, TuttiProtocol value) {
+ if (value == null) {
+
+ PROTOCOL_ENTRY.removeContextValue(context);
+ } else {
+ PROTOCOL_ENTRY.setContextValue(context, value);
+ }
+ }
+
// public static JDialog openInDialog(JComponent ui,
// Frame frame,
// String title,
@@ -248,7 +302,7 @@
public static Highlighter newForegroundColorHighlighter(HighlightPredicate predicate, Color color) {
return new TuttiColorHighlighter(predicate, color, true);
}
-
+
public static String getDuration(Date startDate, Date endDate, String format) {
String duration = "";
if (startDate != null && endDate != null) {
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CaracteristicValueEditor.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CaracteristicValueEditor.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CaracteristicValueEditor.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -81,36 +81,55 @@
}
@Override
- public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
- editor = table.getDefaultEditor(Object.class);
+ public Component getTableCellEditorComponent(JTable table,
+ Object value,
+ boolean isSelected,
+ int row,
+ int column) {
- Caracteristic caracteristic = (Caracteristic) table.getModel().getValueAt(row, caracteristicColumn);
- if (caracteristic != null) {
- if (caracteristic.isNumberType()) {
- NumberCellEditor<Float> editor =
- JAXXWidgetUtil.newNumberTableCellEditor(Float.class, false);
- editor.getNumberEditor().setSelectAllTextOnError(true);
- editor.getNumberEditor().getTextField().setBorder(new LineBorder(Color.GRAY, 2));
- this.editor = editor;
+ Caracteristic caracteristic = (Caracteristic)
+ table.getModel().getValueAt(row, caracteristicColumn);
+ if (caracteristic == null) {
- } else if (caracteristic.isQualitativeType()) {
- JComboBox comboBox = new JComboBox();
- comboBox.setRenderer(new DecoratorListCellRenderer(decorator));
+ // can't edit a null value ?
- List<CaracteristicQualitativeValue> data = caracteristic.getQualitativeValue();
- // add a null value at first position
- if (!data.isEmpty() && data.get(0) != null) {
- data.add(0, null);
- }
- SwingUtil.fillComboBox(comboBox, data, null);
+ } else {
+ switch (caracteristic.getCaracteristicType()) {
- ObjectToStringConverter converter = BeanUIUtil.newDecoratedObjectToStringConverter(decorator);
- BeanUIUtil.decorate(comboBox, converter);
- editor = new ComboBoxCellEditor(comboBox);
+ case NUMBER:
+ // by default this is a number
+ NumberCellEditor<Float> editor =
+ JAXXWidgetUtil.newNumberTableCellEditor(Float.class, false);
+ editor.getNumberEditor().setSelectAllTextOnError(true);
+ editor.getNumberEditor().getTextField().setBorder(new LineBorder(Color.GRAY, 2));
+ this.editor = editor;
+ break;
+ case QUALITATIVE:
+ JComboBox comboBox = new JComboBox();
+ comboBox.setRenderer(new DecoratorListCellRenderer(decorator));
+
+ List<CaracteristicQualitativeValue> data = caracteristic.getQualitativeValue();
+ // add a null value at first position
+ if (!data.isEmpty() && data.get(0) != null) {
+ data.add(0, null);
+ }
+ SwingUtil.fillComboBox(comboBox, data, null);
+
+ ObjectToStringConverter converter =
+ BeanUIUtil.newDecoratedObjectToStringConverter(decorator);
+ BeanUIUtil.decorate(comboBox, converter);
+ this.editor = new ComboBoxCellEditor(comboBox);
+ break;
+ case TEXT:
+ // use default editor
+
+ this.editor = table.getDefaultEditor(Object.class);
+ break;
}
}
- Component result = editor.getTableCellEditorComponent(table, value, isSelected, row, column);
+ Component result = editor.getTableCellEditorComponent(
+ table, value, isSelected, row, column);
return result;
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CaracteristicValueRenderer.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CaracteristicValueRenderer.java 2013-01-17 08:21:00 UTC (rev 214)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CaracteristicValueRenderer.java 2013-01-17 13:55:41 UTC (rev 215)
@@ -60,15 +60,37 @@
decorator = decoratorService.getDecoratorByType(CaracteristicQualitativeValue.class);
}
- public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
- TableCellRenderer renderer = table.getDefaultRenderer(Object.class);
- Caracteristic caracteristic = (Caracteristic) table.getModel().getValueAt(row, caracteristicColumn);
- if (caracteristic != null) {
- if (caracteristic.isQualitativeType()) {
- renderer = new DecoratorTableCellRenderer(decorator);
+ public Component getTableCellRendererComponent(JTable table,
+ Object value,
+ boolean isSelected,
+ boolean hasFocus,
+ int row,
+ int column) {
+ TableCellRenderer renderer;
+
+ Caracteristic caracteristic = (Caracteristic)
+ table.getModel().getValueAt(row, caracteristicColumn);
+ if (caracteristic == null) {
+
+ // should be render a null value ?
+ renderer = table.getDefaultRenderer(Object.class);
+
+ } else {
+ switch (caracteristic.getCaracteristicType()) {
+
+ case QUALITATIVE:
+ renderer = new DecoratorTableCellRenderer(decorator);
+ break;
+ case TEXT:
+ case NUMBER:
+ default:
+
+ // use default text renderer
+ renderer = table.getDefaultRenderer(Object.class);
}
}
- Component result = renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+ Component result = renderer.getTableCellRendererComponent(
+ table, value, isSelected, hasFocus, row, column);
return result;
}
1
0
r214 - in trunk: . tutti-persistence tutti-persistence-adagio tutti-persistence-dev tutti-service tutti-ui-swing
by tchemit@users.forge.codelutin.com 17 Jan '13
by tchemit@users.forge.codelutin.com 17 Jan '13
17 Jan '13
Author: tchemit
Date: 2013-01-17 09:21:00 +0100 (Thu, 17 Jan 2013)
New Revision: 214
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/214
Log:
move to version 1.0\!
Modified:
trunk/pom.xml
trunk/tutti-persistence-adagio/pom.xml
trunk/tutti-persistence-dev/pom.xml
trunk/tutti-persistence/pom.xml
trunk/tutti-service/pom.xml
trunk/tutti-ui-swing/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2013-01-17 08:16:18 UTC (rev 213)
+++ trunk/pom.xml 2013-01-17 08:21:00 UTC (rev 214)
@@ -33,7 +33,7 @@
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>0.4-SNAPSHOT</version>
+ <version>1.0-SNAPSHOT</version>
<modules>
<module>tutti-persistence</module>
Modified: trunk/tutti-persistence/pom.xml
===================================================================
--- trunk/tutti-persistence/pom.xml 2013-01-17 08:16:18 UTC (rev 213)
+++ trunk/tutti-persistence/pom.xml 2013-01-17 08:21:00 UTC (rev 214)
@@ -28,7 +28,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>0.4-SNAPSHOT</version>
+ <version>1.0-SNAPSHOT</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
Modified: trunk/tutti-persistence-adagio/pom.xml
===================================================================
--- trunk/tutti-persistence-adagio/pom.xml 2013-01-17 08:16:18 UTC (rev 213)
+++ trunk/tutti-persistence-adagio/pom.xml 2013-01-17 08:21:00 UTC (rev 214)
@@ -28,7 +28,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>0.4-SNAPSHOT</version>
+ <version>1.0-SNAPSHOT</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
Modified: trunk/tutti-persistence-dev/pom.xml
===================================================================
--- trunk/tutti-persistence-dev/pom.xml 2013-01-17 08:16:18 UTC (rev 213)
+++ trunk/tutti-persistence-dev/pom.xml 2013-01-17 08:21:00 UTC (rev 214)
@@ -28,7 +28,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>0.4-SNAPSHOT</version>
+ <version>1.0-SNAPSHOT</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
Modified: trunk/tutti-service/pom.xml
===================================================================
--- trunk/tutti-service/pom.xml 2013-01-17 08:16:18 UTC (rev 213)
+++ trunk/tutti-service/pom.xml 2013-01-17 08:21:00 UTC (rev 214)
@@ -28,7 +28,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>0.4-SNAPSHOT</version>
+ <version>1.0-SNAPSHOT</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
Modified: trunk/tutti-ui-swing/pom.xml
===================================================================
--- trunk/tutti-ui-swing/pom.xml 2013-01-17 08:16:18 UTC (rev 213)
+++ trunk/tutti-ui-swing/pom.xml 2013-01-17 08:21:00 UTC (rev 214)
@@ -28,7 +28,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>tutti</artifactId>
- <version>0.4-SNAPSHOT</version>
+ <version>1.0-SNAPSHOT</version>
</parent>
<groupId>fr.ifremer.tutti</groupId>
1
0
Author: tchemit
Date: 2013-01-17 09:16:18 +0100 (Thu, 17 Jan 2013)
New Revision: 213
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/213
Log:
add referential page on site
Added:
trunk/src/site/rst/referential.rst
Modified:
trunk/pom.xml
trunk/src/site/site_fr.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2013-01-16 22:43:39 UTC (rev 212)
+++ trunk/pom.xml 2013-01-17 08:16:18 UTC (rev 213)
@@ -585,6 +585,7 @@
<groupId>org.nuiton</groupId>
<artifactId>nuiton-utils-maven-report-plugin</artifactId>
<version>${nuitonUtilsVersion}</version>
+ <inherited>false</inherited>
<reportSets>
<reportSet>
<reports>
Copied: trunk/src/site/rst/referential.rst (from rev 211, trunk/tutti-persistence-adagio/src/main/site/rst/referential.rst)
===================================================================
--- trunk/src/site/rst/referential.rst (rev 0)
+++ trunk/src/site/rst/referential.rst 2013-01-17 08:16:18 UTC (rev 213)
@@ -0,0 +1,630 @@
+.. -
+.. * #%L
+.. * Tutti :: Persistence Adagio (impl)
+.. * $Id$
+.. * $HeadURL$
+.. * %%
+.. * Copyright (C) 2012 - 2013 Ifremer
+.. * %%
+.. * 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%
+.. -
+
+===================
+Tutti - Référentiel
+===================
+
+Présentation
+~~~~~~~~~~~~
+
+Ce document décrit comment sont récupérées les données du référentiel.
+
+Chaque requète a un nom du style **[REF-XXX]**.
+
+Les requètes métier
+~~~~~~~~~~~~~~~~~~~
+
++-----------------------------------------------------+------+-----------------------------------------------------+
+| Nom requète | Etat | Commentaire |
++=====================================================+======+=====================================================+
+| [REF-01] Liste des zones d'une série de campagne | KO | Définir le niveau LocationLevel |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-02] Liste des pays | OK | |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-03] Liste des navires (scientifique) | OK | Requète très longue il faut optimiser |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-04] Liste des navires (pro) | OK | Requète très longue il faut optimiser |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-05] Liste des engins (scientifique) | OK | |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-06] Liste des engins (pro) | OK | |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-07] Liste des utilisateurs | OK | Doit-on utliser limiter aux membres de l'Ifremer ? |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-08] Liste des espèces | OK | Utilisation de synonymes via import refTax ? |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-09] Liste des psfm mesure de classe de taille | OK | |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-10] Liste des psfm (mise en oeuvre de l'engin) | OK | |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-11] Liste des psfm (environnement) | OK | |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-12] Liste des psfm (hydrologique) | KO | Données à regrouper en base avec un ParameterGroup ?|
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-13] Liste des strates | KO | Pouvoir les lier aux zones |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-14] Liste des sous-strates | KO | Pouvoir les lier aux zones / strates |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-15] Liste des localités | KO | Pouvoir les lier aux zones / strates / sous-strates|
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-16] Conversion Taille-poids | TODO | |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-17] Liste des espèces (écran benthos) | KO | Valider comment on filtre (sur le protocole ?) |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-18] Liste des espèces (écran plancton) | KO | Valider comment on filtre (sur le protocole ?) |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-19] Catégorie de macro-déchets | KO | Créer les données en base |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-20] Catégorie de taille macro-déchets | KO | Créer les données en base |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-21] Liste des espèces (écran accidentelles) | OK | |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-22] Liste des psfm (écran accidentelles) | TODO | Définir ce qu'on peut mettre ici (protocole ?) |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-23] Catégorie H/VC | OK | |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-24] Catégorie Classe. Tri | OK | |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-25] Catégorie Sexe | OK | |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-26] Catégorie Maturité | KO | psfm à utiliser (MATURITY \ MATURITY_STAGE_5_VISUAL)|
++-----------------------------------------------------+------+-----------------------------------------------------+
+
+[REF-01] Liste des zones d'une série de campagne
+------------------------------------------------
+
+::
+
+ SELECT
+ l.id,
+ l.label,
+ l.name,
+ l.status
+ FROM LocationImpl l
+ WHERE
+ l.locationLevel.id = :locationLevelId
+ AND l.status.code IN (1, 2)
+
+Paramètres :
+
+- :locationLevelId = *LocationLevelId.PROGRAM*
+
+*État:* À Valider et définir la valeur de la constante.
+
+[REF-02] Liste des pays
+-----------------------
+
+::
+
+ SELECT
+ l.id,
+ l.label,
+ l.name,
+ l.status
+ FROM LocationImpl l
+ WHERE
+ l.locationLevel.id = :locationLevelId
+ AND l.status.code IN (1, 2)
+
+
+Paramètres :
+
+- :locationLevelId = *LocationLevelId.PAYS_ISO3*
+
+*État:* Valide.
+
+[REF-03] Liste des navires (scientifique)
+-----------------------------------------
+
+::
+
+ SELECT
+ v.code AS vesselCode,
+ vrp.registrationCode AS nationalRegistrationCode,
+ vrp.internationalRegistrationCode as internationalRegistrationCode,
+ vf.name AS vesselName,
+ v.status AS status
+ FROM
+ VesselImpl v
+ INNER JOIN v.vesselRegistrationPeriods AS vrp
+ LEFT OUTER JOIN v.vesselFeatures AS vf
+ WHERE v.vesselType.id = :vesselTypeId
+ AND v.status.code IN (1, 2)
+ AND vrp.vesselRegistrationPeriodPk.startDateTime =
+ (
+ SELECT MAX(vrp2.vesselRegistrationPeriodPk.startDateTime)
+ FROM VesselRegistrationPeriodImpl vrp2 WHERE
+ vrp2.vesselRegistrationPeriodPk.vessel.code = v.code
+ AND (vrp2.vesselRegistrationPeriodPk.startDateTime <= :refDate OR :refDate IS NULL)
+ GROUP BY vrp2.vesselRegistrationPeriodPk.vessel.code
+ )
+ AND vf.startDateTime =
+ (
+ SELECT MAX(vf2.startDateTime)
+ FROM VesselFeaturesImpl vf2 WHERE
+ vf2.vessel.code = v.code
+ AND (vf2.startDateTime <= :refDate OR :refDate IS NULL)
+ GROUP BY vf2.vessel.code
+ )
+
+Paramètres :
+
+- :gearClassificiationId = *VesselTypeId.SCIENTIFIC_RESEARCH_VESSEL*
+- :refDate = date (ou null)
+
+*État:* Valide mais à optimiser.
+
+[REF-04] Liste des navires (pro)
+--------------------------------
+
+::
+
+ SELECT
+ v.code AS vesselCode,
+ vrp.registrationCode AS nationalRegistrationCode,
+ vrp.internationalRegistrationCode as internationalRegistrationCode,
+ vf.name AS vesselName,
+ v.status AS status
+ FROM
+ VesselImpl v
+ INNER JOIN v.vesselRegistrationPeriods AS vrp
+ LEFT OUTER JOIN v.vesselFeatures AS vf
+ WHERE v.vesselType.id = :vesselTypeId
+ AND v.status.code IN (1, 2)
+ AND vrp.vesselRegistrationPeriodPk.startDateTime =
+ (
+ SELECT MAX(vrp2.vesselRegistrationPeriodPk.startDateTime)
+ FROM VesselRegistrationPeriodImpl vrp2 WHERE
+ vrp2.vesselRegistrationPeriodPk.vessel.code = v.code
+ AND (vrp2.vesselRegistrationPeriodPk.startDateTime <= :refDate OR :refDate IS NULL)
+ GROUP BY vrp2.vesselRegistrationPeriodPk.vessel.code
+ )
+ AND vf.startDateTime =
+ (
+ SELECT MAX(vf2.startDateTime)
+ FROM VesselFeaturesImpl vf2 WHERE
+ vf2.vessel.code = v.code
+ AND (vf2.startDateTime <= :refDate OR :refDate IS NULL)
+ GROUP BY vf2.vessel.code
+ )
+
+
+Paramètres :
+
+- :gearClassificiationId = *VesselTypeId.FISHING_VESSEL*
+- :refDate = date (ou null)
+
+*État:* Valide mais à optimiser.
+
+[REF-05] Liste des engins (scientifique)
+----------------------------------------
+
+::
+
+ SELECT
+ g.id,
+ g.label,
+ g.name,
+ g.status AS status
+ FROM GearImpl g
+ WHERE
+ g.gearClassification.id= :gearClassificiationId
+ AND g.status.code IN (1, 2)
+
+
+Paramètres :
+
+- :gearClassificiationId = *GearClassificationId.SCIENTIFIC_CRUISE*
+
+*État:* Valide.
+
+[REF-06] Liste des engins (pro)
+-------------------------------
+
+::
+
+ SELECT
+ g.id,
+ g.label,
+ g.name,
+ g.status AS status
+ FROM GearImpl g
+ WHERE
+ g.gearClassification.id= :gearClassificiationId
+ AND g.status.code IN (1, 2)
+
+Paramètres :
+
+- :gearClassificiationId = *GearClassificationId.FAO*
+
+*État:* Valide.
+
+
+[REF-07] Liste des utilisateurs
+-------------------------------
+
+::
+
+ SELECT DISTINCT
+ p.id,
+ p.lastname,
+ p.firstname,
+ p.department.code,
+ p.status
+ FROM
+ PersonImpl p
+ LEFT OUTER JOIN p.profils pp
+ WHERE
+ p.status.code in (1,2)
+ AND pp.id IN (
+ :observerProfilId,
+ :projectMemberProfilId,
+ :userProfilId
+ )
+ AND p.department.code LIKE 'PDG-%'
+
+Paramètres :
+
+- :observerProfilId = *UserProfilId.OBSERVER*
+- :projectMemberProfilId = *UserProfilId.PROJECT_MEMBER*
+- :userProfilId = *UserProfilId.USER*
+
+*État:* Valide.
+
+
+[REF-08] Liste des espèces
+--------------------------
+
+::
+
+ voir TaxonSpecificDao.getAllTaxonRefTax()
+
+*État:* Valide.
+
+[REF-09] Liste des psfm mesure de classe de taille
+--------------------------------------------------
+
+::
+
+ SELECT
+ p.id AS pmfmId,
+ p.parameter.name AS parameterName,
+ p.matrix.name AS matrixName,
+ p.fraction.name AS fractionName,
+ p.method.name AS methodName,
+ p.parameter.isAlphanumeric AS isAlphanumeric,
+ p.parameter.isQualitative AS isQualitative,
+ p.signifFiguresNumber,
+ p.maximumNumberDecimals,
+ p.precision,
+ p.unit.symbol AS symbol,
+ p.status AS status
+ FROM PmfmImpl p
+ WHERE
+ p.status.code IN (1, 2)
+ AND p.matrix.id = :matrixId
+ AND p.parameter.isQualitative=false
+ AND p.parameter.isAlphanumeric=false
+ AND p.parameter.isCalculated=false
+ AND p.parameter.code not in (:ageParameterCode, :weightParameterCode)
+ AND p.method.id <> :methodDeclarationId
+
+Paramètres :
+
+- :matrixId = *MatrixId.INDIVIDUAL*
+- :ageParameterCode = *ParameterCode.AGE*
+- :weightParameterCode= *ParameterCode.WEIGHT*
+- :methodDeclarationId = *MethodId.DECLARATION*
+
+*État:* Valide.
+
+[REF-10] Liste des psfm (mise en oeuvre de l'engin)
+---------------------------------------------------
+
+[REF-T03] avec :matrixId= *MatrixId.GEAR*
+
+*État:* Valide.
+
+[REF-11] Liste des psfm (environnement)
+---------------------------------------
+
+[REF-T03] avec :parameterGroupId= *ParameterGroupId.ENVIRONEMENT_MEASUREMENT*
+
+*État:* Valide.
+
+[REF-12] Liste des psfm (hydrologique)
+--------------------------------------
+
+[REF-T03] avec :parameterGroupId= *ParameterGroupId.HYDROLOGIC_MEASUREMENT*
+
+*État:* Données non présentes en base.
+
+[REF-13] Liste des strates
+--------------------------
+
+::
+
+ SELECT
+ l.id as locationId,
+ l.label as locationLabel,
+ l.name as locationName,
+ l.locationLevel.id as locationLevelId,
+ l.status as status
+ FROM LocationImpl l
+ WHERE
+ l.status.code IN (1, 2)
+ AND l.locationLevel.id = :locationLevelId
+
+Paramètres :
+
+- :locationLevelId = *LocationLevelId.STRATA*
+
+*État:* A lier aux zones de série de camapgnes et au rectangle statistique.
+
+[REF-14] Liste des sous-strates
+-------------------------------
+
+::
+
+ SELECT
+ l.id as locationId,
+ l.label as locationLabel,
+ l.name as locationName,
+ l.locationLevel.id as locationLevelId,
+ l.status as status
+ FROM LocationImpl l
+ WHERE
+ l.status.code IN (1, 2)
+ AND l.locationLevel.id = :locationLevelId
+
+Paramètres :
+
+- :locationLevelId = *LocationLevelId.SUBSTRATA*
+
+*État:* Pouvoir les lier aux zones et rectangle statistique et strates.
+
+[REF-15] Liste des localités
+----------------------------
+
+::
+
+ SELECT
+ l.id as locationId,
+ l.label as locationLabel,
+ l.name as locationName,
+ l.locationLevel.id as locationLevelId,
+ l.status as status
+ FROM LocationImpl l
+ WHERE
+ l.status.code IN (1, 2)
+ AND l.locationLevel.id = :locationLevelId
+
+Paramètres :
+
+- :locationLevelId = *LocationLevelId.LOCALITE*
+
+*État:* Pouvoir les lier aux zones et rectangle statistique et strates .
+
+[REF-16] Conversion Taille-poids
+--------------------------------
+
+*État:* A faire.
+
+[REF-17] Liste des espèces (écran benthos)
+------------------------------------------
+
+*État:* Valider comment on filtre (sur le protocole ?).
+
+[REF-18] Liste des espèces (écran plancton)
+-------------------------------------------
+
+*État:* Valider comment on filtre (sur le protocole ?).
+
+[REF-19] Catégorie de macro-déchets
+-----------------------------------
+
+[REF-T01] + [REF-T02] avec :pmfmId = *PmfmId.MACRO_WASTE_CATEGORY*
+
+*État:* les données sont à créer en base.
+
+[REF-20] Catégorie de taille macro-déchets
+-------------------------------------------
+
+[REF-T01] + [REF-T02] avec :pmfmId = *PmfmId.MACRO_WASTE_SIZE_CATEGORY*
+
+*État:* les données sont à créer en base.
+
+[REF-21] Liste des espèces (écran capture accidentelles)
+--------------------------------------------------------
+
+*État:* Valide (on prend toutes les espèces).
+
+[REF-22] Liste des psfm pour les captures accidentelles
+-------------------------------------------------------
+
+*État:* A FAIRE.
+
+[REF-23] Catégorie H/VC
+-----------------------
+
+[REF-T01] + [REF-T02] avec :pmfmId = *PmfmId.SORTED_UNSORTED*
+
+*État:* Valide.
+
+[REF-24] Catégorie Classe. Tri
+------------------------------
+
+[REF-T01] + [REF-T02] avec :pmfmId = *PmfmId.SIZE_CATEGORY*
+
+*État:* Valide.
+
+[REF-25] Catégorie Sexe
+-----------------------
+
+[REF-T01] + [REF-T02] avec :pmfmId = *PmfmId.SEX*
+
+*État:* Valide.
+
+[REF-26] Catégorie Maturité
+---------------------------
+
+[REF-T01] + [REF-T02] avec :pmfmId = *PmfmId.MATURITY*
+
+*État:* Valider l'id utilisé.
+
+Les requètes techniques
+~~~~~~~~~~~~~~~~~~~~~~~
+
++-----------------------------------------------------+------+-----------------------------------------------------+
+| Nom requète | Etat | Commentaire |
++=====================================================+======+=====================================================+
+| [REF-T01] Détail d'un psfm par son id | OK | |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-T02] Valeurs qualitatives d'un psfm | OK | |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-T03] Liste de psfm à partir d'un support | OK | |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-T04] Liste de psfm à partir d'un parameterGroup| OK | |
++-----------------------------------------------------+------+-----------------------------------------------------+
+| [REF-T05] Lieu statistique à partir de lat/long | OK | |
++-----------------------------------------------------+------+-----------------------------------------------------+
+
+[REF-T01] Détail d'un psfm par son id
+-------------------------------------
+
+::
+
+ SELECT
+ p.id AS pmfmId,
+ p.parameter.name AS parameterName,
+ p.matrix.name AS matrixName,
+ p.fraction.name AS fractionName,
+ p.method.name AS methodName,
+ p.parameter.isAlphanumeric AS isAlphanumeric,
+ p.parameter.isQualitative AS isQualitative,
+ p.signifFiguresNumber,
+ p.maximumNumberDecimals,
+ p.precision,
+ case when (p.unit.id = :unitIdNone) then '' else p.unit.symbol end AS symbol,
+ p.status AS status
+ FROM PmfmImpl p
+ WHERE
+ p.status.code IN (1, 2)
+ AND p.id= :pmfmId
+
+Paramètres :
+
+- :pmfmId = id du psfm
+- :unitIdNone = *UnitId.NONE*
+
+*État:* Valide.
+
+[REF-T02] Valeurs qualitatives d'un psfm
+----------------------------------------
+
+::
+
+ SELECT
+ qv.id AS id,
+ case when (qv.name = qv.description) then qv.name else concat(qv.name, ' - ', qv.description) end AS name,
+ qv.status AS status
+ FROM
+ PmfmImpl p JOIN p.qualitativeValues qv
+ WHERE
+ p.id= :pmfmId
+ AND qv.status.code IN (1, 2)
+
+Paramètres :
+
+- :pmfmId = id du psfm
+
+*État:* Valide.
+
+[REF-T03] Liste de psfm à partir d'un support
+---------------------------------------------
+
+::
+
+ SELECT
+ p.id AS pmfmId,
+ p.parameter.name AS parameterName,
+ p.matrix.name AS matrixName,
+ p.fraction.name AS fractionName,
+ p.method.name AS methodName,
+ p.parameter.isAlphanumeric AS isAlphanumeric,
+ p.parameter.isQualitative AS isQualitative,
+ p.signifFiguresNumber,
+ p.maximumNumberDecimals,
+ p.precision,
+ case when (p.unit.id = :unitIdNone) then '' else p.unit.symbol end AS symbol,
+ p.status AS status
+ FROM PmfmImpl p
+ WHERE
+ p.status.code IN (1, 2)
+ AND p.matrix.id= :matrixId
+
+Paramètres :
+
+- :matrixId = id du support
+- :unitIdNone = *UnitId.NONE*
+
+*État:* Valide.
+
+[REF-T04] Liste de psfm à partir d'un groupe de paramètre
+---------------------------------------------------------
+
+::
+
+ SELECT
+ p.id AS pmfmId,
+ p.parameter.name AS parameterName,
+ p.matrix.name AS matrixName,
+ p.fraction.name AS fractionName,
+ p.method.name AS methodName,
+ p.parameter.isAlphanumeric AS isAlphanumeric,
+ p.parameter.isQualitative AS isQualitative,
+ p.signifFiguresNumber,
+ p.maximumNumberDecimals,
+ p.precision,
+ case when (p.unit.id = :unitIdNone) then '' else p.unit.symbol end AS symbol,
+ p.status AS status
+ FROM PmfmImpl p
+ WHERE
+ p.status.code IN (1, 2)
+ AND p.parameter.parameterGroup.id= :parameterGroupId
+
+Paramètres :
+
+- :parameterGroupId = id du parameterGroup
+- :unitIdNone = *UnitId.NONE*
+
+*État:* Valide.
+
+[REF-T04] Lieu statistique (rectangle statistique) à partir de lat/long
+-----------------------------------------------------------------------
+
+Utiliser *LocationService.getLocationIdByLatLong()* (adagio-core)
+
+*État:* Valide.
\ No newline at end of file
Modified: trunk/src/site/site_fr.xml
===================================================================
--- trunk/src/site/site_fr.xml 2013-01-16 22:43:39 UTC (rev 212)
+++ trunk/src/site/site_fr.xml 2013-01-17 08:16:18 UTC (rev 213)
@@ -104,8 +104,9 @@
<item name="Historique des versions" href="changes-report.html"/>
</menu>
- <!--menu name="Documentation Technique">
- </menu-->
+ <menu name="Documentation Technique">
+ <item name="Référentiel" href="referential.html"/>
+ </menu>
<menu ref="reports"/>
1
0
r212 - in trunk: tutti-persistence tutti-persistence/src/main/java/fr/ifremer/tutti/persistence tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service
by tchemit@users.forge.codelutin.com 16 Jan '13
by tchemit@users.forge.codelutin.com 16 Jan '13
16 Jan '13
Author: tchemit
Date: 2013-01-16 23:43:39 +0100 (Wed, 16 Jan 2013)
New Revision: 212
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/212
Log:
refs #1920: [Persistence] Adagio Donn?\195?\169es th?\195?\169matiques (use Transactional annotation on contract) + reformat code
Modified:
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceAdagioImpl.java
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/MacroWasteBatchPersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/PlanktonBatchPersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java
trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/PlanktonBatchPersistenceServiceTest.java
trunk/tutti-persistence/pom.xml
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceService.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceService.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceService.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceService.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MacroWasteBatchPersistenceService.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/PlanktonBatchPersistenceService.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceService.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceService.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java
trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceService.java
Modified: trunk/tutti-persistence/pom.xml
===================================================================
--- trunk/tutti-persistence/pom.xml 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence/pom.xml 2013-01-16 22:43:39 UTC (rev 212)
@@ -63,6 +63,11 @@
<artifactId>commons-logging</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-tx</artifactId>
+ </dependency>
+
</dependencies>
<build>
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -43,6 +43,7 @@
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.persistence.entities.referential.Vessel;
import fr.ifremer.tutti.persistence.entities.referential.Zone;
+import org.springframework.transaction.annotation.Transactional;
import java.io.Closeable;
import java.io.IOException;
@@ -54,6 +55,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.1
*/
+@Transactional(readOnly = true)
public interface TuttiPersistence extends Closeable {
//------------------------------------------------------------------------//
@@ -154,8 +156,10 @@
Program getProgram(String id);
+ @Transactional(readOnly = false)
Program createProgram(Program bean);
+ @Transactional(readOnly = false)
Program saveProgram(Program bean);
//------------------------------------------------------------------------//
@@ -166,8 +170,10 @@
Cruise getCruise(String id);
+ @Transactional(readOnly = false)
Cruise createCruise(Cruise bean);
+ @Transactional(readOnly = false)
Cruise saveCruise(Cruise bean);
//------------------------------------------------------------------------//
@@ -178,8 +184,10 @@
TuttiProtocol getProtocol(String id);
+ @Transactional(readOnly = false)
TuttiProtocol createProtocol(TuttiProtocol bean);
+ @Transactional(readOnly = false)
TuttiProtocol saveProtocol(TuttiProtocol bean);
//------------------------------------------------------------------------//
@@ -190,8 +198,10 @@
FishingOperation getFishingOperation(String id);
+ @Transactional(readOnly = false)
FishingOperation createFishingOperation(FishingOperation bean);
+ @Transactional(readOnly = false)
FishingOperation saveFishingOperation(FishingOperation bean);
//------------------------------------------------------------------------//
@@ -204,17 +214,22 @@
SpeciesBatch getSpeciesBatch(String id);
+ @Transactional(readOnly = false)
SpeciesBatch createSpeciesBatch(SpeciesBatch bean, String parentBatchId);
+ @Transactional(readOnly = false)
SpeciesBatch saveSpeciesBatch(SpeciesBatch bean);
+ @Transactional(readOnly = false)
void deleteSpeciesBatch(String id);
+ @Transactional(readOnly = false)
void deleteSpeciesSubBatch(String id);
List<SpeciesBatchFrequency> getAllSpeciesBatchFrequency(
String speciesBatchId);
+ @Transactional(readOnly = false)
List<SpeciesBatchFrequency> saveSpeciesBatchFrequency(String speciesBatchId,
List<SpeciesBatchFrequency> frequencies);
@@ -226,10 +241,13 @@
BenthosBatch getBenthosBatch(String id);
+ @Transactional(readOnly = false)
BenthosBatch createBenthosBatch(BenthosBatch bean);
+ @Transactional(readOnly = false)
BenthosBatch saveBenthosBatch(BenthosBatch bean);
+ @Transactional(readOnly = false)
void deleteBenthosBatch(String id);
//------------------------------------------------------------------------//
@@ -240,10 +258,13 @@
PlanktonBatch getPlanktonBatch(String id);
+ @Transactional(readOnly = false)
PlanktonBatch createPlanktonBatch(PlanktonBatch bean);
+ @Transactional(readOnly = false)
PlanktonBatch savePlanktonBatch(PlanktonBatch bean);
+ @Transactional(readOnly = false)
void deletePlanktonBatch(String id);
//------------------------------------------------------------------------//
@@ -254,10 +275,13 @@
MacroWasteBatch getMacroWasteBatch(String id);
+ @Transactional(readOnly = false)
MacroWasteBatch createMacroWasteBatch(MacroWasteBatch bean);
+ @Transactional(readOnly = false)
MacroWasteBatch saveMacroWasteBatch(MacroWasteBatch bean);
+ @Transactional(readOnly = false)
void deleteMacroWasteBatch(String id);
//------------------------------------------------------------------------//
@@ -268,9 +292,12 @@
AccidentalBatch getAccidentalBatch(String id);
+ @Transactional(readOnly = false)
AccidentalBatch createAccidentalBatch(AccidentalBatch bean);
+ @Transactional(readOnly = false)
AccidentalBatch saveAccidentalBatch(AccidentalBatch bean);
+ @Transactional(readOnly = false)
void deleteAccidentalBatch(String id);
}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceService.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceService.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -25,6 +25,7 @@
*/
import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch;
+import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -34,15 +35,19 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.3
*/
+@Transactional(readOnly = true)
public interface AccidentalBatchPersistenceService {
List<AccidentalBatch> getAllAccidentalBatch(String fishingOperationId);
AccidentalBatch getAccidentalBatch(String id);
+ @Transactional(readOnly = false)
AccidentalBatch createAccidentalBatch(AccidentalBatch bean);
+ @Transactional(readOnly = false)
AccidentalBatch saveAccidentalBatch(AccidentalBatch bean);
+ @Transactional(readOnly = false)
void deleteAccidentalBatch(String id);
}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceService.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceService.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -25,6 +25,7 @@
*/
import fr.ifremer.tutti.persistence.entities.data.BenthosBatch;
+import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -34,15 +35,19 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.3
*/
+@Transactional(readOnly = true)
public interface BenthosBatchPersistenceService {
List<BenthosBatch> getAllBenthosBatch(String fishingOperationId);
BenthosBatch getBenthosBatch(String id);
+ @Transactional(readOnly = false)
BenthosBatch createBenthosBatch(BenthosBatch bean);
+ @Transactional(readOnly = false)
BenthosBatch saveBenthosBatch(BenthosBatch bean);
+ @Transactional(readOnly = false)
void deleteBenthosBatch(String id);
}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceService.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceService.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -25,6 +25,7 @@
*/
import fr.ifremer.tutti.persistence.entities.data.Cruise;
+import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -34,13 +35,16 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.3
*/
+@Transactional(readOnly = true)
public interface CruisePersistenceService {
List<Cruise> getAllCruise(String programId);
Cruise getCruise(String id);
+ @Transactional(readOnly = false)
Cruise createCruise(Cruise bean);
+ @Transactional(readOnly = false)
Cruise saveCruise(Cruise bean);
}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceService.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceService.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -25,6 +25,7 @@
*/
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
+import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -34,13 +35,16 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.3
*/
+@Transactional(readOnly = true)
public interface FishingOperationPersistenceService {
List<FishingOperation> getAllFishingOperation(String cruiseId);
FishingOperation getFishingOperation(String id);
+ @Transactional(readOnly = false)
FishingOperation createFishingOperation(FishingOperation bean);
+ @Transactional(readOnly = false)
FishingOperation saveFishingOperation(FishingOperation bean);
}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MacroWasteBatchPersistenceService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MacroWasteBatchPersistenceService.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MacroWasteBatchPersistenceService.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -25,6 +25,7 @@
*/
import fr.ifremer.tutti.persistence.entities.data.MacroWasteBatch;
+import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -34,16 +35,19 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.3
*/
+@Transactional(readOnly = true)
public interface MacroWasteBatchPersistenceService {
-
List<MacroWasteBatch> getAllMacroWasteBatch(String fishingOperationId);
MacroWasteBatch getMacroWasteBatch(String id);
+ @Transactional(readOnly = false)
MacroWasteBatch createMacroWasteBatch(MacroWasteBatch bean);
+ @Transactional(readOnly = false)
MacroWasteBatch saveMacroWasteBatch(MacroWasteBatch bean);
+ @Transactional(readOnly = false)
void deleteMacroWasteBatch(String id);
}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/PlanktonBatchPersistenceService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/PlanktonBatchPersistenceService.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/PlanktonBatchPersistenceService.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -25,6 +25,7 @@
*/
import fr.ifremer.tutti.persistence.entities.data.PlanktonBatch;
+import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -34,15 +35,19 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.3
*/
+@Transactional(readOnly = true)
public interface PlanktonBatchPersistenceService {
List<PlanktonBatch> getAllPlanktonBatch(String fishingOperationId);
PlanktonBatch getPlanktonBatch(String id);
+ @Transactional(readOnly = false)
PlanktonBatch createPlanktonBatch(PlanktonBatch bean);
+ @Transactional(readOnly = false)
PlanktonBatch savePlanktonBatch(PlanktonBatch bean);
+ @Transactional(readOnly = false)
void deletePlanktonBatch(String id);
}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceService.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceService.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -25,6 +25,7 @@
*/
import fr.ifremer.tutti.persistence.entities.data.Program;
+import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -34,13 +35,16 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.3
*/
+@Transactional(readOnly = true)
public interface ProgramPersistenceService {
List<Program> getAllProgram();
Program getProgram(String id);
+ @Transactional(readOnly = false)
Program createProgram(Program bean);
+ @Transactional(readOnly = false)
Program saveProgram(Program bean);
}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceService.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceService.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -25,6 +25,7 @@
*/
import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
+import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -34,13 +35,16 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.3
*/
+@Transactional(readOnly = true)
public interface ProtocolPersistenceService {
List<TuttiProtocol> getAllProtocol();
TuttiProtocol getProtocol(String id);
+ @Transactional(readOnly = false)
TuttiProtocol createProtocol(TuttiProtocol bean);
+ @Transactional(readOnly = false)
TuttiProtocol saveProtocol(TuttiProtocol bean);
}
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -35,6 +35,7 @@
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.persistence.entities.referential.Vessel;
import fr.ifremer.tutti.persistence.entities.referential.Zone;
+import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -44,6 +45,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.3
*/
+@Transactional(readOnly = true)
public interface ReferentialPersistenceService {
//------------------------------------------------------------------------//
Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceService.java
===================================================================
--- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceService.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceService.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -26,6 +26,7 @@
import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch;
import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency;
+import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -35,26 +36,31 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.3
*/
+@Transactional(readOnly = true)
public interface SpeciesBatchPersistenceService {
-
List<SpeciesBatch> getAllRootSpeciesBatch(String fishingOperationId);
List<SpeciesBatch> getAllSpeciesBatch(String fishingOperationId);
SpeciesBatch getSpeciesBatch(String id);
+ List<SpeciesBatchFrequency> getAllSpeciesBatchFrequency(
+ String speciesBatchId);
+
+ @Transactional(readOnly = false)
SpeciesBatch createSpeciesBatch(SpeciesBatch bean, String parentBatchId);
+ @Transactional(readOnly = false)
SpeciesBatch saveSpeciesBatch(SpeciesBatch bean);
+ @Transactional(readOnly = false)
void deleteSpeciesBatch(String id);
+ @Transactional(readOnly = false)
void deleteSpeciesSubBatch(String id);
- List<SpeciesBatchFrequency> getAllSpeciesBatchFrequency(
- String speciesBatchId);
-
+ @Transactional(readOnly = false)
List<SpeciesBatchFrequency> saveSpeciesBatchFrequency(String speciesBatchId,
List<SpeciesBatchFrequency> frequencies);
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceAdagioImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceAdagioImpl.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceAdagioImpl.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -57,7 +57,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.List;
@@ -66,7 +65,6 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.2
*/
-@Transactional(readOnly = true)
public class TuttiPersistenceAdagioImpl implements TuttiPersistence {
/** Logger. */
@@ -79,7 +77,6 @@
@Autowired(required = true)
protected ProgramPersistenceService programService;
-
@Autowired(required = true)
protected CruisePersistenceService cruiseService;
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceServiceImpl.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceServiceImpl.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -28,7 +28,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -37,7 +36,6 @@
* @since 0.3
*/
@Service("accidentalBatchPersistenceService")
-@Transactional(readOnly = true)
public class AccidentalBatchPersistenceServiceImpl extends AbstractPersistenceService implements AccidentalBatchPersistenceService {
/** Logger. */
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceImpl.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceImpl.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -28,7 +28,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -37,7 +36,6 @@
* @since 0.3
*/
@Service("benthosBatchPersistenceService")
-@Transactional(readOnly = true)
public class BenthosBatchPersistenceServiceImpl extends AbstractPersistenceService implements BenthosBatchPersistenceService {
/** Logger. */
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -47,12 +47,9 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataRetrievalFailureException;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
-
import java.sql.Timestamp;
-import java.text.MessageFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
@@ -64,7 +61,6 @@
* @since 0.3
*/
@Service("cruisePersistenceService")
-@Transactional(readOnly = true)
public class CruisePersistenceServiceImpl extends AbstractPersistenceService implements CruisePersistenceService {
/** Logger. */
@@ -124,7 +120,7 @@
"countryLocationLevelId", IntegerType.INSTANCE, enumeration.LOCATION_LEVEL_ID_COUNTRY);
if (source == null) {
- throw new DataRetrievalFailureException("Could not retrieve cruise with id=" + id);
+ throw new DataRetrievalFailureException("Could not retrieve cruise with id=" + id);
}
Cruise result = new Cruise();
result.setId(id);
@@ -147,94 +143,89 @@
Timestamp beginDate = (Timestamp) source[6];
if (beginDate != null && result.getYear() != null) {
- calendar.setTimeInMillis(0);
- calendar.set(Calendar.YEAR, result.getYear());
- calendar.add(Calendar.MILLISECOND, 1);
- // Comparison with getTime() is need, to keep millisecond precision
- if (beginDate.getTime() == calendar.getTimeInMillis()) {
+ calendar.setTimeInMillis(0);
+ calendar.set(Calendar.YEAR, result.getYear());
+ calendar.add(Calendar.MILLISECOND, 1);
+ // Comparison with getTime() is need, to keep millisecond precision
+ if (beginDate.getTime() == calendar.getTimeInMillis()) {
// if BeginDate is fake : set to null (see createCruise for details)
- result.setBeginDate(null);
- }
- else {
- result.setBeginDate(new Date(beginDate.getTime()));
- }
+ result.setBeginDate(null);
+ } else {
+ result.setBeginDate(new Date(beginDate.getTime()));
+ }
}
-
+
result.setEndDate((Date) source[7]);
-
+
String vesselCode = (String) source[8];
Vessel vessel = referentielService.getVessel(vesselCode);
result.setVessel(Lists.newArrayList(vessel));
Integer managerId = (Integer) source[9];
- if (managerId != null && managerId.equals(enumeration.PERSON_ID_UNKNOWN_RECORDER_PERSON)) {
- result.setHeadOfMission(null);
- }
- else {
+ if (managerId != null && managerId.equals(enumeration.PERSON_ID_UNKNOWN_RECORDER_PERSON)) {
+ result.setHeadOfMission(null);
+ } else {
Person manager = referentielService.getPerson(managerId);
result.setHeadOfMission(Lists.newArrayList(manager));
- }
+ }
result.setComment((String) source[10]);
-
+
String miscData = (String) source[11];
if (miscData != null && miscData.length() > 0) {
-
- // Retrieve gears :
- int gearTagIndex = miscData.indexOf(CRUISE_MISC_DATA_GEARS_TAG);
- if (gearTagIndex == -1) {
- result.setGear(null);
- }
- else {
- String gearIdsStr = miscData.substring(gearTagIndex + CRUISE_MISC_DATA_GEARS_TAG.length()).trim();
- miscData = miscData.substring(0, gearTagIndex);
- if (gearIdsStr.isEmpty()) {
- result.setGear(null);
- }
- else {
- List<Gear> gears = Lists.newArrayList();
- String[] gearIds = gearIdsStr.split(",");
- for (int i = 0; i < gearIds.length; i++) {
- Integer gearId = Integer.valueOf(gearIds[i]);
- gears.add(referentielService.getGear(gearId));
- }
- result.setGear(gears);
- }
- }
-
- // Retrieve secondary vessels :
- int vesselTagIndex = miscData.indexOf(CRUISE_MISC_DATA_VESSELS_TAG);
- if (vesselTagIndex != -1) {
- String vesselCodesStr = miscData.substring(vesselTagIndex + CRUISE_MISC_DATA_VESSELS_TAG.length()).trim();
- if (!vesselCodesStr.isEmpty()) {
- String[] vesselCodes = vesselCodesStr.split(",");
- for (int i = 0; i < vesselCodes.length; i++) {
- vesselCode = vesselCodes[i];
- result.addVessel(referentielService.getVessel(vesselCode));
- }
- }
- }
+
+ // Retrieve gears :
+ int gearTagIndex = miscData.indexOf(CRUISE_MISC_DATA_GEARS_TAG);
+ if (gearTagIndex == -1) {
+ result.setGear(null);
+ } else {
+ String gearIdsStr = miscData.substring(gearTagIndex + CRUISE_MISC_DATA_GEARS_TAG.length()).trim();
+ miscData = miscData.substring(0, gearTagIndex);
+ if (gearIdsStr.isEmpty()) {
+ result.setGear(null);
+ } else {
+ List<Gear> gears = Lists.newArrayList();
+ String[] gearIds = gearIdsStr.split(",");
+ for (int i = 0; i < gearIds.length; i++) {
+ Integer gearId = Integer.valueOf(gearIds[i]);
+ gears.add(referentielService.getGear(gearId));
+ }
+ result.setGear(gears);
+ }
+ }
+
+ // Retrieve secondary vessels :
+ int vesselTagIndex = miscData.indexOf(CRUISE_MISC_DATA_VESSELS_TAG);
+ if (vesselTagIndex != -1) {
+ String vesselCodesStr = miscData.substring(vesselTagIndex + CRUISE_MISC_DATA_VESSELS_TAG.length()).trim();
+ if (!vesselCodesStr.isEmpty()) {
+ String[] vesselCodes = vesselCodesStr.split(",");
+ for (int i = 0; i < vesselCodes.length; i++) {
+ vesselCode = vesselCodes[i];
+ result.addVessel(referentielService.getVessel(vesselCode));
+ }
+ }
+ }
}
-
+
// get secondary gears from fishingOperation (first load from Allegro DB only)
if (result.getGear() == null) {
- Iterator<Object[]> list = queryList(
- "allCruiseGears",
- "cruiseId", IntegerType.INSTANCE, Integer.valueOf(id));
-
- List<Gear> gears = Lists.newArrayList();
- while (list.hasNext()) {
- Object[] gearRow = list.next();
- Gear target = referentielService.getGear((Integer)gearRow[0]);
- gears.add(target);
- }
- result.setGear(gears);
+ Iterator<Object[]> list = queryList(
+ "allCruiseGears",
+ "cruiseId", IntegerType.INSTANCE, Integer.valueOf(id));
+
+ List<Gear> gears = Lists.newArrayList();
+ while (list.hasNext()) {
+ Object[] gearRow = list.next();
+ Gear target = referentielService.getGear((Integer) gearRow[0]);
+ gears.add(target);
+ }
+ result.setGear(gears);
}
return result;
}
- @Transactional(readOnly = false)
@Override
public Cruise createCruise(Cruise bean) {
ScientificCruise scientificCruise = ScientificCruise.Factory.newInstance();
@@ -245,19 +236,18 @@
return bean;
}
- @Transactional(readOnly = false)
@Override
public Cruise saveCruise(Cruise bean) {
- if (bean.getId() == null || bean.getId().isEmpty()) {
- throw new IllegalArgumentException("Cruise 'id' must not be null or empty to be saved.");
- }
- ScientificCruise scientificCruise = scientificCruiseDao.load(Integer.valueOf(bean.getId()));
- if (scientificCruise == null) {
- throw new DataRetrievalFailureException("Could not retrieve cruise with id=" + bean.getId());
- }
-
- cruiseToEntity(bean, scientificCruise, true);
- return bean;
+ if (bean.getId() == null || bean.getId().isEmpty()) {
+ throw new IllegalArgumentException("Cruise 'id' must not be null or empty to be saved.");
+ }
+ ScientificCruise scientificCruise = scientificCruiseDao.load(Integer.valueOf(bean.getId()));
+ if (scientificCruise == null) {
+ throw new DataRetrievalFailureException("Could not retrieve cruise with id=" + bean.getId());
+ }
+
+ cruiseToEntity(bean, scientificCruise, true);
+ return bean;
}
protected void cruiseToEntity(Cruise source, ScientificCruise target, boolean copyIfNull) {
@@ -368,8 +358,7 @@
target.getFishingTrips().add(fishingTrip);
fishingTrip.setScientificCruise(target);
}
- }
- else {
+ } else {
fishingTrip = target.getFishingTrips().iterator().next();
}
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -28,7 +28,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -37,7 +36,6 @@
* @since 0.3
*/
@Service("fishingOperationPersistenceService")
-@Transactional(readOnly = true)
public class FishingOperationPersistenceServiceImpl extends AbstractPersistenceService implements FishingOperationPersistenceService {
/** Logger. */
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/MacroWasteBatchPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/MacroWasteBatchPersistenceServiceImpl.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/MacroWasteBatchPersistenceServiceImpl.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -28,7 +28,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -37,7 +36,6 @@
* @since 0.3
*/
@Service("macroWasteBatchPersistenceService")
-@Transactional(readOnly = true)
public class MacroWasteBatchPersistenceServiceImpl extends AbstractPersistenceService implements MacroWasteBatchPersistenceService {
/** Logger. */
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/PlanktonBatchPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/PlanktonBatchPersistenceServiceImpl.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/PlanktonBatchPersistenceServiceImpl.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -28,7 +28,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -37,7 +36,6 @@
* @since 0.3
*/
@Service("planktonBatchPersistenceService")
-@Transactional(readOnly = true)
public class PlanktonBatchPersistenceServiceImpl extends AbstractPersistenceService implements PlanktonBatchPersistenceService {
/** Logger. */
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceImpl.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceImpl.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -31,7 +31,6 @@
import org.apache.commons.logging.LogFactory;
import org.hibernate.type.StringType;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
import java.util.Iterator;
import java.util.List;
@@ -41,7 +40,6 @@
* @since 0.3
*/
@Service("programPersistenceService")
-@Transactional(readOnly = true)
public class ProgramPersistenceServiceImpl extends AbstractPersistenceService implements ProgramPersistenceService {
/** Logger. */
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceServiceImpl.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceServiceImpl.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -28,7 +28,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -37,7 +36,6 @@
* @since 0.3
*/
@Service("protocolPersistenceService")
-@Transactional(readOnly = true)
public class ProtocolPersistenceServiceImpl extends AbstractPersistenceService implements ProtocolPersistenceService {
/** Logger. */
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -46,7 +46,6 @@
import org.hibernate.type.IntegerType;
import org.hibernate.type.StringType;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
@@ -61,7 +60,6 @@
* @since 0.3
*/
@Service("referentialPersistenceService")
-@Transactional(readOnly = true)
public class ReferentialPersistenceServiceImpl extends AbstractPersistenceService implements ReferentialPersistenceService {
/** Logger. */
@@ -151,8 +149,8 @@
@Override
public Vessel getVessel(String vesselCode) {
- // Warning : return a list because more than one line could be found,
- // but 'order by' assume that the first one in the good row
+ // Warning : return a list because more than one line could be found,
+ // but 'order by' assume that the first one in the good row
Iterator<Object[]> source = queryListWithStatus(
"vessel",
"vesselCode", StringType.INSTANCE, vesselCode,
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -29,7 +29,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -38,7 +37,6 @@
* @since 0.3
*/
@Service("speciesBatchPersistenceService")
-@Transactional(readOnly = true)
public class SpeciesBatchPersistenceServiceImpl extends AbstractPersistenceService implements SpeciesBatchPersistenceService {
/** Logger. */
Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java
===================================================================
--- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -36,7 +36,6 @@
import org.junit.Assert;
import org.junit.Before;
import org.junit.ClassRule;
-import org.junit.Ignore;
import org.junit.Test;
import java.util.Calendar;
@@ -174,19 +173,19 @@
@Test
public void saveCruise(/*Cruise bean*/) {
- Cruise cruise = service.getCruise(dbResource.getFixtures().cruiseId());
-
- cruise.setId(null);
- cruise = service.createCruise(cruise);
-
- cruise.setName("unit-TEST");
+ Cruise cruise = service.getCruise(dbResource.getFixtures().cruiseId());
- Cruise savedCruise = service.saveCruise(cruise);
- assertNotNull(savedCruise);
- assertEquals(cruise.getId(), savedCruise.getId());
- assertEquals(cruise.getName(), savedCruise.getName());
- assertEquals(cruise.getComment(), savedCruise.getComment());
- assertNotNull(cruise.getGear());
- assertEquals(cruise.getGear().size(), savedCruise.getGear().size());
+ cruise.setId(null);
+ cruise = service.createCruise(cruise);
+
+ cruise.setName("unit-TEST");
+
+ Cruise savedCruise = service.saveCruise(cruise);
+ assertNotNull(savedCruise);
+ assertEquals(cruise.getId(), savedCruise.getId());
+ assertEquals(cruise.getName(), savedCruise.getName());
+ assertEquals(cruise.getComment(), savedCruise.getComment());
+ assertNotNull(cruise.getGear());
+ assertEquals(cruise.getGear().size(), savedCruise.getGear().size());
}
}
Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/PlanktonBatchPersistenceServiceTest.java
===================================================================
--- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/PlanktonBatchPersistenceServiceTest.java 2013-01-15 17:31:39 UTC (rev 211)
+++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/PlanktonBatchPersistenceServiceTest.java 2013-01-16 22:43:39 UTC (rev 212)
@@ -25,7 +25,6 @@
*/
import fr.ifremer.tutti.persistence.DatabaseResource;
-import fr.ifremer.tutti.persistence.entities.data.Program;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Ignore;
1
0
r211 - in trunk/tutti-ui-swing/src/main: java/fr/ifremer/tutti/ui/swing java/fr/ifremer/tutti/ui/swing/content/home java/fr/ifremer/tutti/ui/swing/content/protocol resources/icons
by kmorin@users.forge.codelutin.com 15 Jan '13
by kmorin@users.forge.codelutin.com 15 Jan '13
15 Jan '13
Author: kmorin
Date: 2013-01-15 18:31:39 +0100 (Tue, 15 Jan 2013)
New Revision: 211
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/211
Log:
continue replacing the new protocol button by a combo box
Added:
trunk/tutti-ui-swing/src/main/resources/icons/action-copy.png
trunk/tutti-ui-swing/src/main/resources/icons/action-import.png
Modified:
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java
trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java 2013-01-15 17:05:35 UTC (rev 210)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java 2013-01-15 17:31:39 UTC (rev 211)
@@ -36,12 +36,22 @@
import fr.ifremer.tutti.ui.swing.content.program.EditProgramUI;
import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI;
import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
+import java.awt.BorderLayout;
+import java.awt.Component;
import java.awt.Desktop;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.net.URL;
import java.util.Calendar;
+import javax.swing.JButton;
import javax.swing.JComponent;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
import javax.swing.JToolBar;
import jaxx.runtime.swing.AboutPanel;
import jaxx.runtime.swing.ErrorDialogUI;
@@ -61,6 +71,8 @@
/** Logger. */
private static final Log log = LogFactory.getLog(MainUIHandler.class);
+ public static final String CLONE_PROTOCOL = "cloneProtocol";
+
protected MainUI ui;
protected JComponent currentBody;
@@ -130,6 +142,7 @@
screen = TuttiScreen.SELECT_CRUISE;
context.setScreen(screen);
+
}
@Override
@@ -355,6 +368,12 @@
screenUI = new EditProtocolUI(ui);
break;
+
+ case CLONE_PROTOCOL:
+ screenTitle = _("tutti.title.create.protocol");
+ ui.setContextValue(true, CLONE_PROTOCOL);
+ screenUI = new EditProtocolUI(ui);
+ break;
case EDIT_FISHING_OPERATION:
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java 2013-01-15 17:05:35 UTC (rev 210)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java 2013-01-15 17:31:39 UTC (rev 211)
@@ -59,6 +59,13 @@
* @since 0.1
*/
EDIT_PROTOCOL,
+
+ /**
+ * To clone a protocol.
+ *
+ * @since 0.4
+ */
+ CLONE_PROTOCOL,
/**
* To fill catches.
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java 2013-01-15 17:05:35 UTC (rev 210)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java 2013-01-15 17:31:39 UTC (rev 211)
@@ -33,7 +33,10 @@
import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler;
import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.TuttiUIContext;
+import java.awt.Component;
import java.awt.event.ActionEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
import jaxx.runtime.swing.editor.bean.BeanComboBox;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.logging.Log;
@@ -44,9 +47,14 @@
import java.util.List;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.ImageIcon;
import javax.swing.JComboBox;
-import javax.swing.event.ListDataEvent;
-import javax.swing.event.ListDataListener;
+import javax.swing.JList;
+import javax.swing.border.EmptyBorder;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
+import jaxx.runtime.SwingUtil;
import static org.nuiton.i18n.I18n._;
/**
@@ -61,12 +69,6 @@
private static final Log log =
LogFactory.getLog(SelectCruiseUIHandler.class);
- protected final static String PROTOCOL_ACTION_NEW = "tutti.action.new";
-
- protected final static String PROTOCOL_ACTION_CLONE = "tutti.action.clone";
-
- protected final static String PROTOCOL_ACTION_IMPORT = "tutti.action.import";
-
protected final PersistenceService persistenceService;
protected final SelectCruiseUI ui;
@@ -187,9 +189,54 @@
model.getProtocols(),
model.getProtocol());
- ComboBoxModel<String> protocolActions = new DefaultComboBoxModel<String>(
- new String[]{ _(PROTOCOL_ACTION_NEW), _(PROTOCOL_ACTION_CLONE), _(PROTOCOL_ACTION_IMPORT) });
- JComboBox newProtocolCombo = ui.getNewProtocolCombo();
+ ComboBoxModel<NewProtocolAction> protocolActions = new DefaultComboBoxModel<NewProtocolAction>(NewProtocolAction.values());
+ final JComboBox newProtocolCombo = ui.getNewProtocolCombo();
+ newProtocolCombo.setRenderer(new DefaultListCellRenderer() {
+
+ @Override
+ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+ Component defaultComponent = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+ DefaultListCellRenderer result = (DefaultListCellRenderer) defaultComponent;
+ NewProtocolAction action = (NewProtocolAction) value;
+ ImageIcon icon = SwingUtil.createActionIcon(action.getIcon());
+ result.setIcon(icon);
+ result.setBorder(new EmptyBorder(4, 8, 4, 8));
+
+ Object selectedItem = SelectCruiseUIHandler.this.ui.getProtocolCombobox().getSelectedItem();
+ result.setEnabled(action != NewProtocolAction.CLONE || selectedItem != null);
+ return result;
+ }
+ });
+ newProtocolCombo.addMouseListener(new MouseAdapter() {
+
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ newProtocolCombo.showPopup();
+ }
+
+ });
+// newProtocolCombo.addPopupMenuListener(new PopupMenuListener() {
+//
+// @Override
+// public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+// newProtocolCombo.getComponentPopupMenu().addMouseListener(new MouseAdapter() {
+//
+// @Override
+// public void mouseExited(MouseEvent e) {
+// newProtocolCombo.hidePopup();
+// }
+//
+// });
+// }
+//
+// @Override
+// public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+// }
+//
+// @Override
+// public void popupMenuCanceled(PopupMenuEvent e) {
+// }
+// });
newProtocolCombo.setModel(protocolActions);
model.addPropertyChangeListener(SelectCruiseUIModel.PROPERTY_PROGRAM, new PropertyChangeListener() {
@@ -290,8 +337,55 @@
}
public void showNewProtocol(ActionEvent event) {
- log.info(event.getSource());
- context.setProtocolId(null);
- context.setScreen(TuttiScreen.EDIT_PROTOCOL);
+ JComboBox newProtocolCombo = (JComboBox) event.getSource();
+ NewProtocolAction selectedAction = (NewProtocolAction) newProtocolCombo.getSelectedItem();
+
+ switch (selectedAction) {
+ case NEW:
+ context.setProtocolId(null);
+ context.setScreen(TuttiScreen.EDIT_PROTOCOL);
+ break;
+
+ case CLONE:
+ TuttiProtocol protocol = getModel().getProtocol();
+ if (protocol != null) {
+ context.setProtocolId(protocol.getId());
+ context.setScreen(TuttiScreen.CLONE_PROTOCOL);
+ }
+ break;
+
+ case IMPORT:
+ //TODO kmorin 20130115 import protocol
+ }
}
+
+ protected enum NewProtocolAction {
+
+ NEW("tutti.action.new", "add"),
+ CLONE("tutti.action.clone", "copy"),
+ IMPORT("tutti.action.import", "import");
+
+ protected String label;
+
+ protected String icon;
+
+ private NewProtocolAction(String label, String icon) {
+ this.label = label;
+ this.icon = icon;
+ }
+
+ public String getLabel() {
+ return label;
+ }
+
+ public String getIcon() {
+ return icon;
+ }
+
+ @Override
+ public String toString() {
+ return _(label);
+ }
+
+ }
}
Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java
===================================================================
--- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-01-15 17:05:35 UTC (rev 210)
+++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-01-15 17:31:39 UTC (rev 211)
@@ -37,6 +37,7 @@
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.Species;
import fr.ifremer.tutti.ui.swing.MainUI;
+import fr.ifremer.tutti.ui.swing.MainUIHandler;
import fr.ifremer.tutti.ui.swing.TuttiScreen;
import fr.ifremer.tutti.ui.swing.TuttiUI;
import fr.ifremer.tutti.ui.swing.util.HydrologicCaracteristicUtil;
@@ -216,8 +217,13 @@
// load existing protocol
protocol = persistenceService.getProtocol(protocolId);
-
+ Boolean mustClone = ui.getContextValue(Boolean.class, MainUIHandler.CLONE_PROTOCOL);
+
model.fromBean(protocol);
+ if (mustClone != null && mustClone) {
+ ui.setContextValue(false, MainUIHandler.CLONE_PROTOCOL);
+ model.setId(null);
+ }
}
SwingValidator validator = ui.getValidator();
@@ -245,11 +251,14 @@
Map<SampleCategoryEnum, ColumnIdentifier<EditProtocolSpeciesRowModel>> sampleCategoryToColumn = columToSampleCategory.inverse();
- for (SampleCategoryEnum sampleOrder : model.getSampleCategoryOrder()) {
+ List<SampleCategoryEnum> sampleCategoryOrder = model.getSampleCategoryOrder();
+ if (sampleCategoryOrder != null) {
+ for (SampleCategoryEnum sampleOrder : sampleCategoryOrder) {
- ColumnIdentifier<EditProtocolSpeciesRowModel> columnIdentifier = sampleCategoryToColumn.get(sampleOrder);
- if (columnIdentifier != null) {
- addBooleanColumnToModel(columnModel, columnIdentifier, table);
+ ColumnIdentifier<EditProtocolSpeciesRowModel> columnIdentifier = sampleCategoryToColumn.get(sampleOrder);
+ if (columnIdentifier != null) {
+ addBooleanColumnToModel(columnModel, columnIdentifier, table);
+ }
}
}
@@ -420,6 +429,7 @@
bean.setSampleCategoryOrder(sampleOrder);
TuttiProtocol saved;
+ log.info("bean id : " + bean.getId());
if (TuttiEntities.isNew(bean)) {
saved = persistenceService.createProtocol(bean);
Added: trunk/tutti-ui-swing/src/main/resources/icons/action-copy.png
===================================================================
(Binary files differ)
Property changes on: trunk/tutti-ui-swing/src/main/resources/icons/action-copy.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/tutti-ui-swing/src/main/resources/icons/action-import.png
===================================================================
(Binary files differ)
Property changes on: trunk/tutti-ui-swing/src/main/resources/icons/action-import.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
1
0
r210 - in trunk/tutti-persistence-adagio/src/main: java/fr/ifremer/tutti/persistence/service resources
by blavenier@users.forge.codelutin.com 15 Jan '13
by blavenier@users.forge.codelutin.com 15 Jan '13
15 Jan '13
Author: blavenier
Date: 2013-01-15 18:05:35 +0100 (Tue, 15 Jan 2013)
New Revision: 210
Url: http://forge.codelutin.com/projects/tutti/repository/revisions/210
Log:
ref refs #1920: [Persistence] Adagio Donn?\195?\169es th?\195?\169matiques
- Tunning on ReferentialPersistenceService.getVessel() ("vessel" query)
Modified:
trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java
trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml
Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java
===================================================================
--- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-01-15 16:11:50 UTC (rev 209)
+++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-01-15 17:05:35 UTC (rev 210)
@@ -151,14 +151,14 @@
@Override
public Vessel getVessel(String vesselCode) {
- Object[] source = queryUniqueWithStatus(
+ // Warning : return a list because more than one line could be found,
+ // but 'order by' assume that the first one in the good row
+ Iterator<Object[]> source = queryListWithStatus(
"vessel",
"vesselCode", StringType.INSTANCE, vesselCode,
- "refDate", DateType.INSTANCE, new Date(),
- "statusValidCode", StringType.INSTANCE, enumeration.STATUS_VALID_CODE,
- "statusTemporaryCode", StringType.INSTANCE, enumeration.STATUS_TEMPORARY_CODE
+ "refDate", DateType.INSTANCE, new Date()
);
- Vessel result = loadVessel(source);
+ Vessel result = loadVessel(source.next());
return result;
}
Modified: trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml
===================================================================
--- trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml 2013-01-15 16:11:50 UTC (rev 209)
+++ trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml 2013-01-15 17:05:35 UTC (rev 210)
@@ -360,22 +360,10 @@
WHERE
v.code = :vesselCode
AND v.status.code IN (:statusValidCode, :statusTemporaryCode)
- AND vrp.vesselRegistrationPeriodPk.startDateTime =
- (
- SELECT MAX(vrp2.vesselRegistrationPeriodPk.startDateTime)
- FROM VesselRegistrationPeriodImpl vrp2 WHERE
- vrp2.vesselRegistrationPeriodPk.vessel.code = v.code
- AND (vrp2.vesselRegistrationPeriodPk.startDateTime <= :refDate OR :refDate IS NULL)
- GROUP BY vrp2.vesselRegistrationPeriodPk.vessel.code
+ AND NOT(coalesce(vrp.endDateTime, '2999-12-31 00:00:00') < coalesce(:refDate,sysdate)
+ OR vrp.vesselRegistrationPeriodPk.startDateTime > coalesce(:refDate,sysdate)
)
- AND vf.startDateTime =
- (
- SELECT MAX(vf2.startDateTime)
- FROM VesselFeaturesImpl vf2 WHERE
- vf2.vessel.code = v.code
- AND (vf2.startDateTime <= :refDate OR :refDate IS NULL)
- GROUP BY vf2.vessel.code
- )
+ ORDER BY vf.startDateTime DESC
]]>
<query-param name="vesselCode" type="java.lang.String"/>
<query-param name="refDate" type="java.util.Date"/>
1
0