r131 - in trunk: coser-business/src/main/java/fr/ifremer/coser/command coser-business/src/main/java/fr/ifremer/coser/services coser-business/src/main/resources/i18n coser-business/src/test/java/fr/ifremer/coser/services coser-ui/src/main/java/fr/ifremer/coser/ui/control coser-ui/src/main/resources/i18n
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
participants (1)
-
chatellier@users.labs.libre-entreprise.org