r312 - in trunk/coser-ui/src/main: java/fr/ifremer/coser/ui/selection resources/i18n
Author: chatellier Date: 2010-11-30 16:35:52 +0000 (Tue, 30 Nov 2010) New Revision: 312 Log: V?\195?\169rification de la pr?\195?\169sence d'un commentaire dans le cas d'une modification de la selection Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.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-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-11-30 16:34:32 UTC (rev 311) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-11-30 16:35:52 UTC (rev 312) @@ -50,6 +50,7 @@ import jaxx.runtime.JAXXUtil; +import org.apache.commons.lang.xwork.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jfree.chart.ChartPanel; @@ -366,12 +367,11 @@ } /** - * Sauvegarde (ou creer) la sélection. + * Sauvegarde (ou creer) la sélection (partie details). * * @param view parent view */ public void saveSelection(SelectionDetailsView view) { - Project project = view.getContextValue(Project.class); Selection selection = view.getContextValue(Selection.class); ProjectService service = view.getContextValue(ProjectService.class); @@ -396,17 +396,18 @@ } /** - * Sauvegarde la sélection. + * Sauvegarde la sélection (partie listes de selection). * * @param view parent view */ public void saveSelection(SelectionListsView view) { - Project project = view.getContextValue(Project.class); Selection selection = view.getContextValue(Selection.class); ProjectService service = view.getContextValue(ProjectService.class); SelectionView selectionView = view.getParentContainer(SelectionView.class); + saveSelectionLists(view, selection); + try { service.saveProjectSelection(project, selection); } @@ -420,17 +421,115 @@ } /** - * Marque la selection comme validée. + * Sauve les éléments selectionnés dans la sélection. * + * @param view view containing jlist + * @param selection selection to save lists to + */ + protected void saveSelectionLists(SelectionListsView view, Selection selection) { + + // do not use CoserSelectionModel.getSelectedValues here (not same datas) + + List<String> occDensList = new ArrayList<String>(); + Object[] occDensSpeciesSelection = view.getSelectionOccurrenceDensityList().getSelectedValues(); + for (Object occDensSpecies : occDensSpeciesSelection) { + occDensList.add((String)occDensSpecies); + } + + List<String> sizeAllYearList = new ArrayList<String>(); + Object[] sizeAllYearSpeciesSelection = view.getSelectionSizeAllYearList().getSelectedValues(); + for (Object sizeAllYearSpecies : sizeAllYearSpeciesSelection) { + sizeAllYearList.add((String)sizeAllYearSpecies); + } + + List<String> maturityList = new ArrayList<String>(); + Object[] maturitySpeciesSelection = view.getSelectionMaturityList().getSelectedValues(); + for (Object maturitySpecies : maturitySpeciesSelection) { + maturityList.add((String)maturitySpecies); + } + + selection.setSelectedSpeciesOccDens(occDensList); + selection.setSelectedSpeciesSizeAllYear(sizeAllYearList); + selection.setSelectedSpeciesMaturity(maturityList); + } + + /** + * Marque la selection comme validée et la sauve ensuite). + * + * Test que si une liste a été modifiée par l'utilisateur, le champs + * commentaire associé est bien renseigné. + * * @param view view */ public void validSelection(SelectionListsView view) { Selection selection = view.getContextValue(Selection.class); - selection.setValidated(true); - saveSelection(view); + saveSelectionLists(view, selection); + boolean canBeValidated = checkSelectionListComments(view, selection); + if (canBeValidated) { + selection.setValidated(true); + saveSelection(view); + } } /** + * Test que les selections sont complete ou alors justifiée par un + * commentaires. + * + * @param view view containing jlist + * @return {@code true} if selection can be saved + */ + protected boolean checkSelectionListComments(SelectionListsView view, Selection selection) { + + boolean canValidate = true; + + // do not use CoserSelectionModel.getSelectedValues here (not same datas) + + // pour le modele occurence/densite, cela doit être egal a tout + // se qu'aurait du selectionné le filtre + Set<String> currentOccDensSelection = new HashSet<String>(selection.getSelectedSpeciesOccDens()); + double occurrence = selection.getOccurrenceFilter(); + double density = selection.getDensityFilter(); + Set<String> originalOccDensSelection = getOccurenceDensityFilteredSpecies(view, occurrence, density); + System.out.println("1 = " + currentOccDensSelection); + System.out.println("2 = " + originalOccDensSelection); + if (!currentOccDensSelection.equals(originalOccDensSelection) + && StringUtils.isBlank(selection.getSelectedSpeciesOccDensComment())) { + JOptionPane.showMessageDialog(view, _("coser.ui.selection.nonJustifiedOccurenceDensity"), + _("coser.ui.selection.nonJustifiedTitle"), JOptionPane.ERROR_MESSAGE); + view.getOccurrenceDensityCommentField().requestFocus(); + canValidate = false; + } + + // pour le modele taille toutes les années : tout doit être selectionné + if (canValidate) { + int sizeAllYearSpeciesInModel = view.getSelectionSizeAllYearListModel().getSize(); + int[] sizeAllYearSpeciesSelection = view.getSelectionSizeAllYearList().getSelectedIndices(); + if (sizeAllYearSpeciesSelection.length < sizeAllYearSpeciesInModel + && StringUtils.isBlank(selection.getSelectedSpeciesSizeAllYearComment())) { + JOptionPane.showMessageDialog(view, _("coser.ui.selection.nonJustifiedSizeAllYear"), + _("coser.ui.selection.nonJustifiedTitle"), JOptionPane.ERROR_MESSAGE); + view.getSizeAllYearCommentField().requestFocus(); + canValidate = false; + } + } + + // pour le modele maturite : tout doit être selectionné + if (canValidate) { + int maturitySpeciesInModel = view.getSelectionMaturityListModel().getSize(); + int[] maturitySpeciesSelection = view.getSelectionMaturityList().getSelectedIndices(); + if (maturitySpeciesSelection.length < maturitySpeciesInModel + && StringUtils.isBlank(selection.getSelectedSpeciesMaturityComment())) { + JOptionPane.showMessageDialog(view, _("coser.ui.selection.nonJustifiedMaturity"), + _("coser.ui.selection.nonJustifiedTitle"), JOptionPane.ERROR_MESSAGE); + view.getMaturityCommentField().requestFocus(); + canValidate = false; + } + } + + return canValidate; + } + + /** * Mise à jour du filtre d'ocurrence et densité. * * Selectionne dans la liste seulement les especes ayant une densité @@ -453,15 +552,9 @@ selection.setDensityFilter(density); // construction de la liste de selection des especes - OccurrenceDensitySpecyListModel model = view.getSelectionOccurrenceDensityListModel(); - int speciesCount = model.getSize(); - List<String> filteredSpecies = new ArrayList<String>(); - for (int speciesIndex = 0 ; speciesIndex < speciesCount ; speciesIndex++) { - String specy = (String)model.getElementAt(speciesIndex); - if (model.getDensity(specy) >= density && model.getOccurrence(specy) >= occurrence) { - filteredSpecies.add(specy); - } - } + Set<String> filteredSpeciesSet = getOccurenceDensityFilteredSpecies(view, occurrence, density); + List<String> filteredSpecies = new ArrayList<String>(filteredSpeciesSet); + Collections.sort(filteredSpecies); // application de la nouvelle selection ((CoserListSelectionModel)view.getSelectionOccurrenceDensityList().getSelectionModel()).setSelectedObjects(filteredSpecies); @@ -478,7 +571,29 @@ } /** - * Check que les paramêtres sont correct (nouveau nom existant) + * Return l'ensemble des especes qui respece le filtrage par occurrence/densite. + * + * @param view view + * @param occurrence occurrence + * @param density density + * @return species set + */ + protected Set<String> getOccurenceDensityFilteredSpecies(SelectionListsView view, double occurrence, double density) { + // construction de la liste de selection des especes + OccurrenceDensitySpecyListModel model = view.getSelectionOccurrenceDensityListModel(); + int speciesCount = model.getSize(); + Set<String> filteredSpecies = new HashSet<String>(); + for (int speciesIndex = 0 ; speciesIndex < speciesCount ; speciesIndex++) { + String specy = (String)model.getElementAt(speciesIndex); + if (model.getDensity(specy) >= density && model.getOccurrence(specy) >= occurrence) { + filteredSpecies.add(specy); + } + } + return filteredSpecies; + } + + /** + * Check que les paramètres sont correct (nouveau nom existant) * et applique la fusion d'espece. Rafraichit la view * parente ensuite. * @@ -632,29 +747,7 @@ } view.getDetailDecisionPanelLayout().show(view.getDetailDecisionPanel(), cardLayoutContraints); } - - /* - * Appelé lorsque la selection de la liste des especes change. - * - * @param view view - * - public void specyListChanged(SelectionDetailsView view) { - if (log.isDebugEnabled()) { - log.debug("Species selection changed, updating registered species"); - } - - Selection selection = view.getContextValue(Selection.class); - - // get selected species - Object[] selectedSpecies = view.getSelectedSpecyList().getSelectedValues(); - List<String> species= new ArrayList<String>(); - for (Object selectedSpecy : selectedSpecies) { - species.add((String)selectedSpecy); - } - selection.setSelectedSpecies(species); - }*/ - /** * Display rsufi new result dialog. * 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-11-30 16:34:32 UTC (rev 311) +++ trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2010-11-30 16:35:52 UTC (rev 312) @@ -149,6 +149,10 @@ coser.ui.selection.fusionError=Merge error coser.ui.selection.invalidFusionName=Selection fusion name not found in referential \! coser.ui.selection.maturitySpecies=L4 \: Species with maturity +coser.ui.selection.nonJustifiedMaturity=Maturity species list is not all selected.\nYou must justify this selection with a comment. +coser.ui.selection.nonJustifiedOccurenceDensity=Filtered list selection doesn't match filter selection.\nYou must justify this selection with a comment. +coser.ui.selection.nonJustifiedSizeAllYear=Size all year species list is not all selected.\nYou must justify this selection with a comment. +coser.ui.selection.nonJustifiedTitle=Unjustified selection coser.ui.selection.occurenceDensitySpecies=L2 \: Filtered species coser.ui.selection.occurrencedensityrenderer=<html>%s<span style\='font-size\:85%%;color\:gray;'>(Occ\=%.2f, Dens\=%.2f)</span></html> coser.ui.selection.replayerror=Replay error 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-11-30 16:34:32 UTC (rev 311) +++ trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2010-11-30 16:35:52 UTC (rev 312) @@ -149,6 +149,9 @@ coser.ui.selection.fusionError=Erreur de fusion coser.ui.selection.invalidFusionName=Le nom de fusion choisit n'est pas pr\u00E9sent de le r\u00E9f\u00E9rentiel \! coser.ui.selection.maturitySpecies=L4 \: Esp\u00E8ces avec maturit\u00E9 +coser.ui.selection.nonJustifiedMaturity=La liste esp\u00E8ces avec maturit\u00E9 n\'est pas enti\u00E8rement s\u00E9lectionn\u00E9e.\\nVous devez justifier cette s\u00E9lection par un commentaire. +coser.ui.selection.nonJustifiedSizeAllYear=La liste esp\u00E8ces avec des tailles pour toutes les ann\u00E9es n\'est pas enti\u00E8rement s\u00E9lectionn\u00E9e.\nVous devez justifier cette s\u00E9lection par un commentaire. +coser.ui.selection.nonJustifiedTitle=S\u00E9lection non justifi\u00E9e coser.ui.selection.occurenceDensitySpecies=L2 \: Esp\u00E8ces filtr\u00E9es coser.ui.selection.occurrencedensityrenderer=<html>%s<span style\='font-size\:85%%;color\:gray;'>(Occ\=%.2f, Dens\=%.2f)</span></html> coser.ui.selection.replayerror=Erreur de reapplication
participants (1)
-
chatellier@users.labs.libre-entreprise.org