Author: chatellier
Date: 2010-10-29 14:17:52 +0000 (Fri, 29 Oct 2010)
New Revision: 131
Log:
Begin find and replace command
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/command/DeleteLineCommand.java
trunk/coser-business/src/main/java/fr/ifremer/coser/command/ModifyFieldCommand.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ValidationService.java
trunk/coser-business/src/main/resources/i18n/coser-business-en_GB.properties
trunk/coser-business/src/main/resources/i18n/coser-business-fr_FR.properties
trunk/coser-business/src/test/java/fr/ifremer/coser/services/CommandServiceTest.java
trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java
trunk/coser-business/src/test/java/fr/ifremer/coser/services/ValidationServiceTest.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlFindReplaceDialog.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java
trunk/coser-ui/src/main/resources/i18n/coser-ui-en_GB.properties
trunk/coser-ui/src/main/resources/i18n/coser-ui-fr_FR.properties
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/command/DeleteLineCommand.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/command/DeleteLineCommand.java 2010-10-29 12:00:49 UTC (rev 130)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/command/DeleteLineCommand.java 2010-10-29 14:17:52 UTC (rev 131)
@@ -56,7 +56,7 @@
protected Category category;
/** Line index of object to do command to. */
- protected String lineIndex;
+ protected String lineNumber;
public Category getCategory() {
return category;
@@ -66,12 +66,12 @@
this.category = category;
}
- public String getLineIndex() {
- return lineIndex;
+ public String getLineNumber() {
+ return lineNumber;
}
- public void setLineIndex(String lineIndex) {
- this.lineIndex = lineIndex;
+ public void setLineNumber(String lineNumber) {
+ this.lineNumber = lineNumber;
}
@Override
@@ -107,7 +107,7 @@
while (itDataStorage.hasNext()) {
String[] dataLine = itDataStorage.next();
String dataLineIndex = dataLine[AbstractDataEntity.INDEX_LINE];
- if (dataLineIndex.equals(lineIndex)) {
+ if (dataLineIndex.equals(lineNumber)) {
if (log.isDebugEnabled()) {
log.debug("Removing line " + dataLineIndex);
}
@@ -119,7 +119,7 @@
// if not found, throw business exception
if (!dataLineFound) {
- throw new CoserBusinessException(_("Can't find line %s for deletion", lineIndex));
+ throw new CoserBusinessException(_("Can't find line %s for deletion", lineNumber));
}
}
@@ -156,7 +156,7 @@
while (itDeletedDataStorage.hasNext()) {
String[] deletedDataLine = itDeletedDataStorage.next();
String deletedDataLineIndex = deletedDataLine[AbstractDataEntity.INDEX_LINE];
- if (deletedDataLineIndex.equals(lineIndex)) {
+ if (deletedDataLineIndex.equals(lineNumber)) {
dataLineFound = true;
itDeletedDataStorage.remove();
@@ -188,12 +188,12 @@
// if not found, throw business exception
if (!dataLineFound) {
- throw new CoserBusinessException(_("Can't find line %s for undeletion", lineIndex));
+ throw new CoserBusinessException(_("Can't find line %s for undeletion", lineNumber));
}
}
@Override
public String toString() {
- return "Delete line " + lineIndex + " on " + category;
+ return "Delete line " + lineNumber + " on " + category;
}
}
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/command/ModifyFieldCommand.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/command/ModifyFieldCommand.java 2010-10-29 12:00:49 UTC (rev 130)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/command/ModifyFieldCommand.java 2010-10-29 14:17:52 UTC (rev 131)
@@ -25,14 +25,23 @@
package fr.ifremer.coser.command;
+import static org.nuiton.i18n.I18n._;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Iterator;
+
+import org.apache.commons.beanutils.PropertyUtils;
+
import fr.ifremer.coser.CoserBusinessException;
import fr.ifremer.coser.CoserConstants.Category;
import fr.ifremer.coser.bean.AbstractDataContainer;
import fr.ifremer.coser.bean.Project;
+import fr.ifremer.coser.data.AbstractDataEntity;
import fr.ifremer.coser.data.Catch;
import fr.ifremer.coser.data.Haul;
import fr.ifremer.coser.data.Length;
import fr.ifremer.coser.data.Strata;
+import fr.ifremer.coser.storage.DataStorage;
/**
* Command pattern object.
@@ -49,10 +58,10 @@
protected Category category;
/** Line index of object to do command to. */
- protected int line;
+ protected String lineNumber;
/** Field index to to command. */
- protected int fieldIndex;
+ protected String fieldName;
/** Field actual value. */
protected Object currentValue;
@@ -68,20 +77,20 @@
this.category = category;
}
- public int getLine() {
- return line;
+ public String getLineNumber() {
+ return lineNumber;
}
- public void setLine(int line) {
- this.line = line;
+ public void setLineNumber(String lineNumber) {
+ this.lineNumber = lineNumber;
}
- public int getFieldIndex() {
- return fieldIndex;
+ public String getFieldName() {
+ return fieldName;
}
- public void setFieldIndex(int fieldIndex) {
- this.fieldIndex = fieldIndex;
+ public void setFieldName(String fieldName) {
+ this.fieldName = fieldName;
}
public Object getCurrentValue() {
@@ -102,32 +111,102 @@
@Override
public void doCommand(Project project, AbstractDataContainer container) throws CoserBusinessException {
-
+
+ AbstractDataEntity beanData = null;
+ DataStorage dataStorage = null;
+ switch (category) {
+ case CATCH:
+ beanData = new Catch();
+ dataStorage = container.getCatch();
+ break;
+ case HAUL:
+ beanData = new Haul();
+ dataStorage = container.getHaul();
+ break;
+ case LENGTH:
+ beanData = new Length();
+ dataStorage = container.getLength();
+ break;
+ case STRATA:
+ beanData = new Strata();
+ dataStorage = container.getStrata();
+ break;
+ }
+
+ Iterator<String[]> itData = dataStorage.iterator();
+ itData.next(); // header
+ while (itData.hasNext()) {
+ String[] data = itData.next();
+ String dataLineNumber = data[AbstractDataEntity.INDEX_LINE];
+
+ if (dataLineNumber.equals(lineNumber)) {
+ beanData.setData(data);
+ try {
+ String dataValue = (String)PropertyUtils.getProperty(beanData, fieldName);
+ if (dataValue.equals(currentValue)) {
+ PropertyUtils.setProperty(beanData, fieldName, newValue);
+ }
+ else {
+ throw new CoserBusinessException(_("Can't replace data value. Expected %s but was %s", currentValue, dataValue));
+ }
+ break;
+ } catch (Exception ex) {
+ throw new CoserBusinessException("Can't replace data field value", ex);
+ }
+ }
+ }
}
@Override
public void undoCommand(Project project, AbstractDataContainer container) throws CoserBusinessException {
-
- }
-
- @Override
- public String toString() {
- String toString = "Modify field ";
+ AbstractDataEntity beanData = null;
+ DataStorage dataStorage = null;
switch (category) {
case CATCH:
- toString += Catch.EN_HEADERS[fieldIndex];
+ beanData = new Catch();
+ dataStorage = container.getCatch();
break;
case HAUL:
- toString += Haul.EN_HEADERS[fieldIndex];
+ beanData = new Haul();
+ dataStorage = container.getHaul();
break;
case LENGTH:
- toString += Length.EN_HEADERS[fieldIndex];
+ beanData = new Length();
+ dataStorage = container.getLength();
break;
case STRATA:
- toString += Strata.EN_HEADERS[fieldIndex];
+ beanData = new Strata();
+ dataStorage = container.getStrata();
break;
}
- toString += " on line " + line;
+
+ Iterator<String[]> itData = dataStorage.iterator();
+ itData.next(); // header
+ while (itData.hasNext()) {
+ String[] data = itData.next();
+ String dataLineNumber = data[AbstractDataEntity.INDEX_LINE];
+
+ if (dataLineNumber.equals(lineNumber)) {
+ beanData.setData(data);
+ try {
+ String dataValue = (String)PropertyUtils.getProperty(beanData, fieldName);
+ if (dataValue.equals(newValue)) {
+ PropertyUtils.setProperty(data, fieldName, currentValue);
+ }
+ else {
+ throw new CoserBusinessException(_("Can't replace data value. Expected %s but was %s", newValue, dataValue));
+ }
+ break;
+ } catch (Exception ex) {
+ throw new CoserBusinessException("Can't replace data field value", ex);
+ }
+ }
+ }
+ }
+
+ @Override
+ public String toString() {
+ String toString = "Modify field " + fieldName + " on line " + lineNumber;
return toString;
}
}
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-10-29 12:00:49 UTC (rev 130)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-10-29 14:17:52 UTC (rev 131)
@@ -39,6 +39,7 @@
import java.util.TreeMap;
import java.util.TreeSet;
+import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -55,8 +56,12 @@
import fr.ifremer.coser.command.Command;
import fr.ifremer.coser.command.DeleteLineCommand;
import fr.ifremer.coser.command.MergeSpeciesCommand;
+import fr.ifremer.coser.command.ModifyFieldCommand;
+import fr.ifremer.coser.data.AbstractDataEntity;
import fr.ifremer.coser.data.Catch;
import fr.ifremer.coser.data.Haul;
+import fr.ifremer.coser.data.Length;
+import fr.ifremer.coser.data.Strata;
import fr.ifremer.coser.storage.DataStorage;
/**
@@ -660,11 +665,72 @@
// create new delete action
DeleteLineCommand command = new DeleteLineCommand();
command.setCategory(category);
- command.setLineIndex(index);
+ command.setLineNumber(index);
commandService.doAction(command, project, control);
}
/**
+ * Replace une valeur d'un champs si nécéssaire.
+ *
+ * If {@code currentValue} is not equals to current data value for fieldName,
+ * no replacement is performed.
+ *
+ * @param project project
+ * @param category category
+ * @param fieldName fieldName
+ * @param currentValue current value
+ * @param data current data
+ * @param newValue new value
+ * @param commandUUID commandUUID
+ * @return modified data
+ * @throws CoserBusinessException
+ */
+ public String[] replaceFieldValue(Project project, Category category, String fieldName,
+ String currentValue, String newValue, String[] data, String commandUUID) throws CoserBusinessException {
+
+ AbstractDataEntity beanData = null;
+
+ switch (category) {
+ case CATCH:
+ beanData = new Catch();
+ break;
+ case HAUL:
+ beanData = new Haul();
+ break;
+ case LENGTH:
+ beanData = new Length();
+ break;
+ case STRATA:
+ beanData = new Strata();
+ break;
+ }
+
+ beanData.setData(data);
+
+ // get current data value
+ try {
+ String value = (String)PropertyUtils.getProperty(beanData, fieldName);
+
+ if (value.equals(currentValue)) {
+ String lineNumber = data[AbstractDataEntity.INDEX_LINE];
+ ModifyFieldCommand command = new ModifyFieldCommand();
+ command.setCommandUUID(commandUUID);
+ command.setFieldName(fieldName);
+ command.setLineNumber(lineNumber);
+ command.setCurrentValue(currentValue);
+ command.setNewValue(newValue);
+ command.setCategory(category);
+
+ commandService.doAction(command, project, project.getControl());
+ }
+ } catch (Exception ex) {
+ throw new CoserBusinessException("Can't replace inner field value", ex);
+ }
+
+ return beanData.getData();
+ }
+
+ /**
* Get zones name in project with data in [{@code beginYear}-{@code endYear}].
*
* Used in selection ui.
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ValidationService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ValidationService.java 2010-10-29 12:00:49 UTC (rev 130)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ValidationService.java 2010-10-29 14:17:52 UTC (rev 131)
@@ -533,7 +533,7 @@
ValidationError error = new ValidationError();
error.setLevel(ValidationLevel.WARNING);
error.setLineNumber(lineNumber);
- error.setMessage(_("coser.business.control.error.minObservationCount", key));
+ error.setMessage(_("coser.business.control.error.minObservationCount", key, value));
validationErrors.add(error);
}
}
Modified: trunk/coser-business/src/main/resources/i18n/coser-business-en_GB.properties
===================================================================
--- trunk/coser-business/src/main/resources/i18n/coser-business-en_GB.properties 2010-10-29 12:00:49 UTC (rev 130)
+++ trunk/coser-business/src/main/resources/i18n/coser-business-en_GB.properties 2010-10-29 14:17:52 UTC (rev 131)
@@ -3,6 +3,7 @@
Can't\ find\ line\ %s\ for\ deletion=
Can't\ find\ line\ %s\ for\ undeletion=
Can't\ read\ file\ '%s'.\ Check\ CSV\ file\ separator\ (%c)=
+Can't\ replace\ data\ value.\ Expected\ %s\ but\ was\ %s=
Depth\ attribute\ is\ not\ a\ valid\ double=
Maturity\ attribute\ is\ required=
Missing\ file\ %s=
Modified: trunk/coser-business/src/main/resources/i18n/coser-business-fr_FR.properties
===================================================================
--- trunk/coser-business/src/main/resources/i18n/coser-business-fr_FR.properties 2010-10-29 12:00:49 UTC (rev 130)
+++ trunk/coser-business/src/main/resources/i18n/coser-business-fr_FR.properties 2010-10-29 14:17:52 UTC (rev 131)
@@ -3,6 +3,7 @@
Can't\ find\ line\ %s\ for\ deletion=
Can't\ find\ line\ %s\ for\ undeletion=
Can't\ read\ file\ '%s'.\ Check\ CSV\ file\ separator\ (%c)=Impossible de lire le fichier '%s'.\nMerci de v\u00E9rifier le s\u00E9parateur utilis\u00E9 (%c).
+Can't\ replace\ data\ value.\ Expected\ %s\ but\ was\ %s=
Depth\ attribute\ is\ not\ a\ valid\ double=
Maturity\ attribute\ is\ required=
Missing\ file\ %s=Fichier manquant \: %s
Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/CommandServiceTest.java
===================================================================
--- trunk/coser-business/src/test/java/fr/ifremer/coser/services/CommandServiceTest.java 2010-10-29 12:00:49 UTC (rev 130)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/CommandServiceTest.java 2010-10-29 14:17:52 UTC (rev 131)
@@ -67,7 +67,7 @@
Assert.assertEquals(30, project.getControl().getLength().size());
DeleteLineCommand command = new DeleteLineCommand();
- command.setLineIndex("2");
+ command.setLineNumber("2");
command.setCategory(Category.LENGTH);
commandService.doAction(command, project, project.getControl());
@@ -83,7 +83,7 @@
public void testDeleteLineWrong() throws CoserBusinessException {
Project project = createTestProject(projectService);
DeleteLineCommand command = new DeleteLineCommand();
- command.setLineIndex("2");
+ command.setLineNumber("2");
command.setCategory(Category.LENGTH);
commandService.doAction(command, project, project.getControl());
commandService.doAction(command, project, project.getControl());
@@ -101,7 +101,7 @@
Assert.assertEquals("3", project.getControl().getLength().get(4)[Length.INDEX_LINE]);
DeleteLineCommand command = new DeleteLineCommand();
- command.setLineIndex("3");
+ command.setLineNumber("3");
command.setCategory(Category.LENGTH);
commandService.doAction(command, project, project.getControl());
Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java
===================================================================
--- trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java 2010-10-29 12:00:49 UTC (rev 130)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java 2010-10-29 14:17:52 UTC (rev 131)
@@ -28,6 +28,7 @@
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
+import java.util.Locale;
import java.util.Map;
import org.apache.commons.io.FileUtils;
@@ -35,6 +36,7 @@
import org.apache.commons.logging.LogFactory;
import org.junit.AfterClass;
import org.junit.BeforeClass;
+import org.nuiton.i18n.I18n;
import fr.ifremer.coser.CoserBusinessConfig;
import fr.ifremer.coser.CoserBusinessException;
@@ -67,6 +69,8 @@
}
config = new CoserBusinessConfig();
config.setDatabaseDirectory(testDirectory.getAbsolutePath());
+
+ I18n.init(Locale.UK);
}
@AfterClass
Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/ValidationServiceTest.java
===================================================================
--- trunk/coser-business/src/test/java/fr/ifremer/coser/services/ValidationServiceTest.java 2010-10-29 12:00:49 UTC (rev 130)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/ValidationServiceTest.java 2010-10-29 14:17:52 UTC (rev 131)
@@ -114,6 +114,6 @@
if (log.isDebugEnabled()) {
log.debug("Validation errors = " + errors);
}
- Assert.assertEquals(1, errors.size());
+ Assert.assertEquals(2, errors.size());
}
}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlFindReplaceDialog.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlFindReplaceDialog.jaxx 2010-10-29 12:00:49 UTC (rev 130)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlFindReplaceDialog.jaxx 2010-10-29 14:17:52 UTC (rev 131)
@@ -24,9 +24,18 @@
-->
<JDialog title="coser.ui.control.replace.title" modal="true">
<ControlHandler id="handler" javaBean="null" />
+ <Integer id="columnIndex" javaBean="-1" />
<Table>
<row>
<cell fill="horizontal">
+ <JLabel text="coser.ui.control.replace.inField" />
+ </cell>
+ <cell weightx="1" fill="horizontal">
+ <JLabel id="replaceFieldNameLabel" />
+ </cell>
+ </row>
+ <row>
+ <cell fill="horizontal">
<JLabel text="coser.ui.control.replace.find" />
</cell>
<cell weightx="1" fill="horizontal">
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2010-10-29 12:00:49 UTC (rev 130)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2010-10-29 14:17:52 UTC (rev 131)
@@ -32,8 +32,10 @@
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
+import java.beans.Introspector;
import java.util.Iterator;
import java.util.List;
+import java.util.UUID;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
@@ -48,11 +50,11 @@
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
+import jaxx.runtime.JAXXUtil;
import jaxx.runtime.SwingUtil;
import jaxx.runtime.validator.swing.SwingValidator;
-import org.apache.commons.beanutils.BeanUtils;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jfree.chart.ChartPanel;
@@ -100,31 +102,37 @@
/**
* Affiche le menu contextuel de la table qui contient les données.
*
- * @param view view
+ * @param controlView view
* @param event mouse event
*/
- public void showDataTableContextMenu(final ControlView view, MouseEvent event) {
+ public void showDataTableContextMenu(final ControlView controlView, MouseEvent event) {
// clic contextuel
if (event.getButton() == MouseEvent.BUTTON3) {
- int[] dataSelectedRows = view.getControlDataTable().getSelectedRows();
- int columnIndex = view.getControlDataTable().getColumnModel().getColumnIndexAtX(event.getX());
+ int[] dataSelectedRows = controlView.getControlDataTable().getSelectedRows();
+ final int columnIndex = controlView.getControlDataTable().getColumnModel().getColumnIndexAtX(event.getX());
// plusieurs lignes selectionnées et pas la premiere colonne (Line index)
if (dataSelectedRows.length > 0 && columnIndex > 0) {
- String columnName = view.getControlDataTable().getColumnName(columnIndex);
+ ControlDataTableModel controlDataModel = controlView.getControlDataTableModel();
+ final String columnName = controlView.getControlDataTable().getColumnName(columnIndex);
+ final String firstValue = (String)controlDataModel.getValueAt(dataSelectedRows[0], columnIndex);
JPopupMenu popupMenu = new JPopupMenu(_("coser.ui.control.dataMenuLabel"));
JMenuItem replaceMenu = new JMenuItem(_("coser.ui.control.dataMenuReplace", columnName));
replaceMenu.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- ControlFindReplaceDialog viewDialog = new ControlFindReplaceDialog(view);
- viewDialog.setLocationRelativeTo(view);
+ ControlFindReplaceDialog viewDialog = new ControlFindReplaceDialog(controlView);
+ viewDialog.setHandler(ControlHandler.this);
+ viewDialog.setColumnIndex(columnIndex);
+ viewDialog.getReplaceFieldNameLabel().setText(columnName);
+ viewDialog.getReplaceFindField().setText(firstValue);
+ viewDialog.setLocationRelativeTo(controlView);
viewDialog.setVisible(true);
}
});
popupMenu.add(replaceMenu);
- popupMenu.show(view.getControlDataTable(), event.getX(), event.getY());
+ popupMenu.show(controlView.getControlDataTable(), event.getX(), event.getY());
}
}
}
@@ -132,14 +140,76 @@
/**
* Perform find and replace.
*
- * @param view parent view
+ * @param replaceView view
*/
- public void performFindAndReplace(ControlFindReplaceDialog view) {
- String find = view.getReplaceFindField().getText();
- String replace = view.getReplaceReplaceField().getText();
+ public void performFindAndReplace(ControlFindReplaceDialog replaceView) {
+
+ ControlView controlView = replaceView.getContextValue(ControlView.class, JAXXUtil.PARENT);
+ Category category = (Category)controlView.getCategoryComboBox().getSelectedItem();
+ ControlDataTableModel controlDataModel = controlView.getControlDataTableModel();
+ ProjectService projectService = replaceView.getContextValue(ProjectService.class);
+ Project project = replaceView.getContextValue(Project.class);
+
+ // find en field name
+ String[] enHeaders = null;
+ switch (category) {
+ case CATCH:
+ enHeaders = Catch.EN_HEADERS;
+ break;
+ case HAUL:
+ enHeaders = Haul.EN_HEADERS;
+ break;
+ case LENGTH:
+ enHeaders = Length.EN_HEADERS;
+ break;
+ case STRATA:
+ enHeaders = Strata.EN_HEADERS;
+ break;
+ }
+
+ // -1 because table model contains line number
+ String field = enHeaders[replaceView.getColumnIndex() - 1];
+ field = Introspector.decapitalize(field);
+ String find = replaceView.getReplaceFindField().getText();
+ String replace = replaceView.getReplaceReplaceField().getText();
if (log.isWarnEnabled()) {
log.warn("Perform : " + find + " replace with " + replace);
}
+
+ String commandUUID = UUID.randomUUID().toString();
+
+ try {
+ // on suppose que la fenetre est modale, et
+ // que la selection ne peut pas avoir changée
+ int[] dataSelectedRows = controlView.getControlDataTable().getSelectedRows();
+ for (int dataSelectedRow : dataSelectedRows) {
+ String[] data = controlDataModel.getDataAt(dataSelectedRow);
+ data = projectService.replaceFieldValue(project, category, field, find, replace, data, commandUUID);
+ controlDataModel.fireTableRowsUpdated(dataSelectedRow, dataSelectedRow);
+
+ switch (category) {
+ case CATCH:
+ project.getControl().getCatch().set(dataSelectedRow + 1, data); // csv header
+ controlDataModel.fireTableRowsUpdated(dataSelectedRow, dataSelectedRow);
+ break;
+ case HAUL:
+ project.getControl().getHaul().set(dataSelectedRow + 1, data); // csv header
+ controlDataModel.fireTableRowsUpdated(dataSelectedRow, dataSelectedRow);
+ break;
+ case LENGTH:
+ project.getControl().getLength().set(dataSelectedRow + 1, data); // csv header
+ controlDataModel.fireTableRowsUpdated(dataSelectedRow, dataSelectedRow);
+ break;
+ case STRATA:
+ project.getControl().getStrata().set(dataSelectedRow + 1, data); // csv header
+ controlDataModel.fireTableRowsUpdated(dataSelectedRow, dataSelectedRow);
+ break;
+ }
+ }
+ } catch (CoserBusinessException ex) {
+ throw new CoserException("Can't replace field value", ex);
+ }
+ replaceView.dispose();
}
/**
@@ -360,9 +430,9 @@
for (int fieldIndex = 1 ; fieldIndex < header.length ; fieldIndex++) {
String headerValue = header[fieldIndex];
String fieldValue = line[fieldIndex];
-
- final String beanFieldName = StringUtils.uncapitalize(enHeaders[fieldIndex - 1]);
+ final String beanFieldName = Introspector.decapitalize(enHeaders[fieldIndex - 1]);
+
JLabel label = new JLabel(headerValue + "\u2009:");
final JTextField fieldTextField = new JTextField(fieldValue);
fieldTextField.getDocument().addDocumentListener(new DocumentListener() {
@@ -383,7 +453,7 @@
protected void valueChanged(DocumentEvent event) {
try {
- BeanUtils.setProperty(finalBean, beanFieldName, fieldTextField.getText());
+ PropertyUtils.setProperty(finalBean, beanFieldName, fieldTextField.getText());
} catch (Exception ex) {
if (log.isErrorEnabled()) {
log.error("Can't set property value (" + beanFieldName + ")", ex);
Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui-en_GB.properties
===================================================================
--- trunk/coser-ui/src/main/resources/i18n/coser-ui-en_GB.properties 2010-10-29 12:00:49 UTC (rev 130)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui-en_GB.properties 2010-10-29 14:17:52 UTC (rev 131)
@@ -23,6 +23,7 @@
coser.ui.control.global.message=Message
coser.ui.control.graphtitle=Graph
coser.ui.control.replace.find=Find \:
+coser.ui.control.replace.inField=In field \:
coser.ui.control.replace.replace=Replace \:
coser.ui.control.replace.title=Find and replace
coser.ui.control.save=Save
Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui-fr_FR.properties
===================================================================
--- trunk/coser-ui/src/main/resources/i18n/coser-ui-fr_FR.properties 2010-10-29 12:00:49 UTC (rev 130)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui-fr_FR.properties 2010-10-29 14:17:52 UTC (rev 131)
@@ -23,6 +23,7 @@
coser.ui.control.global.message=Message
coser.ui.control.graphtitle=Graphique
coser.ui.control.replace.find=Chercher \:
+coser.ui.control.replace.inField=Dans le champ \:
coser.ui.control.replace.replace=Remplacer \:
coser.ui.control.replace.title=Chercher et remplacer
coser.ui.control.save=Sauvegarder