Coser-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
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- 1259 discussions
r174 - in trunk: coser-business/src/main/java/fr/ifremer/coser coser-business/src/main/java/fr/ifremer/coser/bean coser-business/src/main/java/fr/ifremer/coser/command coser-business/src/main/java/fr/ifremer/coser/services coser-business/src/test/java/fr/ifremer/coser/services coser-ui/src/main/java/fr/ifremer/coser/ui/selection
by chatellier@users.labs.libre-entreprise.org 05 Nov '10
by chatellier@users.labs.libre-entreprise.org 05 Nov '10
05 Nov '10
Author: chatellier
Date: 2010-11-05 16:39:07 +0000 (Fri, 05 Nov 2010)
New Revision: 174
Log:
Sauvegarde et relecture des selections (properties)
Sauvegarde et relecture des commandes (selection et control)
Added:
trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java
trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Selection.java
trunk/coser-business/src/main/java/fr/ifremer/coser/command/Command.java
trunk/coser-business/src/main/java/fr/ifremer/coser/command/DeleteLineCommand.java
trunk/coser-business/src/main/java/fr/ifremer/coser/command/MergeSpeciesCommand.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/test/java/fr/ifremer/coser/services/CoserTestAbstract.java
trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListCheckBoxRenderer.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListRenderer.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListTestModel.java
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java 2010-11-05 11:34:40 UTC (rev 173)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java 2010-11-05 16:39:07 UTC (rev 174)
@@ -55,6 +55,9 @@
/** Nom du dossier de sauvegarde des selections. */
public static final String STORAGE_SELECTION_DIRECTORY = "selections";
+
+ /** Nom du dossier de sauvegarde des données d'une selections. */
+ public static final String STORAGE_DATA_SELECTION_DIRECTORY = "data";
/** Suffix des nom de fichiers data apres control. */
public static final String STORAGE_CONTROL_SUFFIX = "_co";
@@ -69,8 +72,14 @@
public static final String STORAGE_CSV_EXTENSION = ".csv";
/** Nom du fichier des historiques de modification */
- public static final String HISTORY_FILENAME = "history.csv";
+ public static final String STORAGE_HISTORY_FILENAME = "history";
+ /** Extension du fichier d'historique pour le control. */
+ public static final String STORAGE_HISTORY_CONTROL_EXTENSION = ".chc";
+
+ /** Extension du fichier d'historique pour la selection. */
+ public static final String STORAGE_HISTORY_SELECTION_EXTENSION = ".chs";
+
/** Categories des données manipulées. */
public static enum Category {
CATCH(n_("coser.business.category.catch"), "catch"),
Added: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java (rev 0)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java 2010-11-05 16:39:07 UTC (rev 174)
@@ -0,0 +1,89 @@
+/*
+ * #%L
+ *
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser 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 Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+
+package fr.ifremer.coser;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.nuiton.util.StringUtil;
+
+/**
+ * Coser utility class.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class CoserUtils {
+
+ public static final String BRACKET_STRING_SEPARATOR = ";";
+
+ /**
+ * Converti une collection de string en une string
+ * delimité par les () pour pouvoir être facilement relu par
+ *
+ * @param args
+ * @return string
+ */
+ public static String convertBracketString(List<String> args) {
+ StringBuffer buffer = new StringBuffer();
+
+ Iterator<String> itArgs = args.iterator();
+ while (itArgs.hasNext()) {
+ buffer.append('(');
+ buffer.append(itArgs.next());
+ buffer.append(')');
+ if (itArgs.hasNext()) {
+ buffer.append(BRACKET_STRING_SEPARATOR);
+ }
+ }
+ return buffer.toString();
+ }
+
+ /**
+ * Parse la string avec les gestions des () en les supprimant.
+ *
+ * @param argsString string to parse
+ * @return parse list
+ */
+ public static List<String> convertBracketToList(String argsString) {
+ String[] args = StringUtil.split(argsString, BRACKET_STRING_SEPARATOR);
+
+ List<String> listArgs = new ArrayList<String>();
+ for (String arg : args) {
+ if (arg.startsWith("(") && arg.endsWith(")")) {
+ arg = StringUtils.removeStart(arg, "(");
+ arg = StringUtils.removeEnd(arg, ")");
+ listArgs.add(arg);
+ }
+ }
+ return listArgs;
+ }
+}
Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Selection.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Selection.java 2010-11-05 11:34:40 UTC (rev 173)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Selection.java 2010-11-05 16:39:07 UTC (rev 174)
@@ -25,6 +25,12 @@
package fr.ifremer.coser.bean;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.commons.lang.StringUtils;
+
/**
* Project selection.
*
@@ -40,7 +46,21 @@
private static final long serialVersionUID = -1484104459960459854L;
protected String name;
-
+
+ protected int beginDate;
+
+ protected int endDate;
+
+ protected List<String> zones;
+
+ protected List<String> filterSpecyTypes;
+
+ protected List<String> species;
+
+ protected String technicalComment;
+
+ protected String otherComment;
+
public String getName() {
return name;
}
@@ -50,4 +70,112 @@
this.name = name;
getPropertyChangeSupport().firePropertyChange("name", oldValue, name);
}
+
+ public int getBeginDate() {
+ return beginDate;
+ }
+
+ public void setBeginDate(int beginDate) {
+ this.beginDate = beginDate;
+ }
+
+ public int getEndDate() {
+ return endDate;
+ }
+
+ public void setEndDate(int endDate) {
+ this.endDate = endDate;
+ }
+
+ public List<String> getZones() {
+ return zones;
+ }
+
+ public void setZones(List<String> zones) {
+ this.zones = zones;
+ }
+
+ public List<String> getFilterSpecyTypes() {
+ return filterSpecyTypes;
+ }
+
+ public void setFilterSpecyTypes(List<String> filterSpecyTypes) {
+ this.filterSpecyTypes = filterSpecyTypes;
+ }
+
+ public List<String> getSpecies() {
+ return species;
+ }
+
+ public void setSpecies(List<String> species) {
+ this.species = species;
+ }
+
+ public String getThechnicalComment() {
+ return technicalComment;
+ }
+
+ public void setTechnicalComment(String technicalComment) {
+ this.technicalComment = technicalComment;
+ }
+
+ public String getOtherComment() {
+ return otherComment;
+ }
+
+ public void setOtherComment(String otherComment) {
+ this.otherComment = otherComment;
+ }
+
+ public Properties toProperties() {
+ Properties props = new Properties();
+ props.setProperty("selection.begindate", String.valueOf(getBeginDate()));
+ props.setProperty("selection.enddate", String.valueOf(getEndDate()));
+ if (getSpecies() != null) {
+ props.setProperty("selection.species", StringUtils.join(getSpecies(),','));
+ }
+ if (getZones() != null) {
+ props.setProperty("selection.zones", StringUtils.join(getZones(),','));
+ }
+ if (getFilterSpecyTypes() != null) {
+ props.setProperty("selection.specy.types", StringUtils.join(getFilterSpecyTypes(),','));
+ }
+ if (technicalComment != null) {
+ props.setProperty("selection.technicalcomment", technicalComment);
+ }
+ if (otherComment != null) {
+ props.setProperty("selection.othercomment", otherComment);
+ }
+ return props;
+ }
+
+ public void fromProperties(Properties props) {
+ if (props.containsKey("selection.begindate")) {
+ setBeginDate(Integer.parseInt(props.getProperty("selection.begindate")));
+ }
+ if (props.containsKey("selection.enddate")) {
+ setEndDate(Integer.parseInt(props.getProperty("selection.enddate")));
+ }
+ if (props.containsKey("selection.species")) {
+ setSpecies(splitAsList(props.getProperty("selection.species")));
+ }
+ if (props.containsKey("selection.zones")) {
+ setZones(splitAsList(props.getProperty("selection.zones")));
+ }
+ if (props.containsKey("selection.specy.types")) {
+ setFilterSpecyTypes(splitAsList(props.getProperty("selection.specy.types")));
+ }
+ if (props.containsKey("selection.technicalcomment")) {
+ setTechnicalComment(props.getProperty("selection.technicalcomment"));
+ }
+ if (props.containsKey("selection.othercomment")) {
+ setOtherComment(props.getProperty("selection.othercomment"));
+ }
+ }
+
+ protected List<String> splitAsList(String str) {
+ String[] strArray = str.split(",");
+ List<String> strList = Arrays.asList(strArray);
+ return strList;
+ }
}
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/command/Command.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/command/Command.java 2010-11-05 11:34:40 UTC (rev 173)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/command/Command.java 2010-11-05 16:39:07 UTC (rev 174)
@@ -110,4 +110,18 @@
* @throws CoserBusinessException
*/
public abstract void undoCommand(Project project, AbstractDataContainer container) throws CoserBusinessException;
+
+ /**
+ * Get command argument string representation.
+ *
+ * @return command argument string representation
+ */
+ public abstract String toStringRepresentation();
+
+ /**
+ * Init command from string representation.
+ *
+ * @param representation string command representation
+ */
+ public abstract void fromStringRepresentation(String representation);
}
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-11-05 11:34:40 UTC (rev 173)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/command/DeleteLineCommand.java 2010-11-05 16:39:07 UTC (rev 174)
@@ -27,8 +27,12 @@
import static org.nuiton.i18n.I18n._;
+import java.util.ArrayList;
+import java.util.List;
+
import fr.ifremer.coser.CoserBusinessException;
import fr.ifremer.coser.CoserConstants.Category;
+import fr.ifremer.coser.CoserUtils;
import fr.ifremer.coser.bean.AbstractDataContainer;
import fr.ifremer.coser.bean.Project;
import fr.ifremer.coser.storage.DataStorage;
@@ -166,7 +170,38 @@
}
}
+ /*
+ * @see fr.ifremer.coser.command.Command#toStringRepresentation()
+ */
@Override
+ public String toStringRepresentation() {
+ List<String> args = new ArrayList<String>();
+ args.add("category=" + category.toString());
+ args.add("lineNumber=" + lineNumber);
+ return CoserUtils.convertBracketString(args);
+ }
+
+ /*
+ * @see fr.ifremer.coser.command.Command#fromStringRepresentation(java.lang.String)
+ */
+ @Override
+ public void fromStringRepresentation(String representation) {
+
+ List<String> args = CoserUtils.convertBracketToList(representation);
+ for (String arg : args) {
+ int indexOfEqual = arg.indexOf('=');
+ String argAttribute = arg.substring(0, indexOfEqual);
+ String value = arg.substring(indexOfEqual +1);
+ if (argAttribute.equals("category")) {
+ category = Category.valueOf(value);
+ }
+ else if (argAttribute.equals("lineNumber")) {
+ lineNumber = value;
+ }
+ }
+ }
+
+ @Override
public String toString() {
return "Delete line " + lineNumber + " on " + category;
}
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/command/MergeSpeciesCommand.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/command/MergeSpeciesCommand.java 2010-11-05 11:34:40 UTC (rev 173)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/command/MergeSpeciesCommand.java 2010-11-05 16:39:07 UTC (rev 174)
@@ -25,7 +25,10 @@
package fr.ifremer.coser.command;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Iterator;
+import java.util.List;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.NotImplementedException;
@@ -35,6 +38,8 @@
import fr.ifremer.coser.CoserBusinessException;
import fr.ifremer.coser.CoserConstants;
+import fr.ifremer.coser.CoserUtils;
+import fr.ifremer.coser.CoserConstants.Category;
import fr.ifremer.coser.bean.AbstractDataContainer;
import fr.ifremer.coser.bean.Project;
import fr.ifremer.coser.data.Catch;
@@ -353,4 +358,36 @@
}
return tuple1;
}
+
+ /*
+ * @see fr.ifremer.coser.command.Command#toStringRepresentation()
+ */
+ @Override
+ public String toStringRepresentation() {
+ List<String> args = new ArrayList<String>();
+ args.add("newSpecyName=" + newSpecyName);
+ args.add("speciesNames=" + CoserUtils.convertBracketString(Arrays.asList(speciesNames)));
+ return CoserUtils.convertBracketString(args);
+ }
+
+ /*
+ * @see fr.ifremer.coser.command.Command#fromStringRepresentation(java.lang.String)
+ */
+ @Override
+ public void fromStringRepresentation(String representation) {
+
+ List<String> args = CoserUtils.convertBracketToList(representation);
+ for (String arg : args) {
+ int indexOfEqual = arg.indexOf('=');
+ String argAttribute = arg.substring(0, indexOfEqual);
+ String value = arg.substring(indexOfEqual +1);
+ if (argAttribute.equals("newSpecyName")) {
+ newSpecyName = value;
+ }
+ else if (argAttribute.equals("speciesNames")) {
+ speciesNames = CoserUtils.convertBracketToList(value).toArray(new String[0]);
+ }
+ }
+
+ }
}
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-11-05 11:34:40 UTC (rev 173)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/command/ModifyFieldCommand.java 2010-11-05 16:39:07 UTC (rev 174)
@@ -27,11 +27,14 @@
import static org.nuiton.i18n.I18n._;
+import java.util.ArrayList;
import java.util.Iterator;
+import java.util.List;
import org.apache.commons.beanutils.PropertyUtils;
import fr.ifremer.coser.CoserBusinessException;
+import fr.ifremer.coser.CoserUtils;
import fr.ifremer.coser.CoserConstants.Category;
import fr.ifremer.coser.bean.AbstractDataContainer;
import fr.ifremer.coser.bean.Project;
@@ -63,10 +66,10 @@
protected String fieldName;
/** Field actual value. */
- protected Object currentValue;
+ protected String currentValue;
/** Field new value. */
- protected Object newValue;
+ protected String newValue;
public Category getCategory() {
return category;
@@ -96,7 +99,7 @@
return currentValue;
}
- public void setCurrentValue(Object currentValue) {
+ public void setCurrentValue(String currentValue) {
this.currentValue = currentValue;
}
@@ -104,7 +107,7 @@
return newValue;
}
- public void setNewValue(Object newValue) {
+ public void setNewValue(String newValue) {
this.newValue = newValue;
}
@@ -202,8 +205,51 @@
}
}
}
-
+
+ /*
+ * @see fr.ifremer.coser.command.Command#toStringRepresentation()
+ */
@Override
+ public String toStringRepresentation() {
+ List<String> args = new ArrayList<String>();
+ args.add("category=" + category.toString());
+ args.add("lineNumber=" + lineNumber);
+ args.add("fieldName=" + fieldName);
+ args.add("currentValue=" + currentValue);
+ args.add("newValue=" + newValue);
+ return CoserUtils.convertBracketString(args);
+ }
+
+ /*
+ * @see fr.ifremer.coser.command.Command#fromStringRepresentation(java.lang.String)
+ */
+ @Override
+ public void fromStringRepresentation(String representation) {
+
+ List<String> args = CoserUtils.convertBracketToList(representation);
+ for (String arg : args) {
+ int indexOfEqual = arg.indexOf('=');
+ String argAttribute = arg.substring(0, indexOfEqual);
+ String value = arg.substring(indexOfEqual +1);
+ if (argAttribute.equals("category")) {
+ category = Category.valueOf(value);
+ }
+ else if (argAttribute.equals("lineNumber")) {
+ lineNumber = value;
+ }
+ else if (argAttribute.equals("fieldName")) {
+ fieldName = value;
+ }
+ else if (argAttribute.equals("currentValue")) {
+ currentValue = value;
+ }
+ else if (argAttribute.equals("newValue")) {
+ newValue = value;
+ }
+ }
+ }
+
+ @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-11-05 11:34:40 UTC (rev 173)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-11-05 16:39:07 UTC (rev 174)
@@ -27,8 +27,15 @@
import static org.nuiton.i18n.I18n._;
+import java.io.BufferedReader;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -36,6 +43,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
@@ -43,6 +51,8 @@
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -50,6 +60,7 @@
import fr.ifremer.coser.CoserBusinessException;
import fr.ifremer.coser.CoserConstants;
import fr.ifremer.coser.CoserConstants.Category;
+import fr.ifremer.coser.CoserUtils;
import fr.ifremer.coser.bean.AbstractDataContainer;
import fr.ifremer.coser.bean.Control;
import fr.ifremer.coser.bean.Project;
@@ -253,12 +264,33 @@
if (selectionDirectory.isDirectory()) {
Selection selection = new Selection();
selection.setName(selectionDirectory.getName());
+
+ // relecture des informations de la selection (properties)
+ File propertiesFile = new File(selectionDirectory, "selection.properties");
+
+ InputStream inputStream = null;
+ try {
+ Properties props = new Properties();
+ inputStream = new FileInputStream(propertiesFile);
+ props.load(inputStream);
+ selection.fromProperties(props);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Read selection properties file : " + propertiesFile);
+ }
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't read selection properties file", ex);
+ }
+ finally {
+ IOUtils.closeQuietly(inputStream);
+ }
+
selections.put(selectionDirectory.getName(), selection);
}
}
}
project.setSelections(selections);
-
+
return project;
}
@@ -344,8 +376,11 @@
}
}
- // TODO echatellier 20101027 need history file reloading
- control.setHistoryCommand(new ArrayList<Command>());
+ // command file reloading
+ File historyFile = new File(controlDirectory, CoserConstants.STORAGE_HISTORY_FILENAME +
+ CoserConstants.STORAGE_HISTORY_SELECTION_EXTENSION);
+ List<Command> commands = loadHistoryCommands(historyFile);
+ control.setHistoryCommand(commands);
project.setControl(control);
@@ -361,7 +396,7 @@
* @throws CoserBusinessException
*/
public Project loadSelectionData(Project project, Selection selection) throws CoserBusinessException {
-
+
File projectsDirectory = config.getProjectsDirectory();
File projectDirectory = new File(projectsDirectory, project.getName());
@@ -371,12 +406,13 @@
// try to load validated data first
File selectionsDirectory = new File(projectDirectory, CoserConstants.STORAGE_SELECTION_DIRECTORY);
File selectionDirectory = new File(selectionsDirectory, selection.getName());
+ File selectionDataDirectory = new File(selectionDirectory, CoserConstants.STORAGE_DATA_SELECTION_DIRECTORY);
int fileLoaded = 0;
for (Category category : Category.values()) {
// seulement les category de données ici
if (category.isDataCategory()) {
- File inputFile = new File(selectionDirectory, category.getStorageFileName() +
+ File inputFile = new File(selectionDataDirectory, category.getStorageFileName() +
CoserConstants.STORAGE_SELECTION_SUFFIX + CoserConstants.STORAGE_CSV_EXTENSION);
if (inputFile.isFile()) {
@@ -390,8 +426,11 @@
}
}
- // TODO echatellier 20101027 need history file reloading
- selection.setHistoryCommand(new ArrayList<Command>());
+ // command file reloading
+ File historyFile = new File(selectionDirectory, CoserConstants.STORAGE_HISTORY_FILENAME +
+ CoserConstants.STORAGE_HISTORY_SELECTION_EXTENSION);
+ List<Command> commands = loadHistoryCommands(historyFile);
+ selection.setHistoryCommand(commands);
return project;
}
@@ -438,6 +477,11 @@
}
}
}
+
+ // sauvegarde de l'historique des commandes
+ File historyFile = new File(controlDirectory, CoserConstants.STORAGE_HISTORY_FILENAME +
+ CoserConstants.STORAGE_HISTORY_SELECTION_EXTENSION);
+ saveHistoryCommands(project.getControl().getHistoryCommand(), historyFile);
}
/**
@@ -541,27 +585,162 @@
// creation du dossier de la selection courante
File selectionDirectory = new File(selectionsDirectory, selection.getName());
+ // copie des données (csv)
+ File selectionDataDirectory = new File(selectionDirectory, CoserConstants.STORAGE_DATA_SELECTION_DIRECTORY);
for (Category category : Category.values()) {
if (category.isDataCategory()) {
- File controlFile = new File(selectionDirectory,
+ File dataFile = new File(selectionDataDirectory,
category.getStorageFileName() +
CoserConstants.STORAGE_SELECTION_SUFFIX +
CoserConstants.STORAGE_CSV_EXTENSION);
if (log.isDebugEnabled()) {
- log.debug("Saving selection file : " + controlFile);
+ log.debug("Saving selection file : " + dataFile);
}
-
+
DataStorage content = getProjectContent(project, selection, category, false);
- importService.storeData(project, content, controlFile);
-
+ importService.storeData(project, content, dataFile);
+
// delete data are not saved here
// can't delete data in selection
}
}
+
+ // sauvegarde des informations de la selection (properties)
+ File propertiesFile = new File(selectionDirectory, "selection.properties");
+ Properties props = selection.toProperties();
+ OutputStream outputStream = null;
+ try {
+ outputStream = new FileOutputStream(propertiesFile);
+ props.store(outputStream, null);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Saving selection properties file : " + propertiesFile);
+ }
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't save selection properties file", ex);
+ }
+ finally {
+ IOUtils.closeQuietly(outputStream);
+ }
+ // sauvegarde de l'historique des commandes
+ File historyFile = new File(selectionDirectory, CoserConstants.STORAGE_HISTORY_FILENAME +
+ CoserConstants.STORAGE_HISTORY_SELECTION_EXTENSION);
+ saveHistoryCommands(selection.getHistoryCommand(), historyFile);
}
/**
+ * Sauve une liste ordonnées de commande dans le fichier specifié.
+ *
+ * @param historyCommand command list to save
+ * @param historyFile file to save to
+ * @throws CoserBusinessException
+ */
+ protected void saveHistoryCommands(List<Command> historyCommand,
+ File historyFile) throws CoserBusinessException {
+
+ // don't save empty file if list is empty
+ if (CollectionUtils.isEmpty(historyCommand)) {
+ return;
+ }
+
+ PrintStream printStream = null;
+
+ try {
+ printStream = new PrintStream(historyFile);
+
+ for (Command command : historyCommand) {
+ List<String> args = new ArrayList<String>();
+ args.add(command.getCommandUUID());
+ args.add(command.getClass().getSimpleName());
+ args.add(command.getComment() == null ? "" : command.getComment());
+ args.add(command.toStringRepresentation());
+ String argsString = CoserUtils.convertBracketString(args);
+ printStream.println(argsString);
+ }
+
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't save command file", ex);
+ }
+ finally {
+ IOUtils.closeQuietly(printStream);
+ }
+ }
+
+ /**
+ * Load history command list from file.
+ *
+ * @return command list (never null)
+ * @throws CoserBusinessException
+ */
+ protected List<Command> loadHistoryCommands(File historyFile) throws CoserBusinessException {
+ List<Command> historyCommand = new ArrayList<Command>();
+
+ if (historyFile.exists()) {
+ if (log.isDebugEnabled()) {
+ log.debug("Loading command list from file " + historyFile.getAbsolutePath());
+ }
+
+ BufferedReader fileReader = null;
+ try {
+ fileReader = new BufferedReader(new FileReader(historyFile));
+
+ String line = null;
+ while ((line = fileReader.readLine()) != null) {
+ if (StringUtils.isNotBlank(line)) {
+ Command command = convertLineToCommand(line);
+ historyCommand.add(command);
+ }
+ }
+ }
+ catch (IOException ex) {
+ throw new CoserBusinessException("Can't read history file", ex);
+ }
+ finally {
+ IOUtils.closeQuietly(fileReader);
+ }
+ }
+
+ return historyCommand;
+ }
+
+ /**
+ * Convert a string line to parametized command.
+ *
+ * @param line line to convert
+ * @return
+ * @throws CoserBusinessException
+ */
+ protected Command convertLineToCommand(String line) throws CoserBusinessException {
+
+ Command result = null;
+
+ List<String> lineDetail = CoserUtils.convertBracketToList(line);
+ String commandUUID = lineDetail.get(0);
+ String commandName = lineDetail.get(1);
+ String commandComment = lineDetail.get(2);
+ String commandArgs = lineDetail.get(3);
+
+ // instancie dynamiquement la command
+ // en la charchant dans le meme package que la class "Command"
+ String commandFQN = Command.class.getPackage().getName() + "." + commandName;
+ if (log.isDebugEnabled()) {
+ log.debug("Make new instance of command : " + commandFQN);
+ }
+
+ try {
+ result = (Command)Class.forName(commandFQN).newInstance();
+ result.setCommandUUID(commandUUID);
+ result.setComment(commandComment);
+ result.fromStringRepresentation(commandArgs);
+ } catch (Exception ex) {
+ throw new CoserBusinessException("Can't init command intance", ex);
+ }
+
+ return result;
+ }
+
+ /**
* Set content into project depending on category type.
*
* @param project project
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-11-05 11:34:40 UTC (rev 173)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java 2010-11-05 16:39:07 UTC (rev 174)
@@ -75,7 +75,7 @@
@AfterClass
public static void cleanDirectory() throws IOException {
- FileUtils.deleteDirectory(testDirectory);
+ //FileUtils.deleteDirectory(testDirectory);
}
/**
Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java
===================================================================
--- trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java 2010-11-05 11:34:40 UTC (rev 173)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java 2010-11-05 16:39:07 UTC (rev 174)
@@ -26,20 +26,23 @@
package fr.ifremer.coser.services;
import java.io.File;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
+import org.apache.commons.io.FileUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import fr.ifremer.coser.CoserBusinessException;
import fr.ifremer.coser.CoserConstants;
+import fr.ifremer.coser.CoserConstants.Category;
import fr.ifremer.coser.bean.Project;
import fr.ifremer.coser.bean.Selection;
-import fr.ifremer.coser.bean.Specy;
+import fr.ifremer.coser.command.DeleteLineCommand;
/**
* Project service tests.
@@ -52,11 +55,14 @@
*/
public class ProjectServiceTest extends CoserTestAbstract {
- protected ProjectService service;
+ protected ProjectService projectService;
+ protected CommandService commandService;
+
@Before
public void initService() {
- service = new ProjectService(config);
+ projectService = new ProjectService(config);
+ commandService = new CommandService(config);
}
/**
@@ -68,8 +74,8 @@
public void testDuplicatedProject() throws CoserBusinessException {
Project p = new Project();
p.setName("myProject");
- service.createProject(p, new HashMap<CoserConstants.Category, File>());
- service.createProject(p, new HashMap<CoserConstants.Category, File>());
+ projectService.createProject(p, new HashMap<CoserConstants.Category, File>());
+ projectService.createProject(p, new HashMap<CoserConstants.Category, File>());
}
/**
@@ -80,7 +86,7 @@
*/
@Test
public void testCreateProject() throws CoserBusinessException {
- Project project = createTestProject(service);
+ Project project = createTestProject(projectService);
Assert.assertTrue(new File(config.getProjectsDirectory(),
project.getName() + File.separator + "original" + File.separator + "catch.csv").exists());
@@ -102,8 +108,8 @@
*/
@Test
public void testSaveProject() throws CoserBusinessException {
- Project project = createTestProject(service);
- service.saveProjectControl(project);
+ Project project = createTestProject(projectService);
+ projectService.saveProjectControl(project);
Assert.assertTrue(new File(config.getProjectsDirectory(),
project.getName() + File.separator + "control" + File.separator + "catch_co.csv").exists());
@@ -116,10 +122,10 @@
*/
@Test
public void testCreateSelection() throws CoserBusinessException {
- Project project = createTestProject(service);
- Selection selection = service.initProjectSelection(project);
+ Project project = createTestProject(projectService);
+ Selection selection = projectService.initProjectSelection(project);
selection.setName("titi");
- service.createProjectSelection(project, selection);
+ projectService.createProjectSelection(project, selection);
Assert.assertTrue(new File(config.getProjectsDirectory(),
project.getName() + File.separator + "selections" + File.separator +
@@ -133,15 +139,15 @@
*/
@Test
public void testSelectionReloading() throws CoserBusinessException {
- Project project = createTestProject(service);
+ Project project = createTestProject(projectService);
Assert.assertEquals(25, project.getControl().getCatch().size());
- Selection selection = service.initProjectSelection(project);
+ Selection selection = projectService.initProjectSelection(project);
selection.setName("titi");
- service.createProjectSelection(project, selection);
+ projectService.createProjectSelection(project, selection);
project.clearData();
- service.loadSelectionData(project, selection);
+ projectService.loadSelectionData(project, selection);
Assert.assertEquals(25, project.getSelections().get("titi").getCatch().size());
}
@@ -153,11 +159,11 @@
*/
@Test(expected=CoserBusinessException.class)
public void testCreateSelectionError() throws CoserBusinessException {
- Project project = createTestProject(service);
- Selection selection = service.initProjectSelection(project);
+ Project project = createTestProject(projectService);
+ Selection selection = projectService.initProjectSelection(project);
selection.setName("titi");
- service.createProjectSelection(project, selection);
- service.createProjectSelection(project, selection);
+ projectService.createProjectSelection(project, selection);
+ projectService.createProjectSelection(project, selection);
}
/**
@@ -167,10 +173,10 @@
*/
@Test
public void testSpeciesExistence() throws CoserBusinessException {
- Project project = createTestProject(service);
- Assert.assertFalse(service.isSpecyNameExist(project, "Coser_invalid"));
- Assert.assertTrue(service.isSpecyNameExist(project, "COSER_SPECIES1"));
- Assert.assertTrue(service.isSpecyNameExist(project, "COSER_SPECIES2"));
+ Project project = createTestProject(projectService);
+ Assert.assertFalse(projectService.isSpecyNameExist(project, "Coser_invalid"));
+ Assert.assertTrue(projectService.isSpecyNameExist(project, "COSER_SPECIES1"));
+ Assert.assertTrue(projectService.isSpecyNameExist(project, "COSER_SPECIES2"));
}
/**
@@ -180,10 +186,10 @@
*/
@Test
public void testProjectYear() throws CoserBusinessException {
- Project project = createTestProject(service);
- Selection selection = service.initProjectSelection(project);
+ Project project = createTestProject(projectService);
+ Selection selection = projectService.initProjectSelection(project);
- List<Integer> years = service.getProjectYears(selection);
+ List<Integer> years = projectService.getProjectYears(selection);
Assert.assertEquals(2, years.size());
Assert.assertEquals(Integer.valueOf(2010), years.get(0));
Assert.assertEquals(Integer.valueOf(2011), years.get(1));
@@ -196,16 +202,16 @@
*/
@Test
public void testProjectZone() throws CoserBusinessException {
- Project project = createTestProject(service);
- Selection selection = service.initProjectSelection(project);
+ Project project = createTestProject(projectService);
+ Selection selection = projectService.initProjectSelection(project);
- List<String> zones = service.getProjectZone(selection, 2010, 2011);
+ List<String> zones = projectService.getProjectZone(selection, 2010, 2011);
Assert.assertEquals(6, zones.size());
- zones = service.getProjectZone(selection, 2011, 2011);
+ zones = projectService.getProjectZone(selection, 2011, 2011);
Assert.assertEquals(3, zones.size());
- zones = service.getProjectZone(selection, 2009, 2009);
+ zones = projectService.getProjectZone(selection, 2009, 2009);
Assert.assertEquals(0, zones.size());
}
@@ -216,8 +222,8 @@
*/
@Test
public void testProjectSpecies() throws CoserBusinessException {
- Project project = createTestProject(service);
- Selection selection = service.initProjectSelection(project);
+ Project project = createTestProject(projectService);
+ Selection selection = projectService.initProjectSelection(project);
List<String> allZones = new ArrayList<String>();
allZones.add("STR1");
@@ -227,21 +233,21 @@
allZones.add("STR5");
allZones.add("STR6");
- List<String> species = service.getProjectSpecies(project, selection, allZones, 2010, 2011, null);
+ List<String> species = projectService.getProjectSpecies(project, selection, allZones, 2010, 2011, null);
Assert.assertEquals(4, species.size());
- species = service.getProjectSpecies(project, selection, allZones, 2011, 2011, null);
+ species = projectService.getProjectSpecies(project, selection, allZones, 2011, 2011, null);
Assert.assertEquals(4, species.size());
- species = service.getProjectSpecies(project, selection, allZones, 2009, 2009, null);
+ species = projectService.getProjectSpecies(project, selection, allZones, 2009, 2009, null);
Assert.assertEquals(0, species.size());
// test with no zones
- species = service.getProjectSpecies(project, selection, new ArrayList<String>(), 2010, 2011, null);
+ species = projectService.getProjectSpecies(project, selection, new ArrayList<String>(), 2010, 2011, null);
Assert.assertEquals(0, species.size());
// test with only one zone
- species = service.getProjectSpecies(project, selection, Collections.singletonList("STR6"), 2010, 2011, null);
+ species = projectService.getProjectSpecies(project, selection, Collections.singletonList("STR6"), 2010, 2011, null);
Assert.assertEquals(4, species.size());
}
@@ -252,20 +258,45 @@
*/
@Test
public void testMergeSpecies() throws CoserBusinessException {
- Project project = createTestProject(service);
- Selection selection = service.initProjectSelection(project);
+ Project project = createTestProject(projectService);
+ Selection selection = projectService.initProjectSelection(project);
selection.setName("test");
- Assert.assertTrue(service.isSpecyNameExist(project, "COSER_SPECIES_MERGE"));
+ Assert.assertTrue(projectService.isSpecyNameExist(project, "COSER_SPECIES_MERGE"));
Assert.assertEquals(25, selection.getCatch().size());
Assert.assertEquals(30, selection.getLength().size());
- project = service.mergeSpecies(project, selection, "COSER_SPECIES_MERGE", "COSER_SPECIES1", "COSER_SPECIES2");
+ project = projectService.mergeSpecies(project, selection, "COSER_SPECIES_MERGE", "COSER_SPECIES1", "COSER_SPECIES2");
Assert.assertEquals(19, selection.getCatch().size());
Assert.assertEquals(29, selection.getLength().size());
- service.createProjectSelection(project, selection);
- System.out.println(selection.getName());
+ projectService.createProjectSelection(project, selection);
}
+
+ /**
+ * Test que la sauvegarde des commandes d'un control et le
+ * rechargement des commandes fonctionne bien.
+ *
+ * @throws CoserBusinessException
+ * @throws IOException
+ */
+ @Test
+ public void testCommandStoreAndReloading() throws CoserBusinessException, IOException {
+ Project project = createTestProject(projectService);
+
+ DeleteLineCommand command = new DeleteLineCommand();
+ command.setLineNumber("2");
+ command.setCategory(Category.LENGTH);
+
+ commandService.doAction(command, project, project.getControl());
+ projectService.saveProjectControl(project);
+
+ // clear, reload and undo command after reloading
+ project.clearData();
+ projectService.loadControlData(project);
+
+ commandService.undoAction(project, project.getControl());
+ Assert.assertEquals(30, project.getControl().getLength().size());
+ }
}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-11-05 11:34:40 UTC (rev 173)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-11-05 16:39:07 UTC (rev 174)
@@ -61,7 +61,7 @@
<YearComboBoxModel id="beginYearComboBoxModel" constructorParams="this" />
<JComboBox id="selectionDetailsBeginYearField"
model="{beginYearComboBoxModel}"
- onActionPerformed="getHandler().updateSelectionDateData(this, event)" />
+ onActionPerformed="getHandler().updateSelectionDateData(this, event); getSelection().setBeginDate((Integer)selectionDetailsBeginYearField.getSelectedItem())" />
</cell>
<cell anchor="west">
<JLabel text="coser.ui.selection.details.endDate" />
@@ -70,7 +70,7 @@
<YearComboBoxModel id="endYearComboBoxModel" constructorParams="this" />
<JComboBox id="selectionDetailsEndYearField"
model="{endYearComboBoxModel}"
- onActionPerformed="getHandler().updateSelectionDateData(this, event)" />
+ onActionPerformed="getHandler().updateSelectionDateData(this, event); getSelection().setEndDate((Integer)selectionDetailsEndYearField.getSelectedItem())" />
</cell>
</row>
<row>
@@ -90,7 +90,7 @@
cellRenderer="{new SelectionZoneListRenderer()}"
enabled="{selectionDetailsBeginYearField.getSelectedItem() != null && selectionDetailsEndYearField.getSelectedItem() != null}"
selectionModel="{new OneClicListSelectionModel(zoneList.getSelectionModel(), selectionZoneModel)}"
- onValueChanged="getHandler().updateSelectionSpecies(this)"/>
+ onValueChanged="getHandler().zoneListChanged(this);"/>
</JScrollPane>
</cell>
</row>
@@ -112,7 +112,7 @@
<TypeSpecyListModel id="typeSpecyModel" constructorParams="this" />
<JList id="typeSpecyList" model="{typeSpecyModel}"
selectionModel="{new OneClicListSelectionModel(typeSpecyList.getSelectionModel(), typeSpecyModel)}"
- onValueChanged="getHandler().updateSelectionSpecies(this)"/>
+ onValueChanged="getHandler().typeSpecyListChanged(this)"/>
</JScrollPane>
</cell>
</row>
@@ -123,7 +123,8 @@
<JList id="specyList" model="{specyListModel}"
cellRenderer="{new SpecyListRenderer()}"
onMouseClicked="getHandler().showSpeciesContextMenu(this, event)"
- selectionModel="{new OneClicListSelectionModel(specyList.getSelectionModel(), specyListModel)}"/>
+ selectionModel="{new OneClicListSelectionModel(specyList.getSelectionModel(), specyListModel)}"
+ onValueChanged="getHandler().specyListChanged(this)"/>
<ListSelectionModel id="specyListSelectionModel" javaBean="specyList.getSelectionModel()" />
</JScrollPane>
</cell>
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-05 11:34:40 UTC (rev 173)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-11-05 16:39:07 UTC (rev 174)
@@ -85,6 +85,61 @@
}
/**
+ * Appellé lorsque la selection de la liste des zones a changé.
+ *
+ * @param view view
+ */
+ public void zoneListChanged(SelectionDetailsView view) {
+ Selection selection = view.getContextValue(Selection.class);
+
+ // get selected zones as list
+ Object[] selectedZones = view.getZoneList().getSelectedValues();
+ List<String> zones = new ArrayList<String>(selectedZones.length);
+ for (Object selectedZone : selectedZones) {
+ zones.add((String)selectedZone);
+ }
+ selection.setZones(zones);
+
+ updateSelectionSpecies(view);
+ }
+
+ /**
+ * Appelé lorsque la selection de la liste des types.
+ *
+ * @param view view
+ */
+ public void typeSpecyListChanged(SelectionDetailsView view) {
+ Selection selection = view.getContextValue(Selection.class);
+
+ // get selected specy types
+ Object[] selectedSpecyTypes = view.getTypeSpecyList().getSelectedValues();
+ List<String> specyTypes = new ArrayList<String>();
+ for (Object selectedSpecyType : selectedSpecyTypes) {
+ specyTypes.add((String)selectedSpecyType);
+ }
+ selection.setFilterSpecyTypes(specyTypes);
+
+ updateSelectionSpecies(view);
+ }
+
+ /**
+ * Appelé lorsque la selection de la liste des especes change.
+ *
+ * @param view
+ */
+ public void specyListChanged(SelectionDetailsView view) {
+ Selection selection = view.getContextValue(Selection.class);
+
+ // get selected species
+ Object[] selectedSpecies = view.getSpecyList().getSelectedValues();
+ List<String> species= new ArrayList<String>();
+ for (Object selectedSpecy : selectedSpecies) {
+ species.add((String)selectedSpecy);
+ }
+ selection.setSpecies(species);
+ }
+
+ /**
* Rafraichit la liste des especes avec les dates sélectionnées
* et les zones selectionnées ET filtrées par la liste
* des type d'especes.
@@ -93,17 +148,13 @@
*
* @param view view
*/
- public void updateSelectionSpecies(SelectionDetailsView view) {
+ protected void updateSelectionSpecies(SelectionDetailsView view) {
Project project = view.getContextValue(Project.class);
Selection selection = view.getContextValue(Selection.class);
ProjectService projectService = view.getContextValue(ProjectService.class);
// get selected zones as list
- Object[] selectedZones = view.getZoneList().getSelectedValues();
- List<String> zones = new ArrayList<String>(selectedZones.length);
- for (Object selectedZone : selectedZones) {
- zones.add((String)selectedZone);
- }
+ List<String> zones = selection.getZones();
// get selected specy types
Object[] selectedSpecyTypes = view.getTypeSpecyList().getSelectedValues();
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListCheckBoxRenderer.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListCheckBoxRenderer.java 2010-11-05 11:34:40 UTC (rev 173)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListCheckBoxRenderer.java 2010-11-05 16:39:07 UTC (rev 174)
@@ -31,8 +31,6 @@
import org.jdesktop.swingx.renderer.DefaultListRenderer;
-import fr.ifremer.coser.bean.Specy;
-
/**
* Check box list renderer.
*
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListRenderer.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListRenderer.java 2010-11-05 11:34:40 UTC (rev 173)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListRenderer.java 2010-11-05 16:39:07 UTC (rev 174)
@@ -30,8 +30,6 @@
import javax.swing.DefaultListCellRenderer;
import javax.swing.JList;
-import fr.ifremer.coser.bean.Specy;
-
/**
* Basic list renderer.
*
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListTestModel.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListTestModel.java 2010-11-05 11:34:40 UTC (rev 173)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListTestModel.java 2010-11-05 16:39:07 UTC (rev 174)
@@ -33,11 +33,6 @@
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import fr.ifremer.coser.bean.Specy;
-
/**
* Test list model.
*
@@ -52,8 +47,6 @@
/** serialVersionUID. */
private static final long serialVersionUID = -4769109927915812519L;
- private final static Log log = LogFactory.getLog(SpecyListTestModel.class);
-
protected List<String> species = new ArrayList<String>();
public void setSpecy(List<String> species) {
1
0
r173 - trunk/coser-ui/src/main/java/fr/ifremer/coser
by chatellier@users.labs.libre-entreprise.org 05 Nov '10
by chatellier@users.labs.libre-entreprise.org 05 Nov '10
05 Nov '10
Author: chatellier
Date: 2010-11-05 11:34:40 +0000 (Fri, 05 Nov 2010)
New Revision: 173
Log:
Unused import
Modified:
trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java 2010-11-05 11:34:21 UTC (rev 172)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java 2010-11-05 11:34:40 UTC (rev 173)
@@ -24,8 +24,6 @@
*/
package fr.ifremer.coser;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
import java.io.File;
import javax.swing.SwingUtilities;
1
0
r172 - in trunk/coser-ui/src/main/java/fr/ifremer/coser: . ui
by chatellier@users.labs.libre-entreprise.org 05 Nov '10
by chatellier@users.labs.libre-entreprise.org 05 Nov '10
05 Nov '10
Author: chatellier
Date: 2010-11-05 11:34:21 +0000 (Fri, 05 Nov 2010)
New Revision: 172
Log:
Add swing session to restore main frame state
Modified:
trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrame.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java 2010-11-05 10:00:25 UTC (rev 171)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/Coser.java 2010-11-05 11:34:21 UTC (rev 172)
@@ -24,6 +24,10 @@
*/
package fr.ifremer.coser;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.File;
+
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
@@ -34,6 +38,7 @@
import org.nuiton.i18n.I18n;
import org.nuiton.i18n.init.DefaultI18nInitializer;
import org.nuiton.util.ArgumentsParserException;
+import org.nuiton.widget.SwingSession;
import fr.ifremer.coser.services.ChartService;
import fr.ifremer.coser.services.ImportService;
@@ -124,15 +129,24 @@
}
}
- // define unique context globale values
+ File coserConfigDirectory = new File(coserConfig.getUserConfigDirectory(), "coser");
+ coserConfigDirectory.mkdirs();
+ File mainFrameFile = new File(coserConfigDirectory, "session.xml");
+ SwingSession session = new SwingSession(mainFrameFile, true);
+
+ // define unique context global values
DefaultApplicationContext context = new DefaultApplicationContext();
context.setContextValue(coserConfig);
+ context.setContextValue(session);
context.setContextValue(new ProjectService(coserConfig));
context.setContextValue(new ImportService(coserConfig));
context.setContextValue(new ValidationService(coserConfig));
context.setContextValue(new ChartService(coserConfig));
+
+ // init frame with session reloading
CoserFrame frame = new CoserFrame(context);
frame.setLocationRelativeTo(null);
+ session.add(frame);
frame.setVisible(true);
}
});
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrame.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrame.jaxx 2010-11-05 10:00:25 UTC (rev 171)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrame.jaxx 2010-11-05 11:34:21 UTC (rev 172)
@@ -23,7 +23,7 @@
#L%
-->
<JFrame title="coser.ui.mainview.title" width="780" height="540"
- layout="{new BorderLayout()}" onWindowClosing="System.exit(0)">
+ layout="{new BorderLayout()}" name="mainFrame" onWindowClosing="getHandler().quit()">
<CoserFrameHandler id="handler" javaBean="new CoserFrameHandler(this)" />
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-05 10:00:25 UTC (rev 171)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-05 11:34:21 UTC (rev 172)
@@ -49,6 +49,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.i18n.I18n;
+import org.nuiton.widget.SwingSession;
import fr.ifremer.coser.CoserBusinessConfig;
import fr.ifremer.coser.CoserBusinessException;
@@ -133,9 +134,11 @@
/**
* Exit application.
- *
+ * Save swing session before exit.
*/
public void quit() {
+ SwingSession session = view.getContextValue(SwingSession.class);
+ session.save();
System.exit(0);
}
1
0
Author: chatellier
Date: 2010-11-05 10:00:25 +0000 (Fri, 05 Nov 2010)
New Revision: 171
Log:
Use nuiton-utils 1.5.1
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-11-04 16:15:33 UTC (rev 170)
+++ trunk/pom.xml 2010-11-05 10:00:25 UTC (rev 171)
@@ -83,7 +83,7 @@
<dependency>
<groupId>org.nuiton</groupId>
<artifactId>nuiton-utils</artifactId>
- <version>1.5</version>
+ <version>1.5.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
1
0
r170 - trunk/coser-ui/src/main/java/fr/ifremer/coser/ui
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
04 Nov '10
Author: chatellier
Date: 2010-11-04 16:15:33 +0000 (Thu, 04 Nov 2010)
New Revision: 170
Log:
Fix sample path
Modified:
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-04 16:12:03 UTC (rev 169)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-04 16:15:33 UTC (rev 170)
@@ -166,7 +166,7 @@
public void showValidatorsConfiguration() {
ValidatorConfiguration validatorConfiguration = new ValidatorConfiguration(view);
- URL sample = Catch.class.getResource("Catch-warning-validation.xml");
+ URL sample = Catch.class.getResource("Catch-error-validation.xml");
File sampleFile = new File(sample.getFile());
validatorConfiguration.getValidationEditor().open(sampleFile);
validatorConfiguration.setLocationRelativeTo(null);
1
0
r169 - in trunk/coser-business/src/main: java/fr/ifremer/coser/services resources/i18n
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
04 Nov '10
Author: chatellier
Date: 2010-11-04 16:12:03 +0000 (Thu, 04 Nov 2010)
New Revision: 169
Log:
Ajout du chemin de fichier dans le message d'erreur
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.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
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java 2010-11-04 15:53:12 UTC (rev 168)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java 2010-11-04 16:12:03 UTC (rev 169)
@@ -107,7 +107,7 @@
}
else {
if (originalLoading) {
- checkFileHeader(category, line);
+ checkFileHeader(file, category, line);
if (category.isDataCategory()) {
line = (String[])ArrayUtil.concat(new String[]{AbstractDataEntity.PROPERTY_LINE}, line);
}
@@ -144,11 +144,12 @@
/**
* Check csv file header names and order depending on file category.
*
- * @param category
- * @param line
+ * @param file file
+ * @param category category
+ * @param line header line to ckeck
* @throws CoserBusinessException
*/
- protected void checkFileHeader(Category category, String[] line) throws CoserBusinessException {
+ protected void checkFileHeader(File file, Category category, String[] line) throws CoserBusinessException {
String[] enHeaders = null;
String[] frHeaders = null;
@@ -180,7 +181,8 @@
if (frHeaders != null) {
if (!Arrays.equals(line, enHeaders) && !Arrays.equals(line, frHeaders)) {
- throw new CoserBusinessException(_("Wrong header detected in file. Find : %s, expected %s or %s",
+ throw new CoserBusinessException(_("Wrong header detected in file %s. Find : %s, expected %s or %s",
+ file.getAbsolutePath(),
StringUtils.join(line, ", "),
StringUtils.join(enHeaders, ", "),
StringUtils.join(frHeaders, ", ")));
@@ -188,7 +190,8 @@
}
else {
if (!Arrays.equals(line, enHeaders)) {
- throw new CoserBusinessException(_("Wrong header detected in file. Find : %s, expected %s",
+ throw new CoserBusinessException(_("Wrong header detected in file %s. Find : %s, expected %s",
+ file.getAbsolutePath(),
StringUtils.join(line, ", "),
StringUtils.join(enHeaders, ", ")));
}
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-11-04 15:53:12 UTC (rev 168)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-11-04 16:12:03 UTC (rev 169)
@@ -37,9 +37,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.SortedMap;
import java.util.SortedSet;
-import java.util.TreeMap;
import java.util.TreeSet;
import org.apache.commons.beanutils.PropertyUtils;
@@ -56,7 +54,6 @@
import fr.ifremer.coser.bean.Control;
import fr.ifremer.coser.bean.Project;
import fr.ifremer.coser.bean.Selection;
-import fr.ifremer.coser.bean.Specy;
import fr.ifremer.coser.command.Command;
import fr.ifremer.coser.command.DeleteLineCommand;
import fr.ifremer.coser.command.MergeSpeciesCommand;
@@ -148,6 +145,12 @@
for (Map.Entry<Category, File> categoryAndFile : categoriesAndFiles.entrySet()) {
Category category = categoryAndFile.getKey();
File dataFile = categoryAndFile.getValue();
+
+ // test file existence
+ if (!dataFile.exists()) {
+ throw new CoserBusinessException(_("Can't read file %s for category %s", dataFile.getAbsolutePath(), _(category.getTranslationKey())));
+ }
+
DataStorage dataStorage = importService.loadCSVFile(project, category, dataFile, true);
addProjectContent(project, control, category, dataStorage, false);
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-11-04 15:53:12 UTC (rev 168)
+++ trunk/coser-business/src/main/resources/i18n/coser-business-en_GB.properties 2010-11-04 16:12:03 UTC (rev 169)
@@ -2,6 +2,7 @@
Can't\ create\ project=
Can't\ find\ line\ %s\ for\ deletion=
Can't\ find\ line\ %s\ for\ undeletion=
+Can't\ read\ file\ %s\ for\ category\ %s=
Can't\ read\ file\ '%s'.\ Check\ CSV\ file\ separator=
Can't\ replace\ data\ value.\ Expected\ %s\ but\ was\ %s=
Depth\ attribute\ is\ not\ a\ valid\ double=
@@ -16,6 +17,8 @@
Sex\ is\ mandatory=
Specy\ %s\ doesn't\ exist\ in\ referential=
Weight\ attribute\ is\ not\ a\ valid\ double=
+Wrong\ header\ detected\ in\ file\ %s.\ Find\ \:\ %s,\ expected\ %s=
+Wrong\ header\ detected\ in\ file\ %s.\ Find\ \:\ %s,\ expected\ %s\ or\ %s=
Wrong\ header\ detected\ in\ file.\ Find\ \:\ %s,\ expected\ %s=
Wrong\ header\ detected\ in\ file.\ Find\ \:\ %s,\ expected\ %s\ or\ %s=
You\ must\ enter\ a\ campagne\ name.=
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-11-04 15:53:12 UTC (rev 168)
+++ trunk/coser-business/src/main/resources/i18n/coser-business-fr_FR.properties 2010-11-04 16:12:03 UTC (rev 169)
@@ -2,6 +2,7 @@
Can't\ create\ project=Impossible de cr\u00E9er le projet
Can't\ find\ line\ %s\ for\ deletion=
Can't\ find\ line\ %s\ for\ undeletion=
+Can't\ read\ file\ %s\ for\ category\ %s=Impossible de lire le fichier %s pour la cat\u00E9gorie %s \!
Can't\ read\ file\ '%s'.\ Check\ CSV\ file\ separator=Impossible de lire le fichier '%s'.\nMerci de v\u00E9rifier le s\u00E9parateur utilis\u00E9 est bien un point-virgule ';'
Can't\ replace\ data\ value.\ Expected\ %s\ but\ was\ %s=
Depth\ attribute\ is\ not\ a\ valid\ double=
@@ -16,8 +17,8 @@
Sex\ is\ mandatory=
Specy\ %s\ doesn't\ exist\ in\ referential=L'esp\u00E8ce %s n'existe pas dans le r\u00E9f\u00E9rentiel
Weight\ attribute\ is\ not\ a\ valid\ double=
-Wrong\ header\ detected\ in\ file.\ Find\ \:\ %s,\ expected\ %s=Mauvais ent\u00EAte de fichier d\u00E9tect\u00E9.\n\nTrouv\u00E9\u2009\:\n\t%s\nAttendu\u2009\:\n\t%s.
-Wrong\ header\ detected\ in\ file.\ Find\ \:\ %s,\ expected\ %s\ or\ %s=Mauvais ent\u00EAte de fichier d\u00E9tect\u00E9.\n\nTrouv\u00E9\u2009\:\n\t%s\nAttendu\u2009\:\n\t%s\nou\u2009\:\n\t%s.
+Wrong\ header\ detected\ in\ file\ %s.\ Find\ \:\ %s,\ expected\ %s=Mauvais ent\u00EAte de fichier d\u00E9tect\u00E9 dans\n%s.\n\nTrouv\u00E9\u2009\:\n\t%s\nAttendu\u2009\:\n\t%s.
+Wrong\ header\ detected\ in\ file\ %s.\ Find\ \:\ %s,\ expected\ %s\ or\ %s=Mauvais ent\u00EAte de fichier d\u00E9tect\u00E9 dans %s.\n\nTrouv\u00E9\u2009\:\n\t%s\nAttendu\u2009\:\n\t%s\nou\u2009\:\n\t%s.
You\ must\ enter\ a\ campagne\ name.=
You\ must\ enter\ a\ espece\ name.=
You\ must\ enter\ a\ haul\ name.=
1
0
r168 - in trunk: coser-business/src/main/java/fr/ifremer/coser coser-business/src/main/java/fr/ifremer/coser/bean 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-business/src/test/resources/csv/correct coser-ui/src/main/java/fr/ifremer/coser/ui coser-ui/src/main/java/fr/ifremer/coser/ui/selection coser-ui/src/main/resources/i18n
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
04 Nov '10
Author: chatellier
Date: 2010-11-04 15:53:12 +0000 (Thu, 04 Nov 2010)
New Revision: 168
Log:
Ajout du chargement du fichier de code types des especes.
Filtrage de la liste des especes par leur type.
Added:
trunk/coser-business/src/test/resources/csv/correct/testtypeespeces.csv
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/TypeSpecyListModel.java
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java
trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java
trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.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/CoserTestAbstract.java
trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListCheckBoxRenderer.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListRenderer.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListSelectionModel.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListTestModel.java
trunk/coser-ui/src/main/resources/i18n/coser-ui-fr_FR.properties
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -81,6 +81,11 @@
String result = getOption(CoserBusinessOption.REFERENCE_ZONES.key);
return result;
}
+
+ public String getReferenceTypeEspecesPath() {
+ String result = getOption(CoserBusinessOption.REFERENCE_TYPE_ESPECES.key);
+ return result;
+ }
public double getObervationNobsmin() {
double result = getOptionAsDouble(CoserBusinessOption.OBSERVATION_NOBSMIN.key);
@@ -95,6 +100,7 @@
REFERENCE_SPECIES("coser.reference.species", _("coser.config.reference.species.description"), "", String.class, false, false),
REFERENCE_ZONES("coser.reference.zones", _("coser.config.reference.zones.description"), "", String.class, false, false),
+ REFERENCE_TYPE_ESPECES("coser.reference.typeEspeces", _("coser.config.reference.typeEspeces.description"), "", String.class, false, false),
OBSERVATION_NOBSMIN("coser.observation.nobsmin", _("coser.config.observation.nobsmin.description"), "1.0", Double.class, false, false);
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -77,7 +77,8 @@
STRATA(n_("coser.business.category.strata"), "strata"),
HAUL(n_("coser.business.category.haul"), "haul"),
LENGTH(n_("coser.business.category.length"), "length"),
- REFTAX_SPECIES(n_("coser.business.category.reftax.species"), "reftaxSpecies", false);
+ REFTAX_SPECIES(n_("coser.business.category.reftax.species"), "reftaxSpecies", false),
+ TYPE_ESPECES(n_("coser.business.category.typeEspece"), "codeTypeEspeces", false);
protected String translationKey;
protected String storageFileName;
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 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Project.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -52,6 +52,10 @@
"C_Perm","NumSys","NivSys","C_VALIDE","L_VALIDE","AA_VALIDE","C_TxP\u00E8re","Taxa"
};
+ public static final String[] TYPE_ESPECE_HEADER = {
+ "Types","Commentaire","NumSys min","NumSys max"
+ };
+
public static final String PROPERTY_SELECTIONS="selections";
protected String name;
@@ -62,6 +66,9 @@
/** Reftax SIH. */
protected DataStorage refTaxSpecies;
+
+ /** Type especes */
+ protected DataStorage typeEspeces;
public String getName() {
return name;
@@ -105,6 +112,14 @@
this.refTaxSpecies = refTaxSpecies;
}
+ public DataStorage getTypeEspeces() {
+ return typeEspeces;
+ }
+
+ public void setTypeEspeces(DataStorage typeEspeces) {
+ this.typeEspeces = typeEspeces;
+ }
+
/**
* Force all container data clear to force free memory.
*/
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -173,6 +173,9 @@
case REFTAX_SPECIES:
enHeaders = Project.REFTAX_SPECIES_HEADER;
break;
+ case TYPE_ESPECES:
+ enHeaders = Project.TYPE_ESPECE_HEADER;
+ break;
}
if (frHeaders != null) {
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-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -43,6 +43,7 @@
import java.util.TreeSet;
import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -221,21 +222,25 @@
Project project = new Project();
project.setName(projectName);
- // load additional files
- File inputFile = new File(projectDirectory,
- Category.REFTAX_SPECIES.getStorageFileName() +
- CoserConstants.STORAGE_CSV_EXTENSION);
+ for (Category category : Category.values()) {
+ // load only additional files
+ if (!category.isDataCategory()) {
+ File inputFile = new File(projectDirectory,
+ category.getStorageFileName() +
+ CoserConstants.STORAGE_CSV_EXTENSION);
+
+ if (inputFile.isFile()) {
+ DataStorage dataStorage = importService.loadCSVFile(project, category, inputFile, false);
+ addProjectContent(project, null, category, dataStorage, false);
+ }
+ else {
+ // si on arrive ici et qu'un fichier de reference
+ // n'existe pas, c'est grave
+ throw new CoserBusinessException(_("Missing file %s", inputFile));
+ }
+ }
+ }
- if (inputFile.isFile()) {
- DataStorage dataStorage = importService.loadCSVFile(project, Category.REFTAX_SPECIES, inputFile, true);
- addProjectContent(project, null, Category.REFTAX_SPECIES, dataStorage, false);
- }
- else {
- // si on arrive ici et qu'un fichier original
- // n'existe pas, c'est grave
- throw new CoserBusinessException(_("Missing file %s", inputFile));
- }
-
// reload selection without data
Map<String, Selection> selections = new HashMap<String, Selection>();
File selectionsDirectory = new File(projectDirectory, CoserConstants.STORAGE_SELECTION_DIRECTORY);
@@ -600,6 +605,9 @@
case REFTAX_SPECIES:
project.setRefTaxSpecies(content);
break;
+ case TYPE_ESPECES:
+ project.setTypeEspeces(content);
+ break;
}
}
@@ -786,6 +794,31 @@
}
/**
+ * Retourne la liste des type d'especes definie dans le projet.
+ *
+ * @param project project to search into
+ * @return project species type
+ */
+ public List<String> getProjectSpeciesTypes(Project project) {
+ List<String> types = new ArrayList<String>();
+
+ // "Types","Commentaire","NumSys min","NumSys max"
+
+ Iterator<String[]> itTuples = project.getTypeEspeces().iterator();
+ itTuples.next(); // skip headers
+
+ while (itTuples.hasNext()) {
+ String[] tuple = itTuples.next();
+
+ String type = tuple[0];
+ types.add(type);
+ }
+
+ Collections.sort(types);
+ return types;
+ }
+
+ /**
* Find all defined year in model.
*
* Le parcours est fait sur le fichier "haul", c'est potentiellement
@@ -855,14 +888,18 @@
* Les especes sont determinées :
* - en lisant les traits pour determiner les traits à partir des zones
* - en lisant les captures pour determiner les especes à partir des traits
+ * - en filtrant la liste des especes
*
+ * @param project project
* @param container data container
* @param zoneName zone name
- * @param beginYear begin year (can be null)
- * @param endYear end year (can be null)
+ * @param beginYear begin year
+ * @param endYear end year
+ * @param filterSpecyType filterSpecyType
* @return species
*/
- public List<Specy> getProjectSpecies(AbstractDataContainer container, List<String> zoneName, Integer beginYear, Integer endYear) {
+ public List<String> getProjectSpecies(Project project, AbstractDataContainer container, List<String> zoneName,
+ Integer beginYear, Integer endYear, List<String> filterSpecyType) {
// first get traits list
Set<String> traits = new HashSet<String>();
@@ -892,7 +929,7 @@
}
// second get species with trait list
- SortedMap<String, Specy> result = new TreeMap<String, Specy>();
+ List<String> result = new ArrayList<String>();
itTuple = container.getCatch().iterator();
itTuple.next(); // skip header
while (itTuple.hasNext()) {
@@ -906,10 +943,8 @@
String haul = tuple[Catch.INDEX_HAUL];
if (intAnnee >= beginYear && intAnnee <= endYear && traits.contains(haul)) {
String species = tuple[Catch.INDEX_SPECIES];
- if (!result.containsKey(species)) {
- Specy specy = new Specy();
- specy.setName(species);
- result.put(species, specy);
+ if (!result.contains(species)) {
+ result.add(species);
}
}
}
@@ -920,8 +955,61 @@
}
}
- List<Specy> resultList = new ArrayList<Specy>(result.values());
- return resultList;
+ // third, filter specy list with specy types filter
+ if (CollectionUtils.isNotEmpty(filterSpecyType)) {
+ // load map SpecyName > numSys
+ Map<String, Integer> map = new HashMap<String, Integer>();
+ Iterator<String[]> refTaxIterator = project.getRefTaxSpecies().iterator();
+ refTaxIterator.next(); // skip header
+ while (refTaxIterator.hasNext()) {
+ // "C_Perm";"NumSys";"NivSys";"C_VALIDE";"L_VALIDE";"AA_VALIDE";"C_TxPère";"Taxa"
+ String[] tuple = refTaxIterator.next();
+ String specyName = tuple[3];
+ Integer iNumSys = Integer.valueOf(tuple[1]);
+ map.put(specyName, iNumSys);
+ }
+
+ // load specy type map SpecyTypeName > [min, max]
+ // iteration sur les type d'especes
+ Map<String, Integer[]> mapType = new HashMap<String, Integer[]>();
+ Iterator<String[]> itTypeSpecies = project.getTypeEspeces().iterator();
+ itTypeSpecies.next(); // skip header
+ while (itTypeSpecies.hasNext()) {
+ // "Types";"Commentaire";"NumSys min";"NumSys max"
+ String[] tuple = itTypeSpecies.next();
+ String specyType = tuple[0];
+
+ if (filterSpecyType.contains(specyType)) {
+ Integer iMinNumSys = Integer.valueOf(tuple[2]);
+ Integer iMaxNumSys = Integer.valueOf(tuple[3]);
+ mapType.put(specyType, new Integer[]{iMinNumSys, iMaxNumSys});
+ }
+ }
+
+ // iteration sur les especes trouvées
+ Iterator<String> itSpecies = result.iterator();
+ while (itSpecies.hasNext()) {
+ String specy = itSpecies.next();
+ Integer specyNumSys = map.get(specy);
+
+ // test si le numsys est dans les bornes d'un
+ // des type d'espece demandé
+ boolean foundInFilter = false;
+ for (Integer[] bornes : mapType.values()) {
+ if (specyNumSys >= bornes[0]
+ && specyNumSys <= bornes[1]){
+ foundInFilter = true;
+ }
+ }
+
+ if (!foundInFilter) {
+ itSpecies.remove();
+ }
+ }
+ }
+
+ Collections.sort(result);
+ return result;
}
/**
@@ -976,4 +1064,94 @@
return project;
}
+
+ /**
+ * Effort d'échantillonnage: nombre de traits par strate par année.
+ *
+ * lengthunique=function(x){length(unique(x))} # nombre d'éléments unique dans x
+ *
+ * haulcount=tapply(TRAITS$Trait,list(stratum=TRAITS$Strate,year=TRAITS$Anneer),FUN=lengthunique)
+ * haulcount[is.na(haulcount)]=0
+ * total=apply(haulcount,2,sum)
+ * haulcount=rbind(haulcount,total)
+ * if(language==2) tab=cbind(Strate=dimnames(haulcount)[[1]],haulcount)
+ * else tab=cbind(Stratum=dimnames(haulcount)[[1]],haulcount)
+ *
+ * @param project
+ * @param selection
+ */
+ public void getSamplingEffort(Project project, Selection selection) {
+
+ }
+
+ /**
+ * Occurrence : pourcentage des traits dans lesquels une espèce est présentes
+ *
+ * years=seq(min(CAPTURES$Annee), max(CAPTURES$Annee))
+ * nyears=length(years)
+ * catch=CAPTURES[CAPTURES$Nombre>0,] #prendre seulement données positives
+ *
+ * #compter nombre de traits par année où chaque espèce est présent
+ * occurence=tapply(catch$Trait,list(species=catch$Espece,year=catch$Annee),lengthunique)
+ * occurrence[is.na(occurence)]<-0
+ *
+ * rapport.func=function(x,v) {return (x/v);}
+ *
+ * #diviser nombre de traits avec présence par nombre total de traits
+ * pct.occur=apply(occurence,1,rapport.func,v=haulcount)# haulcount de 1)
+ * pct.occur=t(round(pct.occur*100,2)) # multiplier par 100 et arrondir à 2 décimales
+ *
+ * colnames(pct.occur)=colnames(haulcount) #affectation noms colonnes matrice
+ * rownames(pct.occur)=rownames(occur) #nom des espèces
+ *
+ * #calculerl l'occurrence moyenne à travers les années
+ * provi.oc=round(apply(pct.occur,1,mean),2)
+ * pct.occur=cbind(pct.occur,MeanOccurence=provi.oc)
+ *
+ * @param project
+ * @param selection
+ */
+ public void getOccurence(Project project, Selection selection) {
+
+ }
+
+ /**
+ * Densité: nombre par km2 par espèce par année
+ *
+ * years=sort(unique(TRAITS$Annee))
+ *
+ * #surface total pour toutes les strates
+ * totsurface=sum(STRATES$Surface)
+ *
+ * #ordonner table STRATES par nom des strates
+ * STRATES=STRATES[order(STRATES$Strate),]
+ *
+ * #combiner les 3 tables de données dans une seule table tab
+ * tab=merge(CAPTURES,STRATES,by.x=c("Annee","Trait"),by.y=c("Annee","Trait"))
+ * tab=merge(tab,TRAITS, by.x=c("Annee","Trait"),by.y=c("Annee","Trait"))
+ *
+ * species=sort(unique(CAPTURES$Espece))
+ *
+ * #calculer la densité moyenne par année par strate par espèce
+ * densparstrate=tapply(tab$Nombre/tab$SurfaceBalayee,list(tab$Espece, tab$Annee, tab$Strate), mean)
+ * densparstrate[is.na(densparstrate)]=0 # remplace NA par 0
+ *
+ * #surface par annee et strate et espèce
+ * surfaceparstrate=tapply(tab$Surface, list(tab$Espece, tab$Annee, tab$Strate), unique)
+ *
+ * #multiplier la densité par la surface de la strate pour obtenir nombre par année-strate
+ * nombreparstrate= surfaceparstrate* densparstrate
+ *
+ * #sommer nombre sur strates par année pour chaque espèce et diviser par surface totale
+ * densiteparannee=apply(nombreparstrate,c(1,2),sum)/totsurface
+ *
+ * #densité moyenne pour la période
+ * densitemoyenneespece=apply(densiteparanne,1,mean)
+ *
+ * @param project project
+ * @param selection selection
+ */
+ public void getDensity(Project project, Selection selection) {
+
+ }
}
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-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/main/resources/i18n/coser-business-en_GB.properties 2010-11-04 15:53:12 UTC (rev 168)
@@ -31,6 +31,7 @@
coser.business.category.length=Length
coser.business.category.reftax.species=
coser.business.category.strata=Stata
+coser.business.category.typeEspece=Specy type code
coser.business.chart.compareCatchLengthNumberTitle=
coser.business.common.number=
coser.business.common.year=
@@ -46,6 +47,7 @@
coser.config.observation.nobsmin.description=
coser.config.projects.directory.description=
coser.config.reference.species.description=
+coser.config.reference.typeEspeces.description=
coser.config.reference.zones.description=
coser.config.validator.directory.description=
lat\ attribute\ is\ not\ a\ valid\ double=
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-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/main/resources/i18n/coser-business-fr_FR.properties 2010-11-04 15:53:12 UTC (rev 168)
@@ -31,6 +31,7 @@
coser.business.category.length=Tailles
coser.business.category.reftax.species=Reftax (esp\u00E8ce)
coser.business.category.strata=Strates
+coser.business.category.typeEspece=Code type des esp\u00E8ces
coser.business.chart.compareCatchLengthNumberTitle=Comparaison des nombre dans Capture et Taille
coser.business.common.number=Nombre
coser.business.common.year=Ann\u00E9e
@@ -46,6 +47,7 @@
coser.config.observation.nobsmin.description=Nombre minimal d'observation
coser.config.projects.directory.description=Emplacement des projets Coser
coser.config.reference.species.description=Emplacement du fichier de r\u00E9f\u00E9rence des esp\u00E8ces
+coser.config.reference.typeEspeces.description=Emplacement du fichier de code type des esp\u00E8ces
coser.config.reference.zones.description=Emplacement du fichier de r\u00E9f\u00E9rence des zones
coser.config.validator.directory.description=Emplacement des fichiers de validations
lat\ attribute\ is\ not\ a\ valid\ double=
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-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -78,6 +78,15 @@
FileUtils.deleteDirectory(testDirectory);
}
+ /**
+ * Create an initialized project with csv file in test resources.
+ *
+ * Project is filled with control data (not selections).
+ *
+ * @param projectService
+ * @return
+ * @throws CoserBusinessException
+ */
protected Project createTestProject(ProjectService projectService) throws CoserBusinessException {
Project project = new Project();
@@ -88,6 +97,7 @@
File testLength = new File(CoserTestAbstract.class.getResource("/csv/correct/testlength.csv").getFile());
File testStrata = new File(CoserTestAbstract.class.getResource("/csv/correct/teststrata.csv").getFile());
File testReftax = new File(CoserTestAbstract.class.getResource("/csv/correct/testreftax.csv").getFile());
+ File testTypeEspeces = new File(CoserTestAbstract.class.getResource("/csv/correct/testtypeespeces.csv").getFile());
Map<Category, File> categoriesAndFile = new HashMap<Category, File>();
categoriesAndFile.put(Category.CATCH, testCatch);
@@ -95,7 +105,8 @@
categoriesAndFile.put(Category.LENGTH, testLength);
categoriesAndFile.put(Category.STRATA, testStrata);
categoriesAndFile.put(Category.REFTAX_SPECIES, testReftax);
-
+ categoriesAndFile.put(Category.TYPE_ESPECES, testTypeEspeces);
+
project = projectService.createProject(project, categoriesAndFile);
project = projectService.loadControlData(project);
Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java
===================================================================
--- trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -227,21 +227,21 @@
allZones.add("STR5");
allZones.add("STR6");
- List<Specy> species = service.getProjectSpecies(selection, allZones, 2010, 2011);
+ List<String> species = service.getProjectSpecies(project, selection, allZones, 2010, 2011, null);
Assert.assertEquals(4, species.size());
- species = service.getProjectSpecies(selection, allZones, 2011, 2011);
+ species = service.getProjectSpecies(project, selection, allZones, 2011, 2011, null);
Assert.assertEquals(4, species.size());
- species = service.getProjectSpecies(selection, allZones, 2009, 2009);
+ species = service.getProjectSpecies(project, selection, allZones, 2009, 2009, null);
Assert.assertEquals(0, species.size());
// test with no zones
- species = service.getProjectSpecies(selection, new ArrayList<String>(), 2010, 2011);
+ species = service.getProjectSpecies(project, selection, new ArrayList<String>(), 2010, 2011, null);
Assert.assertEquals(0, species.size());
// test with only one zone
- species = service.getProjectSpecies(selection, Collections.singletonList("STR6"), 2010, 2011);
+ species = service.getProjectSpecies(project, selection, Collections.singletonList("STR6"), 2010, 2011, null);
Assert.assertEquals(4, species.size());
}
Added: trunk/coser-business/src/test/resources/csv/correct/testtypeespeces.csv
===================================================================
--- trunk/coser-business/src/test/resources/csv/correct/testtypeespeces.csv (rev 0)
+++ trunk/coser-business/src/test/resources/csv/correct/testtypeespeces.csv 2010-11-04 15:53:12 UTC (rev 168)
@@ -0,0 +1,4 @@
+"Types";"Commentaire";"NumSys min";"NumSys max"
+"Type1";;"00001";"00002"
+"Type2";;"00003";"00005"
+"Type3";;"00006";"00010"
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -150,6 +150,7 @@
modelBuilder.addCategory(_("coser.config.category.main"), _("coser.config.category.main.description"));
modelBuilder.addOption(CoserBusinessConfig.CoserBusinessOption.REFERENCE_SPECIES);
modelBuilder.addOption(CoserBusinessConfig.CoserBusinessOption.REFERENCE_ZONES);
+ modelBuilder.addOption(CoserBusinessConfig.CoserBusinessOption.REFERENCE_TYPE_ESPECES);
// category control
modelBuilder.addCategory(_("coser.config.category.control"), _("coser.config.category.control.description"));
@@ -225,12 +226,16 @@
reftaxSpeciesPath = config.getReferenceSpeciesPath();
}
+ // get correct codeTypeEspece file to use
+ String codeTypeEspecePath = config.getReferenceTypeEspecesPath();
+
// convert to file
File capturesFile = new File(capturesPath);
File stratesFile = new File(stratesPath);
File traitsFile = new File(traitsPath);
File taillesFile = new File(taillesPath);
File reftaxSpeciesFile = new File(reftaxSpeciesPath);
+ File codeTypeEspeceFile = new File(codeTypeEspecePath);
// package in map
final Map<Category, File> fileToLoad = new HashMap<Category, File>();
@@ -239,6 +244,7 @@
fileToLoad.put(Category.LENGTH, taillesFile);
fileToLoad.put(Category.STRATA, stratesFile);
fileToLoad.put(Category.REFTAX_SPECIES, reftaxSpeciesFile);
+ fileToLoad.put(Category.TYPE_ESPECES, codeTypeEspeceFile);
// disable create button
projectView.getCreateProjectButton().setEnabled(false);
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-11-04 15:53:12 UTC (rev 168)
@@ -109,7 +109,10 @@
<row>
<cell fill="horizontal" weightx="1" weighty="1" columns="2">
<JScrollPane>
- <JList />
+ <TypeSpecyListModel id="typeSpecyModel" constructorParams="this" />
+ <JList id="typeSpecyList" model="{typeSpecyModel}"
+ selectionModel="{new OneClicListSelectionModel(typeSpecyList.getSelectionModel(), typeSpecyModel)}"
+ onValueChanged="getHandler().updateSelectionSpecies(this)"/>
</JScrollPane>
</cell>
</row>
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-04 13:35:35 UTC (rev 167)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -31,11 +31,9 @@
import java.util.ArrayList;
import java.util.List;
-import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
-import javax.swing.event.ListSelectionEvent;
import jaxx.runtime.JAXXUtil;
@@ -87,14 +85,16 @@
}
/**
- * Rafraichit la liste des especes avec les dates sélectionnées.
+ * Rafraichit la liste des especes avec les dates sélectionnées
+ * et les zones selectionnées ET filtrées par la liste
+ * des type d'especes.
*
* Appelé lorsque la selection de la liste des zones change.
*
* @param view view
*/
public void updateSelectionSpecies(SelectionDetailsView view) {
- //Project project = view.getContextValue(Project.class);
+ Project project = view.getContextValue(Project.class);
Selection selection = view.getContextValue(Selection.class);
ProjectService projectService = view.getContextValue(ProjectService.class);
@@ -105,12 +105,19 @@
zones.add((String)selectedZone);
}
+ // get selected specy types
+ Object[] selectedSpecyTypes = view.getTypeSpecyList().getSelectedValues();
+ List<String> specyTypes = new ArrayList<String>();
+ for (Object selectedSpecyType : selectedSpecyTypes) {
+ specyTypes.add((String)selectedSpecyType);
+ }
+
Integer beginYear = (Integer)view.getSelectionDetailsBeginYearField().getSelectedItem();
Integer endYear = (Integer)view.getSelectionDetailsEndYearField().getSelectedItem();
// il est possible que l'evenement fasse suite a une seule des selections
if (beginYear != null && endYear != null) {
- List<Specy> species = projectService.getProjectSpecies(selection, zones, beginYear, endYear);
+ List<String> species = projectService.getProjectSpecies(project, selection, zones, beginYear, endYear, specyTypes);
view.getSpecyListModel().setSpecy(species);
}
}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListCheckBoxRenderer.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListCheckBoxRenderer.java 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListCheckBoxRenderer.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -61,16 +61,16 @@
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
- Specy specy = (Specy)value;
+ String specy = (String)value;
//JCheckBox comboBox = new JCheckBox();
String stringValue = null;
- if (displayOccurrenceAndDensity) {
+ /*if (displayOccurrenceAndDensity) {
stringValue = "<html>" + specy.getName() + " <span style='font-size:85%;color:gray;'>(X=44, Y=21)</span><html>";
}
- else {
- stringValue = specy.getName();
- }
+ else {*/
+ stringValue = specy;
+ //}
//comboBox.setText(stringValue);
return super.getListCellRendererComponent(list, stringValue, index, isSelected, cellHasFocus);
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListRenderer.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListRenderer.java 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListRenderer.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -50,11 +50,11 @@
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
- Specy specy = (Specy)value;
- String stringValue = specy.getName();
+ String specy = (String)value;
+ //String stringValue = specy.getName();
//JCheckBox checkBox = new JCheckBox(stringValue);
//checkBox.setSelected(isSelected);
- return super.getListCellRendererComponent(list, stringValue, index, isSelected, cellHasFocus);
+ return super.getListCellRendererComponent(list, specy, index, isSelected, cellHasFocus);
}
}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListSelectionModel.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListSelectionModel.java 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListSelectionModel.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -90,14 +90,12 @@
@Override
public void contentsChanged(ListDataEvent e) {
clearSelection();
- System.out.println("clear : " + selectedObjects);
Iterator<Object> itO = selectedObjects.iterator();
while (itO.hasNext()) {
Object o = itO.next();
int index = specyListModel.getIndexOf(o);
-
- System.out.println(((Specy)o).getName() + " index = " + index);
+
if (index >= 0) {
addSelectionInterval(index, index);
}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListTestModel.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListTestModel.java 2010-11-04 13:35:35 UTC (rev 167)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpecyListTestModel.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -54,9 +54,9 @@
private final static Log log = LogFactory.getLog(SpecyListTestModel.class);
- protected List<Specy> species = new ArrayList<Specy>();
+ protected List<String> species = new ArrayList<String>();
- public void setSpecy(List<Specy> species) {
+ public void setSpecy(List<String> species) {
this.species = species;
fireContentsChanged(this, 0, species.size());
}
@@ -99,7 +99,7 @@
Object[] selectedValues = source.getSelectedValues();
species.clear();
for (Object selectedValue : selectedValues) {
- Specy specy = (Specy)selectedValue;
+ String specy = (String)selectedValue;
species.add(specy);
}
fireContentsChanged(this, 0, species.size() - 1);
Added: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/TypeSpecyListModel.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/TypeSpecyListModel.java (rev 0)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/TypeSpecyListModel.java 2010-11-04 15:53:12 UTC (rev 168)
@@ -0,0 +1,82 @@
+/*
+ * #%L
+ *
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 Ifremer, Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser 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 Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+
+package fr.ifremer.coser.ui.selection;
+
+import java.util.List;
+
+import javax.swing.AbstractListModel;
+
+import fr.ifremer.coser.bean.Project;
+import fr.ifremer.coser.services.ProjectService;
+
+/**
+ * Affiche la liste des types d'especes définie dans le projet.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class TypeSpecyListModel extends AbstractListModel {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 441910182067909029L;
+
+ protected SelectionDetailsView view;
+
+ protected List<String> types;
+
+ public TypeSpecyListModel(SelectionDetailsView view) {
+ super();
+ this.view = view;
+ }
+
+ protected List<String> getTypes() {
+ if (types == null) {
+ Project project = view.getContextValue(Project.class);
+ ProjectService service = view.getContextValue(ProjectService.class);
+ types = service.getProjectSpeciesTypes(project);
+ }
+ return types;
+ }
+
+ /*
+ * @see javax.swing.ListModel#getSize()
+ */
+ @Override
+ public int getSize() {
+ return getTypes().size();
+ }
+
+ /*
+ * @see javax.swing.ListModel#getElementAt(int)
+ */
+ @Override
+ public Object getElementAt(int index) {
+ return getTypes().get(index);
+ }
+}
Property changes on: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/TypeSpecyListModel.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
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-04 13:35:35 UTC (rev 167)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui-fr_FR.properties 2010-11-04 15:53:12 UTC (rev 168)
@@ -97,7 +97,7 @@
coser.ui.selection.details.showSpreciesTip=Afficher la table des esp\u00E8ces
coser.ui.selection.details.species=Esp\u00E8ces \:
coser.ui.selection.details.technicalComment=Commentaire technique
-coser.ui.selection.details.type=Type \:
+coser.ui.selection.details.type=Filtrer par type \:
coser.ui.selection.details.zone=Zone \:
coser.ui.selection.filter.density=Densit\u00E9 \:
coser.ui.selection.filter.filter=Filtrer
1
0
r167 - in trunk: coser-business/src/main/java/fr/ifremer/coser/services coser-business/src/test/java/fr/ifremer/coser/services coser-ui/src/main/java/fr/ifremer/coser/ui coser-ui/src/main/java/fr/ifremer/coser/ui/selection
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
04 Nov '10
Author: chatellier
Date: 2010-11-04 13:35:35 +0000 (Thu, 04 Nov 2010)
New Revision: 167
Log:
Rafraichissement de la liste des especes ?\195?\160 partir de la liste des zones.
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
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-11-04 11:27:22 UTC (rev 166)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-11-04 13:35:35 UTC (rev 167)
@@ -32,9 +32,11 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.SortedMap;
import java.util.SortedSet;
import java.util.TreeMap;
@@ -850,27 +852,60 @@
*
* Used in selection ui.
*
+ * Les especes sont determinées :
+ * - en lisant les traits pour determiner les traits à partir des zones
+ * - en lisant les captures pour determiner les especes à partir des traits
+ *
* @param container data container
+ * @param zoneName zone name
* @param beginYear begin year (can be null)
* @param endYear end year (can be null)
* @return species
*/
- public List<Specy> getProjectSpecies(AbstractDataContainer container, Integer beginYear, Integer endYear) {
-
+ public List<Specy> getProjectSpecies(AbstractDataContainer container, List<String> zoneName, Integer beginYear, Integer endYear) {
+
+ // first get traits list
+ Set<String> traits = new HashSet<String>();
+ Iterator<String[]> itTuple = container.getHaul().iterator();
+ itTuple.next(); // skip header
+ while (itTuple.hasNext()) {
+ String[] tuple = itTuple.next();
+
+ // Campagne;Annee;Trait;Mois;Strate;SurfaceBalayee;Lat;Long;ProfMoy
+ String annee = tuple[Haul.INDEX_YEAR];
+ try {
+ int intAnnee = Integer.parseInt(annee);
+
+ if (intAnnee >= beginYear && intAnnee <= endYear) {
+ String strataName = tuple[Haul.INDEX_STRATUM];
+ if (zoneName.contains(strataName)) {
+ String traitsName = tuple[Haul.INDEX_HAUL];
+ traits.add(traitsName);
+ }
+ }
+ }
+ catch (NumberFormatException ex) {
+ if (log.isWarnEnabled()) {
+ log.warn("Can't parse year '" + annee + "' as int, can't happen with controled data");
+ }
+ }
+ }
+
+ // second get species with trait list
SortedMap<String, Specy> result = new TreeMap<String, Specy>();
-
- Iterator<String[]> itTuple = container.getCatch().iterator();
+ itTuple = container.getCatch().iterator();
itTuple.next(); // skip header
while (itTuple.hasNext()) {
String[] tuple = itTuple.next();
- String species = tuple[Catch.INDEX_SPECIES];
// "Campagne","Annee","Trait","Espece","Nombre","Poids"
String annee = tuple[Catch.INDEX_YEAR];
try {
int intAnnee = Integer.parseInt(annee);
- if (intAnnee >= beginYear && intAnnee <= endYear) {
+ String haul = tuple[Catch.INDEX_HAUL];
+ if (intAnnee >= beginYear && intAnnee <= endYear && traits.contains(haul)) {
+ String species = tuple[Catch.INDEX_SPECIES];
if (!result.containsKey(species)) {
Specy specy = new Specy();
specy.setName(species);
Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java
===================================================================
--- trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java 2010-11-04 11:27:22 UTC (rev 166)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/ProjectServiceTest.java 2010-11-04 13:35:35 UTC (rev 167)
@@ -26,6 +26,8 @@
package fr.ifremer.coser.services;
import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -216,15 +218,31 @@
public void testProjectSpecies() throws CoserBusinessException {
Project project = createTestProject(service);
Selection selection = service.initProjectSelection(project);
-
- List<Specy> species = service.getProjectSpecies(selection, 2010, 2011);
+
+ List<String> allZones = new ArrayList<String>();
+ allZones.add("STR1");
+ allZones.add("STR2");
+ allZones.add("STR3");
+ allZones.add("STR4");
+ allZones.add("STR5");
+ allZones.add("STR6");
+
+ List<Specy> species = service.getProjectSpecies(selection, allZones, 2010, 2011);
Assert.assertEquals(4, species.size());
- species = service.getProjectSpecies(selection, 2011, 2011);
+ species = service.getProjectSpecies(selection, allZones, 2011, 2011);
Assert.assertEquals(4, species.size());
- species = service.getProjectSpecies(selection, 2009, 2009);
+ species = service.getProjectSpecies(selection, allZones, 2009, 2009);
Assert.assertEquals(0, species.size());
+
+ // test with no zones
+ species = service.getProjectSpecies(selection, new ArrayList<String>(), 2010, 2011);
+ Assert.assertEquals(0, species.size());
+
+ // test with only one zone
+ species = service.getProjectSpecies(selection, Collections.singletonList("STR6"), 2010, 2011);
+ Assert.assertEquals(4, species.size());
}
/**
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-04 11:27:22 UTC (rev 166)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-04 13:35:35 UTC (rev 167)
@@ -36,7 +36,6 @@
import java.util.Locale;
import java.util.Map;
-import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-11-04 11:27:22 UTC (rev 166)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-11-04 13:35:35 UTC (rev 167)
@@ -89,7 +89,8 @@
<JList id="zoneList" model="{selectionZoneModel}"
cellRenderer="{new SelectionZoneListRenderer()}"
enabled="{selectionDetailsBeginYearField.getSelectedItem() != null && selectionDetailsEndYearField.getSelectedItem() != null}"
- selectionModel="{new OneClicListSelectionModel(zoneList.getSelectionModel(), selectionZoneModel)}" />
+ selectionModel="{new OneClicListSelectionModel(zoneList.getSelectionModel(), selectionZoneModel)}"
+ onValueChanged="getHandler().updateSelectionSpecies(this)"/>
</JScrollPane>
</cell>
</row>
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-04 11:27:22 UTC (rev 166)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-11-04 13:35:35 UTC (rev 167)
@@ -28,6 +28,7 @@
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
+import java.util.ArrayList;
import java.util.List;
import javax.swing.JList;
@@ -68,18 +69,8 @@
* @param event event de la selection (combo)
*/
public void updateSelectionDateData(SelectionDetailsView view, ActionEvent event) {
- updateSelectionZone(view);
- updateSelectionSpecies(view);
- }
-
- /**
- * Rafraichit la liste des zones avec les dates selectionnees.
- *
- * @param view view
- */
- public void updateSelectionZone(SelectionDetailsView view) {
//Project project = view.getContextValue(Project.class);
- Selection seletion = view.getContextValue(Selection.class);
+ Selection selection = view.getContextValue(Selection.class);
ProjectService projectService = view.getContextValue(ProjectService.class);
Integer beginYear = (Integer)view.getSelectionDetailsBeginYearField().getSelectedItem();
@@ -87,27 +78,39 @@
// il est possible que l'evenement fasse suite a une seule des selections
if (beginYear != null && endYear != null) {
- List<String> zone = projectService.getProjectZone(seletion, beginYear, endYear);
- view.getSelectionZoneModel().setZones(zone);
+ if (log.isDebugEnabled()) {
+ log.debug("Refreshing zones list");
+ }
+ List<String> zones = projectService.getProjectZone(selection, beginYear, endYear);
+ view.getSelectionZoneModel().setZones(zones);
}
}
-
+
/**
- * Rafraichit la liste des especes avec les dates selectionnees.
+ * Rafraichit la liste des especes avec les dates sélectionnées.
*
+ * Appelé lorsque la selection de la liste des zones change.
+ *
* @param view view
*/
public void updateSelectionSpecies(SelectionDetailsView view) {
//Project project = view.getContextValue(Project.class);
- Selection seletion = view.getContextValue(Selection.class);
+ Selection selection = view.getContextValue(Selection.class);
ProjectService projectService = view.getContextValue(ProjectService.class);
-
+
+ // get selected zones as list
+ Object[] selectedZones = view.getZoneList().getSelectedValues();
+ List<String> zones = new ArrayList<String>(selectedZones.length);
+ for (Object selectedZone : selectedZones) {
+ zones.add((String)selectedZone);
+ }
+
Integer beginYear = (Integer)view.getSelectionDetailsBeginYearField().getSelectedItem();
Integer endYear = (Integer)view.getSelectionDetailsEndYearField().getSelectedItem();
// il est possible que l'evenement fasse suite a une seule des selections
if (beginYear != null && endYear != null) {
- List<Specy> species = projectService.getProjectSpecies(seletion, beginYear, endYear);
+ List<Specy> species = projectService.getProjectSpecies(selection, zones, beginYear, endYear);
view.getSpecyListModel().setSpecy(species);
}
}
1
0
r166 - in trunk/coser-ui/src/main: java/fr/ifremer/coser/ui java/fr/ifremer/coser/ui/selection resources/i18n resources/icons
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
04 Nov '10
Author: chatellier
Date: 2010-11-04 11:27:22 +0000 (Thu, 04 Nov 2010)
New Revision: 166
Log:
Ajout d'action pour pouvoir afficher les bonnes informations de d?\195?\169cisions
Added:
trunk/coser-ui/src/main/resources/icons/map.png
trunk/coser-ui/src/main/resources/icons/table.png
Modified:
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx
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/CoserFrameHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-04 11:26:50 UTC (rev 165)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2010-11-04 11:27:22 UTC (rev 166)
@@ -407,8 +407,7 @@
try {
File file = new File("/home/chatellier/tmp/coser/zones.png");
- ImageIcon icon = new ImageIcon(file.toURI().toURL());
- selectionView.getSelectionDetailsTab().getZonesMap().setIcon(icon);
+ selectionView.getSelectionDetailsTab().getZonesMap().setImage(file);
} catch(Exception e) {
e.printStackTrace();
@@ -466,8 +465,7 @@
selectionView.setHandler(new SelectionHandler());
File file = new File("/home/chatellier/tmp/coser/zones.png");
- ImageIcon icon = new ImageIcon(file.toURI().toURL());
- selectionView.getSelectionDetailsTab().getZonesMap().setIcon(icon);
+ selectionView.getSelectionDetailsTab().getZonesMap().setImage(file);
setMainComponent(selectionView);
} catch (CoserBusinessException ex) {
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-11-04 11:26:50 UTC (rev 165)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-11-04 11:27:22 UTC (rev 166)
@@ -74,9 +74,13 @@
</cell>
</row>
<row>
- <cell fill="horizontal" columns="4">
+ <cell fill="horizontal" columns="3">
<JLabel text="coser.ui.selection.details.zone" />
</cell>
+ <cell anchor="east">
+ <JButton icon="map.png" toolTipText="coser.ui.selection.details.showMapTip"
+ onActionPerformed='getDetailDesisionPanelLayout().show(getDetailDesisionPanel(), "ZONEMAP");' />
+ </cell>
</row>
<row>
<cell weighty="2" fill="both" columns="4">
@@ -94,26 +98,22 @@
<Table border='{BorderFactory.createTitledBorder(_("coser.ui.selection.details.species"))}'>
<row>
<cell fill="horizontal">
- <JLabel text="coser.ui.selection.details.gender" />
+ <JLabel text="coser.ui.selection.details.type" />
</cell>
- <cell fill="horizontal">
- <JLabel text="coser.ui.selection.details.family" />
+ <cell anchor="east">
+ <JButton icon="table.png" toolTipText="coser.ui.selection.details.showSpreciesTip"
+ onActionPerformed='getDetailDesisionPanelLayout().show(getDetailDesisionPanel(), "SPECIESDATA");' />
</cell>
</row>
<row>
- <cell fill="horizontal" weightx="1" weighty="1">
+ <cell fill="horizontal" weightx="1" weighty="1" columns="2">
<JScrollPane>
<JList />
</JScrollPane>
</cell>
- <cell fill="horizontal" weightx="1" weighty="1">
- <JScrollPane>
- <JList />
- </JScrollPane>
- </cell>
</row>
<row>
- <cell weighty="2" fill="both" columns="5">
+ <cell weighty="2" fill="both" columns="2">
<JScrollPane>
<SpecyListTestModel id="specyListModel" />
<JList id="specyList" model="{specyListModel}"
@@ -150,9 +150,16 @@
</Table>
</cell>
<cell weightx="4" weighty="1" fill="both" rows="2">
- <JScrollPane id="zonesScrollPane">
- <JLabel id="zonesMap" />
- </JScrollPane>
+ <CardLayout id="detailDesisionPanelLayout" />
+ <JPanel id="detailDesisionPanel" layout="{detailDesisionPanelLayout}">
+ <JScrollPane id="zonesScrollPane" constraints='"ZONEMAP"'>
+ <JXImageView id="zonesMap" />
+ </JScrollPane>
+ <JScrollPane constraints='"SPECIESDATA"'>
+ <JTable>
+ </JTable>
+ </JScrollPane>
+ </JPanel>
</cell>
</row>
</Table>
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-04 11:26:50 UTC (rev 165)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-11-04 11:27:22 UTC (rev 166)
@@ -112,19 +112,7 @@
}
}
-
/**
- * Mise à jour des autre liste qui dépendent de cette premiere liste.
- *
- * @param view
- * @param event
- */
- public void updateSpecySelection(SelectionDetailsView view, ListSelectionEvent event) {
- JList source = (JList)event.getSource();
-
- }
-
- /**
* Affiche un menu contextuel lors du clic (droit) sur la liste des especes.
*
* @param view view
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-04 11:26:50 UTC (rev 165)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui-en_GB.properties 2010-11-04 11:27:22 UTC (rev 166)
@@ -39,6 +39,7 @@
coser.ui.error.htmlmessage=An error occurs \: %s
coser.ui.error.title=Global application error
coser.ui.graph.compareNumberCatchSize=
+coser.ui.graph.lengthStructure=
coser.ui.mainframe.menu.configuration=Configuration
coser.ui.mainframe.menu.file=File
coser.ui.mainframe.menu.locale.fr=Fran\u00E7ais
@@ -92,8 +93,11 @@
coser.ui.selection.details.name=Selection name \:
coser.ui.selection.details.otherComment=Other comments
coser.ui.selection.details.saveSelection=Save selection
+coser.ui.selection.details.showMapTip=
+coser.ui.selection.details.showSpreciesTip=
coser.ui.selection.details.species=Species \:
coser.ui.selection.details.technicalComment=Technical comment
+coser.ui.selection.details.type=
coser.ui.selection.details.zone=Zone \:
coser.ui.selection.filter.density=Density \:
coser.ui.selection.filter.filter=Filter
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-04 11:26:50 UTC (rev 165)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui-fr_FR.properties 2010-11-04 11:27:22 UTC (rev 166)
@@ -39,6 +39,7 @@
coser.ui.error.htmlmessage=Une erreur s'est produite \: %s
coser.ui.error.title=Erreur globale
coser.ui.graph.compareNumberCatchSize=Comparaison Captures/Tailles
+coser.ui.graph.lengthStructure=Structures en taille
coser.ui.mainframe.menu.configuration=Configuration
coser.ui.mainframe.menu.file=Fichier
coser.ui.mainframe.menu.locale.fr=Fran\u00E7ais
@@ -92,8 +93,11 @@
coser.ui.selection.details.name=Nom de la s\u00E9lection \:
coser.ui.selection.details.otherComment=Autre commentaire
coser.ui.selection.details.saveSelection=Sauvegarder la s\u00E9lection
+coser.ui.selection.details.showMapTip=Afficher la carte des zones
+coser.ui.selection.details.showSpreciesTip=Afficher la table des esp\u00E8ces
coser.ui.selection.details.species=Esp\u00E8ces \:
coser.ui.selection.details.technicalComment=Commentaire technique
+coser.ui.selection.details.type=Type \:
coser.ui.selection.details.zone=Zone \:
coser.ui.selection.filter.density=Densit\u00E9 \:
coser.ui.selection.filter.filter=Filtrer
Added: trunk/coser-ui/src/main/resources/icons/map.png
===================================================================
(Binary files differ)
Property changes on: trunk/coser-ui/src/main/resources/icons/map.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-ui/src/main/resources/icons/table.png
===================================================================
(Binary files differ)
Property changes on: trunk/coser-ui/src/main/resources/icons/table.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
1
0
r165 - in trunk/coser-ui/src/main: java/fr/ifremer/coser/ui/control resources/icons
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
by chatellier@users.labs.libre-entreprise.org 04 Nov '10
04 Nov '10
Author: chatellier
Date: 2010-11-04 11:26:50 +0000 (Thu, 04 Nov 2010)
New Revision: 165
Log:
Modification des icones save et graphes
Added:
trunk/coser-ui/src/main/resources/icons/chart_curve.png
trunk/coser-ui/src/main/resources/icons/disk.png
Removed:
trunk/coser-ui/src/main/resources/icons/bullet_disk.png
Modified:
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlGraphDialog.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlView.jaxx
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlGraphDialog.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlGraphDialog.jaxx 2010-11-04 10:15:16 UTC (rev 164)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlGraphDialog.jaxx 2010-11-04 11:26:50 UTC (rev 165)
@@ -33,7 +33,7 @@
</cell>
<cell fill="horizontal">
<SpecyComboModel id="specyComboModel" />
- <JComboBox model="{specyComboModel}" onActionPerformed="getHandler().updateGraphSpecy(this)" />
+ <JComboBox model="{specyComboModel}" onActionPerformed="getHandler().updateCompareNumberCatchGraph(this)" />
</cell>
</row>
<row fill="both" weightx="1" weighty="1" columns="2">
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-11-04 10:15:16 UTC (rev 164)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2010-11-04 11:26:50 UTC (rev 165)
@@ -742,7 +742,7 @@
*
* @param view view
*/
- public void displayGraph(ControlView view) {
+ public void displayCompareNumberCatchGraph(ControlView view) {
ProjectService projectService = view.getContextValue(ProjectService.class);
Project project = view.getContextValue(Project.class);
List<String> species = projectService.getProjectSpecies(project.getControl());
@@ -750,18 +750,28 @@
ControlGraphDialog dialog = new ControlGraphDialog(view);
dialog.setHandler(this);
dialog.getSpecyComboModel().setSpecy(species);
- updateGraphSpecy(dialog);
+ updateCompareNumberCatchGraph(dialog);
dialog.pack();
dialog.setLocationRelativeTo(view);
dialog.setVisible(true);
}
/**
+ * Display data graph, initialized with graph for first specy
+ * selected in specyComboModel.
+ *
+ * @param view view
+ */
+ public void displayLengthStructureGraph(ControlView view) {
+
+ }
+
+ /**
* Met a jour le graphique lorsque la selection de l'espece change.
*
* @param view view
*/
- public void updateGraphSpecy(ControlGraphDialog view) {
+ public void updateCompareNumberCatchGraph(ControlGraphDialog view) {
ChartService chartService = view.getContextValue(ChartService.class);
Project project = view.getContextValue(Project.class);
String specyName = (String)view.getSpecyComboModel().getSelectedItem();
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlView.jaxx 2010-11-04 10:15:16 UTC (rev 164)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlView.jaxx 2010-11-04 11:26:50 UTC (rev 165)
@@ -39,7 +39,7 @@
<row>
<cell fill="horizontal" insets="0" anchor="west" columns="2">
<JToolBar floatable="false">
- <JButton id="saveButton" icon="bullet_disk.png"
+ <JButton id="saveButton" icon="disk.png"
text="coser.ui.control.save" enabled="false"
onActionPerformed="getHandler().saveControl(this)" />
<JSeparator />
@@ -48,8 +48,10 @@
renderer="{new fr.ifremer.coser.ui.control.ControlCategoryListRenderer()}"
onActionPerformed="getHandler().categoryChanged(this, event)"/>
<JSeparator />
- <JButton icon="chart_bar.png" text="coser.ui.graph.compareNumberCatchSize"
- onActionPerformed="getHandler().displayGraph(this)"/>
+ <JButton icon="chart_curve.png" text="coser.ui.graph.compareNumberCatchSize"
+ onActionPerformed="getHandler().displayCompareNumberCatchGraph(this)"/>
+ <JButton icon="chart_bar.png" text="coser.ui.graph.lengthStructure"
+ onActionPerformed="getHandler().displayLengthStructureGraph(this)"/>
</JToolBar>
</cell>
</row>
Deleted: trunk/coser-ui/src/main/resources/icons/bullet_disk.png
===================================================================
(Binary files differ)
Added: trunk/coser-ui/src/main/resources/icons/chart_curve.png
===================================================================
(Binary files differ)
Property changes on: trunk/coser-ui/src/main/resources/icons/chart_curve.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-ui/src/main/resources/icons/disk.png
===================================================================
(Binary files differ)
Property changes on: trunk/coser-ui/src/main/resources/icons/disk.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
1
0