Author: echatellier Date: 2012-08-13 14:52:49 +0200 (Mon, 13 Aug 2012) New Revision: 1037 Url: http://forge.codelutin.com/repositories/revision/coser/1037 Log: Ajout d'une m?\195?\169thode utilitaire pour trier les listes d'esp?\195?\168ces. Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java 2012-08-10 16:10:16 UTC (rev 1036) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java 2012-08-13 12:52:49 UTC (rev 1037) @@ -29,6 +29,7 @@ import java.io.StringReader; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; @@ -43,6 +44,7 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.w3c.dom.Document; import org.xml.sax.InputSource; @@ -232,17 +234,30 @@ * @param map map to sort * @return sorted map */ - public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) { + public static <K, V extends Comparable<? super V>> LinkedHashMap<K, V> sortByValue(Map<K, V> map) { List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>(map.entrySet()); Collections.sort( list, new Comparator<Map.Entry<K, V>>() { public int compare( Map.Entry<K, V> o1, Map.Entry<K, V> o2 ) { return (o1.getValue()).compareTo( o2.getValue() ); } }); - Map<K, V> result = new LinkedHashMap<K, V>(); + LinkedHashMap<K, V> result = new LinkedHashMap<K, V>(); for (Map.Entry<K, V> entry : list) { result.put(entry.getKey(), entry.getValue()); } return result; } + + /** + * Sort a collection with order defined by a LinkedHashMap keySet. + * + * @param map map containing order in keys + * @param list list to sort + * @return list sorted + */ + public static <K> List<K> sortCollectionWithMapKeys(LinkedHashMap<K, ?> map, Collection<K> list) { + List<K> keys = new ArrayList<K>(map.keySet()); + keys.retainAll(list); + return keys; + } } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java 2012-08-10 16:10:16 UTC (rev 1036) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java 2012-08-13 12:52:49 UTC (rev 1037) @@ -29,6 +29,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Properties; @@ -114,7 +115,7 @@ protected DataStorage refTaxSpecies; /** Map de cache entre les codes especes et la visualisation utilisateur. */ - protected Map<String, String> refTaxSpeciesMap; + protected LinkedHashMap<String, String> refTaxSpeciesMap; /** Type especes */ protected DataStorage typeEspeces; @@ -293,7 +294,7 @@ * @return refTax species map * @since 1.3 */ - public Map<String, String> getRefTaxSpeciesMap() { + public LinkedHashMap<String, String> getRefTaxSpeciesMap() { return this.refTaxSpeciesMap; } @@ -303,7 +304,7 @@ * @param refTaxSpeciesMap new map * @since 1.3 */ - public void setRefTaxSpeciesMap(Map<String, String> refTaxSpeciesMap) { + public void setRefTaxSpeciesMap(LinkedHashMap<String, String> refTaxSpeciesMap) { this.refTaxSpeciesMap = refTaxSpeciesMap; } 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 2012-08-10 16:10:16 UTC (rev 1036) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2012-08-13 12:52:49 UTC (rev 1037) @@ -47,6 +47,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Properties; @@ -262,7 +263,7 @@ // creation de la map de cache des assossiation entre les code especes // utilisé, et les noms réels visualisé par l'utilisateur - Map<String, String> reftaxSpecies = getReftaxSpeciesDisplayFieldMap(project, false); + LinkedHashMap<String, String> reftaxSpecies = getReftaxSpeciesDisplayFieldMap(project, false); project.setRefTaxSpeciesMap(reftaxSpecies); return project; @@ -305,7 +306,7 @@ // creation de la map de cache des assossiation entre les code especes // utilisé, et les noms réels visualisé par l'utilisateur - Map<String, String> reftaxSpecies = getReftaxSpeciesDisplayFieldMap(project, false); + LinkedHashMap<String, String> reftaxSpecies = getReftaxSpeciesDisplayFieldMap(project, false); project.setRefTaxSpeciesMap(reftaxSpecies); } @@ -505,7 +506,7 @@ // creation de la map de cache des assossiation entre les code especes // utilisé, et les noms réels visualisé par l'utilisateur - Map<String, String> reftaxSpecies = getReftaxSpeciesDisplayFieldMap(project, false); + LinkedHashMap<String, String> reftaxSpecies = getReftaxSpeciesDisplayFieldMap(project, false); project.setRefTaxSpeciesMap(reftaxSpecies); return project; @@ -3042,7 +3043,7 @@ * pour le champ de sortie * @since 1.3 */ - public Map<String, String> getReftaxSpeciesDisplayFieldMap(Project project, boolean outputField) { + public LinkedHashMap<String, String> getReftaxSpeciesDisplayFieldMap(Project project, boolean outputField) { Map<String, String> speciesMap = new HashMap<String, String>(); // "C_Perm";"NumSys";"NivSys";"C_VALIDE";"L_VALIDE";"AA_VALIDE";"C_TxPère";"Taxa" Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2012-08-10 16:10:16 UTC (rev 1036) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2012-08-13 12:52:49 UTC (rev 1037) @@ -595,12 +595,20 @@ // partie detail extractProjectReport(project, out); + // transcription des code especes + StringBuilder speciesBuilder = new StringBuilder(256); + String separator = ""; + for (String speciesCode : selection.getSelectedSpecies()) { + speciesBuilder.append(separator); + speciesBuilder.append(project.getDisplaySpeciesText(speciesCode)); + } + // partie resumé de selection out.write("<h2>" + _("coser.business.publication.selectionchoices") + "</h2>"); out.write("<ul>"); out.write("<li>" + _("coser.business.common.years") + " : " + StringUtils.join(selection.getSelectedYears(), ", ") + "</li>"); out.write("<li>" + _("coser.business.common.strata") + " : " + StringUtils.join(selection.getSelectedStrata(), ", ") + "</li>"); - out.write("<li>" + _("coser.business.common.species") + " : " + StringUtils.join(selection.getSelectedSpecies(), ", ") + "</li>"); + out.write("<li>" + _("coser.business.common.species") + " : " + speciesBuilder + "</li>"); out.write("</ul>"); // partie specific : commandes 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 2012-08-10 16:10:16 UTC (rev 1036) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2012-08-13 12:52:49 UTC (rev 1037) @@ -831,15 +831,15 @@ GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets( 1, 1, 1, 1), 0, 0)); + // combo box used to choose for species in list if ((category == Category.CATCH && fieldIndex == Catch.INDEX_SPECIES) || (category == Category.LENGTH && fieldIndex == Length.INDEX_SPECIES)) { - // combo box used to choose for species in list Project project = view.getContextValue(Project.class); Map<String, String> reftaxSpecies = project.getRefTaxSpeciesMap(); List<String> domain = new ArrayList<String>(reftaxSpecies.keySet()); // ajout de la valeur pour que même si elle n'existe pas // elle soit sélectionnée - if (reftaxSpecies.containsKey(fieldValue)) { + if (!reftaxSpecies.containsKey(fieldValue)) { domain.add(0, fieldValue); } ListComboBoxModel<String> speciesComboModel = new ListComboBoxModel<String>(domain); 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 2012-08-10 16:10:16 UTC (rev 1036) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-13 12:52:49 UTC (rev 1037) @@ -66,6 +66,7 @@ import fr.ifremer.coser.CoserBusinessException; import fr.ifremer.coser.CoserConfig; import fr.ifremer.coser.CoserException; +import fr.ifremer.coser.CoserUtils; import fr.ifremer.coser.bean.Project; import fr.ifremer.coser.bean.RSufiResult; import fr.ifremer.coser.bean.Selection; @@ -522,7 +523,7 @@ // code pour que la liste des ids d'especes soit trié // comme celle de visualisation de l'utilisateur (vue triée du rendu) - filteredSpecies = new ArrayList<String>(CollectionUtils.retainAll(project.getRefTaxSpeciesMap().keySet(), filteredSpecies)); + filteredSpecies = CoserUtils.sortCollectionWithMapKeys(project.getRefTaxSpeciesMap(), filteredSpecies); // ne fait pas apparaitre les especes deja selectionnées List<String> selectedSpecies = view.getSelectedSpeciesListModel().getSpecies(); @@ -1201,7 +1202,7 @@ // code pour que la liste des ids d'especes soit trié // comme celle de visualisation de l'utilisateur (vue triée du rendu) - selectedSpeciesList = new ArrayList<String>(CollectionUtils.retainAll(project.getRefTaxSpeciesMap().keySet(), selectedSpeciesList)); + selectedSpeciesList = CoserUtils.sortCollectionWithMapKeys(project.getRefTaxSpeciesMap(), selectedSpeciesList); view.getSelectedSpeciesListModel().setSpecies(selectedSpeciesList); @@ -1230,7 +1231,7 @@ // code pour que la liste des ids d'especes soit trié // comme celle de visualisation de l'utilisateur (vue triée du rendu) - filteredSpecies = new ArrayList<String>(CollectionUtils.retainAll(project.getRefTaxSpeciesMap().keySet(), filteredSpecies)); + filteredSpecies = CoserUtils.sortCollectionWithMapKeys(project.getRefTaxSpeciesMap(), filteredSpecies); // met à jour la liste des especes selectionnées view.getSelectedSpeciesListModel().setSpecies(selectedSpecies);