Author: echatellier Date: 2012-08-14 15:16:42 +0200 (Tue, 14 Aug 2012) New Revision: 1045 Url: http://forge.codelutin.com/repositories/revision/coser/1045 Log: fixes #1321: Ajouter un warning sur les tailles aberrantes par esp?\195?\168ce Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.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-ui/src/main/java/fr/ifremer/coser/ui/option/ConfigurationHandler.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/option/ConfigurationView.jaxx Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java 2012-08-14 12:37:26 UTC (rev 1044) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java 2012-08-14 13:16:42 UTC (rev 1045) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric + * Copyright (C) 2010 - 2012 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 @@ -158,6 +158,14 @@ setOption(CoserBusinessOption.CONTROL_TYPE_FISH.key, controlTypeFish); } + public void setStandardDeviationToAverage(int deviationToAverage) { + setOption(CoserBusinessOption.CONTROL_STANDARD_DEVIATION_TO_AVERAGE.key, String.valueOf(deviationToAverage)); + } + + public int getStandardDeviationToAverage() { + return getOptionAsInt(CoserBusinessOption.CONTROL_STANDARD_DEVIATION_TO_AVERAGE.key); + } + public double getSelectionOccurrenceFilter() { double result = getOptionAsDouble(CoserBusinessOption.SELECTION_FILTER_OCCURRENCE.key); return result; @@ -229,95 +237,57 @@ return emails; } - public static enum CoserBusinessOption implements OptionDef { + public static enum CoserBusinessOption { - DATABASE_DIRECTORY("coser.database.directory", _("coser.config.database.directory.description"), "${user.home}" + File.separator + "coser", String.class, false, false), - PROJECTS_DIRECTORY("coser.projects.directory", _("coser.config.projects.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "projects", String.class, false, false), - VALIDATOR_DIRECTORY("coser.validator.directory", _("coser.config.validator.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "validators", String.class, false, false), + DATABASE_DIRECTORY("coser.database.directory", _("coser.config.database.directory.description"), "${user.home}" + File.separator + "coser"), + PROJECTS_DIRECTORY("coser.projects.directory", _("coser.config.projects.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "projects"), + VALIDATOR_DIRECTORY("coser.validator.directory", _("coser.config.validator.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "validators"), - SMTP_HOST("coser.smtp.host", _("coser.config.smtp.host.description"), "smtp", String.class, false, false), - LOCALE("coser.locale", _("coser.config.locale.description"), Locale.FRANCE.toString(), Locale.class, false, false), + SMTP_HOST("coser.smtp.host", _("coser.config.smtp.host.description"), "smtp"), + LOCALE("coser.locale", _("coser.config.locale.description"), Locale.FRANCE.toString()), - REFERENCE_SPECIES("coser.reference.species", _("coser.config.reference.species.description"), "", String.class, false, false), - REFERENCE_TYPE_ESPECES("coser.reference.typeSpecies", _("coser.config.reference.typeSpecies.description"), "", String.class, false, false), + REFERENCE_SPECIES("coser.reference.species", _("coser.config.reference.species.description"), ""), + REFERENCE_TYPE_ESPECES("coser.reference.typeSpecies", _("coser.config.reference.typeSpecies.description"), ""), - CONTROL_NOBSMIN("coser.control.nobsmin", _("coser.config.control.nobsmin.description"), "1.0", Double.class, false, false), - CONTROL_DIFF_CATCH_LENGTH("coser.control.diffcatchlength", _("coser.config.control.diffcatchlength.description"), "5.0", Double.class, false, false), - CONTROL_TYPE_FISH("coser.control.typeFish", _("coser.config.control.typeFish.description"), "Pisces + Agnatha", String.class, false, false), - SELECTION_FILTER_OCCURRENCE("coser.selection.occurrenceFilter", _("coser.config.selection.occurrenceFilter.description"), "5.0", Double.class, false, false), - SELECTION_FILTER_DENSITY("coser.selection.densityFilter", _("coser.config.selection.densityFilter.description"), "5.0", Double.class, false, false), + CONTROL_NOBSMIN("coser.control.nobsmin", _("coser.config.control.nobsmin.description"), "1.0"), + CONTROL_DIFF_CATCH_LENGTH("coser.control.diffcatchlength", _("coser.config.control.diffcatchlength.description"), "5.0"), + CONTROL_TYPE_FISH("coser.control.typeFish", _("coser.config.control.typeFish.description"), "Pisces + Agnatha"), + CONTROL_STANDARD_DEVIATION_TO_AVERAGE("coser.control.standarddeviationtoaverage", _("coser.config.control.standarddeviationtoaverage.description"), "3"), + SELECTION_FILTER_OCCURRENCE("coser.selection.occurrenceFilter", _("coser.config.selection.occurrenceFilter.description"), "5.0"), + SELECTION_FILTER_DENSITY("coser.selection.densityFilter", _("coser.config.selection.densityFilter.description"), "5.0"), /** Client side. */ - WEB_FRONT_END("coser.web.frontend", _("coser.config.web.frontend.description"), "http://www.ifremer.fr/SIH-indices-campagnes", String.class, false, false), - WEB_UPLOAD_URL("coser.web.uploadurl", _("coser.config.web.uploadurl.description"), "${" + WEB_FRONT_END.key + "}/upload-result.action", String.class, false, false), + WEB_FRONT_END("coser.web.frontend", _("coser.config.web.frontend.description"), "http://www.ifremer.fr/SIH-indices-campagnes"), + WEB_UPLOAD_URL("coser.web.uploadurl", _("coser.config.web.uploadurl.description"), "${" + WEB_FRONT_END.key + "}/upload-result.action"), /** Server side. */ - WEB_PROPERTIES_FILE("coser.web.properties.file", _("coser.config.web.properties.file.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "web.properties", String.class, false, false), - WEB_INDICATORS_PROJECTS_DIRECTORY("coser.web.indicators.projects.directory", _("coser.config.web.indicators.projects.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webindicatorsprojects", String.class, false, false), - WEB_MAPS_PROJECTS_DIRECTORY("coser.web.maps.projects.directory", _("coser.config.web.maps.projects.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webmapsprojects", String.class, false, false), - WEB_INDICATORS("coser.web.indicators.file", _("coser.config.web.indicators.file.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webindicators.csv", String.class, false, false), - WEB_ZONES("coser.web.zones.file", _("coser.config.web.zones.file.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webzones.csv", String.class, false, false), - WEB_PUBLICATION_EMAIL("coser.web.newresult.emails", _("coser.config.web.newresult.emails.description"), null, String.class, false, false); + WEB_PROPERTIES_FILE("coser.web.properties.file", _("coser.config.web.properties.file.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "web.properties"), + WEB_INDICATORS_PROJECTS_DIRECTORY("coser.web.indicators.projects.directory", _("coser.config.web.indicators.projects.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webindicatorsprojects"), + WEB_MAPS_PROJECTS_DIRECTORY("coser.web.maps.projects.directory", _("coser.config.web.maps.projects.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webmapsprojects"), + WEB_INDICATORS("coser.web.indicators.file", _("coser.config.web.indicators.file.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webindicators.csv"), + WEB_ZONES("coser.web.zones.file", _("coser.config.web.zones.file.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webzones.csv"), + WEB_PUBLICATION_EMAIL("coser.web.newresult.emails", _("coser.config.web.newresult.emails.description"), null); protected String key; protected String description; protected String defaultValue; - protected Class<?> type; - protected boolean isTransient; - protected boolean isFinal; - private CoserBusinessOption(String key, String description, String defaultValue, Class<?> type, boolean isTransient, boolean isFinal) { + private CoserBusinessOption(String key, String description, String defaultValue) { this.key = key; this.description = description; this.defaultValue = defaultValue; - this.type = type; - this.isTransient = isTransient; - this.isFinal = isFinal; } - @Override - public boolean isFinal() { - return isFinal; - } - - @Override - public boolean isTransient() { - return isTransient; - } - - @Override public String getDefaultValue() { return defaultValue; } - @Override public String getDescription() { return description; } - @Override public String getKey() { return key; } - - @Override - public Class<?> getType() { - return type; - } - - @Override - public void setDefaultValue(String defaultValue) { - this.defaultValue = defaultValue; - } - - @Override - public void setTransient(boolean isTransient) { - this.isTransient = isTransient; - } - - @Override - public void setFinal(boolean isFinal) { - this.isFinal = isFinal; - } } } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.java 2012-08-14 12:37:26 UTC (rev 1044) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ControlService.java 2012-08-14 13:16:42 UTC (rev 1045) @@ -967,7 +967,7 @@ log.debug(String.format("Species %s, avg=%f, deviation=%f, value=%f", species, avg, deviation, nombre)); } - if (Math.abs(nombre - avg) > deviation * 3) { + if (Math.abs(nombre - avg) > deviation * config.getStandardDeviationToAverage()) { String lineNumber = tuple[AbstractDataEntity.INDEX_LINE]; ControlError error = new ControlError(); 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 2012-08-14 12:37:26 UTC (rev 1044) +++ trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2012-08-14 13:16:42 UTC (rev 1045) @@ -142,6 +142,7 @@ coser.business.uploadresult.sendzip=Sending zip archive… coser.config.control.diffcatchlength.description=Percentage difference allowed between catch and length (in percent, for example 5% set 5.0) coser.config.control.nobsmin.description=Minimal observation number +coser.config.control.standarddeviationtoaverage.description=Length outliers (how many strandard deviation to average) coser.config.control.typeFish.description=Fish species code type coser.config.database.directory.description=Coser database directory (all Coser data) coser.config.locale.description=Application's locale 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 2012-08-14 12:37:26 UTC (rev 1044) +++ trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2012-08-14 13:16:42 UTC (rev 1045) @@ -142,6 +142,7 @@ coser.business.uploadresult.sendzip=Envoi de l'archive zip… coser.config.control.diffcatchlength.description=Pourcentage d'écart toléré entre les captures et les tailles (en pourcent, par exemple pour 5% mettre 5.0) coser.config.control.nobsmin.description=Nombre minimal d'observation +coser.config.control.standarddeviationtoaverage.description=Tailles aberrantes (combien de fois l'écart type par rapport à la moyenne) coser.config.control.typeFish.description=Nom du type d'espèces correspondant aux poissons coser.config.database.directory.description=Emplacement du dossier de toutes les données relatives à Coser coser.config.locale.description=Langue de l'application Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/option/ConfigurationHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/option/ConfigurationHandler.java 2012-08-14 12:37:26 UTC (rev 1044) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/option/ConfigurationHandler.java 2012-08-14 13:16:42 UTC (rev 1045) @@ -121,6 +121,13 @@ } config.setControlTypeFish(configurationView.getControlTypeFishField().getText()); try { + config.setStandardDeviationToAverage(Integer.parseInt(configurationView.getControlStandardDeviationField().getText())); + } catch (NumberFormatException ex) { + if (log.isWarnEnabled()) { + log.warn("Can't parse number", ex); + } + } + try { config.setSelectionDensityFilter(Double.parseDouble(configurationView.getSelectionFilterDensityField().getText())); } catch (NumberFormatException ex) { if (log.isWarnEnabled()) { Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/option/ConfigurationView.jaxx =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/option/ConfigurationView.jaxx 2012-08-14 12:37:26 UTC (rev 1044) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/option/ConfigurationView.jaxx 2012-08-14 13:16:42 UTC (rev 1045) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2011 Ifremer, Codelutin, Chatellier Eric + Copyright (C) 2011 - 2012 Ifremer, Codelutin, Chatellier Eric %% This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -136,6 +136,14 @@ </row> <row> <cell fill="horizontal"> + <JLabel text="{CoserBusinessOption.CONTROL_STANDARD_DEVIATION_TO_AVERAGE.getDescription()}" /> + </cell> + <cell fill="horizontal"> + <JTextField id="controlStandardDeviationField" text="{String.valueOf(config.getStandardDeviationToAverage())}" /> + </cell> + </row> + <row> + <cell fill="horizontal"> <JLabel text="{CoserBusinessOption.SELECTION_FILTER_OCCURRENCE.getDescription()}" /> </cell> <cell fill="horizontal">