Author: echatellier Date: 2014-04-17 18:48:13 +0200 (Thu, 17 Apr 2014) New Revision: 3969 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/3969 Log: Merge branches/4.0.1 into trunk Added: trunk/src/main/java/fr/ifremer/isisfish/aspect/AspectJUrlClassLoader.java trunk/src/main/java/fr/ifremer/isisfish/aspect/AspectJWeavingAdaptor.java trunk/src/main/java/fr/ifremer/isisfish/datastore/ObjectiveStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/OptimizationStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV421V43.java trunk/src/main/java/fr/ifremer/isisfish/map/OpenMapEvents.java trunk/src/main/java/fr/ifremer/isisfish/simulator/Objective.java trunk/src/main/java/fr/ifremer/isisfish/simulator/Optimization.java trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContext.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScriptListener.java trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationPlanPrepareJob.java trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Distribution.java trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorHelper.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/ObservationUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/loadors/ObservationsNodeLoador.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/GenericComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/GenericListModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/optimization/ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/widget/DummyLayerUI.java trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditor.java trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditorListener.java trunk/src/main/java/fr/ifremer/isisfish/util/ScriptUtil.java trunk/src/main/resources/fr/ifremer/isisfish/entities/Observation-error-validation.xml trunk/src/main/resources/templates/script/objective.ftl trunk/src/main/resources/templates/script/optimization.ftl trunk/src/site/rst/v3/devel/mexico.rst trunk/src/test/java/fr/ifremer/isisfish/datastore/ObjectiveStorageTest.java trunk/src/test/java/fr/ifremer/isisfish/datastore/OptimizationStorageTest.java trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java trunk/src/test/java/fr/ifremer/isisfish/util/EvaluatorHelperTest.java trunk/src/test/resources/mexico/expDesign.xsd trunk/src/test/resources/mexico/mexicohelper_designplanV3.xml trunk/src/test/resources/test-database/regions/BaseMotosICA/data/data.h2.db trunk/src/test/resources/test-database/regions/DemoRegion/data/data.h2.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/1.t42.lob.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/2.t42.lob.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/3.t42.lob.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/4.t42.lob.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/5.t42.lob.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/6.t42.lob.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/7.t42.lob.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/8.t42.lob.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/9.t42.lob.db trunk/src/test/resources/test-database/sensitivityanalysis/DOptimal.java trunk/src/test/resources/test-database/sensitivityanalysis/Fast.java trunk/src/test/resources/test-database/sensitivityanalysis/Morris.java trunk/src/test/resources/test-database/sensitivityanalysis/OptimumLHS.java trunk/src/test/resources/test-database/sensitivityanalysis/RandomLHS.java trunk/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java trunk/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java trunk/src/test/resources/test-database/sensitivityanalysis/Sobol.java Removed: trunk/TODO.txt trunk/src/main/assembly/isisfish64.bat trunk/src/main/assembly/isisfish64.sh trunk/src/main/assembly/x64/ trunk/src/main/assembly/x86/ trunk/src/main/java/fr/ifremer/isisfish/aspect/AspectClassLoader.java trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationContinuousDomainXMLVisitor.java trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/MatrixContinuousDomainXMLVisitor.java trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/ScenarioXMLVisitor.java trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/SensitivityScenariosXMLVisitor.java trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationContinuousDomain.java trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/MatrixContinuousDomain.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/OpenMapEvents.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/StringComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/StringListModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/ContinuousPanelContainerUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/DefaultContinuousPanelUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorWizardUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/MatrixContinuousPanelUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtils.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/equation/ trunk/src/main/java/fr/ifremer/isisfish/util/Docable.java trunk/src/main/resources/v2xsl/ trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ trunk/src/test/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtilsTest.java trunk/src/test/java/fr/ifremer/isisfish/util/EvaluateHelperTest.java trunk/src/test/resources/test-database/regions/BaseMotosICA/data/data.1.log.db trunk/src/test/resources/test-database/regions/BaseMotosICA/data/data.data.db trunk/src/test/resources/test-database/regions/BaseMotosICA/data/data.index.db trunk/src/test/resources/test-database/regions/DemoRegion/data/data.2.log.db trunk/src/test/resources/test-database/regions/DemoRegion/data/data.data.db trunk/src/test/resources/test-database/regions/DemoRegion/data/data.index.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/46.t43.lob.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/47.t43.lob.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/48.t43.lob.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/49.t43.lob.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/50.t43.lob.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/51.t43.lob.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/52.t43.lob.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/53.t43.lob.db trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/54.t43.lob.db trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorJavaExpandGrid.java trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRDOptimal.java trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRExpandGrid.java trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRFast.java trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRFrF2.java trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRMorris.java trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorROptimumLHS.java trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRRandomLHS.java trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRSobol.java trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRegularFractions.java Modified: trunk/ trunk/pom.xml trunk/src/license/THIRD-PARTY.properties trunk/src/main/assembly/bin.xml trunk/src/main/assembly/isisfish-log4j.properties trunk/src/main/assembly/isisfish.bat trunk/src/main/assembly/isisfish.sh trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java trunk/src/main/java/fr/ifremer/isisfish/IsisFish.java trunk/src/main/java/fr/ifremer/isisfish/IsisTray.java trunk/src/main/java/fr/ifremer/isisfish/actions/ExportAction.java trunk/src/main/java/fr/ifremer/isisfish/actions/ImportAction.java trunk/src/main/java/fr/ifremer/isisfish/actions/SimulationAction.java trunk/src/main/java/fr/ifremer/isisfish/aspect/CacheAspect.java trunk/src/main/java/fr/ifremer/isisfish/aspect/RuleAspect.java trunk/src/main/java/fr/ifremer/isisfish/aspect/TraceAspect.java trunk/src/main/java/fr/ifremer/isisfish/aspect/package-info.java trunk/src/main/java/fr/ifremer/isisfish/datastore/CodeSourceStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/DataStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/ExportStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/FormuleStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/JavaSourceStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/RegionStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultDatabaseStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultMappedStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageInMemory.java trunk/src/main/java/fr/ifremer/isisfish/datastore/RuleStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/ScriptStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/SensitivityAnalysisStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/SensitivityExportStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationPlanStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulatorStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/StorageChangeListener.java trunk/src/main/java/fr/ifremer/isisfish/datastore/VersionStorage.java trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/DatabaseMigrationClass.java trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV33V40.java trunk/src/main/java/fr/ifremer/isisfish/datastore/update/ImportFromV2.java trunk/src/main/java/fr/ifremer/isisfish/entities/EffortDescriptionImpl.java trunk/src/main/java/fr/ifremer/isisfish/entities/EquationImpl.java trunk/src/main/java/fr/ifremer/isisfish/entities/FisheryRegionImpl.java trunk/src/main/java/fr/ifremer/isisfish/entities/MetierSeasonInfoImpl.java trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationGroupImpl.java trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationSeasonInfoImpl.java trunk/src/main/java/fr/ifremer/isisfish/entities/SeasonImpl.java trunk/src/main/java/fr/ifremer/isisfish/entities/SelectivityImpl.java trunk/src/main/java/fr/ifremer/isisfish/entities/SetOfVesselsImpl.java trunk/src/main/java/fr/ifremer/isisfish/entities/StrategyImpl.java trunk/src/main/java/fr/ifremer/isisfish/entities/StrategyMonthInfoImpl.java trunk/src/main/java/fr/ifremer/isisfish/entities/TargetSpeciesImpl.java trunk/src/main/java/fr/ifremer/isisfish/entities/VariableImpl.java trunk/src/main/java/fr/ifremer/isisfish/equation/Language.java trunk/src/main/java/fr/ifremer/isisfish/logging/LogLevel.java trunk/src/main/java/fr/ifremer/isisfish/logging/LogLevelUtil.java trunk/src/main/java/fr/ifremer/isisfish/logging/SimulationLoggerUtil.java trunk/src/main/java/fr/ifremer/isisfish/logging/console/LogConsole.java trunk/src/main/java/fr/ifremer/isisfish/logging/console/LogConsoleHandler.java trunk/src/main/java/fr/ifremer/isisfish/logging/console/LogConsoleModel.java trunk/src/main/java/fr/ifremer/isisfish/logging/console/LogMail.java trunk/src/main/java/fr/ifremer/isisfish/logging/io/FileOffsetReader.java trunk/src/main/java/fr/ifremer/isisfish/logging/io/LineReader.java trunk/src/main/java/fr/ifremer/isisfish/logging/io/MemoryOffsetReader.java trunk/src/main/java/fr/ifremer/isisfish/map/CellSelectionLayer.java trunk/src/main/java/fr/ifremer/isisfish/map/CopyMapToClipboardListener.java trunk/src/main/java/fr/ifremer/isisfish/map/IsisMapBean.java trunk/src/main/java/fr/ifremer/isisfish/map/ResultatLayer.java trunk/src/main/java/fr/ifremer/isisfish/mexico/MexicoHelper.java trunk/src/main/java/fr/ifremer/isisfish/mexico/export/RegionExportFactorXML.java trunk/src/main/java/fr/ifremer/isisfish/mexico/package-info.java trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/AbstractXMLVisitor.java trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/ContinuousDomainXMLVisitor.java trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/DesignPlanXMLVisitor.java trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/DiscreteDomainXMLVisitor.java trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/DomainXMLVisitor.java trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationDiscreteDomainXMLVisitor.java trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorGroupXMLVisitor.java trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/RuleDiscreteDomainXMLVisitor.java trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/package-info.java trunk/src/main/java/fr/ifremer/isisfish/rule/Rule.java trunk/src/main/java/fr/ifremer/isisfish/rule/RuleHelper.java trunk/src/main/java/fr/ifremer/isisfish/simulator/MetierMonitor.java trunk/src/main/java/fr/ifremer/isisfish/simulator/PopulationMonitor.java trunk/src/main/java/fr/ifremer/isisfish/simulator/ResultManager.java trunk/src/main/java/fr/ifremer/isisfish/simulator/RuleMonitor.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationContext.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationControl.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationException.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationExportResultWrapper.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationMeta.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScript.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationProperties.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationResultXML.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationVariable.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulatorServerBadIdException.java trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationExecutor.java trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationJob.java trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SubProcessSimulationLauncher.java trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/package-info.java trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityAnalysis.java trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/DesignPlan.java trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Factor.java trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorGroup.java trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysis.java trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtils.java trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ContinuousDomain.java trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/DiscreteDomain.java trunk/src/main/java/fr/ifremer/isisfish/types/Month.java trunk/src/main/java/fr/ifremer/isisfish/types/TimeStep.java trunk/src/main/java/fr/ifremer/isisfish/types/TimeUnit.java trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/MatrixType.java trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/MonthType.java trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/RangeOfValuesType.java trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/TimeStepType.java trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/TimeUnitType.java trunk/src/main/java/fr/ifremer/isisfish/ui/SimulationUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomePanelUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeSaveVerifier.java trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeTabUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/config/RConfigHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigAction.java trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/CellUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/EffortDescriptionParametersUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/FisheryRegionUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/GearTabUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/GearUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputAction.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputOneEquationUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/MetierSeasonInfoSpeciesUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/MetierUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationBasicsUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationMigrationUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationSeasonSpacializedUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/PortUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/SetOfVesselsBasicsUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/SetOfVesselsUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/SpeciesUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/StrategyMonthInfoUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/StrategyOneMonthInfoUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/TripTypeUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/VesselTypeUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/WizardGroupCreationUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/ZoneBasicsUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/ZoneUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckRegion.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckResult.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckResultFrame.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckResultTableModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckResultTableRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/formule/FormuleComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/formule/FormuleComboRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/EffortDescriptionListModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/GearComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/GearPopulationSelectivityModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/MetierListModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/MetierSeasonInfoComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/MetierSeasonInfoTargetSpeciesTableModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/PopulationComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/PopulationSeasonInfoComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/PortComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/SetOfVesselsComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/SpeciesComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/TopiaEntityListModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/TripTypeComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/TripTypeListModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/VesselTypeComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/ZoneListModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/EffortDescriptionListRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/MetierListRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/MetierSeasonInfoComboRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/PopulationSeasonInfoComboRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/TripTypeListRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/FisheryTreeHelper.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/FisheryTreeRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/loadors/PopulationsNodeLoador.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/loadors/SpeciesNodeLoador.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/variable/EntityVariableHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/variable/EntityVariableUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/variable/VariableListRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/variable/VariableTypeComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/ScriptParametersTableModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportListModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportListRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportNameListRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/result/ResultListRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleListCellRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleListModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleNamesListRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityanalysis/SensitivityAnalysisComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityanalysis/SensitivityAnalysisComboRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityanalysis/SensitivityAnalysisListModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityanalysis/SensitivityAnalysisListRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityexport/SensitivityExportListModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityexport/SensitivityExportListRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityexport/SensitivityExportNameListRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/simulationplan/SimulationPlanComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/simulationplan/SimulationPlanComboRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/simulationplan/SimulationPlanListModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/simulationplan/SimulationPlanListRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/queue/QueueAction.java trunk/src/main/java/fr/ifremer/isisfish/ui/result/MapRendererUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/result/MatrixMapRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/result/MatrixSummaryRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultMatrixFilter.java trunk/src/main/java/fr/ifremer/isisfish/ui/result/SumByYearMatrixFilter.java trunk/src/main/java/fr/ifremer/isisfish/ui/script/FileSelectionTableModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/script/action/BackupAction.java trunk/src/main/java/fr/ifremer/isisfish/ui/script/action/ChooseFileAction.java trunk/src/main/java/fr/ifremer/isisfish/ui/script/action/ExportAction.java trunk/src/main/java/fr/ifremer/isisfish/ui/script/model/ScriptTransferHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/script/model/ScriptTreeCellRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/script/model/ScriptTreeModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySaveVerifier.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/TableBlockingLayerUI.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorCardinalityTableModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeCellRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/AdvancedParamsUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ExportUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PreScriptsUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ResultChoiceUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooser.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooserHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/filter/SimulationFilterDialog.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/filter/SimulationFilterPanelUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/filter/SimulationFilterUtil.java trunk/src/main/java/fr/ifremer/isisfish/ui/util/ErrorHelper.java trunk/src/main/java/fr/ifremer/isisfish/ui/util/IsisActionWithBackup.java trunk/src/main/java/fr/ifremer/isisfish/ui/util/JaxxUtil.java trunk/src/main/java/fr/ifremer/isisfish/ui/vcs/VCSConfigUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/vcs/VCSGenerateSshKeyUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/vcs/VCSPassPhraseUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/widget/FilterableComboBox.java trunk/src/main/java/fr/ifremer/isisfish/ui/widget/Interval.java trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/EquationTableEditor.java trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/MonthComponent.java trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ParameterTableCellEditor.java trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ScriptParameterDialog.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/StepComponent.java trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/AcceptorFactory.java trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/CompositeFilterAcceptor.java trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterAcceptor.java trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterDialog.java trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterDialogUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterPanelUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/util/ArgTypes.java trunk/src/main/java/fr/ifremer/isisfish/util/CellPointcomparator.java trunk/src/main/java/fr/ifremer/isisfish/util/CompileHelper.java trunk/src/main/java/fr/ifremer/isisfish/util/ConverterUtil.java trunk/src/main/java/fr/ifremer/isisfish/util/EvaluatorHelper.java trunk/src/main/java/fr/ifremer/isisfish/util/IsisCache.java trunk/src/main/java/fr/ifremer/isisfish/util/IsisCacheBackendOnReferenceMap.java trunk/src/main/java/fr/ifremer/isisfish/util/JavadocHelper.java trunk/src/main/java/fr/ifremer/isisfish/util/TopiaEntityConverter.java trunk/src/main/java/fr/ifremer/isisfish/util/ssh/SSHAgent.java trunk/src/main/java/fr/ifremer/isisfish/util/ssh/SSHUtils.java trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSException.java trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSFactory.java trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSSVN.java trunk/src/main/resources/i18n/isis-fish_en_GB.properties trunk/src/main/resources/i18n/isis-fish_fr_FR.properties trunk/src/main/resources/log4j.properties trunk/src/main/resources/templates/script/equation.ftl trunk/src/main/resources/templates/script/export.ftl trunk/src/main/resources/templates/script/rule.ftl trunk/src/main/resources/templates/script/script.ftl trunk/src/main/resources/templates/script/sensitivityanalysis.ftl trunk/src/main/resources/templates/script/sensitivityexport.ftl trunk/src/main/resources/templates/script/simulationplan.ftl trunk/src/main/resources/templates/script/simulator.ftl trunk/src/main/xmi/isis-fish.properties trunk/src/main/xmi/isis-fish.zargo trunk/src/test/java/fr/ifremer/isisfish/AbstractIsisFishTest.java trunk/src/test/java/fr/ifremer/isisfish/IsisConfigTest.java trunk/src/test/java/fr/ifremer/isisfish/IsisFishMiscTest.java trunk/src/test/java/fr/ifremer/isisfish/datastore/ScriptStorageTest.java trunk/src/test/java/fr/ifremer/isisfish/datastore/SimulatorStorageTest.java trunk/src/test/java/fr/ifremer/isisfish/entity/PersistenceTest.java trunk/src/test/java/fr/ifremer/isisfish/entity/PopulationSeasonInfoTest.java trunk/src/test/java/fr/ifremer/isisfish/entity/TopiaDAOTest.java trunk/src/test/java/fr/ifremer/isisfish/logging/SimulationLoggerUtilTest.java trunk/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java trunk/src/test/java/fr/ifremer/isisfish/mexico/export/RegionExplorerTest.java trunk/src/test/java/fr/ifremer/isisfish/simulator/SimulationParameterTest.java trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTest.java trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/FactorTest.java trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisRandomMock.java trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtilsTest.java trunk/src/test/java/fr/ifremer/isisfish/types/MonthTest.java trunk/src/test/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeModelTest.java trunk/src/test/java/fr/ifremer/isisfish/util/CompileHelperTest.java trunk/src/test/java/fr/ifremer/isisfish/vcs/VCSSVNTest.java trunk/src/test/resources/fr/ifremer/isisfish/simulator/parameters_basic.properties trunk/src/test/resources/fr/ifremer/isisfish/simulator/parameters_plan.properties trunk/src/test/resources/mexico/mexicohelper_designplan.xml trunk/src/test/resources/mexico/mexicohelper_designplanV2.xml trunk/src/test/resources/mexico/mexicohelper_factorgroupdp.xml trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.h2.db trunk/src/test/resources/test-database/simulationplans/CalibrationSimplexePasVariable2Capturabilite.java Property changes on: trunk ___________________________________________________________________ Modified: svn:ignore - maven.log target velocity.log .classpath .project isis-fish.ipr isis-fish.iws isis-fish.iml .settings bin nbproject Inputs_Langoustine + maven.log target velocity.log .classpath .project isis-fish.ipr isis-fish.iws isis-fish.iml .settings bin nbproject Inputs_Langoustine .idea Modified: svn:mergeinfo - /branches/4.1:3601-3670 + /branches/4.0.0-svnkit:3665-3698 /branches/4.0.1:3616-3968 /branches/4.1:3601-3670 Deleted: trunk/TODO.txt =================================================================== --- trunk/TODO.txt 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/TODO.txt 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,8 +0,0 @@ -TODO au 18/09/2009 -================== - - - tester que les paramêtres d'une simulation sont corrects - (ex:année < 0) - - valeur par defaut dans les champs de saisie - - JavaWebStart - - Voir une version antérieure d'un script \ No newline at end of file Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/pom.xml 2014-04-17 16:48:13 UTC (rev 3969) @@ -6,12 +6,12 @@ <parent> <groupId>org.nuiton</groupId> <artifactId>mavenpom4redmine</artifactId> - <version>5.0.1</version> + <version>5.0.5</version> </parent> <groupId>fr.ifremer</groupId> <artifactId>isis-fish</artifactId> - <version>4.2.1.3-SNAPSHOT</version> + <version>4.3.0.0-rc1-SNAPSHOT</version> <!-- POM Relationships : Inheritance : Dependencies --> <dependencies> @@ -20,15 +20,28 @@ <dependency> <groupId>org.nuiton</groupId> <artifactId>nuiton-utils</artifactId> - <version>${nuitonUtilsVersion}</version> + <version>3.0-rc-2</version> <scope>compile</scope> </dependency> + + <dependency> + <groupId>org.nuiton</groupId> + <artifactId>nuiton-config</artifactId> + <version>3.0-alpha-2</version> + <scope>compile</scope> + </dependency> <dependency> <groupId>org.nuiton</groupId> <artifactId>nuiton-validator</artifactId> - <version>${nuitonUtilsVersion}</version> + <version>3.0-rc-1</version> <scope>compile</scope> + <exclusions> + <exclusion> + <artifactId>javassist</artifactId> + <groupId>javassist</groupId> + </exclusion> + </exclusions> </dependency> <dependency> @@ -43,6 +56,12 @@ <artifactId>topia-persistence</artifactId> <version>${topiaVersion}</version> <scope>compile</scope> + <exclusions> + <exclusion> + <artifactId>javassist</artifactId> + <groupId>javassist</groupId> + </exclusion> + </exclusions> </dependency> <dependency> @@ -62,14 +81,14 @@ <dependency> <groupId>org.nuiton.matrix</groupId> <artifactId>nuiton-matrix</artifactId> - <version>2.3.2</version> + <version>2.4-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.nuiton.matrix</groupId> <artifactId>nuiton-matrix-gui</artifactId> - <version>2.3.2</version> + <version>2.4-SNAPSHOT</version> <scope>compile</scope> </dependency> @@ -83,14 +102,14 @@ <dependency> <groupId>com.fifesoft</groupId> <artifactId>rsyntaxtextarea</artifactId> - <version>2.0.2</version> - <scope>runtime</scope> + <version>2.5.0</version> + <scope>compile</scope> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> - <version>1.4.5</version> + <version>1.4.7</version> <scope>compile</scope> </dependency> @@ -107,16 +126,17 @@ <artifactId>jaxx-runtime</artifactId> <version>${jaxxVersion}</version> <scope>compile</scope> - <exclusions> - <exclusion> - <artifactId>swingx-core</artifactId> - <groupId>org.swinglabs</groupId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-config</artifactId> + <version>${jaxxVersion}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.nuiton.jaxx</groupId> <artifactId>jaxx-validator</artifactId> <version>${jaxxVersion}</version> <scope>compile</scope> @@ -127,12 +147,6 @@ <artifactId>jaxx-widgets</artifactId> <version>${jaxxVersion}</version> <scope>compile</scope> - <exclusions> - <exclusion> - <artifactId>swingx-core</artifactId> - <groupId>org.swinglabs</groupId> - </exclusion> - </exclusions> </dependency> <dependency> @@ -145,18 +159,20 @@ <dependency> <groupId>org.nuiton</groupId> <artifactId>nuiton-j2r</artifactId> - <version>1.0.2</version> + <version>1.1-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> + <version>3.3.2</version> </dependency> - + <dependency> - <groupId>commons-collections</groupId> - <artifactId>commons-collections</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-collections4</artifactId> + <version>4.0</version> </dependency> <dependency> @@ -167,7 +183,7 @@ <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> - <version>2.3</version> + <version>2.4</version> </dependency> <dependency> @@ -180,14 +196,14 @@ <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-math3</artifactId> - <version>3.0</version> + <version>3.2</version> <scope>runtime</scope> <!--script --> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> - <version>1.2</version> + <version>1.3.2</version> </dependency> <dependency> @@ -198,21 +214,21 @@ <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> - <version>1.2.16</version> + <version>1.2.17</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> - <version>1.6.4</version> + <version>1.7.7</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> - <version>1.6.4</version> + <version>1.7.7</version> <scope>runtime</scope> </dependency> @@ -229,151 +245,80 @@ </exclusions> </dependency> - <!-- encore utilise pour les pre-scripts --> <dependency> - <groupId>org.beanshell</groupId> - <artifactId>bsh</artifactId> - <version>2.0b4</version> - <scope>compile</scope> + <groupId>jaxen</groupId> + <artifactId>jaxen</artifactId> + <version>1.1.6</version> + <scope>runtime</scope> </dependency> <dependency> <groupId>com.bbn</groupId> <artifactId>openmap</artifactId> - <version>5.0</version> + <version>5.0.4</version> <scope>compile</scope> </dependency> - <!-- <dependency> - <groupId>com.fifesoft</groupId> - <artifactId>languagesupport</artifactId> - <version>0.7</version> - </dependency> --> - <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> - <version>0.1.48</version> + <version>0.1.51</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.swinglabs.swingx</groupId> <artifactId>swingx-core</artifactId> - <version>1.6.3</version> + <version>1.6.5-1</version> <scope>compile</scope> </dependency> - <!-- Utilisé lors de l'import xml v2 (entre autre) --> - <dependency> - <groupId>jaxen</groupId> - <artifactId>jaxen</artifactId> - <version>1.1.1</version> - <scope>runtime</scope> - <exclusions> - <exclusion> - <artifactId>xml-apis</artifactId> - <groupId>xml-apis</groupId> - </exclusion> - <exclusion> - <artifactId>xmlParserAPIs</artifactId> - <groupId>xerces</groupId> - </exclusion> - </exclusions> - </dependency> - <!-- Change this dependence if you change database --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> - <version>1.3.166</version> + <version>1.3.176</version> <scope>compile</scope> </dependency> - <!-- Migration des bases creee avec h2 1.1 --> <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2mig_pagestore_addon</artifactId> - <version>1.3.153</version> - <scope>runtime</scope> + <groupId>org.aspectj</groupId> + <artifactId>aspectjrt</artifactId> + <version>1.7.4</version> </dependency> - - <!-- aspectwerkz --> <dependency> - <groupId>aspectwerkz</groupId> - <artifactId>aspectwerkz</artifactId> - <version>${aspectwerkzVersion}</version> - <scope>compile</scope> + <groupId>org.aspectj</groupId> + <artifactId>aspectjweaver</artifactId> + <version>1.7.4</version> </dependency> + <!-- This one seams to be required for RuleAspect to work, but not directly used --> <dependency> - <groupId>aspectwerkz</groupId> - <artifactId>aspectwerkz-jdk5</artifactId> - <version>${aspectwerkzVersion}</version> - <scope>compile</scope> + <groupId>org.aspectj</groupId> + <artifactId>aspectjtools</artifactId> + <version>1.7.4</version> + <scope>runtime</scope> </dependency> + <dependency> - <groupId>aspectwerkz</groupId> - <artifactId>aspectwerkz-core</artifactId> - <version>${aspectwerkzVersion}</version> - <scope>compile</scope> + <groupId>net.sourceforge</groupId> + <artifactId>jdistlib</artifactId> + <version>0.0.7</version> </dependency> <!-- ssj pour les calculs stockastiques --> <dependency> <groupId>ssj</groupId> <artifactId>ssj</artifactId> - <version>2.1.1</version> + <version>2.5</version> <scope>runtime</scope> </dependency> - - <dependency> - <groupId>ssj</groupId> - <artifactId>Blas</artifactId> - <version>20081007</version> - <scope>runtime</scope> - </dependency> - - <dependency> - <groupId>ssj</groupId> - <artifactId>colt</artifactId> - <version>20081007</version> - <scope>runtime</scope> - </dependency> - - <dependency> - <groupId>ssj</groupId> - <artifactId>interpreter</artifactId> - <version>1.6.8</version> - <scope>runtime</scope> - </dependency> - - <dependency> - <groupId>ssj</groupId> - <artifactId>language</artifactId> - <version>1.6.7</version> - <scope>runtime</scope> - </dependency> - - <dependency> - <groupId>ssj</groupId> - <artifactId>logger</artifactId> - <version>1.6.4</version> - <scope>runtime</scope> - </dependency> - - <dependency> - <groupId>ssj</groupId> - <artifactId>optimization</artifactId> - <version>20081007</version> - <scope>runtime</scope> - </dependency> <!-- fin ssj pour les calculs stockastiques --> <!-- debut svnkit pour communication subversion --> <dependency> <groupId>org.tmatesoft.svnkit</groupId> <artifactId>svnkit</artifactId> - <version>1.3.5</version> + <version>1.8.3-1</version> <scope>compile</scope> </dependency> <!-- fin svnkit pour communication subversion --> @@ -381,15 +326,14 @@ <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> - <version>2.3.19</version> + <version>2.3.20</version> <scope>compile</scope> </dependency> <dependency> - <groupId>com.sun</groupId> - <artifactId>tools</artifactId> - <version>1.6.0.16</version> - <scope>compile</scope> + <groupId>org.eclipse.jdt.core.compiler</groupId> + <artifactId>ecj</artifactId> + <version>4.3.1</version> </dependency> <dependency> @@ -530,18 +474,18 @@ <maven.jar.main.class>fr.ifremer.isisfish.IsisFish</maven.jar.main.class> <license.licenseName>gpl_v3</license.licenseName> <license.organizationName>Ifremer, Codelutin</license.organizationName> - <signatureArtifactId>java16-sun</signatureArtifactId> - <signatureVersion>1.9</signatureVersion> + <maven.compiler.source>1.7</maven.compiler.source> + <maven.compiler.target>1.7</maven.compiler.target> + <signatureArtifactId>java17</signatureArtifactId> + <signatureVersion>1.0</signatureVersion> <!-- Dependencies version --> - <jaxxVersion>2.4.2</jaxxVersion> - <eugeneVersion>2.4.2</eugeneVersion> - <topiaVersion>2.6.13</topiaVersion> - <hibernateVersion>3.6.10.Final</hibernateVersion> - <nuitonUtilsVersion>2.4.7</nuitonUtilsVersion> - <nuitonI18nVersion>2.4.1</nuitonI18nVersion> + <jaxxVersion>2.8.4</jaxxVersion> + <eugeneVersion>2.7.4</eugeneVersion> + <topiaVersion>2.9-SNAPSHOT</topiaVersion> + <hibernateVersion>4.3.5.Final</hibernateVersion> + <nuitonI18nVersion>3.1-SNAPSHOT</nuitonI18nVersion> <nuitonWidgetsVersion>1.1.1</nuitonWidgetsVersion> - <aspectwerkzVersion>2.0</aspectwerkzVersion> <redmine.releaseFiles>target/isis-fish-${project.version}-bin.zip</redmine.releaseFiles> @@ -566,28 +510,29 @@ <plugins> <plugin> <groupId>org.nuiton.eugene</groupId> - <artifactId>maven-eugene-plugin</artifactId> + <artifactId>eugene-maven-plugin</artifactId> <version>${eugeneVersion}</version> </plugin> <plugin> <groupId>org.nuiton.jaxx</groupId> - <artifactId>maven-jaxx-plugin</artifactId> + <artifactId>jaxx-maven-plugin</artifactId> <version>${jaxxVersion}</version> + <dependencies> + <dependency> + <groupId>org.nuiton.i18n</groupId> + <artifactId>nuiton-i18n</artifactId> + <version>${nuitonI18nVersion}</version> + <scope>compile</scope> + </dependency> + </dependencies> </plugin> <plugin> <groupId>org.nuiton.i18n</groupId> - <artifactId>maven-i18n-plugin</artifactId> + <artifactId>i18n-maven-plugin</artifactId> <version>${nuitonI18nVersion}</version> </plugin> - <plugin> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <showDeprecation>true</showDeprecation> - <showWarnings>true</showWarnings> - </configuration> - </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> @@ -635,25 +580,13 @@ </dependency> </dependencies> </plugin> - - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>animal-sniffer-maven-plugin</artifactId> - <configuration> - <signature> - <groupId>org.codehaus.mojo.signature</groupId> - <artifactId>java16-sun</artifactId> - <version>1.10</version> - </signature> - </configuration> - </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.nuiton.eugene</groupId> - <artifactId>maven-eugene-plugin</artifactId> + <artifactId>eugene-maven-plugin</artifactId> <executions> <execution> <id>eugene-generation</id> @@ -666,7 +599,7 @@ <templates>org.nuiton.topia.generator.TopiaMetaTransformer</templates> </configuration> <goals> - <goal>smart-generate</goal> + <goal>generate</goal> </goals> </execution> </executions> @@ -682,7 +615,7 @@ <plugin> <groupId>org.nuiton.jaxx</groupId> - <artifactId>maven-jaxx-plugin</artifactId> + <artifactId>jaxx-maven-plugin</artifactId> <executions> <execution> <goals> @@ -699,7 +632,7 @@ <plugin> <groupId>org.nuiton.i18n</groupId> - <artifactId>maven-i18n-plugin</artifactId> + <artifactId>i18n-maven-plugin</artifactId> <configuration> <entries> <entry> @@ -727,6 +660,7 @@ <configuration> <silent>true</silent> <outputDirectory>${project.build.directory}/lib</outputDirectory> + <useBaseVersion>false</useBaseVersion> </configuration> <goals> <goal>copy-dependencies</goal> @@ -741,9 +675,9 @@ <!-- *** Build Environment ************************************** --> <!-- ************************************************************* --> <scm> - <connection>scm:svn:http://svn.codelutin.com/isis-fish/trunk</connection> - <developerConnection>scm:svn:http://svn.codelutin.com/isis-fish/trunk</developerConnection> - <url>http://svn.codelutin.com/isis-fish/trunk</url> + <connection>scm:svn:http://svn.codelutin.com/isis-fish/branches/4.0.1</connection> + <developerConnection>scm:svn:http://svn.codelutin.com/isis-fish/branches/4.0.1</developerConnection> + <url>http://svn.codelutin.com/isis-fish/branches/4.0.1</url> </scm> <repositories> @@ -810,7 +744,7 @@ <properties> <!-- pmd config --> <minimumTokens>100</minimumTokens> - <targetJdk>1.6</targetJdk> + <targetJdk>1.7</targetJdk> </properties> <build> @@ -823,7 +757,7 @@ <artifactId>maven-javadoc-plugin</artifactId> <configuration> <links> - <link>http://download.oracle.com/javase/6/docs/api/</link> + <link>http://docs.oracle.com/javase/7/docs/api/</link> <link>http://maven-site.nuiton.org/nuiton-utils/nuiton-utils/apidocs/</link> <link>http://maven-site.nuiton.org/nuiton-matrix/nuiton-matrix/apidocs/</link> <link>http://maven-site.nuiton.org/nuiton-j2r/apidocs/</link> Modified: trunk/src/license/THIRD-PARTY.properties =================================================================== --- trunk/src/license/THIRD-PARTY.properties 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/license/THIRD-PARTY.properties 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,29 +1,26 @@ # Generated by org.codehaus.mojo.license.AddThirdPartyMojo #------------------------------------------------------------------------------- # Already used licenses in project : -# - ANTLR 3 License -# - ASM License -# - Apache Software License -# - Apache Software License Version 2.0 -# - Apache Software License, Version 1.1 -# - Apache Software License, Version 2.0 +# - Apache License 2.0 # - BSD License -# - BSD licence -# - BSD style # - BSD-style license # - Bouncy Castle License # - CDDL # - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 +# - Common Development and Distribution License # - Common Public License Version 1.0 +# - Eclipse Public License - v 1.0 # - GNU General Public License - Version 2 with the class path exception +# - GNU General Public License, Version 2 with the Classpath Exception # - GNU Lesser General Public Licence +# - GNU Lesser General Public License, version 2.1 +# - GNU Library or Lesser General Public License # - GPL +# - GPL (with dual licensing option) +# - GPLv2 # - GPLv2+CE -# - ICU License # - Indiana University Extreme! Lab Software License, vesion 1.1.1 -# - JDom license -# - Java Transaction API (JTA) License -# - Jaxen license +# - LGPL, version 2.1 # - Lesser General Public License (LGPL v. 2.1) # - Lesser General Public License (LGPL) # - Lesser General Public License (LGPL) v 3.0 @@ -31,44 +28,28 @@ # - Lesser General Public License (LPGL) v 2.1 # - MIT License # - MPL 1.1 +# - Modified BSD License # - Mozilla Public License +# - New BSD License # - OpenMap Software License Agreement # - Revised BSD -# - Sun's Binary Code License +# - Sequence Library License +# - TMate Open Source License (with dual licensing option) # - The Apache Software License, Version 2.0 # - The H2 License, Version 1.0 -# - http://sqljet.com/ -# - http://svnkit.com/license.html -# - http://www.trilead.com/Products/Trilead_SSH_for_Java/License/ +# - Trilead Library License +# - http://jaxen.codehaus.org/license.html # - license.txt #------------------------------------------------------------------------------- # Please fill the missing licenses for dependencies : # # -#Thu Apr 26 16:37:35 CEST 2012 -antlr--antlr--2.7.6=BSD License -aspectwerkz--aspectwerkz--2.0=GNU Lesser General Public License -aspectwerkz--aspectwerkz-core--2.0=GNU Lesser General Public License -aspectwerkz--aspectwerkz-jdk5--2.0=GNU Lesser General Public License -com.ibm.icu--icu4j--2.6.1=ICU License -com.sun--tools--1.6.0.16=Sun's Binary Code License +#Wed Feb 05 11:48:25 CET 2014 commons-jxpath--commons-jxpath--1.3=The Apache Software License, Version 2.0 commons-primitives--commons-primitives--1.0=The Apache Software License, Version 2.0 dom4j--dom4j--1.6.1=BSD License javax.activation--activation--1.1.1=COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 -javax.transaction--jta--1.1=Java Transaction API (JTA) License -jaxen--jaxen--1.1.1=Jaxen license -jdom--jdom--1.0=JDom license -jrexx--jrexx--1.1.1=Apache Software License -net.java.dev.jna--jna--3.2.3=Lesser General Public License (LGPL v. 2.1) -org.antlr--antlr-runtime--3.1.3=ANTLR 3 License +org.antlr--antlr-runtime--3.4=BSD License org.nuiton.thirdparty--JRI--0.8-4=Lesser General Public License (LGPL v. 2.1) org.nuiton.thirdparty--REngine--0.6-1=Lesser General Public License (LGPL v. 2.1) org.nuiton.thirdparty--Rserve--0.6-1=Lesser General Public License (LGPL v. 2.1) -org.nuiton.thirdparty--asm--1.5.4-snapshot=ASM License -org.nuiton.thirdparty--asm-attrs--1.5.4-snapshot=ASM License -org.nuiton.thirdparty--asm-util--1.5.4-snapshot=ASM License -qdox--qdox--1.4=Apache Software License, Version 2.0 -trove--trove--1.0.2=Lesser General Public License (LGPL) -xalan--xalan--2.6.0=Apache Software License Version 2.0 -xerces--xercesImpl--2.6.2=Apache Software License, Version 1.1 Modified: trunk/src/main/assembly/bin.xml =================================================================== --- trunk/src/main/assembly/bin.xml 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/assembly/bin.xml 2014-04-17 16:48:13 UTC (rev 3969) @@ -6,7 +6,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 1999 - 2010 Ifremer, CodeLutin + Copyright (C) 1999 - 2013 Ifremer, CodeLutin, Eric Chatellier %% This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -31,12 +31,6 @@ <formats> <format>zip</format> </formats> - <!--dependencySets> - <dependencySet> - <outputDirectory>lib</outputDirectory> - <scope>runtime</scope> - </dependencySet> - </dependencySets--> <fileSets> <fileSet> @@ -46,12 +40,6 @@ <include>*.jar</include> </includes> </fileSet> - <!-- <fileSet> - <directory>target</directory> - <includes> - <include>*.jar</include> - </includes> - </fileSet> --> <fileSet> <includes> <include>README*</include> @@ -66,8 +54,6 @@ <includes> <include>isisfish.sh</include> <include>isisfish.bat</include> - <include>isisfish64.sh</include> - <include>isisfish64.bat</include> </includes> </fileSet> <fileSet> @@ -83,21 +69,5 @@ <file> <source>target/${artifact.artifactId}-${artifact.version}.jar</source> </file> - <file> - <source>src/main/assembly/x86/jri.dll</source> - <outputDirectory>jri</outputDirectory> - </file> - <file> - <source>src/main/assembly/x86/libjri.so</source> - <outputDirectory>jri</outputDirectory> - </file> - <file> - <source>src/main/assembly/x64/jri.dll</source> - <outputDirectory>jri64</outputDirectory> - </file> - <file> - <source>src/main/assembly/x64/libjri.so</source> - <outputDirectory>jri64</outputDirectory> - </file> </files> </assembly> Modified: trunk/src/main/assembly/isisfish-log4j.properties =================================================================== --- trunk/src/main/assembly/isisfish-log4j.properties 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/assembly/isisfish-log4j.properties 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ # $Id$ # $HeadURL$ # %% -# Copyright (C) 2011 - 2012 Ifremer, CodeLutin, Chatellier Eric +# Copyright (C) 2011 - 2013 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 Modified: trunk/src/main/assembly/isisfish.bat =================================================================== --- trunk/src/main/assembly/isisfish.bat 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/assembly/isisfish.bat 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,4 +5,4 @@ rem SET PATH=%PATH%;%R_HOME%\bin\i386 echo [Script] Isis starting... -java -Xmx900M -Djava.library.path=jri -DR.type=jni -jar ${project.build.finalName}.${project.packaging} %1 %2 %3 %4 %5 %6 %7 %8 %9 > debug.txt 2>&1 +java -Xmx900M -jar ${project.build.finalName}.${project.packaging} %1 %2 %3 %4 %5 %6 %7 %8 %9 > debug.txt 2>&1 Modified: trunk/src/main/assembly/isisfish.sh =================================================================== --- trunk/src/main/assembly/isisfish.sh 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/assembly/isisfish.sh 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,6 +1,5 @@ #!/bin/bash MEMORY="-Xmx1024M" -JRIARGS="-Djava.library.path=jri -DR.type=jni" -java $MEMORY $JRIARGS -jar ${project.build.finalName}.${project.packaging} $* &> debug.txt +java $MEMORY -jar ${project.build.finalName}.${project.packaging} $* &> debug.txt Deleted: trunk/src/main/assembly/isisfish64.bat =================================================================== --- trunk/src/main/assembly/isisfish64.bat 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/assembly/isisfish64.bat 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,8 +0,0 @@ -@echo off - -rem Uncomment following 2 lines to easy configure R for ISIS-Fish -rem SET R_HOME=C:\Program Files\R\R-2.14.1 -rem SET PATH=%PATH%;%R_HOME%\bin\x64 - -echo [Script] Isis starting... -java -Xmx1024M -Djava.library.path=jri64 -DR.type=jni -jar ${project.build.finalName}.${project.packaging} %1 %2 %3 %4 %5 %6 %7 %8 %9 > debug.txt 2>&1 Deleted: trunk/src/main/assembly/isisfish64.sh =================================================================== --- trunk/src/main/assembly/isisfish64.sh 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/assembly/isisfish64.sh 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,6 +0,0 @@ -#!/bin/bash - -MEMORY="-Xmx1024M" -JRIARGS="-Djava.library.path=jri64 -DR.type=jni" - -java $MEMORY $JRIARGS -jar ${project.build.finalName}.${project.packaging} $* &> debug.txt Modified: trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,8 +25,8 @@ package fr.ifremer.isisfish; -import static org.nuiton.i18n.I18n._; -import static org.nuiton.i18n.I18n.n_; +import static org.nuiton.i18n.I18n.t; +import static org.nuiton.i18n.I18n.n; import java.io.File; import java.net.MalformedURLException; @@ -43,7 +43,8 @@ import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.lang3.time.DurationFormatUtils; import org.nuiton.math.matrix.DoubleBigVector; -import org.nuiton.util.ApplicationConfig; +import org.nuiton.config.ApplicationConfig; +import org.nuiton.config.ConfigOptionDef; import org.nuiton.util.StringUtil; import org.nuiton.util.Version; @@ -76,37 +77,39 @@ /** * Config step after init. * - * @see org.nuiton.util.ApplicationConfig.Action.Step + * @see org.nuiton.config.ApplicationConfig.Action.Step */ public static final int STEP_AFTER_INIT = 0; /** * Config step after init vcs. * - * @see org.nuiton.util.ApplicationConfig.Action.Step + * @see org.nuiton.config.ApplicationConfig.Action.Step */ public static final int STEP_AFTER_INIT_VCS = 1; /** * Config step after ui. * - * @see org.nuiton.util.ApplicationConfig.Action.Step + * @see org.nuiton.config.ApplicationConfig.Action.Step */ public static final int STEP_AFTER_UI = 2; /** * Config step before exit. * - * @see org.nuiton.util.ApplicationConfig.Action.Step + * @see org.nuiton.config.ApplicationConfig.Action.Step */ public static final int STEP_BEFORE_EXIT = 3; /** * La version du logiciel constitue de l.d.a.r - * <li>l: le numero de version du logiciel - * <li>d: le numero de version du schema de la base de donnees - * <li>a: le numero de version de l'api des scripts - * <li>r: le numero de version de de l'interface graphique ou autre modif mineur + * <ul> + * <li>l: le numero de version du logiciel</li> + * <li>d: le numero de version du schema de la base de donnees</li> + * <li>a: le numero de version de l'api des scripts</li> + * <li>r: le numero de version de de l'interface graphique ou autre modif mineur</li> + * </ul> * <p> * lors de l'increment de l, d, a et r sont remis a 0 * lors de l'increment de d, a et r sont remis a 0 @@ -117,7 +120,7 @@ * migration de donnees demande automatiquement un changement de version * d'application. */ - protected final static Version version = new Version(4, 2, 1, 3); + protected final static Version version = new Version(4, 3, 0, 0); protected final static Version majorVersion = new Version(version.getNumber(0)); protected final static Version databaseVersion = new Version( @@ -157,7 +160,7 @@ return apiVersion; } - static final public String COPYRIGHT_TEXT = "Version " + getVersion() + " IFREMER-MAERHA © 2000-2012"; + static final public String COPYRIGHT_TEXT = "Version " + getVersion() + " IFREMER-MAERHA © 2000-2014"; static final public String CONFIG_FILENAME = "isis-config-" + majorVersion.toString(); /** separateur de liste */ @@ -244,6 +247,7 @@ * * Les valeurs acceptées sont : * - file + * - FS * - socket * - no * @@ -274,10 +278,6 @@ if (control != null) { result = new File(result, control.getId()); } - - if (!result.exists()) { - result.mkdirs(); - } return result; } @@ -921,7 +921,7 @@ ClassLoader parent = Thread.currentThread().getContextClassLoader(); result = new URLClassLoader(cp, parent); } catch (MalformedURLException eee) { - throw new IsisFishRuntimeException(_("isisfish.error.load.classloader", f, eee.getMessage()), eee); + throw new IsisFishRuntimeException(t("isisfish.error.load.classloader", f, eee.getMessage()), eee); } } return result; @@ -960,105 +960,105 @@ * * Set it protected to force getOption() call. */ - public static enum Option implements OptionDef { + public static enum Option implements ConfigOptionDef { - CONFIG_FILE(CONFIG_FILE_NAME, n_("isisfish.config.main.configFileName.description"), CONFIG_FILENAME), - ISIS_HOME_DIRECTORY("isis.home.directory", n_("isisfish.config.main.compileDirectory.description"), getUserHome() + File.separator + "isis-fish-" + majorVersion.toString()), - COMPILATION_DIRECTORY("compilation.directory", n_("isisfish.config.main.compileDirectory.description"), "${isis.home.directory}" + File.separator + "isis-build"), - MONITORING_DIRECTORY("monitoring.directory", n_("isisfish.config.main.monitoringDirectory.description"), "${isis.home.directory}" + File.separator + "isis-monitoring"), - JAVADOC_DIRECTORY("javadoc.directory", n_("isisfish.config.main.javadocDirectory.description"), "${isis.home.directory}" + File.separator + "isis-docs"), - BACKUP_DIRECTORY("backup.directory", n_("isisfish.config.main.defaultBackupDirectory.description"), "${isis.home.directory}" + File.separator + "isis-backup"), + CONFIG_FILE(CONFIG_FILE_NAME, n("isisfish.config.main.configFileName.description"), CONFIG_FILENAME), + ISIS_HOME_DIRECTORY("isis.home.directory", n("isisfish.config.main.compileDirectory.description"), getUserHome() + File.separator + "isis-fish-" + majorVersion.toString()+"beta"), + COMPILATION_DIRECTORY("compilation.directory", n("isisfish.config.main.compileDirectory.description"), "${isis.home.directory}" + File.separator + "isis-build"), + MONITORING_DIRECTORY("monitoring.directory", n("isisfish.config.main.monitoringDirectory.description"), "${isis.home.directory}" + File.separator + "isis-monitoring"), + JAVADOC_DIRECTORY("javadoc.directory", n("isisfish.config.main.javadocDirectory.description"), "${isis.home.directory}" + File.separator + "isis-docs"), + BACKUP_DIRECTORY("backup.directory", n("isisfish.config.main.defaultBackupDirectory.description"), "${isis.home.directory}" + File.separator + "isis-backup"), - DEFAULT_EXPORT_NAMES("default.export.names", n_("isisfish.config.main.defaultExportNames.description"), ""), - DEFAULT_RESULT_NAMES("default.result.names", n_("isisfish.config.main.defaultResultNames.description"), ""), - DEFAULT_MAP_FILENAME("default.map.filename", n_("isisfish.config.main.defaultMapFile.description"), "maps/vmap_area_thin.shp"), - DEFAULT_TAG_VALUE("default.tagvalue", n_("isisfish.config.main.defaultTagValue.description"), ""), - ENCODING("encoding", n_("isisfish.config.main.encoding.description"), "UTF-8"), - JAVADOC_URL("javadoc.url", n_("isisfish.config.main.javadocURL.description"), "http://www.isis-fish.org/apidocs/"), + DEFAULT_EXPORT_NAMES("default.export.names", n("isisfish.config.main.defaultExportNames.description"), ""), + DEFAULT_RESULT_NAMES("default.result.names", n("isisfish.config.main.defaultResultNames.description"), ""), + DEFAULT_MAP_FILENAME("default.map.filename", n("isisfish.config.main.defaultMapFile.description"), "maps/vmap_area_thin.shp"), + DEFAULT_TAG_VALUE("default.tagvalue", n("isisfish.config.main.defaultTagValue.description"), ""), + ENCODING("encoding", n("isisfish.config.main.encoding.description"), "UTF-8"), + JAVADOC_URL("javadoc.url", n("isisfish.config.main.javadocURL.description"), "http://www.isis-fish.org/apidocs/"), - SIMULATOR_CLASSFILE("simulator.classfile", n_("isisfish.config.main.defaultSimulator.description"), "DefaultSimulator.java"), + SIMULATOR_CLASSFILE("simulator.classfile", n("isisfish.config.main.defaultSimulator.description"), "DefaultSimulator.java"), /** prevu pour l'architecture de lancement en plugin: local, isis-server, caparmor, ... */ - SIMULATOR_LAUNCHER(SimulationService.SIMULATION_LAUNCHER + ".3", n_("isisfish.config.main.localSimulator.description"), InProcessSimulatorLauncher.class.getName()), - SIMULATOR_LAUNCHER2(SimulationService.SIMULATION_LAUNCHER + ".1", n_("isisfish.config.main.subSimulator.description"), SubProcessSimulationLauncher.class.getName()), - SIMULATOR_LAUNCHER_REMOTE(SimulationService.SIMULATION_LAUNCHER + ".2", n_("isisfish.config.main.remoteCaparmor.description"), SSHSimulatorLauncher.class.getName()), + SIMULATOR_LAUNCHER(SimulationService.SIMULATION_LAUNCHER + ".3", n("isisfish.config.main.localSimulator.description"), InProcessSimulatorLauncher.class.getName()), + SIMULATOR_LAUNCHER2(SimulationService.SIMULATION_LAUNCHER + ".1", n("isisfish.config.main.subSimulator.description"), SubProcessSimulationLauncher.class.getName()), + SIMULATOR_LAUNCHER_REMOTE(SimulationService.SIMULATION_LAUNCHER + ".2", n("isisfish.config.main.remoteCaparmor.description"), SSHSimulatorLauncher.class.getName()), /** Nombre maximum de thread de simulation in process. */ - SIMULATOR_IN_MAXTHREADS("simulation.in.max.threads", n_("isisfish.config.main.simulation.in.max.threads.description"), "1"), + SIMULATOR_IN_MAXTHREADS("simulation.in.max.threads", n("isisfish.config.main.simulation.in.max.threads.description"), "1"), /** Nombre max de sous processus à lancer (-1 = pas de limite). */ - SIMULATOR_SUB_MAXPROCESS("simulation.sub.max.process", n_("isisfish.config.main.simulation.sub.max.process.description"), "-1"), + SIMULATOR_SUB_MAXPROCESS("simulation.sub.max.process", n("isisfish.config.main.simulation.sub.max.process.description"), "-1"), /** Mémoire max (Xmx) allouée aux sous processus. */ - SIMULATOR_SUB_MAXMEMORY("simulation.sub.max.memory", n_("isisfish.config.main.simulation.sub.max.memory.description"), "1024M"), + SIMULATOR_SUB_MAXMEMORY("simulation.sub.max.memory", n("isisfish.config.main.simulation.sub.max.memory.description"), "1024M"), /** Serveur accessible par ssh : address */ - SIMULATOR_SSH_SERVER("simulation.ssh.server", n_("isisfish.config.main.simulation.ssh.server.description"), "caparmor-sftp"), + SIMULATOR_SSH_SERVER("simulation.ssh.server", n("isisfish.config.main.simulation.ssh.server.description"), "caparmor-sftp"), /** Serveur accessible par ssh : login */ - SIMULATOR_SSH_USER_NAME("simulation.ssh.username", n_("isisfish.config.main.simulation.ssh.username.description"), ""), + SIMULATOR_SSH_USER_NAME("simulation.ssh.username", n("isisfish.config.main.simulation.ssh.username.description"), ""), /** Serveur accessible par ssh : user home directory */ - SIMULATOR_SSH_USER_HOME("simulation.ssh.userhome", n_("isisfish.config.main.simulation.ssh.userhome.description"), ""), + SIMULATOR_SSH_USER_HOME("simulation.ssh.userhome", n("isisfish.config.main.simulation.ssh.userhome.description"), ""), /** Serveur accessible par ssh : remote data path */ - SIMULATOR_SSH_DATAPATH("simulation.ssh.datapath", n_("isisfish.config.main.simulation.ssh.datapath.description"), "isis-fish-" + majorVersion.toString() + "/isis-database"), + SIMULATOR_SSH_DATAPATH("simulation.ssh.datapath", n("isisfish.config.main.simulation.ssh.datapath.description"), "isis-fish-" + majorVersion.toString() + "/isis-database"), /** Serveur accessible par ssh : remote isis home install */ - SIMULATOR_SSH_ISIS_HOME("simulation.ssh.isis.home", n_("isisfish.config.main.simulation.ssh.isis.home.description"), "/home3/caparmor/poussin/isis-fish-" + IsisConfig.getApiVersion()), + SIMULATOR_SSH_ISIS_HOME("simulation.ssh.isis.home", n("isisfish.config.main.simulation.ssh.isis.home.description"), "/home3/caparmor/poussin/isis-fish-" + IsisConfig.getApiVersion()), /** Serveur accessible par ssh : remote tmp path */ - SIMULATOR_SSH_TMPPATH("simulation.ssh.tmppath", n_("isisfish.config.main.simulation.ssh.tmppath.description"), "isis-tmp"), + SIMULATOR_SSH_TMPPATH("simulation.ssh.tmppath", n("isisfish.config.main.simulation.ssh.tmppath.description"), "isis-tmp"), /** Serveur accessible par SSH : emplacement de Java (full path) */ - SIMULATOR_SSH_JAVAPATH("simulation.ssh.javapath64", n_("isisfish.config.main.simulation.ssh.javapath.description"), "/home3/caparmor/poussin/jdk64/bin/java"), + SIMULATOR_SSH_JAVAPATH("simulation.ssh.javapath64", n("isisfish.config.main.simulation.ssh.javapath.description"), "/home3/caparmor/poussin/jdk64/bin/java"), /** Serveur accessible par SSH : emplacement des executables pbs */ - SIMULATOR_SSH_PBSBINPATH("simulation.ssh.pbsbinpath", n_("isisfish.config.main.simulation.ssh.pbsbinpath.description"), "/usr/pbs/bin"), + SIMULATOR_SSH_PBSBINPATH("simulation.ssh.pbsbinpath", n("isisfish.config.main.simulation.ssh.pbsbinpath.description"), "/usr/pbs/bin"), /** Serveur accessible par SSH : option de l'executable qsub (defaut to -m n = no mail) */ - SIMULATOR_SSH_PBSQSUBOPTIONS("simulation.ssh.pbsqsuboptions", n_("isisfish.config.main.simulation.ssh.pbsqsuboptions.description"), "-m n"), + SIMULATOR_SSH_PBSQSUBOPTIONS("simulation.ssh.pbsqsuboptions", n("isisfish.config.main.simulation.ssh.pbsqsuboptions.description"), "-m n"), /** Serveur accessible par SSH : interval de check du fichier de control */ - SIMULATOR_SSH_CONTROLCHECKINTERVAL("simulation.ssh.control.check.interval", n_("isisfish.config.main.simulation.ssh.control.check.interval.description"), "120"), + SIMULATOR_SSH_CONTROLCHECKINTERVAL("simulation.ssh.control.check.interval", n("isisfish.config.main.simulation.ssh.control.check.interval.description"), "120"), /** Serveur accessible par SSH : nombre de thread au maximum a utilise simultanement */ - SIMULATOR_SSH_MAXTHREADS("simulation.ssh.max.threads", n_("isisfish.config.main.simulation.ssh.max.threads.description"), "1"), + SIMULATOR_SSH_MAXTHREADS("simulation.ssh.max.threads", n("isisfish.config.main.simulation.ssh.max.threads.description"), "1"), /** Serveur accessible par SSH : mémoire (Xmx) allouée pour les process java sur caparmor */ - SIMULATOR_SSH_MAXMEMORY("simulation.ssh.max.memory", n_("isisfish.config.main.simulation.ssh.max.memory.description"), "2000M"), + SIMULATOR_SSH_MAXMEMORY("simulation.ssh.max.memory", n("isisfish.config.main.simulation.ssh.max.memory.description"), "2000M"), /** Application locale (for i18n init). */ - LOCALE("locale", n_("isisfish.config.main.locale.description"), "fr_FR"), - SIMULATION_SHOW_ONLY_ERROR("simulationShowOnlyError", n_("isisfish.config.main.simulationShowOnlyError.description"), "false"), + LOCALE("locale", n("isisfish.config.main.locale.description"), "fr_FR"), + SIMULATION_SHOW_ONLY_ERROR("simulationShowOnlyError", n("isisfish.config.main.simulationShowOnlyError.description"), "false"), /** Perform ui launch option. */ - LAUNCH_UI("launch.ui", n_("isisfish.config.main.launchUI.description"), "true"), + LAUNCH_UI("launch.ui", n("isisfish.config.main.launchUI.description"), "true"), /** Perform data migration option. */ - PERFORM_MIGRATION("perform.migration", n_("isisfish.config.main.performmigration.description"), "true"), + PERFORM_MIGRATION("perform.migration", n("isisfish.config.main.performmigration.description"), "true"), /** Perform vcs update option. */ - PERFORM_VCS_UPDATE("perform.vcsupdate", n_("isisfish.config.main.performvcsupdate.description"), "true"), + PERFORM_VCS_UPDATE("perform.vcsupdate", n("isisfish.config.main.performvcsupdate.description"), "true"), /** Perform cron option. */ - PERFORM_CRON("perform.cron", n_("isisfish.config.main.performcron.description"), "true"), + PERFORM_CRON("perform.cron", n("isisfish.config.main.performcron.description"), "true"), /** Auto configure script parameter when addind it */ - SIMULATION_SCRIPT_AUTOCONFIG("script.autoconfig", n_("isisfish.config.main.script.autoconfig.description"), "true"), + SIMULATION_SCRIPT_AUTOCONFIG("script.autoconfig", n("isisfish.config.main.script.autoconfig.description"), "true"), /** Database lock mode (h2).*/ - DATABASE_LOCK_MODE("database.lockmode", n_("isisfish.config.database.lockmode.description"), "file"), + DATABASE_LOCK_MODE("database.lockmode", n("isisfish.config.database.lockmode.description"), "file"), // SSH (global, for both VCS and caparmor) - SSH_KEY_FILE("ssh.key.file", n_("isisfish.config.ssh.key.file.description"), getUserHome() + File.separator + ".ssh" + File.separator + "isis_rsa"), + SSH_KEY_FILE("ssh.key.file", n("isisfish.config.ssh.key.file.description"), getUserHome() + File.separator + ".ssh" + File.separator + "isis_rsa"), - DATABASE_DIRECTORY("database.directory", n_("isisfish.config.vcs.localDatabasePath.description"), "${isis.home.directory}" + File.separator + "isis-database"), - VCS_TYPE(VCS.VCS_TYPE, n_("isisfish.config.vcs.type.description"), VCS.TYPE_SVN), - VCS_PROTOCOL(VCS.VCS_PROTOCOL, n_("isisfish.config.vcs.protocol.description"), "http"), - VCS_USER_NAME(VCS.VCS_USER_NAME, n_("isisfish.config.vcs.userName.description"), ""), - VCS_USER_PASSWORD(VCS.VCS_USER_PASSWORD, n_("isisfish.config.vcs.userPassword.description"), ""), - VCS_HOST_NAME(VCS.VCS_HOST_NAME, n_("isisfish.config.vcs.hostName.description"), "svn.forge.codelutin.com"), - VCS_PATH(VCS.VCS_PATH, n_("isisfish.config.vcs.remotePath.description"), "/svn/isis-fish-data"), + DATABASE_DIRECTORY("database.directory", n("isisfish.config.vcs.localDatabasePath.description"), "${isis.home.directory}" + File.separator + "isis-database"), + VCS_TYPE(VCS.VCS_TYPE, n("isisfish.config.vcs.type.description"), VCS.TYPE_SVN), + VCS_PROTOCOL(VCS.VCS_PROTOCOL, n("isisfish.config.vcs.protocol.description"), "http"), + VCS_USER_NAME(VCS.VCS_USER_NAME, n("isisfish.config.vcs.userName.description"), ""), + VCS_USER_PASSWORD(VCS.VCS_USER_PASSWORD, n("isisfish.config.vcs.userPassword.description"), ""), + VCS_HOST_NAME(VCS.VCS_HOST_NAME, n("isisfish.config.vcs.hostName.description"), "svn.forge.codelutin.com"), + VCS_PATH(VCS.VCS_PATH, n("isisfish.config.vcs.remotePath.description"), "/svn/isis-fish-data"), // community vsc - COMMUNITY_DATABASE_DIRECTORY("community.database.directory", n_("isisfish.config.vcs.localCommunityDatabasePath.description"), "${isis.home.directory}" + File.separator + "isis-community-database"), - VCS_COMMUNITY_TYPE("vcs.community.type", n_("isisfish.config.vcs.community.type.description"), VCS.TYPE_SVN), - VCS_COMMUNITY_PROTOCOL("vcs.community.protocole", n_("isisfish.config.vcs.community.protocol.description"), "http"), - VCS_COMMUNITY_USER_NAME("vcs.community.username", n_("isisfish.config.vcs.community.username.description"), ""), - VCS_COMMUNITY_PASSWORD("vcs.community.password", n_("isisfish.config.vcs.community.password.description"), ""), - VCS_COMMUNITY_HOST_NAME("vcs.community.hostname", n_("isisfish.config.vcs.community.hostname.description"), "svn.forge.codelutin.com"), - VCS_COMMUNITY_PATH("vcs.community.path", n_("isisfish.config.vcs.community.remotepath.description"), "/svn/isis-fish-community"), + COMMUNITY_DATABASE_DIRECTORY("community.database.directory", n("isisfish.config.vcs.localCommunityDatabasePath.description"), "${isis.home.directory}" + File.separator + "isis-community-database"), + VCS_COMMUNITY_TYPE("vcs.community.type", n("isisfish.config.vcs.community.type.description"), VCS.TYPE_SVN), + VCS_COMMUNITY_PROTOCOL("vcs.community.protocole", n("isisfish.config.vcs.community.protocol.description"), "http"), + VCS_COMMUNITY_USER_NAME("vcs.community.username", n("isisfish.config.vcs.community.username.description"), ""), + VCS_COMMUNITY_PASSWORD("vcs.community.password", n("isisfish.config.vcs.community.password.description"), ""), + VCS_COMMUNITY_HOST_NAME("vcs.community.hostname", n("isisfish.config.vcs.community.hostname.description"), "svn.forge.codelutin.com"), + VCS_COMMUNITY_PATH("vcs.community.path", n("isisfish.config.vcs.community.remotepath.description"), "/svn/isis-fish-community"), // misc options - USER_NAME("user.name", n_("isisfish.config.main.userName.description"), System.getProperty("user.name")), - SMTP_SERVER("smtpServer", n_("isisfish.config.main.smtpServer.description"), "smtp"), - USER_MAIL("userMail", n_("isisfish.config.main.userMail.description"), USER_NAME.key + "@" + VCS_HOST_NAME.key), - MAPPED_RESULT_MATRIX_VECTOR_CLASS("mapped.result.matrix.vector.class", n_("isisfish.config.mapped.result.matrix.vector.class.description"), DoubleBigVector.class.getName()), - CACHE_BACKEND_FACTORY_CLASS("cache.backend.factory.class", n_("isisfish.config.cache.backend.factory.class.description"), IsisCacheBackendOnGuava.IsisCacheBackendOnGuavaFactory.class.getName()); + USER_NAME("user.name", n("isisfish.config.main.userName.description"), System.getProperty("user.name")), + SMTP_SERVER("smtpServer", n("isisfish.config.main.smtpServer.description"), "smtp"), + USER_MAIL("userMail", n("isisfish.config.main.userMail.description"), USER_NAME.key + "@" + VCS_HOST_NAME.key), + MAPPED_RESULT_MATRIX_VECTOR_CLASS("mapped.result.matrix.vector.class", n("isisfish.config.mapped.result.matrix.vector.class.description"), DoubleBigVector.class.getName()), + CACHE_BACKEND_FACTORY_CLASS("cache.backend.factory.class", n("isisfish.config.cache.backend.factory.class.description"), IsisCacheBackendOnGuava.IsisCacheBackendOnGuavaFactory.class.getName()); public String key; public String description; @@ -1083,7 +1083,7 @@ */ @Override public String getDescription() { - return _(description); + return t(description); } /* @@ -1148,49 +1148,49 @@ ////////////////////////////////////////////////// public static enum Action { - HELP(n_("Show help"), OtherAction.class.getName() + "#help", "-h", "--help"), - VERSION(n_("Show version"), OtherAction.class.getName() + "#version", "-v", "--version"), + HELP(n("Show help"), OtherAction.class.getName() + "#help", "-h", "--help"), + VERSION(n("Show version"), OtherAction.class.getName() + "#version", "-v", "--version"), - IMPORT_EXPORT(n_(""), ImportAction.class.getName() + "#importExport", "--importExport"), - IMPORT_RULE(n_(""), ImportAction.class.getName() + "#importRule", "--importRule"), - IMPORT_SCRIPT(n_("Import one java file script source"), ImportAction.class.getName() + "#importScript", "--importScript"), - IMPORT_SIMULATION_PLAN(n_(""), ImportAction.class.getName() + "#importSimulationPlan", "--importSimulationPlan"), - IMPORT_SIMULATOR(n_(""), ImportAction.class.getName() + "#importSimulator", "--importSimulator"), - IMPORT_FORMULA(n_(""), ImportAction.class.getName() + "#importFormula", "--importFormula"), - IMPORT_REGION(n_(""), ImportAction.class.getName() + "#importRegion", "--importRegion"), - IMPORT_REGION_AND_RENAME(n_(""), ImportAction.class.getName() + "#importRegionAndRename", "--importRegionAndRename"), - IMPORT_SIMULATION(n_(""), ImportAction.class.getName() + "#importSimulation", "--importSimulation"), - IMPORT_SCRIPT_MODULE(n_("Import zipped file containing all scripts directory structure"), ImportAction.class.getName() + "#importScriptModule", "--importScriptModule"), + IMPORT_EXPORT(n(""), ImportAction.class.getName() + "#importExport", "--importExport"), + IMPORT_RULE(n(""), ImportAction.class.getName() + "#importRule", "--importRule"), + IMPORT_SCRIPT(n("Import one java file script source"), ImportAction.class.getName() + "#importScript", "--importScript"), + IMPORT_SIMULATION_PLAN(n(""), ImportAction.class.getName() + "#importSimulationPlan", "--importSimulationPlan"), + IMPORT_SIMULATOR(n(""), ImportAction.class.getName() + "#importSimulator", "--importSimulator"), + IMPORT_FORMULA(n(""), ImportAction.class.getName() + "#importFormula", "--importFormula"), + IMPORT_REGION(n(""), ImportAction.class.getName() + "#importRegion", "--importRegion"), + IMPORT_REGION_AND_RENAME(n(""), ImportAction.class.getName() + "#importRegionAndRename", "--importRegionAndRename"), + IMPORT_SIMULATION(n(""), ImportAction.class.getName() + "#importSimulation", "--importSimulation"), + IMPORT_SCRIPT_MODULE(n("Import zipped file containing all scripts directory structure"), ImportAction.class.getName() + "#importScriptModule", "--importScriptModule"), - LIST_EXPORT(n_(""), ExportAction.class.getName() + "#listExport", "--listExport"), - LIST_RULE(n_(""), ExportAction.class.getName() + "#listRule", "--listRule"), - LIST_SCRIPT(n_(""), ExportAction.class.getName() + "#listScript", "--listScript"), - LIST_SIMULATION_PLAN(n_(""), ExportAction.class.getName() + "#listSimulationPlan", "--listSimulationPlan"), - LIST_SIMULATOR(n_(""), ExportAction.class.getName() + "#listSimulator", "--listSimulator"), - LIST_FORMULA(n_(""), ExportAction.class.getName() + "#listFormula", "--listFormula"), - LIST_REGION(n_(""), ExportAction.class.getName() + "#listRegion", "--listRegion"), - LIST_SIMULATION(n_(""), ExportAction.class.getName() + "#listSimulation", "--listSimulation"), + LIST_EXPORT(n(""), ExportAction.class.getName() + "#listExport", "--listExport"), + LIST_RULE(n(""), ExportAction.class.getName() + "#listRule", "--listRule"), + LIST_SCRIPT(n(""), ExportAction.class.getName() + "#listScript", "--listScript"), + LIST_SIMULATION_PLAN(n(""), ExportAction.class.getName() + "#listSimulationPlan", "--listSimulationPlan"), + LIST_SIMULATOR(n(""), ExportAction.class.getName() + "#listSimulator", "--listSimulator"), + LIST_FORMULA(n(""), ExportAction.class.getName() + "#listFormula", "--listFormula"), + LIST_REGION(n(""), ExportAction.class.getName() + "#listRegion", "--listRegion"), + LIST_SIMULATION(n(""), ExportAction.class.getName() + "#listSimulation", "--listSimulation"), - EXPORT_EXPORT(n_(""), ExportAction.class.getName() + "#exportExport", "--exportExport"), - EXPORT_RULE(n_(""), ExportAction.class.getName() + "#exportRule", "--exportRule"), - EXPORT_SCRIPT(n_(""), ExportAction.class.getName() + "#exportScript", "--exportScript"), - EXPORT_SIMULATION_PLAN(n_(""), ExportAction.class.getName() + "#exportSimulationPlan", "--exportSimulationPlan"), - EXPORT_SIMULATOR(n_(""), ExportAction.class.getName() + "#exportSimulator", "--exportSimulator"), - EXPORT_FORMULA(n_(""), ExportAction.class.getName() + "#exportFormula", "--exportFormula"), - EXPORT_REGION(n_(""), ExportAction.class.getName() + "#exportRegion", "--exportRegion"), - EXPORT_SIMULATION(n_(""), ExportAction.class.getName() + "#exportSimulation", "--exportSimulation"), + EXPORT_EXPORT(n(""), ExportAction.class.getName() + "#exportExport", "--exportExport"), + EXPORT_RULE(n(""), ExportAction.class.getName() + "#exportRule", "--exportRule"), + EXPORT_SCRIPT(n(""), ExportAction.class.getName() + "#exportScript", "--exportScript"), + EXPORT_SIMULATION_PLAN(n(""), ExportAction.class.getName() + "#exportSimulationPlan", "--exportSimulationPlan"), + EXPORT_SIMULATOR(n(""), ExportAction.class.getName() + "#exportSimulator", "--exportSimulator"), + EXPORT_FORMULA(n(""), ExportAction.class.getName() + "#exportFormula", "--exportFormula"), + EXPORT_REGION(n(""), ExportAction.class.getName() + "#exportRegion", "--exportRegion"), + EXPORT_SIMULATION(n(""), ExportAction.class.getName() + "#exportSimulation", "--exportSimulation"), - VCS_SSH_CREATE_KEY(n_(""), VCSAction.class.getName() + "#sshCreateKey", "--sshCreateKey"), - VCS_UPDATE(n_(""), VCSAction.class.getName() + "#vcsUpdate", "--vcsUpdate"), - VCS_ADD(n_(""), VCSAction.class.getName() + "#vcsAdd", "--vcsAdd"), - VCS_REMOVE(n_(""), VCSAction.class.getName() + "#vcsRemove", "--vcsRemove"), - VCS_COMMIT(n_(""), VCSAction.class.getName() + "#vcsCommit", "--vcsCommit"), + VCS_SSH_CREATE_KEY(n(""), VCSAction.class.getName() + "#sshCreateKey", "--sshCreateKey"), + VCS_UPDATE(n(""), VCSAction.class.getName() + "#vcsUpdate", "--vcsUpdate"), + VCS_ADD(n(""), VCSAction.class.getName() + "#vcsAdd", "--vcsAdd"), + VCS_REMOVE(n(""), VCSAction.class.getName() + "#vcsRemove", "--vcsRemove"), + VCS_COMMIT(n(""), VCSAction.class.getName() + "#vcsCommit", "--vcsCommit"), - SIMULATE_WITH_REGION(n_(""), SimulationAction.class.getName() + "#simulateWithRegion", "--simulateWithRegion"), - SIMULATE_WITH_SIMULATION(n_(""), SimulationAction.class.getName() + "#simulateWithSimulation", "--simulateWithSimulation"), - SIMULATE_WITH_SIMULATION_AND_SCRIPT(n_(""), SimulationAction.class.getName() + "#simulateWithSimulationAndScript", "--simulateWithSimulationAndScript"), - SIMULATE_REMOTELLY(n_(""), SimulationAction.class.getName() + "#simulateRemotelly", "--simulateRemotelly"), - SIMULATE_REMOTELLY_WITH_PRESCRIPT(n_(""), SimulationAction.class.getName() + "#simulateRemotellyWithPreScript", "--simulateRemotellyWithPreScript"); + SIMULATE_WITH_REGION(n(""), SimulationAction.class.getName() + "#simulateWithRegion", "--simulateWithRegion"), + SIMULATE_WITH_SIMULATION(n(""), SimulationAction.class.getName() + "#simulateWithSimulation", "--simulateWithSimulation"), + SIMULATE_WITH_SIMULATION_AND_SCRIPT(n(""), SimulationAction.class.getName() + "#simulateWithSimulationAndScript", "--simulateWithSimulationAndScript"), + SIMULATE_REMOTELLY(n(""), SimulationAction.class.getName() + "#simulateRemotelly", "--simulateRemotelly"), + SIMULATE_REMOTELLY_WITH_PRESCRIPT(n(""), SimulationAction.class.getName() + "#simulateRemotellyWithPreScript", "--simulateRemotellyWithPreScript"); protected String description; protected String action; @@ -1203,7 +1203,7 @@ } public String getDescription() { - return _(description); + return t(description); } public String getAction() { Modified: trunk/src/main/java/fr/ifremer/isisfish/IsisFish.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/IsisFish.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/IsisFish.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2005 - 2012 Ifremer, CodeLutin, Chatellier Eric + * Copyright (C) 2005 - 2013 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 @@ -25,7 +25,7 @@ package fr.ifremer.isisfish; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Component; import java.awt.Dimension; @@ -58,7 +58,6 @@ import org.nuiton.i18n.init.DefaultI18nInitializer; import org.nuiton.math.matrix.MatrixFactory; import org.nuiton.topia.TopiaException; -import org.nuiton.util.FileUtil; import org.nuiton.util.Version; import org.nuiton.widget.SwingSession; @@ -67,6 +66,8 @@ import fr.ifremer.isisfish.cron.CronService; import fr.ifremer.isisfish.datastore.ExportStorage; import fr.ifremer.isisfish.datastore.FormuleStorage; +import fr.ifremer.isisfish.datastore.ObjectiveStorage; +import fr.ifremer.isisfish.datastore.OptimizationStorage; import fr.ifremer.isisfish.datastore.RegionStorage; import fr.ifremer.isisfish.datastore.RuleStorage; import fr.ifremer.isisfish.datastore.ScriptStorage; @@ -93,7 +94,7 @@ * * Created: 1 aout 2005 18:37:25 CEST * - * @author Benjamin POUSSIN <poussin@codelutin.com> + * @author Benjamin POUSSIN <poussin@codelutin.com> * @author chemit * @version $Revision$ * @@ -123,23 +124,24 @@ // permet de faire fonctionner la compilation en webstart System.setSecurityManager(null); + // set Rtype in jni mode + System.setProperty("R.type", "jni"); + // i18n is not inited here if (log.isInfoEnabled()) { log.info("Starting Isis-Fish " + IsisConfig.getVersion() + " with args : " + java.util.Arrays.toString(args)); log.info("Date: " + SimpleDateFormat.getInstance().format(new java.util.Date())); log.info("Java version: " + System.getProperty("java.runtime.version") + ", " + System.getProperty("java.vm.name")); - log.info("System arch: " + System.getProperty("os.arch")); - log.info("R_HOME: " + System.getenv("R_HOME") + ", R.type: " + System.getProperty("R.type")); + log.info("Plaform/arch: " + System.getProperty("os.name") + "/" + System.getProperty("os.arch")); + log.info("R_HOME: " + System.getenv("R_HOME")); log.info("PATH: " + System.getenv("PATH")); - log.info("java.library.path: " + System.getProperty("java.library.path")); - } // initialisation de l'application init(args); if (log.isDebugEnabled()) { - log.debug(_("isisfish.launch.init.done", config.getElapsedTimeAsString())); + log.debug(t("isisfish.launch.init.done", config.getElapsedTimeAsString())); } // action after init @@ -154,14 +156,14 @@ initCommunityVCS(); checkDuplicatedFiles(); } catch (Exception eee) { - log.warn(_("Error during vcs initialisation"), eee); + log.warn(t("Error during vcs initialisation"), eee); } // nuiton matrix semantics mapper MatrixFactory.setSemanticMapper(new IsisMatrixSemanticMapper()); if (log.isInfoEnabled()) { - log.info(_("isisfish.launching", config.getElapsedTimeAsString())); + log.info(t("isisfish.launching", config.getElapsedTimeAsString())); } // after init vcs and local data @@ -263,14 +265,14 @@ public boolean canDoAction(VCS vcs, VCSActionEvent action, File... files) { boolean result = true; if (action == VCSActionEvent.SWITCH_PROTOCOL) { - result = ask(_("isisfish.vcs.switchprotocol.confirm")); + result = ask(t("isisfish.vcs.switchprotocol.confirm")); if (!result) { // l'utilisateur ne souhaite pas changer de protocol, // on force le repo en read-only pour eviter les erreurs vcs.setWriteable(false); } } else if (action == VCSActionEvent.SWITCH) { - result = ask(_("isisfish.vcs.switchversion.confirm", IsisConfig.getVersion())); + result = ask(t("isisfish.vcs.switchversion.confirm", IsisConfig.getVersion())); if (!result) { // l'utilisateur ne souhaite pas changer de branche, // on force le repo en read-only pour eviter les erreurs @@ -288,7 +290,7 @@ } // FIXME maybe make a JAXX UI ? - JLabel labelModifiedFiles = new JLabel(_("isisfish.vcs.updaterepository.confirm")); + JLabel labelModifiedFiles = new JLabel(t("isisfish.vcs.updaterepository.confirm")); JTextArea areaModifiedFiles = new JTextArea(modifiedFiles); areaModifiedFiles.setEditable(false); areaModifiedFiles.setAutoscrolls(true); @@ -338,28 +340,28 @@ // Si le repo local exist mais n'est pas du bon type, on renome ce repertoire File local = config.getDatabaseDirectory(); if (log.isInfoEnabled()) { - log.info(_("Check state of local repository: %s", local)); + log.info(t("Check state of local repository: %s", local)); } if (local.exists()) { if (!vcs.isValidLocalRepository()) { if (log.isInfoEnabled()) { - log.info(_("Local repository exists but it's not valide for current vcs: %s", + log.info(t("Local repository exists but it's not valide for current vcs: %s", config.getOption(VCS.VCS_TYPE))); } - if (ask(_("isisfish.vcs.init.wrongprotocol", local))) { + if (ask(t("isisfish.vcs.init.wrongprotocol", local))) { File localBackup = new File(local.getParentFile(), local.getName() + "-" + new SimpleDateFormat("yyyy-mm-dd-HH-mm-ss").format(new java.util.Date())); if (log.isInfoEnabled()) { - log.info(_("Rename data directory to %s", localBackup)); + log.info(t("Rename data directory to %s", localBackup)); } if (!local.renameTo(localBackup)) { throw new IsisFishRuntimeException( "Can't rename local repository that don't use svn"); } } else { - log.info(_("Switch repository type to none")); + log.info(t("Switch repository type to none")); config.setOption(IsisConfig.Option.VCS_TYPE.key, VCS.TYPE_NONE); config.saveForUser(); vcs = VCSFactory.createVCS(config); @@ -370,10 +372,10 @@ // Si le repo local n'existe pas on fait un check out complet if (!local.exists()) { if (log.isInfoEnabled()) { - log.info(_("Local repository don't exist")); + log.info(t("Local repository don't exist")); } if (!vcs.isConnected()) { - ErrorHelper.showErrorDialog(_("isisfish.vcs.init.notfoundcantdownload", + ErrorHelper.showErrorDialog(t("isisfish.vcs.init.notfoundcantdownload", IsisConfig.getApiVersion()), null); } else { // Si on utilise pas le bon tag on change de tag @@ -387,14 +389,17 @@ vcs.checkout(tag, false); // ajoute les repertoires qu'il faut - SimulationPlanStorage.checkout(); ExportStorage.checkout(); FormuleStorage.checkout(); + ObjectiveStorage.checkout(); + OptimizationStorage.checkout(); RuleStorage.checkout(); ScriptStorage.checkout(); - SimulatorStorage.checkout(); SensitivityAnalysisStorage.checkout(); SensitivityExportStorage.checkout(); + SimulationPlanStorage.checkout(); + SimulatorStorage.checkout(); + // on ne prend pas toutes les simu ni toutes les regions vcs.update(new File(local, SimulationStorage.SIMULATION_PATH), false); @@ -429,7 +434,7 @@ // si on est sur une branche, on est en developpement, on ne fait donc rien if (vcs.getTag().startsWith("branches")) { - log.info(_("Use branches, switch not needed")); + log.info(t("Use branches, switch not needed")); } else { // Si on utilise pas le bon tag on change de tag Version tag = IsisConfig.getApiVersion(); @@ -447,7 +452,7 @@ // for now, display a simple warning message // si refus de l'utilisateur, c'est null aussi if (filesInClonflict != null && !filesInClonflict.isEmpty()) { - warnFileListDialog(_("isisfish.error.warning.title"), _("isisfish.vcs.switchtag.warningconflict"), filesInClonflict); + warnFileListDialog(t("isisfish.error.warning.title"), t("isisfish.vcs.switchtag.warningconflict"), filesInClonflict); } } @@ -455,7 +460,7 @@ // WARNING : this do the real svn update filesInClonflict = vcs.checkFileStatus(); if (filesInClonflict != null && !filesInClonflict.isEmpty()) { - warnFileListDialog(_("isisfish.error.warning.title"), _("isisfish.vcs.update.warningconflict"), filesInClonflict); + warnFileListDialog(t("isisfish.error.warning.title"), t("isisfish.vcs.update.warningconflict"), filesInClonflict); } } @@ -494,22 +499,22 @@ if (local.exists()) { if (!communityVcs.isValidLocalRepository()) { if (log.isInfoEnabled()) { - log.info(_("Local repository exists but it's not valide for current vcs: %s", + log.info(t("Local repository exists but it's not valide for current vcs: %s", config.getOption(VCS.VCS_TYPE))); } - if (ask(_("isisfish.vcs.init.wrongprotocol", local))) { + if (ask(t("isisfish.vcs.init.wrongprotocol", local))) { File localBackup = new File(local.getParentFile(), local.getName() + "-" + new SimpleDateFormat("yyyy-mm-dd-HH-mm-ss").format(new java.util.Date())); if (log.isInfoEnabled()) { - log.info(_("Rename data directory to %s", localBackup)); + log.info(t("Rename data directory to %s", localBackup)); } if (!local.renameTo(localBackup)) { throw new IsisFishRuntimeException( "Can't rename local repository that don't use svn"); } } else { - log.info(_("Switch repository type to none")); + log.info(t("Switch repository type to none")); config.setOption(IsisConfig.Option.VCS_COMMUNITY_TYPE.key, VCS.TYPE_NONE); config.saveForUser(); communityVcs = VCSFactory.createPublicVCS(config); @@ -520,10 +525,10 @@ // Si le repo local n'existe pas on fait un check out complet if (!local.exists()) { if (log.isInfoEnabled()) { - log.info(_("Local repository don't exist")); + log.info(t("Local repository don't exist")); } if (!communityVcs.isConnected()) { - ErrorHelper.showErrorDialog(_("isisfish.vcs.init.notfoundcantdownload", + ErrorHelper.showErrorDialog(t("isisfish.vcs.init.notfoundcantdownload", "trunk"), null); } else { // initialise le repo local @@ -536,7 +541,7 @@ // cleanup communityVcs.cleanup(null); - + // check protocol, user, host communityVcs.checkProtocol(); @@ -544,10 +549,10 @@ // WARNING : this do the real svn update List<File> filesInClonflict = communityVcs.checkFileStatus(); if (filesInClonflict != null && !filesInClonflict.isEmpty()) { - warnFileListDialog(_("isisfish.error.warning.title"), _("isisfish.vcs.update.warningconflict"), filesInClonflict); + warnFileListDialog(t("isisfish.error.warning.title"), t("isisfish.vcs.update.warningconflict"), filesInClonflict); } } - + // fin de l'init on supprime le vetoable du vcs communityVcs.remoteVetoableActionListener(asker); } @@ -595,7 +600,7 @@ comFile.renameTo(newFile); } } - + if (log.isDebugEnabled()) { long after = System.currentTimeMillis(); log.debug("Check corrumpted file in " + (after - before) + " ms"); @@ -614,7 +619,7 @@ // est illisible String conflictFilesString = ""; String separator = ""; - for(File file : conflictFiles) { + for (File file : conflictFiles) { conflictFilesString += separator + file.toString(); separator = "\n"; } @@ -653,9 +658,15 @@ // using non recompiled script due to dependency changes // this is the better solution found : // remove isis build directory - FileUtil.deleteRecursively(IsisFish.config.getCompileDirectory()); + try { + FileUtils.deleteDirectory(IsisFish.config.getCompileDirectory()); + } catch (IOException ex) { + if (log.isErrorEnabled()) { + log.error("Can't clear build directory", ex); + } + } - ErrorHelper.showErrorDialog(null, _("isisfish.error.linkageerror.message"), cause); + ErrorHelper.showErrorDialog(null, t("isisfish.error.linkageerror.message"), cause); } else { if (log.isErrorEnabled()) { @@ -677,13 +688,13 @@ // init simulater manager SimulationService.getService(); - + // init IsisTray IsisTray.getInstance(); - + // OpenMap sysout MapBean.suppressCopyright = true; - + // configure swing session // can't be in config ? getUserConfigDirectory() not static File isisConfigDirectory = new File(config.getUserConfigDirectory(), "isis-fish"); @@ -693,7 +704,7 @@ // lauch first UI (welcomeUI) WelcomeUI welcome = new WelcomeUI(); - welcome.setTitle(_("isisfish.welcome.title", IsisConfig.getVersion())); + welcome.setTitle(t("isisfish.welcome.title", IsisConfig.getVersion())); // Set to exit on close welcome.setDefaultCloseOperation(WelcomeUI.DO_NOTHING_ON_CLOSE); welcome.addWindowListener(new WindowAdapter() { @@ -709,7 +720,7 @@ quit(); } }); - + try { InputStream imageStream = WelcomeUI.class.getResourceAsStream("/images/simulation.gif"); Image image = ImageIO.read(imageStream); @@ -741,7 +752,7 @@ } else { if (log.isInfoEnabled()) { - log.info(_("isisfish.message.launchui.notlaunch")); + log.info(t("isisfish.message.launchui.notlaunch")); } } } Modified: trunk/src/main/java/fr/ifremer/isisfish/IsisTray.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/IsisTray.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/IsisTray.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,8 +25,8 @@ package fr.ifremer.isisfish; -import static org.nuiton.i18n.I18n._; -import static org.nuiton.i18n.I18n.n_; +import static org.nuiton.i18n.I18n.t; +import static org.nuiton.i18n.I18n.n; import java.awt.AWTException; import java.awt.SystemTray; @@ -69,7 +69,7 @@ protected static final ImageIcon TRAY_IMAGE_START = Resource.getIcon("/images/BulbG.gif"); /** Non running simulation tooltip text. */ - private static final String NO_SIMULATION_TEXT = n_("isisfish.tray.simulation.no"); + private static final String NO_SIMULATION_TEXT = n("isisfish.tray.simulation.no"); /** * Texte a utiliser pour afficher l'etat de la simulation en cours. @@ -78,10 +78,10 @@ * <li>1 = pas de temps courant de la simulation * <li>2 = nombre total de pas de temps attendu */ - private static final String SIMULATION_TEXT = n_("isisfish.tray.simulation"); + private static final String SIMULATION_TEXT = n("isisfish.tray.simulation"); /** System tray tooltip when multiple simulation are running. */ - private static final String MULTI_SIMULATION_TEXT = n_("isisfish.tray.simulation.multi"); + private static final String MULTI_SIMULATION_TEXT = n("isisfish.tray.simulation.multi"); /** Tray implementation instance. */ private static IsisTray instance = null; @@ -116,7 +116,7 @@ if (log.isInfoEnabled()) { log.info("Use system tray: " + instance.getClass().getName()); } - instance.setToolTip(_(NO_SIMULATION_TEXT)); + instance.setToolTip(t(NO_SIMULATION_TEXT)); SimulationService.getService().addSimulationServiceListener( instance); } @@ -132,7 +132,7 @@ SimulationControl control = job.getItem().getControl(); control.addPropertyChangeListener(this); getInstance().setToolTip( - _(SIMULATION_TEXT, control.getId(), control.getProgress(), + t(SIMULATION_TEXT, control.getId(), control.getProgress(), control.getProgressMax())); getInstance().setImage(TRAY_IMAGE_START); } @@ -144,7 +144,7 @@ public void simulationStop(SimulationService simService, SimulationJob job) { SimulationControl control = job.getItem().getControl(); control.removePropertyChangeListener(this); - getInstance().setToolTip(_(NO_SIMULATION_TEXT)); + getInstance().setToolTip(t(NO_SIMULATION_TEXT)); getInstance().setImage(TRAY_IMAGE_STOP); } @@ -163,7 +163,7 @@ public void propertyChange(PropertyChangeEvent evt) { SimulationControl control = (SimulationControl) evt.getSource(); getInstance().setToolTip( - _(SIMULATION_TEXT, control.getId(), control.getProgress(), + t(SIMULATION_TEXT, control.getId(), control.getProgress(), control.getProgressMax())); } @@ -248,7 +248,7 @@ /// ... add other items // construct a TrayIcon trayIcon = new java.awt.TrayIcon(TRAY_IMAGE_STOP.getImage(), - _(NO_SIMULATION_TEXT), null); + t(NO_SIMULATION_TEXT), null); trayIcon.setImageAutoSize(true); // set the TrayIcon properties //trayIcon.addActionListener(trayListener); @@ -258,14 +258,14 @@ tray.add(trayIcon); } catch (AWTException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.add.tray"), eee); + log.warn(t("isisfish.error.add.tray"), eee); } } // ... } else { // disable tray option in your application or // perform other actions - log.info(_("isisfish.message.tray.disabled")); + log.info(t("isisfish.message.tray.disabled")); } } } Modified: trunk/src/main/java/fr/ifremer/isisfish/actions/ExportAction.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/actions/ExportAction.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/actions/ExportAction.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2002 - 2010 Ifremer, Code Lutin, Benjamin Poussin + * Copyright (C) 2002 - 2012 Ifremer, Code Lutin, Benjamin Poussin, 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 @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.actions; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.util.ArrayList; @@ -33,10 +33,10 @@ import java.util.List; import java.util.regex.Pattern; +import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.util.FileUtil; -import org.nuiton.util.ApplicationConfig.Action.Step; +import org.nuiton.config.ApplicationConfig.Action.Step; import fr.ifremer.isisfish.IsisConfig; import fr.ifremer.isisfish.datastore.SimulationPlanStorage; @@ -153,12 +153,12 @@ public void exportRegion(File file, String name, boolean force) throws Exception { log.info("file:" + file + ", name:" + name); if (!force && file.exists()) { - throw new IllegalArgumentException(_("destination already exists %s use 'force' argument to force overwrite", file)); + throw new IllegalArgumentException(t("destination already exists %s use 'force' argument to force overwrite", file)); } if (!RegionStorage.exists(name)) { // fatal error - throw new IllegalArgumentException(_("could not found region %s", name)); + throw new IllegalArgumentException(t("could not found region %s", name)); } DataStorage data = RegionStorage.getRegion(name); if (data != null) { @@ -170,12 +170,12 @@ public void exportSimulation(File file, String name, boolean force) throws Exception { log.info("exportSimulation in file " + file + " ( " + name + ", force = " + force + ")"); if (!force && file.exists()) { - throw new IllegalArgumentException(_("destination already exists %s use 'force' argument to force overwrite", file)); + throw new IllegalArgumentException(t("destination already exists %s use 'force' argument to force overwrite", file)); } if (!SimulationStorage.exists(name)) { // fatal error - throw new IllegalArgumentException(_("could not found simulation %s", name)); + throw new IllegalArgumentException(t("could not found simulation %s", name)); } DataStorage data = SimulationStorage.getSimulation(name); if (data != null) { @@ -185,74 +185,74 @@ public void exportSimulationPlan(File file, String name, boolean force) throws Exception { if (!force && file.exists()) { - throw new IllegalArgumentException(_("destination already exists %s use 'force' argument to force overwrite", file)); + throw new IllegalArgumentException(t("destination already exists %s use 'force' argument to force overwrite", file)); } SimulationPlanStorage storage = SimulationPlanStorage.getSimulationPlan(name); if (!storage.exists()) { - throw new IllegalArgumentException(_("could not found %s", name)); + throw new IllegalArgumentException(t("could not found %s", name)); } String content = storage.getContent(); - FileUtil.writeString(file, content); + FileUtils.writeStringToFile(file, content); } public void exportRule(File file, String name, boolean force) throws Exception { if (!force && file.exists()) { - throw new IllegalArgumentException(_("destination already exists %s use 'force' argument to force overwrite", file)); + throw new IllegalArgumentException(t("destination already exists %s use 'force' argument to force overwrite", file)); } RuleStorage storage = RuleStorage.getRule(name); if (!storage.exists()) { - throw new IllegalArgumentException(_("could not found %s", name)); + throw new IllegalArgumentException(t("could not found %s", name)); } String content = storage.getContent(); - FileUtil.writeString(file, content); + FileUtils.writeStringToFile(file, content); } public void exportScript(File file, String name, boolean force) throws Exception { if (!force && file.exists()) { - throw new IllegalArgumentException(_("destination already exists %s use 'force' argument to force overwrite", file)); + throw new IllegalArgumentException(t("destination already exists %s use 'force' argument to force overwrite", file)); } ScriptStorage storage = ScriptStorage.getScript(name); if (!storage.exists()) { - throw new IllegalArgumentException(_("could not found %s", name)); + throw new IllegalArgumentException(t("could not found %s", name)); } String content = storage.getContent(); - FileUtil.writeString(file, content); + FileUtils.writeStringToFile(file, content); } public void exportExport(File file, String name, boolean force) throws Exception { if (!force && file.exists()) { - throw new IllegalArgumentException(_("destination already exists %s use 'force' argument to force overwrite", file)); + throw new IllegalArgumentException(t("destination already exists %s use 'force' argument to force overwrite", file)); } ExportStorage storage = ExportStorage.getExport(name); if (!storage.exists()) { - throw new IllegalArgumentException(_("could not found %s", name)); + throw new IllegalArgumentException(t("could not found %s", name)); } String content = storage.getContent(); - FileUtil.writeString(file, content); + FileUtils.writeStringToFile(file, content); } public void exportSimulator(File file, String name, boolean force) throws Exception { if (!force && file.exists()) { - throw new IllegalArgumentException(_("destination already exists %s use 'force' argument to force overwrite", file)); + throw new IllegalArgumentException(t("destination already exists %s use 'force' argument to force overwrite", file)); } SimulatorStorage storage = SimulatorStorage.getSimulator(name); if (!storage.exists()) { - throw new IllegalArgumentException(_("could not found %s", name)); + throw new IllegalArgumentException(t("could not found %s", name)); } String content = storage.getContent(); - FileUtil.writeString(file, content); + FileUtils.writeStringToFile(file, content); } public void exportFormula(File file, String category, String name, boolean force) throws Exception { if (!force && file.exists()) { - throw new IllegalArgumentException(_("destination already exists %s use 'force' argument to force overwrite", file)); + throw new IllegalArgumentException(t("destination already exists %s use 'force' argument to force overwrite", file)); } FormuleStorage storage = FormuleStorage.getFormule(category, name); if (!storage.exists()) { - throw new IllegalArgumentException(_("could not found %s", name)); + throw new IllegalArgumentException(t("could not found %s", name)); } String content = storage.getContent(); - FileUtil.writeString(file, content); + FileUtils.writeStringToFile(file, content); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/actions/ImportAction.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/actions/ImportAction.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/actions/ImportAction.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2002 - 2010 Ifremer, Code Lutin, Benjamin Poussin + * Copyright (C) 2002 - 2012 Ifremer, Code Lutin, Benjamin Poussin, 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 @@ -25,11 +25,11 @@ package fr.ifremer.isisfish.actions; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; -import org.nuiton.util.FileUtil; +import org.apache.commons.io.FileUtils; import fr.ifremer.isisfish.IsisConfig; import fr.ifremer.isisfish.datastore.SimulationPlanStorage; @@ -62,9 +62,9 @@ String name = file.getName(); SimulationPlanStorage storage = SimulationPlanStorage.getSimulationPlan(name); if(!force && storage.exists()) { - throw new IllegalArgumentException(_("destination already exists %s use \'force\' argument to force overwrite", storage.getFile())); + throw new IllegalArgumentException(t("destination already exists %s use \'force\' argument to force overwrite", storage.getFile())); } - String content = FileUtil.readAsString(file); + String content = FileUtils.readFileToString(file); storage.setContent(content); } @@ -72,9 +72,9 @@ String name = file.getName(); ExportStorage storage = ExportStorage.getExport(name); if(!force && storage.exists()) { - throw new IllegalArgumentException(_("destination already exists %s use \'force\' argument to force overwrite", storage.getFile())); + throw new IllegalArgumentException(t("destination already exists %s use \'force\' argument to force overwrite", storage.getFile())); } - String content = FileUtil.readAsString(file); + String content = FileUtils.readFileToString(file); storage.setContent(content); } @@ -82,9 +82,9 @@ String name = file.getName(); RuleStorage storage = RuleStorage.getRule(name); if(!force && storage.exists()) { - throw new IllegalArgumentException(_("destination already exists %s use \'force\' argument to force overwrite", storage.getFile())); + throw new IllegalArgumentException(t("destination already exists %s use \'force\' argument to force overwrite", storage.getFile())); } - String content = FileUtil.readAsString(file); + String content = FileUtils.readFileToString(file); storage.setContent(content); } @@ -92,9 +92,9 @@ String name = file.getName(); ScriptStorage storage = ScriptStorage.getScript(name); if(!force && storage.exists()) { - throw new IllegalArgumentException(_("destination already exists %s use \'force\' argument to force overwrite", storage.getFile())); + throw new IllegalArgumentException(t("destination already exists %s use \'force\' argument to force overwrite", storage.getFile())); } - String content = FileUtil.readAsString(file); + String content = FileUtils.readFileToString(file); storage.setContent(content); } @@ -102,22 +102,22 @@ String name = file.getName(); SimulatorStorage storage = SimulatorStorage.getSimulator(name); if(!force && storage.exists()) { - throw new IllegalArgumentException(_("destination already exists %s use \'force\' argument to force overwrite", storage.getFile())); + throw new IllegalArgumentException(t("destination already exists %s use \'force\' argument to force overwrite", storage.getFile())); } - String content = FileUtil.readAsString(file); + String content = FileUtils.readFileToString(file); storage.setContent(content); } public void importFormula(boolean force, String formulaType, File file) throws Exception { if (!FormuleStorage.getCategories().contains(formulaType)) { - throw new IllegalArgumentException(_("Could not found formule type %s autorised type are %s", formulaType, FormuleStorage.getCategories())); + throw new IllegalArgumentException(t("Could not found formule type %s autorised type are %s", formulaType, FormuleStorage.getCategories())); } String name = file.getName(); FormuleStorage storage = FormuleStorage.getFormule(formulaType, name); if(!force && storage.exists()) { - throw new IllegalArgumentException(_("destination already exists %s use \'force\' argument to force overwrite", storage.getFile())); + throw new IllegalArgumentException(t("destination already exists %s use \'force\' argument to force overwrite", storage.getFile())); } - String content = FileUtil.readAsString(file); + String content = FileUtils.readFileToString(file); storage.setContent(content); } @@ -142,7 +142,7 @@ public void importRegionAndRename(boolean force, File file, String name) throws Exception { if (RegionStorage.exists(name) && !force) { // fatal error - throw new IllegalArgumentException(_("region already exists %s use 'force' argument to force overwrite", name)); + throw new IllegalArgumentException(t("region already exists %s use 'force' argument to force overwrite", name)); } RegionStorage.importAndRenameZip(file, name); } Modified: trunk/src/main/java/fr/ifremer/isisfish/actions/SimulationAction.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/actions/SimulationAction.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/actions/SimulationAction.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2002 - 2011 Ifremer, Code Lutin, Benjamin Poussin, Chatellier Eric + * Copyright (C) 2002 - 2012 Ifremer, Code Lutin, Benjamin Poussin, 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 @@ -25,16 +25,16 @@ package fr.ifremer.isisfish.actions; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.io.FileInputStream; import java.util.Properties; +import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.util.ApplicationConfig.Action.Step; -import org.nuiton.util.FileUtil; +import org.nuiton.config.ApplicationConfig.Action.Step; import org.nuiton.util.ZipUtil; import fr.ifremer.isisfish.IsisConfig; @@ -97,7 +97,7 @@ RegionStorage.importAndRenameZip(region, regionName); } else { if (log.isWarnEnabled()) { - log.warn(_("Region %s allready exist in repository. Can't import", + log.warn(t("Region %s allready exist in repository. Can't import", regionName)); } } @@ -144,7 +144,7 @@ //simulation.getStorage().closeContext(); String simulationPrescriptContent = null; if (simulationPrescript != null && simulationPrescript.canRead()) { - simulationPrescriptContent = FileUtil.readAsString(simulationPrescript); + simulationPrescriptContent = FileUtils.readFileToString(simulationPrescript); } SimulationControl control = new SimulationControl(name); @@ -224,7 +224,7 @@ //simulation.getStorage().closeContext(); String simulationPrescriptContent = null; if (simulationPrescript != null && simulationPrescript.canRead()) { - simulationPrescriptContent = FileUtil.readAsString(simulationPrescript); + simulationPrescriptContent = FileUtils.readFileToString(simulationPrescript); } SimulationControl control = new SimulationControl(name); Deleted: trunk/src/main/java/fr/ifremer/isisfish/aspect/AspectClassLoader.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/aspect/AspectClassLoader.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/aspect/AspectClassLoader.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,164 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 1999 - 2010 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package fr.ifremer.isisfish.aspect; - -import java.io.IOException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; - -import org.codehaus.aspectwerkz.annotation.AspectAnnotationParser; -import org.codehaus.aspectwerkz.definition.AdviceDefinition; -import org.codehaus.aspectwerkz.definition.AspectDefinition; -import org.codehaus.aspectwerkz.definition.DeploymentScope; -import org.codehaus.aspectwerkz.definition.SystemDefinition; -import org.codehaus.aspectwerkz.definition.SystemDefinitionContainer; -import org.codehaus.aspectwerkz.expression.ExpressionInfo; -import org.codehaus.aspectwerkz.hook.impl.ClassPreProcessorHelper; -import org.codehaus.aspectwerkz.reflect.ClassInfo; -import org.codehaus.aspectwerkz.reflect.impl.asm.AsmClassInfo; -import org.codehaus.aspectwerkz.reflect.impl.java.JavaClassInfo; -import org.codehaus.aspectwerkz.transform.inlining.AspectModelManager; - -import sun.misc.Resource; -import sun.misc.URLClassPath; - -/** - * Aspectwerkz class loader. - * - * http://aspectwerkz.codehaus.org/xref/org/codehaus/aspectwerkz/transform/inli... - * - * Created: 30 mars 07 00:31:22 - * - * @author poussin - * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ - */ -public class AspectClassLoader extends URLClassLoader { - - /** - * Class loader constructor. - * - * @param urls parent urlclassloader url - * @param parent parent class loader - */ - public AspectClassLoader(URL[] urls, ClassLoader parent) { - super(urls, parent); - ClassPreProcessorHelper.initializePreProcessor(); - } - - @Override - protected Class<?> findClass(String name) throws ClassNotFoundException { - String path = name.replace('.', '/').concat(".class"); - URLClassPath ucp = new URLClassPath(getURLs()); - Resource res = ucp.getResource(path, false); - if (res != null) { - //definePackage(name.substring(0, name.lastIndexOf(".")), null, null); - try { - byte[] b = res.getBytes(); - byte[] transformed = ClassPreProcessorHelper.defineClass0Pre(this, name, b, 0, b.length, null); - return defineClass(name, transformed, 0, transformed.length); - } catch (IOException e) { - throw new ClassNotFoundException("Can't build aspect for class", e); - } - } else { - throw new ClassNotFoundException(name); - } - } - - /** - * Register new aspect. - * - * @param aspectClass aspect class to register - */ - public void deploy(Class<?> aspectClass) { - String className = aspectClass.getName(); - try { - aspectClass = Class.forName(className, false, this); - } catch (ClassNotFoundException e) { - throw new RuntimeException("could not load class [" + className + "] in class loader [" + this + "]"); - } - - final ClassInfo aspectClassInfo = JavaClassInfo.getClassInfo(aspectClass); - - // create a new aspect def and fill it up with the annotation def from the aspect class - final SystemDefinition systemDef = SystemDefinitionContainer.getVirtualDefinitionAt(this); - final AspectDefinition newAspectDef = new AspectDefinition(className, aspectClassInfo, systemDef); - getNewExpressionsForAspect(aspectClass, newAspectDef, systemDef, DeploymentScope.MATCH_ALL); - } - - /** - * Returns a set with the new expressions for the advice in the aspect to deploy. - * - * @param aspectClass - * @param newAspectDef - * @param newAspectDef - * @param systemDef - * @param deploymentScope - * @return a set with the new expressions - */ - private Set getNewExpressionsForAspect(final Class aspectClass, - final AspectDefinition newAspectDef, - final SystemDefinition systemDef, - final DeploymentScope deploymentScope) { - final ClassLoader aspectLoader = aspectClass.getClassLoader(); - final String aspectName = aspectClass.getName(); - - final ClassInfo classInfo = AsmClassInfo.getClassInfo(aspectName, aspectLoader); - - AspectModelManager.defineAspect(classInfo, newAspectDef, aspectLoader); - - AspectAnnotationParser.parse(classInfo, newAspectDef, aspectLoader); - - AspectDefinition aspectDef = systemDef.getAspectDefinition(aspectName); - if (aspectDef != null) { - // if in def already reuse some of the settings that can have been overridded by XML def - newAspectDef.setContainerClassName(aspectDef.getContainerClassName()); - newAspectDef.setDeploymentModel(aspectDef.getDeploymentModel()); - } - - systemDef.addAspectOverwriteIfExists(newAspectDef); - - final Set newExpressions = new HashSet(); - for (Iterator it2 = newAspectDef.getAdviceDefinitions().iterator(); it2.hasNext();) { - AdviceDefinition adviceDef = (AdviceDefinition) it2.next(); - ExpressionInfo oldExpression = adviceDef.getExpressionInfo(); - if (oldExpression == null) { - continue; - } - // deploymentHandle.registerDefinitionChange(adviceDef, oldExpression); - - final ExpressionInfo newExpression = deploymentScope.newExpressionInfo(oldExpression); - adviceDef.setExpressionInfo(newExpression); - newExpressions.add(newExpression); - } - return newExpressions; - } -} Copied: trunk/src/main/java/fr/ifremer/isisfish/aspect/AspectJUrlClassLoader.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/aspect/AspectJUrlClassLoader.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/aspect/AspectJUrlClassLoader.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/aspect/AspectJUrlClassLoader.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,156 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2013 Ifremer, Code Lutin, 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.aspect; + +import java.io.IOException; +import java.net.URL; +import java.security.CodeSource; +import java.util.HashMap; +import java.util.Map; + +import org.aspectj.bridge.AbortException; +import org.aspectj.weaver.bcel.ExtensibleURLClassLoader; +import org.aspectj.weaver.tools.Trace; +import org.aspectj.weaver.tools.TraceFactory; +import org.aspectj.weaver.tools.WeavingClassLoader; + +public class AspectJUrlClassLoader extends ExtensibleURLClassLoader implements WeavingClassLoader { + + public static final String WEAVING_CLASS_PATH = "aj.class.path"; + public static final String WEAVING_ASPECT_PATH = "aj.aspect.path"; + + private URL[] aspectURLs; + private AspectJWeavingAdaptor adaptor; + private boolean initializingAdaptor; + private Map generatedClasses = new HashMap(); /* String -> byte[] */ + + private static Trace trace = TraceFactory.getTraceFactory().getTrace(AspectJUrlClassLoader.class); + + public AspectJUrlClassLoader(URL[] urls, ClassLoader parent) { + super(urls, parent); + if (trace.isTraceEnabled()) + trace.enter("<init>", this, new Object[] { urls, parent }); + if (trace.isTraceEnabled()) + trace.exit("<init>"); + + adaptor = new AspectJWeavingAdaptor(getParent(), this); + } + + private static String getAspectPath() { + return System.getProperty(WEAVING_ASPECT_PATH, ""); + } + + private static String getClassPath() { + return System.getProperty(WEAVING_CLASS_PATH, ""); + } + + protected void addURL(URL url) { + adaptor.addURL(url); + super.addURL(url); + } + + /** + * Override to weave class using WeavingAdaptor + */ + protected Class defineClass(String name, byte[] b, CodeSource cs) throws IOException { + if (trace.isTraceEnabled()) + trace.enter("defineClass", this, new Object[] { name, b, cs }); + // System.err.println("? WeavingURLClassLoader.defineClass(" + name + ", [" + b.length + "])"); + byte orig[] = b; + /* Avoid recursion during adaptor initialization */ + if (!initializingAdaptor) { + + /* Need to defer creation because of possible recursion during constructor execution */ + if (adaptor == null && !initializingAdaptor) { + //createAdaptor(); + } + + try { + b = adaptor.weaveClass(name, b, false); + } catch (AbortException ex) { + trace.error("defineClass", ex); + throw ex; + } catch (Throwable th) { + trace.error("defineClass", th); + } + } + Class clazz; + + // On error, define the original form of the class and log the issue + try { + clazz= super.defineClass(name, b, cs); + } catch (Throwable th) { + trace.error("Weaving class problem. Original class has been returned. The error was caused because of: " + th, th); + clazz= super.defineClass(name, orig, cs); + } + if (trace.isTraceEnabled()) + trace.exit("defineClass", clazz); + return clazz; + } + + /** + * Override to find classes generated by WeavingAdaptor + */ + protected byte[] getBytes(String name) throws IOException { + byte[] bytes = super.getBytes(name); + + if (bytes == null) { + // return adaptor.findClass(name); + return (byte[]) generatedClasses.remove(name); + } + + return bytes; + } + + /** + * Implement method from WeavingClassLoader + */ + public URL[] getAspectURLs() { + return aspectURLs; + } + + public void acceptClass (String name, byte[] classBytes, byte[] weavedBytes) { + generatedClasses.put(name, weavedBytes); + } + + public void deploy(Class<?> aspectClass) { + byte[] result = adaptor.deploy(aspectClass); + // this classloader need to be implemented in "local first" strategy + // and aspectized class must be forced into current classloader + // otherwize, aspectj will complain about missing 'aspectOf' methods + defineClass(aspectClass.getName(), result, 0, result.length); + } + + /** + * Mark classloader as configured with aspects and tell to prepare for + * weaving. + * + * Must call this method to avoid NPE in aspectj weaver. + */ + public void prepare() { + adaptor.prepare(); + } +} Copied: trunk/src/main/java/fr/ifremer/isisfish/aspect/AspectJWeavingAdaptor.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/aspect/AspectJWeavingAdaptor.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/aspect/AspectJWeavingAdaptor.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/aspect/AspectJWeavingAdaptor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,237 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2013 Ifremer, Code Lutin, 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.aspect; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.aspectj.apache.bcel.classfile.ClassParser; +import org.aspectj.apache.bcel.classfile.JavaClass; +import org.aspectj.bridge.IMessageHandler; +import org.aspectj.util.FileUtil; +import org.aspectj.util.LangUtil; +import org.aspectj.weaver.CrosscuttingMembersSet; +import org.aspectj.weaver.IClassFileProvider; +import org.aspectj.weaver.IUnwovenClassFile; +import org.aspectj.weaver.IWeaveRequestor; +import org.aspectj.weaver.ResolvedType; +import org.aspectj.weaver.bcel.BcelObjectType; +import org.aspectj.weaver.bcel.BcelWeaver; +import org.aspectj.weaver.bcel.BcelWorld; +import org.aspectj.weaver.bcel.UnwovenClassFile; +import org.aspectj.weaver.tools.WeavingAdaptor; +import org.aspectj.weaver.tools.WeavingClassLoader; +import org.aspectj.weaver.tools.cache.SimpleCache; +import org.aspectj.weaver.tools.cache.SimpleCacheFactory; + +public class AspectJWeavingAdaptor extends WeavingAdaptor { + + protected ClassLoader parentLoader; + + protected CrosscuttingMembersSet xcutSet; + + public AspectJWeavingAdaptor(ClassLoader parentLoader, WeavingClassLoader loader) { + this.parentLoader = parentLoader; + + generatedClassHandler = loader; + init((ClassLoader)loader, getFullClassPath((ClassLoader) loader)); + } + + /** + * Initialize the WeavingAdapter + * @param loader ClassLoader used by this adapter; which can be null + * @param classPath classpath of this adapter + * @param aspectPath list of aspect paths + */ + private void init(ClassLoader loader, List<String> classPath) { + try { + //XXX call to private code "abortOnError = true;" + Field abortOnErrorField = WeavingAdaptor.class.getDeclaredField("abortOnError"); + abortOnErrorField.setAccessible(true); + abortOnErrorField.set(this, true); + + createMessageHandler(); + + info("using classpath: " + classPath); + //info("using aspectpath: " + aspectPath); + + Field messageHandlerField = WeavingAdaptor.class.getDeclaredField("messageHandler"); + messageHandlerField.setAccessible(true); + IMessageHandler messageHandler = (IMessageHandler)messageHandlerField.get(this); + bcelWorld = new BcelWorld(classPath, messageHandler, null); + bcelWorld.setXnoInline(false); + bcelWorld.getLint().loadDefaultProperties(); + if (LangUtil.is15VMOrGreater()) { + bcelWorld.setBehaveInJava5Way(true); + } + + weaver = new BcelWeaver(bcelWorld); + //registerAspectLibraries(aspectPath); + //initializeCache(loader, aspectPath, null, getMessageHandler()); + + //XXX call to private code "enabled = true;" + Field enabledField = WeavingAdaptor.class.getDeclaredField("enabled"); + enabledField.setAccessible(true); + enabledField.set(this, true); + + // get private field instance + //XXX call to private code "xcutSet = weaver.xcutSet" + Field xcutSetField = BcelWeaver.class.getDeclaredField("xcutSet"); + xcutSetField.setAccessible(true); + xcutSet = (CrosscuttingMembersSet) xcutSetField.get(weaver); + + } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + public byte[] deploy(Class<?> aspectClass) { + byte[] result = null; + try { + String name = aspectClass.getName(); + InputStream is = AspectJWeavingAdaptor.class.getResourceAsStream("/" + name.replace('.', '/') + ".class"); + byte[] bytes = FileUtil.readAsByteArray(is); + is.close(); + ClassParser parser = new ClassParser(new ByteArrayInputStream(bytes), name); + + JavaClass jc = parser.parse(); + BcelObjectType bcType = bcelWorld.addSourceObjectType(jc, false); + ResolvedType type = bcType.getResolvedTypeX(); + xcutSet.addOrReplaceAspect(type); + + WeavingClassFileProvider2 wcp = new WeavingClassFileProvider2(name, bytes); + wcp.setApplyAtAspectJMungersOnly(); + weaver.weave(wcp); + result = wcp.getBytes(); + + } catch (IOException e) { + throw new RuntimeException("Can't create aspect", e); + } + + return result; + } + + /** + * Mark bcel weaver ready for weaving classes. + */ + public void prepare() { + weaver.prepareForWeave(); + } + + private class WeavingClassFileProvider2 implements IClassFileProvider { + + private final UnwovenClassFile unwovenClass; + private final List<UnwovenClassFile> unwovenClasses = new ArrayList<UnwovenClassFile>(); + private IUnwovenClassFile wovenClass; + private boolean isApplyAtAspectJMungersOnly = false; + + public WeavingClassFileProvider2(String name, byte[] bytes) { + ensureDelegateInitialized(name, bytes); + this.unwovenClass = new UnwovenClassFile(name, name /*delegateForCurrentClass.getResolvedTypeX().getName()*/, bytes); + this.unwovenClasses.add(unwovenClass); + + if (shouldDump(name.replace('/', '.'), true)) { + dump(name, bytes, true); + } + + } + + public void setApplyAtAspectJMungersOnly() { + isApplyAtAspectJMungersOnly = true; + } + + public boolean isApplyAtAspectJMungersOnly() { + return isApplyAtAspectJMungersOnly; + } + + public byte[] getBytes() { + if (wovenClass != null) { + return wovenClass.getBytes(); + } else { + return unwovenClass.getBytes(); + } + } + + public Iterator<UnwovenClassFile> getClassFileIterator() { + return unwovenClasses.iterator(); + } + + public IWeaveRequestor getRequestor() { + return new IWeaveRequestor() { + + public void acceptResult(IUnwovenClassFile result) { + if (wovenClass == null) { + wovenClass = result; + String name = result.getClassName(); + if (shouldDump(name.replace('/', '.'), false)) { + dump(name, result.getBytes(), false); + } + } else { + // Classes generated by weaver e.g. around closure advice + String className = result.getClassName(); + byte[] resultBytes = result.getBytes(); + + if (SimpleCacheFactory.isEnabled()) { + SimpleCache lacache=SimpleCacheFactory.createSimpleCache(); + lacache.put(result.getClassName(), wovenClass.getBytes(), result.getBytes()); + lacache.addGeneratedClassesNames(wovenClass.getClassName(), wovenClass.getBytes(), result.getClassName()); + } + + generatedClasses.put(className, result); + generatedClasses.put(wovenClass.getClassName(), result); + generatedClassHandler.acceptClass(className, null, resultBytes); + } + } + + public void processingReweavableState() { + } + + public void addingTypeMungers() { + } + + public void weavingAspects() { + } + + public void weavingClasses() { + } + + public void weaveCompleted() { + // ResolvedType.resetPrimitives(); + if (delegateForCurrentClass != null) { + delegateForCurrentClass.weavingCompleted(); + } + // ResolvedType.resetPrimitives(); + // bcelWorld.discardType(typeBeingProcessed.getResolvedTypeX()); // work in progress + } + }; + } + } +} Modified: trunk/src/main/java/fr/ifremer/isisfish/aspect/CacheAspect.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/aspect/CacheAspect.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/aspect/CacheAspect.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2006 - 2010 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin + * Copyright (C) 2006 - 2013 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -30,13 +30,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.codehaus.aspectwerkz.annotation.Around; -import org.codehaus.aspectwerkz.annotation.Aspect; -import org.codehaus.aspectwerkz.annotation.Expression; -import org.codehaus.aspectwerkz.definition.Pointcut; -import org.codehaus.aspectwerkz.joinpoint.JoinPoint; -import org.codehaus.aspectwerkz.joinpoint.MethodRtti; -import org.codehaus.aspectwerkz.joinpoint.MethodSignature; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; import fr.ifremer.isisfish.simulator.SimulationContext; import fr.ifremer.isisfish.util.IsisCache; @@ -52,14 +49,14 @@ * Last update: $Date$ * by : $Author$ */ -@Aspect("perJVM") +@Aspect public class CacheAspect { /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(CacheAspect.class); - @Expression("execution(* scripts..*(..))") - Pointcut scriptsMethod; + //@Expression("execution(* scripts..*(..))") + //Pointcut scriptsMethod; public CacheAspect() { } @@ -74,16 +71,16 @@ IsisCache result = context.getCache(); return result; } - - @Around("scriptsMethod") - public Object call(final JoinPoint jp) throws Throwable { + + @Around("execution(* scripts..*(..))") + public Object call(final ProceedingJoinPoint jp) throws Throwable { Method method = ((MethodSignature)jp.getSignature()).getMethod(); - Object[] args = ((MethodRtti)jp.getRtti()).getParameterValues(); + Object[] args = jp.getArgs(); Object result = getCache().get(method, args, jp); if (log.isTraceEnabled()) { log.trace(((MethodSignature)jp.getSignature()).getMethod() - + " args " + Arrays.toString(((MethodRtti)jp.getRtti()).getParameterValues()) + + " args " + Arrays.toString(jp.getArgs()) + " result = " + result); } return result; Modified: trunk/src/main/java/fr/ifremer/isisfish/aspect/RuleAspect.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/aspect/RuleAspect.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/aspect/RuleAspect.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -27,9 +27,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.codehaus.aspectwerkz.annotation.Around; -import org.codehaus.aspectwerkz.annotation.Aspect; -import org.codehaus.aspectwerkz.joinpoint.JoinPoint; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; import fr.ifremer.isisfish.datastore.SimulationInformation; import fr.ifremer.isisfish.datastore.SimulationStorage; @@ -50,7 +51,7 @@ * Last update : $Date$ * By : $Author$ */ -@Aspect("perInstance") +@Aspect public class RuleAspect { /** @@ -71,7 +72,7 @@ * @throws Throwable */ @Around("execution(* rules.*.init(..))") - public Object initCall(final JoinPoint jp) throws Throwable { + public Object initCall(final ProceedingJoinPoint jp) throws Throwable { Object result = makeTimedCall(jp, State.INIT); return result; @@ -86,7 +87,7 @@ * @throws Throwable */ @Around("execution(* rules.*.preAction(..))") - public Object initPreCall(final JoinPoint jp) throws Throwable { + public Object initPreCall(final ProceedingJoinPoint jp) throws Throwable { Object result = makeTimedCall(jp, State.PRE); return result; @@ -100,7 +101,7 @@ * @throws Throwable */ @Around("execution(* rules.*.postAction(..))") - public Object initPostCall(final JoinPoint jp) throws Throwable { + public Object initPostCall(final ProceedingJoinPoint jp) throws Throwable { Object result = makeTimedCall(jp, State.POST); return result; @@ -113,10 +114,10 @@ * @param state state * @throws Throwable */ - protected Object makeTimedCall(JoinPoint jp, State state) throws Throwable { + protected Object makeTimedCall(ProceedingJoinPoint jp, State state) throws Throwable { if (log.isTraceEnabled()) { - log.trace("Rule aspect called : " + jp.getCalleeClass().getSimpleName()); + log.trace("Rule aspect called : " + jp.getTarget().getClass().getSimpleName()); } // get time before @@ -155,7 +156,7 @@ if (simulation != null) { // get rule information - Class<?> calleeClass = jp.getCalleeClass(); + Class<?> calleeClass = jp.getTarget().getClass(); String ruleName = calleeClass.getSimpleName(); SimulationInformation info = simulation.getInformation(); Modified: trunk/src/main/java/fr/ifremer/isisfish/aspect/TraceAspect.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/aspect/TraceAspect.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/aspect/TraceAspect.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -26,21 +26,14 @@ package fr.ifremer.isisfish.aspect; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.codehaus.aspectwerkz.annotation.After; -import org.codehaus.aspectwerkz.annotation.AfterThrowing; -import org.codehaus.aspectwerkz.annotation.Aspect; -import org.codehaus.aspectwerkz.annotation.Before; -import org.codehaus.aspectwerkz.annotation.Expression; -import org.codehaus.aspectwerkz.definition.Pointcut; -import org.codehaus.aspectwerkz.joinpoint.JoinPoint; -import org.codehaus.aspectwerkz.joinpoint.MethodSignature; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.reflect.MethodSignature; -import fr.ifremer.isisfish.IsisFishRuntimeException; import fr.ifremer.isisfish.simulator.SimulationContext; import fr.ifremer.isisfish.util.Trace; @@ -58,18 +51,15 @@ * Last update: $Date$ * by : $Author$ */ -@Aspect("perJVM") +@Aspect public class TraceAspect { - /** to use log facility, just put in your code: log.info("..."); */ - static private Log log = LogFactory.getLog(TraceAspect.class); - - @Expression("execution(* scripts..*(..))" + /*@Pointcut("execution(* scripts..*(..))" + " || execution(* simulators..*(..))" + " || execution(* rules..*(..)) " + " || execution(* simulationplans..*(..)) " + " || execution(* formules..*(..))") - Pointcut executeMethod; + Pointcut executeMethod;*/ public TraceAspect() { } @@ -85,18 +75,31 @@ return result; } - @Before("executeMethod") + @Before("execution(* scripts..*(..))" + + " || execution(* simulators..*(..))" + + " || execution(* rules..*(..)) " + + " || execution(* simulationplans..*(..)) " + + " || execution(* formules..*(..))") public void traceBeforeExecute(JoinPoint jp) { getTrace().traceBefore(); } - @AfterThrowing(type = "java.lang.Exception", pointcut = "executeMethod") - public void traceAfterThrowingExecute(JoinPoint jp) { + @AfterThrowing(throwing = "ex", + pointcut = "execution(* scripts..*(..))" + + " || execution(* simulators..*(..))" + + " || execution(* rules..*(..)) " + + " || execution(* simulationplans..*(..)) " + + " || execution(* formules..*(..))") + public void traceAfterThrowingExecute(JoinPoint jp, Exception ex) { // si une exeption est leve, il faut faire la meme chose traceAfterExecute(jp); } - @After("executeMethod") + @After("execution(* scripts..*(..))" + + " || execution(* simulators..*(..))" + + " || execution(* rules..*(..)) " + + " || execution(* simulationplans..*(..)) " + + " || execution(* formules..*(..))") public void traceAfterExecute(JoinPoint jp) { Method method = ((MethodSignature) jp.getSignature()).getMethod(); getTrace().traceAfterCall(method); Modified: trunk/src/main/java/fr/ifremer/isisfish/aspect/package-info.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/aspect/package-info.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/aspect/package-info.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 1999 - 2010 Ifremer, CodeLutin + * Copyright (C) 1999 - 2013 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 @@ -27,8 +27,8 @@ * * Contains two aspects : * <ul> - * <li>{@link fr.ifremer.isisfish.aspect.Cache} : cache aspect</li> - * <li>{@link fr.ifremer.isisfish.aspect.Trace} : trace expect</li> + * <li>{@link fr.ifremer.isisfish.aspect.CacheAspect} : cache aspect</li> + * <li>{@link fr.ifremer.isisfish.aspect.TraceAspect} : trace expect</li> * <li>{@link fr.ifremer.isisfish.aspect.RuleAspect} : rule timing aspect</li> * </ul> */ Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/CodeSourceStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/CodeSourceStorage.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/CodeSourceStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -30,7 +30,7 @@ import java.util.Collections; import java.util.List; -import org.nuiton.util.FileUtil; +import org.apache.commons.io.FileUtils; import fr.ifremer.isisfish.IsisFish; import fr.ifremer.isisfish.IsisFishRuntimeException; @@ -96,7 +96,7 @@ /** * Get non empty location. * - * @param location current location (if empty, return {@link Location#All}. + * @param location current location (if empty, return {@link Location#ALL}. */ protected static Location[] nonEmptyLocation(Location... location) { Location[] locs = location; @@ -200,7 +200,7 @@ content = ""; } else { try { - content = FileUtil.readAsString(getFile()); + content = FileUtils.readFileToString(getFile()); lastContentUpdate = System.nanoTime(); lastContentLength = getFile().length(); } catch (IOException eee) { @@ -231,7 +231,7 @@ public void setContent(String content, boolean saveToFile) throws IOException { this.content = content; if (saveToFile) { - FileUtil.writeString(getFile(), content, "utf-8"); + FileUtils.writeStringToFile(getFile(), content, "utf-8"); lastContentUpdate = System.nanoTime(); lastContentLength = getFile().length(); } Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/DataStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/DataStorage.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/DataStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2006 - 2010 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin + * Copyright (C) 2006 - 2014 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin, 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 @@ -25,24 +25,24 @@ package fr.ifremer.isisfish.datastore; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.io.IOException; import java.util.List; import java.util.Properties; +import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaContextFactory; import org.nuiton.topia.TopiaException; import org.nuiton.topia.TopiaNotFoundException; -import org.nuiton.util.FileUtil; import org.nuiton.util.ZipUtil; +import fr.ifremer.isisfish.IsisFish; import fr.ifremer.isisfish.IsisFishRuntimeException; -import fr.ifremer.isisfish.IsisFish; /** * Class abstraite dont herite tous les storages qui on besoin d'un TopiaContext @@ -123,9 +123,10 @@ TopiaContext tx = getStorage().beginTransaction(); tx.backup(file, true); - tx.closeContext(); + //tx.closeContext(); + closeStorage(); } catch (TopiaException eee) { - throw new IsisFishRuntimeException(_("isisfish.error.prepare.data"), eee); + throw new IsisFishRuntimeException(t("isisfish.error.prepare.data"), eee); } } @@ -241,7 +242,7 @@ root.clear(true); } } catch (TopiaException eee) { - throw new StorageException(_("isisfish.error.delete.database"), eee); + throw new StorageException(t("isisfish.error.delete.database"), eee); } super.delete(cvsDelete); } @@ -280,7 +281,7 @@ if (file.equals(getDataBackupFile())) { backupFile = target; } - FileUtil.copy(file, target); + FileUtils.copyFile(file, target); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ExportStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/ExportStorage.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ExportStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,21 +25,19 @@ package fr.ifremer.isisfish.datastore; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.util.List; import java.util.Map; -import org.apache.commons.collections.map.ReferenceMap; +import org.apache.commons.collections4.map.ReferenceMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import fr.ifremer.isisfish.IsisFish; -import fr.ifremer.isisfish.IsisFishException; import fr.ifremer.isisfish.export.Export; import fr.ifremer.isisfish.util.Doc; -import fr.ifremer.isisfish.util.Docable; import fr.ifremer.isisfish.vcs.VCSException; /** @@ -48,7 +46,7 @@ * * Created: 18 août 2005 15:07:36 CEST * - * @author Grégoire DESSARD <dessard@codelutin.com> + * @author Grégoire DESSARD <dessard@codelutin.com> * @version $Revision$ * * Last update: $Date$ @@ -64,8 +62,8 @@ /** Template freemarker pour les scripts d'export . */ public static final String EXPORT_TEMPLATE = "templates/script/export.ftl"; - @SuppressWarnings("unchecked") - private static Map<String, ExportStorage> exportCache = (Map<String, ExportStorage>) new ReferenceMap(); + /** Instance cache. */ + private static Map<String, ExportStorage> exportCache = new ReferenceMap<String, ExportStorage>(); /** * Constructeur. @@ -101,17 +99,6 @@ } /** - * Retourne une nouvelle instance de la regle. Compile le fichier si besoin - * - * @return une nouvelle instance de la classe d'export - * @throws IsisFishException - */ - public Export getNewExportInstance() throws IsisFishException { - Object result = getNewInstance(); - return (Export) result; - } - - /** * Retourne le storage pour l'export demandée * * @param name le nom de l'export souhaitée @@ -165,22 +152,21 @@ } /** - * <b>Be ware this method require to instanciate a Export, so + * <b>Be ware this method require to instantiate a Export, so * it would be better to call as often as possible.</b> * - * @return the description of the instanciate Export + * @return the description of the instantiate Export * @see Doc - * @see Docable */ public String getDescription() { String result = null; try { - Export export = getNewExportInstance(); + Export export = getNewInstance(); if (export != null) { result = export.getDescription(); } } catch (Exception e) { - log.warn(_("isisfish.error.not.found.description",this)); + log.warn(t("isisfish.error.not.found.description",this)); } return result; } Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/FormuleStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/FormuleStorage.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/FormuleStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -33,7 +33,7 @@ import java.util.Set; import java.util.TreeSet; -import org.apache.commons.collections.map.ReferenceMap; +import org.apache.commons.collections4.map.ReferenceMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaContext; @@ -59,12 +59,20 @@ * by : $Author$ */ public class FormuleStorage extends CodeSourceStorage implements Formule { - + + /** + * Logger for this class + */ + private static final Log log = LogFactory.getLog(FormuleStorage.class); + public static final String FORMULE_PATH = "formules"; - + /** Template freemarker pour les formules. */ public static final String FORMULE_TEMPLATE = "templates/script/equation.ftl"; - + + /** Instance cache. */ + static private Map<String, FormuleStorage> formulesCache = new ReferenceMap<>(); + /** * la categorie de la formule */ @@ -176,8 +184,6 @@ all.addAll(getCategories()); try { - - @SuppressWarnings("unchecked") List<String> contextCategory = (List<String>) context.findAll( "SELECT DISTINCT category FROM Equation"); all.addAll(contextCategory); @@ -306,15 +312,4 @@ static public void checkout() throws VCSException { checkout(IsisFish.config.getDatabaseDirectory(), FORMULE_PATH); } - - /** - * Logger for this class - */ - private static final Log log = LogFactory.getLog(FormuleStorage.class); - - @SuppressWarnings("unchecked") - static private Map<String, FormuleStorage> formulesCache = (Map<String, FormuleStorage>) new ReferenceMap(); - } - - Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/JavaSourceStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/JavaSourceStorage.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/JavaSourceStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.datastore; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.io.PrintWriter; @@ -42,7 +42,6 @@ import fr.ifremer.isisfish.IsisFishException; import fr.ifremer.isisfish.util.CompileHelper; import fr.ifremer.isisfish.util.Doc; -import fr.ifremer.isisfish.util.Docable; import fr.ifremer.isisfish.util.JavadocHelper; /** @@ -62,7 +61,7 @@ * * Last update: $Date$ by : $Author$ */ -public abstract class JavaSourceStorage extends CodeSourceStorage implements Docable { +public abstract class JavaSourceStorage extends CodeSourceStorage { /** Class logger. */ private static Log log = LogFactory.getLog(ExportStorage.class); @@ -74,7 +73,7 @@ * Build a new java source storage. * * @param rootSrc sources root directory - * @param directory class location directory (rootSrc subdirectory) + * @param directory class location directory (rootSrc subdirectory) * @param name class name */ protected JavaSourceStorage(File rootSrc, File directory, String name) { @@ -134,7 +133,7 @@ * {@link fr.ifremer.isisfish.IsisConfig#getJavadocDirectory()} * * @param force force javadoc build even if destination file is never - * @param out output print stream. if <tt>null</tt standart output will be used + * @param out output print stream. if <tt>null</tt> standart output will be used * @return 0 si la generation a reussi, une autre valeur sinon */ public int doJavadoc(boolean force, PrintWriter out) { @@ -148,15 +147,12 @@ * @return la class * @throws IsisFishException */ - public Class<?> getCodeClass() throws IsisFishException { + public <E> Class<E> getCodeClass() throws IsisFishException { String fqn = getFQN(); - // Class result = CompileHelper.loadClass(fqn); - // if (result == null) { compile(false, null); - Class<?> result = CompileHelper.loadClass(fqn); - // } + Class<E> result = (Class<E>)CompileHelper.loadClass(fqn); if (result == null) { - throw new IsisFishException(_("isisfish.error.load.class", fqn)); + throw new IsisFishException(t("isisfish.error.load.class", fqn)); } return result; } @@ -167,9 +163,9 @@ * @return une nouvelle instance de la class * @throws IsisFishException if can't make new instance */ - public Object getNewInstance() throws IsisFishException { - Class<?> clazz = getCodeClass(); - Object result; + public <E> E getNewInstance() throws IsisFishException { + Class<E> clazz = getCodeClass(); + E result; try { result = clazz.newInstance(); } catch (InstantiationException eee) { @@ -200,7 +196,7 @@ try { result = getFieldDoc(object.getClass(), PARAM_PREFIX + paramName); } catch (Exception e) { - log.warn(_("isisfish.error.not.found.field", paramName, object)); + log.warn(t("isisfish.error.not.found.field", paramName, object)); } return result; } @@ -216,7 +212,7 @@ Class<?> clazz = getCodeClass(); result = getFieldDoc(clazz, PARAM_PREFIX + paramName); } catch (Exception e) { - log.warn(_("isisfish.error.not.found.field", paramName, this)); + log.warn(t("isisfish.error.not.found.field", paramName, this)); } return result; } @@ -224,7 +220,6 @@ /** * Get docable element description. */ - @Override public String getDescription() { return null; } @@ -246,7 +241,7 @@ result = getParameterNames(instance); } } catch (Exception eee) { - log.info(_("isisfish.error.compiled.parameter"), eee); + log.info(t("isisfish.error.compiled.parameter"), eee); } // si on ne reussi pas avec la classe compilé on essai en parsant le // source @@ -254,7 +249,7 @@ try { //String code = getContent(); log.fatal("FIXME a faire recherche des parametre dans le source"); - throw new IsisFishException(_("isisfish.error.source.parameter")); + throw new IsisFishException(t("isisfish.error.source.parameter")); // TODO implanter la recherche des parametres. // Se sont les attributs commencant par 'param_' et ils doivent // etre public non static, non transient. @@ -262,7 +257,7 @@ // Lorsqu'on ajoute un champs dans la map il ne faut pas mettre // le prefix param. } catch (Exception eee) { - throw new IsisFishException(_("isisfish.error.source.parameter"), eee); + throw new IsisFishException(t("isisfish.error.source.parameter"), eee); } } return result; Copied: trunk/src/main/java/fr/ifremer/isisfish/datastore/ObjectiveStorage.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/datastore/ObjectiveStorage.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/ObjectiveStorage.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ObjectiveStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,183 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2014 Ifremer, Code Lutin, 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.datastore; + +import java.io.File; +import java.util.List; +import java.util.Map; + +import org.apache.commons.collections4.map.ReferenceMap; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import fr.ifremer.isisfish.IsisFish; +import fr.ifremer.isisfish.vcs.VCSException; + +/** + * Class permettant de gérer les fonctions d'objectif des optimisations. + * + * @author Eric Chatellier + */ +public class ObjectiveStorage extends JavaSourceStorage { // RulesStorage + + /** to use log facility, just put in your code: log.info(\"...\"); */ + private static Log log = LogFactory.getLog(ObjectiveStorage.class); + + public static final String OBJECTIVE_PATH = "objectives"; + + /** Template freemarker pour les regles. */ + public static final String OBJECTIVE_TEMPLATE = "templates/script/objective.ftl"; + + /** Instance cache. */ + private static Map<String, ObjectiveStorage> objectiveCache = new ReferenceMap<String, ObjectiveStorage>(); + + /** + * Contruit un nouveau storage + * + * @param rootSrc La region auquelle est attaché la rule + * @param directory le repertoire ou devrait se trouver la rule + * @param name le nom de la rule + */ + protected ObjectiveStorage(File rootSrc, File directory, String name) { + super(rootSrc, directory, name); + } + + /** + * Get context (official VCS) rule directory. + * + * @return context rule directory + */ + static public File getObjectiveDirectory() { + File result = new File(getContextDatabaseDirectory(), OBJECTIVE_PATH); + result.mkdirs(); + return result; + } + + /** + * Get community VCS rule directory. + * + * @return community rule directory + */ + public static File getCommunityObjectiveDirectory() { + File result = new File(getCommunityDatabaseDirectory(), OBJECTIVE_PATH); + result.mkdirs(); + return result; + } + + /** + * Retourne le nom de toutes les regles existantes pour cette region + * + * @return all rule names found in local user database + */ + static public List<String> getObjectiveNames() { + List<String> rules = getStorageNames(getObjectiveDirectory()); + rules.addAll(getStorageNames(getCommunityObjectiveDirectory())); + return rules; + } + + /** + * Retourne le storage pour la regle demandée + * + * @param name le nom de la regle souhaitée + * @param location location to open storage file + * @return Le storage pour la regle + */ + static public ObjectiveStorage getObjective(String name, Location... location) { + ObjectiveStorage result = objectiveCache.get(name); + if (result == null) { + Location[] locs = nonEmptyLocation(location); + for (int i = 0; i < locs.length && result == null; i++) { + Location loc = locs[i]; + for (File dir : loc.getDirectories()) { + ObjectiveStorage storage = new ObjectiveStorage(dir, new File(dir, OBJECTIVE_PATH), name); + File sFile = storage.getFile(); + if (sFile.isFile()) { + result = storage; + objectiveCache.put(name, result); + } + } + } + } + return result; + } + + /** + * Create new rule. + * + * @param name new rule to create + * @param location location to rule storage file + * @return new rule storage + */ + public static ObjectiveStorage createObjective(String name, Location location) { + File dir = location.getDirectories()[0]; + ObjectiveStorage storage = new ObjectiveStorage(dir, new File(dir, OBJECTIVE_PATH), name); + return storage; + } + + + static public void checkout() throws VCSException { + checkout(IsisFish.config.getDatabaseDirectory(), OBJECTIVE_PATH); + } + + /** + * Retourne la liste des noms de toutes les régions disponible en local qui + * ne sont pas encore sur le serveur VCS + * + * @return liste de noms de regions + */ + static public List<String> getNewObjectiveNames() { + List<String> result = getObjectiveNames(); + result.removeAll(getRemoteObjectiveNames()); + return result; + } + + /** + * Retourne la liste des noms de toutes les régions disponible sur le + * serveur VCS + * + * @return la liste des noms de toutes les régions disponible sur le serveur + * VCS. Si le serveur n'est pas disponible la liste retournée est + * vide. + */ + static public List<String> getRemoteObjectiveNames() { + File dir = getObjectiveDirectory(); + return getRemoteStorageNames(dir); + } + + /** + * Retourne la liste des noms de toutes les régions disponible sur le + * serveur VCS qui ne sont pas encore en local + * + * @return liste de noms de regions + */ + static public List<String> getNewRemoteObjectiveNames() { + List<String> result = getRemoteObjectiveNames(); + result.removeAll(getObjectiveNames()); + return result; + } + +} // ObjectiveStorage + Copied: trunk/src/main/java/fr/ifremer/isisfish/datastore/OptimizationStorage.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/datastore/OptimizationStorage.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/OptimizationStorage.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/OptimizationStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,183 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2014 Ifremer, Code Lutin, 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.datastore; + +import java.io.File; +import java.util.List; +import java.util.Map; + +import org.apache.commons.collections4.map.ReferenceMap; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import fr.ifremer.isisfish.IsisFish; +import fr.ifremer.isisfish.vcs.VCSException; + +/** + * Class permettant de gérer les fonctions d'objectif des optimisations. + * + * @author Eric Chatellier + */ +public class OptimizationStorage extends JavaSourceStorage { // RulesStorage + + /** to use log facility, just put in your code: log.info(\"...\"); */ + private static Log log = LogFactory.getLog(OptimizationStorage.class); + + public static final String OPTIMIZATION_PATH = "optimizations"; + + /** Template freemarker pour les regles. */ + public static final String OPTIMIZATION_TEMPLATE = "templates/script/optimization.ftl"; + + /** Instance cache. */ + private static Map<String, OptimizationStorage> objectiveCache = new ReferenceMap<String, OptimizationStorage>(); + + /** + * Contruit un nouveau storage + * + * @param rootSrc La region auquelle est attaché la rule + * @param directory le repertoire ou devrait se trouver la rule + * @param name le nom de la rule + */ + protected OptimizationStorage(File rootSrc, File directory, String name) { + super(rootSrc, directory, name); + } + + /** + * Get context (official VCS) rule directory. + * + * @return context rule directory + */ + static public File getOptimizationDirectory() { + File result = new File(getContextDatabaseDirectory(), OPTIMIZATION_PATH); + result.mkdirs(); + return result; + } + + /** + * Get community VCS rule directory. + * + * @return community rule directory + */ + public static File getCommunityOptimizationDirectory() { + File result = new File(getCommunityDatabaseDirectory(), OPTIMIZATION_PATH); + result.mkdirs(); + return result; + } + + /** + * Retourne le nom de toutes les regles existantes pour cette region + * + * @return all rule names found in local user database + */ + static public List<String> getOptimizationNames() { + List<String> rules = getStorageNames(getOptimizationDirectory()); + rules.addAll(getStorageNames(getCommunityOptimizationDirectory())); + return rules; + } + + /** + * Retourne le storage pour la regle demandée + * + * @param name le nom de la regle souhaitée + * @param location location to open storage file + * @return Le storage pour la regle + */ + static public OptimizationStorage getOptimization(String name, Location... location) { + OptimizationStorage result = objectiveCache.get(name); + if (result == null) { + Location[] locs = nonEmptyLocation(location); + for (int i = 0; i < locs.length && result == null; i++) { + Location loc = locs[i]; + for (File dir : loc.getDirectories()) { + OptimizationStorage storage = new OptimizationStorage(dir, new File(dir, OPTIMIZATION_PATH), name); + File sFile = storage.getFile(); + if (sFile.isFile()) { + result = storage; + objectiveCache.put(name, result); + } + } + } + } + return result; + } + + /** + * Create new rule. + * + * @param name new rule to create + * @param location location to rule storage file + * @return new rule storage + */ + public static OptimizationStorage createOptimization(String name, Location location) { + File dir = location.getDirectories()[0]; + OptimizationStorage storage = new OptimizationStorage(dir, new File(dir, OPTIMIZATION_PATH), name); + return storage; + } + + + static public void checkout() throws VCSException { + checkout(IsisFish.config.getDatabaseDirectory(), OPTIMIZATION_PATH); + } + + /** + * Retourne la liste des noms de toutes les régions disponible en local qui + * ne sont pas encore sur le serveur VCS + * + * @return liste de noms de regions + */ + static public List<String> getNewOptimisationNames() { + List<String> result = getOptimizationNames(); + result.removeAll(getRemoteOptimizationNames()); + return result; + } + + /** + * Retourne la liste des noms de toutes les régions disponible sur le + * serveur VCS + * + * @return la liste des noms de toutes les régions disponible sur le serveur + * VCS. Si le serveur n'est pas disponible la liste retournée est + * vide. + */ + static public List<String> getRemoteOptimizationNames() { + File dir = getOptimizationDirectory(); + return getRemoteStorageNames(dir); + } + + /** + * Retourne la liste des noms de toutes les régions disponible sur le + * serveur VCS qui ne sont pas encore en local + * + * @return liste de noms de regions + */ + static public List<String> getNewRemoteOptimizationNames() { + List<String> result = getRemoteOptimizationNames(); + result.removeAll(getOptimizationNames()); + return result; + } + +} // OptimisationStorage + Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/RegionStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/RegionStorage.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/RegionStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -32,14 +32,14 @@ import fr.ifremer.isisfish.entities.Result; import fr.ifremer.isisfish.simulator.SimulationContext; import fr.ifremer.isisfish.vcs.VCSException; -import org.apache.commons.collections.map.ReferenceMap; +import org.apache.commons.collections4.map.ReferenceMap; +import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; -import org.nuiton.util.FileUtil; import org.nuiton.util.ZipUtil; import java.io.File; @@ -55,7 +55,7 @@ * * Created: 17 août 2005 03:44:57 CEST * - * @author Benjamin POUSSIN <poussin@codelutin.com> + * @author Benjamin POUSSIN <poussin@codelutin.com> * * @version $Revision$ * @@ -68,10 +68,10 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ private static Log log = LogFactory.getLog(RegionStorage.class); - - @SuppressWarnings("unchecked") - protected static Map<String, RegionStorage> regions = (Map<String, RegionStorage>) new ReferenceMap(); + /** Instance cache. */ + protected static Map<String, RegionStorage> regions = new ReferenceMap<String, RegionStorage>(); + /** File to use to store next commit region comment. */ protected File commentForNextCommitFile = null; @@ -106,7 +106,7 @@ public String getCommentForNextCommit() throws IOException { commentForNextCommitFile.createNewFile(); String result; - result = FileUtil.readAsString(commentForNextCommitFile); + result = FileUtils.readFileToString(commentForNextCommitFile); return result; } @@ -116,7 +116,7 @@ */ public void setCommentForNextCommit(String commentForNextCommit) throws IOException { commentForNextCommitFile.createNewFile(); - FileUtil.writeString(commentForNextCommitFile, commentForNextCommit); + FileUtils.writeStringToFile(commentForNextCommitFile, commentForNextCommit); } /** @@ -177,7 +177,7 @@ fireDataChanged(new StorageChangeEvent(this)); } catch (TopiaException eee) { - throw new StorageException(_("isisfish.error.rename.region", toName), eee); + throw new StorageException(t("isisfish.error.rename.region", toName), eee); } } @@ -455,7 +455,7 @@ return result; } catch (TopiaException eee) { - throw new StorageException(_("isisfish.error.import.file", file), eee); + throw new StorageException(t("isisfish.error.import.file", file), eee); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultDatabaseStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultDatabaseStorage.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultDatabaseStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.datastore; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.util.ArrayList; import java.util.Arrays; @@ -34,7 +34,8 @@ import java.util.List; import java.util.Set; -import org.apache.commons.collections.map.ReferenceMap; +import org.apache.commons.collections4.map.AbstractReferenceMap.ReferenceStrength; +import org.apache.commons.collections4.map.ReferenceMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.math.matrix.MatrixFactory; @@ -55,12 +56,14 @@ import fr.ifremer.isisfish.export.Export; import fr.ifremer.isisfish.export.SensitivityExport; import fr.ifremer.isisfish.rule.Rule; +import fr.ifremer.isisfish.simulator.Objective; +import fr.ifremer.isisfish.simulator.Optimization; import fr.ifremer.isisfish.simulator.SimulationContext; import fr.ifremer.isisfish.simulator.SimulationException; import fr.ifremer.isisfish.simulator.SimulationPlan; import fr.ifremer.isisfish.simulator.SimulationResultGetter; +import fr.ifremer.isisfish.types.Month; import fr.ifremer.isisfish.types.TimeStep; -import fr.ifremer.isisfish.types.Month; /** * Cette classe permet de conserver des résultats de simulation. Elle permet @@ -68,7 +71,7 @@ * * Created: 29 sept. 2004 * - * @author Benjamin Poussin <poussin@codelutin.com> + * @author Benjamin Poussin <poussin@codelutin.com> * @version $Revision$ * * Mise a jour: $Date$ @@ -81,11 +84,11 @@ protected SimulationStorage simulation = null; // transient protected HashMap<String, MatrixND> globalMatrix = new HashMap<String, MatrixND>(); - transient protected ReferenceMap cacheContext = new ReferenceMap(ReferenceMap.HARD, ReferenceMap.WEAK); + transient protected ReferenceMap<String, TopiaContext> cacheContext = new ReferenceMap<>(ReferenceStrength.HARD, ReferenceStrength.WEAK); /** cache to maintains some result. key: String(date + ':' + name), value: matrix * TODO: cache will be more efficient if it keep at min the number of result by year */ - transient protected ReferenceMap cache = new ReferenceMap(ReferenceMap.HARD, ReferenceMap.SOFT); + transient protected ReferenceMap<String, MatrixND> cache = new ReferenceMap<>(ReferenceStrength.HARD, ReferenceStrength.SOFT); /** contains all available result as string: String(date + ':' + name) */ transient protected Set<String> availableResult = null; /** result enabled */ @@ -255,13 +258,13 @@ for (String exportName : exportNames) { ExportStorage storage = ExportStorage.getExport(exportName); try { - Export export = storage.getNewExportInstance(); + Export export = storage.getNewInstance(); for (String resultName : export.getNecessaryResult()) { enabledResult.add(resultName); } } catch (IsisFishException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.instanciate.export", + log.warn(t("isisfish.error.instanciate.export", exportName), eee); } } @@ -298,6 +301,22 @@ } } } + + // on objective and optimization + Objective objective = simulation.getParameter().getObjective(); + if (objective != null) { + for (String resultName : objective.getNecessaryResult()) { + enabledResult.add(resultName); + } + } + + Optimization optimization = simulation.getParameter().getOptimization(); + if (optimization != null) { + for (String resultName : optimization.getNecessaryResult()) { + enabledResult.add(resultName); + } + } + log.info("Enabled result: " + enabledResult); } boolean result = enabledResult.contains(name); @@ -695,7 +714,7 @@ // recuperation des noms des dimensions String[] dimNames = new String[1 + mat.getDimCount()]; - dimNames[0] = _("isisfish.common.date"); + dimNames[0] = t("isisfish.common.date"); for (int i = 1; i < dimNames.length; i++) { dimNames[i] = mat.getDimensionName(i - 1); } @@ -769,7 +788,7 @@ try { doAddResult(step, name, mat, context.getDbResult()); } catch (TopiaException eee) { - log.warn(_("Can't add result '%1$s' at date %2$s", name, step), eee); + log.warn(t("Can't add result '%1$s' at date %2$s", name, step), eee); } } @@ -783,7 +802,7 @@ result = getMatrix(step, name, context.getDbResult()); } catch (TopiaException eee) { if (log.isWarnEnabled()) { - log.warn(_("Can't get result: %1$s", name), eee); + log.warn(t("Can't get result: %1$s", name), eee); } } return result; @@ -799,7 +818,7 @@ result = getMatrix(name, context.getDbResult()); } catch (TopiaException eee) { if (log.isWarnEnabled()) { - log.warn(_("Can't get result: %1$s", name), eee); + log.warn(t("Can't get result: %1$s", name), eee); } } return result; Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultMappedStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultMappedStorage.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultMappedStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.datastore; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.io.IOException; @@ -40,8 +40,8 @@ import java.util.Set; import java.util.TreeMap; -import org.apache.commons.collections.BidiMap; -import org.apache.commons.collections.bidimap.DualHashBidiMap; +import org.apache.commons.collections4.BidiMap; +import org.apache.commons.collections4.bidimap.DualHashBidiMap; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -70,6 +70,8 @@ import fr.ifremer.isisfish.export.Export; import fr.ifremer.isisfish.export.SensitivityExport; import fr.ifremer.isisfish.rule.Rule; +import fr.ifremer.isisfish.simulator.Objective; +import fr.ifremer.isisfish.simulator.Optimization; import fr.ifremer.isisfish.simulator.SimulationContext; import fr.ifremer.isisfish.simulator.SimulationException; import fr.ifremer.isisfish.simulator.SimulationPlan; @@ -85,7 +87,7 @@ * * Created: 31 aout 2012 * - * @author Benjamin Poussin <poussin@codelutin.com> + * @author Benjamin Poussin : poussin@codelutin.com * @version $Revision$ * * Mise a jour: $Date$ @@ -119,7 +121,7 @@ protected TopiaContext tx; /** en cle les representation interne (get) en valeur les valeurs decoree (getKey) */ - protected BidiMap cache = new DualHashBidiMap(); + protected BidiMap<Object, Object> cache = new DualHashBidiMap<>(); public EntitySemanticsDecorator() { } @@ -610,13 +612,13 @@ for (String exportName : exportNames) { ExportStorage storage = ExportStorage.getExport(exportName); try { - Export export = storage.getNewExportInstance(); + Export export = storage.getNewInstance(); for (String resultName : export.getNecessaryResult()) { enabledResult.add(resultName); } } catch (IsisFishException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.instanciate.export", + log.warn(t("isisfish.error.instanciate.export", exportName), eee); } } @@ -653,6 +655,22 @@ } } } + + // on objective and optimization + Objective objective = simulation.getParameter().getObjective(); + if (objective != null) { + for (String resultName : objective.getNecessaryResult()) { + enabledResult.add(resultName); + } + } + + Optimization optimization = simulation.getParameter().getOptimization(); + if (optimization != null) { + for (String resultName : optimization.getNecessaryResult()) { + enabledResult.add(resultName); + } + } + log.info("Enabled result: " + enabledResult); } // par defaut on dit qu'on conserve le resultat @@ -805,7 +823,7 @@ // recuperation des noms des dimensions String[] dimNames = new String[1 + mat.getDimCount()]; - dimNames[0] = _("isisfish.common.date"); + dimNames[0] = t("isisfish.common.date"); for (int i = 1; i < dimNames.length; i++) { dimNames[i] = mat.getDimensionName(i - 1); } Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageInMemory.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageInMemory.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorageInMemory.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.datastore; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.util.ArrayList; import java.util.Arrays; @@ -48,6 +48,8 @@ import fr.ifremer.isisfish.export.Export; import fr.ifremer.isisfish.export.SensitivityExport; import fr.ifremer.isisfish.rule.Rule; +import fr.ifremer.isisfish.simulator.Objective; +import fr.ifremer.isisfish.simulator.Optimization; import fr.ifremer.isisfish.simulator.SimulationContext; import fr.ifremer.isisfish.simulator.SimulationException; import fr.ifremer.isisfish.simulator.SimulationPlan; @@ -65,7 +67,7 @@ * * Created: 29 sept. 2004 * - * @author Benjamin Poussin <poussin@codelutin.com> + * @author Benjamin Poussin : poussin@codelutin.com * @version $Revision$ * * Mise a jour: $Date$ @@ -141,13 +143,13 @@ for (String exportName : exportNames) { ExportStorage storage = ExportStorage.getExport(exportName); try { - Export export = storage.getNewExportInstance(); + Export export = storage.getNewInstance(); for (String resultName : export.getNecessaryResult()) { enabledResult.add(resultName); } } catch (IsisFishException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.instanciate.export", + log.warn(t("isisfish.error.instanciate.export", exportName), eee); } } @@ -184,6 +186,22 @@ } } } + + // on objective and optimization + Objective objective = simulation.getParameter().getObjective(); + if (objective != null) { + for (String resultName : objective.getNecessaryResult()) { + enabledResult.add(resultName); + } + } + + Optimization optimization = simulation.getParameter().getOptimization(); + if (optimization != null) { + for (String resultName : optimization.getNecessaryResult()) { + enabledResult.add(resultName); + } + } + log.info("Enabled result: " + enabledResult); } boolean result = enabledResult.contains(name); @@ -384,7 +402,7 @@ if (mats.size() > 0) { // recuperation des noms des dimensions String[] dimNames = new String[1 + matExample.getDimCount()]; - dimNames[0] = _("isisfish.common.date"); + dimNames[0] = t("isisfish.common.date"); for (int i = 1; i < dimNames.length; i++) { dimNames[i] = matExample.getDimensionName(i - 1); } Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/RuleStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/RuleStorage.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/RuleStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,21 +25,19 @@ package fr.ifremer.isisfish.datastore; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.util.List; import java.util.Map; -import org.apache.commons.collections.map.ReferenceMap; +import org.apache.commons.collections4.map.ReferenceMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import fr.ifremer.isisfish.IsisFish; -import fr.ifremer.isisfish.IsisFishException; import fr.ifremer.isisfish.rule.Rule; import fr.ifremer.isisfish.util.Doc; -import fr.ifremer.isisfish.util.Docable; import fr.ifremer.isisfish.vcs.VCSException; /** @@ -48,18 +46,18 @@ * Il se trouve dans le package portant le nom de la region de cette maniere * plusieurs region peuvent avoir des regles avec le meme nom mais pas le * meme code. - * <p/> + * <p> * Gere les fichiers VCS de type {@link Rule} (package rules) * * Created: 17 août 2005 11:11:51 CEST * - * @author Benjamin POUSSIN <poussin@codelutin.com> + * @author Benjamin POUSSIN <poussin@codelutin.com> * * @version $Revision$ * * Last update: $Date$ by : $Author$ */ -public class RuleStorage extends JavaSourceStorage implements Docable { // RulesStorage +public class RuleStorage extends JavaSourceStorage { // RulesStorage /** to use log facility, just put in your code: log.info(\"...\"); */ private static Log log = LogFactory.getLog(RuleStorage.class); @@ -69,9 +67,8 @@ /** Template freemarker pour les regles. */ public static final String RULE_TEMPLATE = "templates/script/rule.ftl"; - @SuppressWarnings("unchecked") - private static Map<String, RuleStorage> rulesCache = - (Map<String, RuleStorage>) new ReferenceMap(); + /** Instance cache. */ + private static Map<String, RuleStorage> rulesCache = new ReferenceMap<String, RuleStorage>(); /** * Contruit un nouveau rule storage @@ -156,16 +153,6 @@ return storage; } - /** - * Retourne une nouvelle instance de la regle. Compile le fichier si besoin - * - * @return a new rule instance - * @throws IsisFishException if any exception while instanciation - */ - public Rule getNewRuleInstance() throws IsisFishException { - Object result = getNewInstance(); - return (Rule) result; - } static public void checkout() throws VCSException { checkout(IsisFish.config.getDatabaseDirectory(), RULE_PATH); @@ -212,17 +199,16 @@ * <b>Be ware this method require to instanciate a Rule, so * it would be better to call as often as possible.</b> * - * @return the descript of the instanciate Rule + * @return the description of the instanciate Rule * @see Doc - * @see Docable */ public String getDescription() { String result = null; try { - Rule rule = getNewRuleInstance(); + Rule rule = getNewInstance(); result = rule == null ? null : rule.getDescription(); } catch (Exception e) { - log.warn(_("isisfish.error.not.found.description",this)); + log.warn(t("isisfish.error.not.found.description",this)); } return result; } Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ScriptStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/ScriptStorage.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ScriptStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -29,10 +29,9 @@ import java.util.List; import java.util.Map; -import org.apache.commons.collections.map.ReferenceMap; +import org.apache.commons.collections4.map.ReferenceMap; import fr.ifremer.isisfish.IsisFish; -import fr.ifremer.isisfish.IsisFishException; import fr.ifremer.isisfish.vcs.VCSException; /** @@ -40,7 +39,7 @@ * * Created: 18 août 2005 15:07:36 CEST * - * @author Grégoire DESSARD <dessard@codelutin.com> + * @author Grégoire DESSARD <dessard@codelutin.com> * @version $Revision$ * * Last update: $Date$ @@ -52,11 +51,10 @@ /** Template freemarker pour les scripts. */ public static final String SCRIPT_TEMPLATE = "templates/script/script.ftl"; - - @SuppressWarnings("unchecked") - static private Map<String, ScriptStorage> scriptsCache = - (Map<String, ScriptStorage>) new ReferenceMap(); + /** Instance cache. */ + static private Map<String, ScriptStorage> scriptsCache = new ReferenceMap<String, ScriptStorage>(); + /** * * Constructeur @@ -90,16 +88,6 @@ result.mkdirs(); return result; } - - /** - * Retourne une nouvelle instance de la regle. Compile le fichier si besoin - * - * @return une nouvelle instance - * @throws IsisFishException - */ - public Object getNewScriptInstance() throws IsisFishException { - return getNewInstance(); - } /** * Retourne le storage pour la regle demandée Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/SensitivityAnalysisStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/SensitivityAnalysisStorage.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/SensitivityAnalysisStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,31 +25,29 @@ package fr.ifremer.isisfish.datastore; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.util.List; import java.util.Map; -import org.apache.commons.collections.map.ReferenceMap; +import org.apache.commons.collections4.map.ReferenceMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import fr.ifremer.isisfish.IsisFish; -import fr.ifremer.isisfish.IsisFishException; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityAnalysis; import fr.ifremer.isisfish.util.Doc; -import fr.ifremer.isisfish.util.Docable; import fr.ifremer.isisfish.vcs.VCSException; /** * Cette class permet de stocker les fichiers de calculateur de sensibilité. - * <p/> + * <p> * Gere les fichiers VCS de type {@link SensitivityAnalysis} (package sensitivityanalysis). * * Created: 17 août 2005 11:11:51 CEST * - * @author chatellier <chatellier@codelutin.com> + * @author chatellier <chatellier@codelutin.com> * @version $Revision$ * Last update: $Date$ by : $Author$ */ @@ -64,8 +62,8 @@ /** Template freemarker pour les scripts de sensibilité. */ public static final String SENSITIVITY_ANALYSIS_TEMPLATE = "templates/script/sensitivityanalysis.ftl"; - /** Cache. */ - protected static Map<String, SensitivityAnalysisStorage> sensitivityCache = new ReferenceMap(); + /** Instance cache. */ + protected static Map<String, SensitivityAnalysisStorage> sensitivityCache = new ReferenceMap<>(); /** * Build new {@link SensitivityAnalysisStorage}. @@ -152,17 +150,6 @@ } /** - * Retourne une nouvelle instance du calculateur. Compile le fichier si besoin - * - * @return retourne une nouvelle instance du calculateur - * @throws IsisFishException s'il y a un problème d'instanciation - */ - public SensitivityAnalysis getNewSensitivityAnalysisInstance() throws IsisFishException { - Object result = getNewInstance(); - return (SensitivityAnalysis) result; - } - - /** * Effectue un chekout VCS sur le répertoire des calculateurs. * * @see VersionStorage#checkout(File, String) @@ -220,16 +207,15 @@ * * @return the descript of the instanciate AnalysePlan * @see Doc - * @see Docable */ @Override public String getDescription() { String result = null; try { - SensitivityAnalysis sensitivityAnalysis = getNewSensitivityAnalysisInstance(); + SensitivityAnalysis sensitivityAnalysis = getNewInstance(); result = sensitivityAnalysis == null ? null : sensitivityAnalysis.getDescription(); } catch (Exception e) { - log.warn(_("isisfish.error.not.found.description", this)); + log.warn(t("isisfish.error.not.found.description", this)); } return result; } Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/SensitivityExportStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/SensitivityExportStorage.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/SensitivityExportStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -29,12 +29,11 @@ import java.util.List; import java.util.Map; -import org.apache.commons.collections.map.ReferenceMap; +import org.apache.commons.collections4.map.ReferenceMap; import fr.ifremer.isisfish.IsisFish; import fr.ifremer.isisfish.IsisFishException; import fr.ifremer.isisfish.export.SensitivityExport; -import fr.ifremer.isisfish.util.Docable; import fr.ifremer.isisfish.vcs.VCSException; /** @@ -43,21 +42,21 @@ * * Created: 18 août 2005 15:07:36 CEST * - * @author chatellier eric <chatellier@codelutin.com> + * @author chatellier eric <chatellier@codelutin.com> * @version $Revision$ * * Last update: $Date$ * by : $Author: chatellier $ */ -public class SensitivityExportStorage extends ExportStorage implements Docable { +public class SensitivityExportStorage extends ExportStorage { public static final String SENSITIVITY_EXPORT_PATH = "sensitivityexports"; /** Template freemarker pour les scripts d'export . */ public static final String SENSITIVITY_EXPORT_TEMPLATE = "templates/script/sensitivityexport.ftl"; - @SuppressWarnings("unchecked") - private static Map<String, SensitivityExportStorage> sensitivityExportsCache = (Map<String, SensitivityExportStorage>) new ReferenceMap(); + /** Instance cache. */ + private static Map<String, SensitivityExportStorage> sensitivityExportsCache = new ReferenceMap<String, SensitivityExportStorage>(); /** * Constructeur. @@ -93,17 +92,6 @@ } /** - * Retourne une nouvelle instance de l'export. Compile le fichier si besoin. - * - * @return une nouvelle instance de la classe d'export - * @throws IsisFishException - */ - public SensitivityExport getNewSensitivityExportInstance() throws IsisFishException { - Object result = getNewInstance(); - return (SensitivityExport) result; - } - - /** * Retourne le storage pour l'export demandé. * * @param name le nom de la export souhaitée Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.datastore; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.io.FileReader; @@ -99,7 +99,7 @@ info.load(reader); } catch (IOException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.read.simulation", file + log.warn(t("isisfish.error.read.simulation", file .getPath()), eee); } } finally { @@ -207,7 +207,7 @@ info.store(writer, "Simulation Information"); } catch (IOException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.write.simulation", file.getPath()), + log.warn(t("isisfish.error.write.simulation", file.getPath()), eee); } } finally { @@ -233,7 +233,7 @@ result = dateFormat.parse(d); } catch (ParseException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.parse.date", d), eee); + log.warn(t("isisfish.error.parse.date", d), eee); } } } @@ -260,7 +260,7 @@ result = dateFormat.parse(d); } catch (ParseException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.parse.date", d), eee); + log.warn(t("isisfish.error.parse.date", d), eee); } } } @@ -295,7 +295,7 @@ value = Long.valueOf(t); } catch (NumberFormatException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.parse.long", t), eee); + log.warn(t("isisfish.error.parse.long", t), eee); } } } @@ -326,7 +326,7 @@ result = Long.parseLong(t); } catch (NumberFormatException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.parse.long", t), eee); + log.warn(t("isisfish.error.parse.long", t), eee); } } } @@ -339,7 +339,7 @@ * If a time already exists for ruleName, add time to previous time. * (usefull because pre/post action are called multiples time) * - * @param keyName (ie {@link #RULE_TIME_INIT}, {@link #RULE_TIME_PRE}, {@link #RULE_TIME_POST}) + * @param keyName (ie {@code #RULE_TIME_INIT}, {@code #RULE_TIME_PRE}, {@code #RULE_TIME_POST}) * @param ruleName rule name * @param time time to add * @@ -356,7 +356,7 @@ previousTime = Long.parseLong(previousTimeAsString); } catch (NumberFormatException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.parse.long", + log.warn(t("isisfish.error.parse.long", previousTimeAsString), eee); } } @@ -455,7 +455,7 @@ result = Long.parseLong(t); } catch (NumberFormatException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.parse.long", t), eee); + log.warn(t("isisfish.error.parse.long", t), eee); } } } Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationPlanStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationPlanStorage.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationPlanStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,13 +25,13 @@ package fr.ifremer.isisfish.datastore; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.util.List; import java.util.Map; -import org.apache.commons.collections.map.ReferenceMap; +import org.apache.commons.collections4.map.ReferenceMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -39,18 +39,17 @@ import fr.ifremer.isisfish.IsisFishException; import fr.ifremer.isisfish.simulator.SimulationPlan; import fr.ifremer.isisfish.util.Doc; -import fr.ifremer.isisfish.util.Docable; import fr.ifremer.isisfish.vcs.VCSException; /** * Class permettant de representer un plan de simulation. * Un plan de simulation est un fichier Java que l'on compile si besoin. - * <p/> + * <p> * Gere les fichiers VCS de type {@link SimulationPlan} (package simulationplans) * * Created: 17 août 2005 11:11:51 CEST * - * @author Benjamin POUSSIN <poussin@codelutin.com> + * @author Benjamin POUSSIN : poussin@codelutin.com * * @version $Revision$ * @@ -66,9 +65,8 @@ /** Template freemarker pour les plans de simulation . */ public static final String SIMULATION_PLAN_TEMPLATE = "templates/script/simulationplan.ftl"; - @SuppressWarnings("unchecked") - static private Map<String, SimulationPlanStorage> plansCache = - (Map<String, SimulationPlanStorage>) new ReferenceMap(); + /** Instance cache. */ + static private Map<String, SimulationPlanStorage> plansCache = new ReferenceMap<>(); /** * Construit un nouveau SimulationPlan storage. @@ -152,17 +150,6 @@ return storage; } - /** - * Retourne une nouvelle instance du plan. Compile le fichier si besoin - * - * @return retourne une nouvelle instance du plan - * @throws IsisFishException s'il y a un probleme d'instanciation - */ - public SimulationPlan getNewSimulationPlanInstance() throws IsisFishException { - Object result = getNewInstance(); - return (SimulationPlan) result; - } - static public void checkout() throws VCSException { checkout(IsisFish.config.getDatabaseDirectory(), SIMULATION_PLAN_PATH); } @@ -211,15 +198,14 @@ * * @return the descript of the instanciate SimulationPlan * @see Doc - * @see Docable */ public String getDescription() { String result = null; try { - SimulationPlan simulationPlan = getNewSimulationPlanInstance(); + SimulationPlan simulationPlan = getNewInstance(); result = simulationPlan == null ? null : simulationPlan.getDescription(); } catch (Exception e) { - log.warn(_("isisfish.error.not.found.description", this)); + log.warn(t("isisfish.error.not.found.description", this)); } return result; } Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationStorage.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.datastore; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.io.FileInputStream; @@ -36,7 +36,8 @@ import java.util.Map; import java.util.Properties; -import org.apache.commons.collections.map.ReferenceMap; +import org.apache.commons.collections4.map.ReferenceMap; +import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -62,7 +63,7 @@ * * Created: 17 août 2005 03:48:50 CEST * - * @author Benjamin POUSSIN <poussin@codelutin.com> + * @author Benjamin POUSSIN : poussin@codelutin.com * @version $Revision$ * * Last update: $Date$ @@ -72,6 +73,7 @@ public static final String SIMULATION_PATH = "simulations"; public static final String INFORMATION_FILENAME = "information"; + public static final String OBJECTIVE_FILENAME = "objective"; public static final String CONTROL_FILENAME = "control"; public static final String PARAMETERS_FILENAME = "parameters.properties"; public static final String RESULT_XML_FILENAME = "isis-mexico-output.xml"; @@ -84,7 +86,7 @@ private static Log log = LogFactory.getLog(SimulationStorage.class); /** Cache des simulation storage. */ - protected static Map<String, SimulationStorage> simulations = (Map<String, SimulationStorage>) new ReferenceMap(); + protected static Map<String, SimulationStorage> simulations = new ReferenceMap<String, SimulationStorage>(); /** some free information, that user can add during simulation */ protected SimulationInformation information = null; @@ -97,6 +99,8 @@ protected boolean useLog; protected transient File simulationControlFile = null; + /** objective value used as cache to prevent disk access */ + protected transient Double objective = null; /** * Pour la lecture d'une simulation existante. @@ -205,6 +209,33 @@ } /** + * Retourne le fichier de stockage des inforations de la simulation. + * + * @param root le repertoire de stockage de la simulation + * @return information file + */ + public static File getSimulationObjectiveFile(File root) { + File result = new File(root, OBJECTIVE_FILENAME); + return result; + } + + public Double getObjective() throws IOException { + if (objective == null) { + File ObjFile = getObjectiveFile(); + if (file.exists()) { + String s = FileUtils.readFileToString(ObjFile); + objective = Double.parseDouble(s); + } + } + return objective; + } + + public void setObjective(double d) throws IOException { + objective = d; + FileUtils.writeStringToFile(getObjectiveFile(), String.valueOf(d)); + } + + /** * Retourne le fichier de stockage des resultats sous format XML mexico * de la simulation. * @@ -363,7 +394,7 @@ out = new FileOutputStream(file); prop.store(out, "Parameters"); } catch (IOException eee) { - throw new IsisFishRuntimeException(_( + throw new IsisFishRuntimeException(t( "isisfish.error.save.simulation.parameters", file), eee); } finally { IOUtils.closeQuietly(out); @@ -394,7 +425,7 @@ parameter = new SimulationParameterImpl(); parameter.fromProperties(prop); } catch (IOException eee) { - throw new IsisFishRuntimeException(_("isisfish.error.read.simulation.parameters", file), eee); + throw new IsisFishRuntimeException(t("isisfish.error.read.simulation.parameters", file), eee); } finally { IOUtils.closeQuietly(in); } @@ -425,7 +456,7 @@ parameter = new SimulationParameterImpl(); parameter.fromProperties(prop); } catch (IOException eee) { - throw new IsisFishRuntimeException(_("isisfish.error.read.simulation.parameters", file), eee); + throw new IsisFishRuntimeException(t("isisfish.error.read.simulation.parameters", file), eee); } finally { IOUtils.closeQuietly(in); } @@ -443,6 +474,16 @@ } /** + * Retourne le nom du fichier contenant les informations de simulation. + * + * @return information file + */ + protected File getObjectiveFile() { + File result = new File(getDirectory(), OBJECTIVE_FILENAME); + return result; + } + + /** * Get simulation informations. * * @return simulation information @@ -723,7 +764,7 @@ directory.mkdirs(); } if (!directory.isDirectory()) { - throw new IllegalArgumentException(_( + throw new IllegalArgumentException(t( "directory %s must be a directory", directory .getAbsolutePath())); } @@ -734,25 +775,24 @@ renameTo = newName + "/$1"; } if (log.isInfoEnabled()) { - log.info(_("Import simulation file %s in directory %s and rename from %s to %s", + log.info(t("Import simulation file %s in directory %s and rename from %s to %s", file, directory, renameFrom, renameTo)); } String lastEntry = ZipUtil.uncompressAndRename(file, directory, renameFrom, renameTo); String name = lastEntry.substring(0, lastEntry.indexOf("/")); if (log.isInfoEnabled()) { - log.info(_("Last entry was %s extract name %s", lastEntry, name)); + log.info(t("Last entry was %s extract name %s", lastEntry, name)); } File simDir = new File(directory, name); SimulationStorage result = new SimulationStorage(simDir, name, null); File data = result.getDataBackupFile(); if (data.exists()) { - TopiaContext root = result.getStorage(); - TopiaContext tx = root.beginTransaction(); + TopiaContext tx = result.getStorage().beginTransaction(); tx.restore(data); tx.commitTransaction(); - root.closeContext(); + result.closeStorage(); } return result; @@ -784,7 +824,7 @@ // we must prepare storage (no file found) prepare(); } - FileUtil.copy(getDataBackupFile(), file1); + FileUtils.copyFile(getDataBackupFile(), file1); // zip it File zipRegion = new File(tmpDir, "extractedRegion.zip"); @@ -800,8 +840,8 @@ } catch (TopiaException ex) { throw new StorageException("Can't extract region", ex); } finally { - if (tmpDir != null && !FileUtil.deleteRecursively(tmpDir)) { - log.warn(_("isisfish.error.delete.file", tmpDir)); + if (tmpDir != null && !FileUtils.deleteQuietly(tmpDir)) { + log.warn(t("isisfish.error.delete.file", tmpDir)); } } } @@ -824,7 +864,7 @@ useLog = true; } catch (Exception eee) { useLog = false; - log.warn(_("Can't create simulation logger", eee)); + log.warn(t("Can't create simulation logger", eee)); // we do not throw any exception, this is a shame but not required } } Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulatorStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulatorStorage.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulatorStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -29,10 +29,9 @@ import java.util.List; import java.util.Map; -import org.apache.commons.collections.map.ReferenceMap; +import org.apache.commons.collections4.map.ReferenceMap; import fr.ifremer.isisfish.IsisFish; -import fr.ifremer.isisfish.IsisFishException; import fr.ifremer.isisfish.simulator.Simulator; import fr.ifremer.isisfish.vcs.VCSException; @@ -41,7 +40,7 @@ * * Created: 18 août 2005 15:07:36 CEST * - * @author Grégoire DESSARD <dessard@codelutin.com> + * @author Grégoire DESSARD <dessard@codelutin.com> * @version $Revision$ * * Last update: $Date$ @@ -55,7 +54,7 @@ public static final String SIMULATOR_TEMPLATE = "templates/script/simulator.ftl"; /** Simulators cache. */ - static private Map<String, SimulatorStorage> simulatorsCache = (Map<String, SimulatorStorage>) new ReferenceMap(); + static private Map<String, SimulatorStorage> simulatorsCache = new ReferenceMap<String, SimulatorStorage>(); /** * Constructeur. @@ -87,17 +86,6 @@ result.mkdirs(); return result; } - - /** - * Retourne une nouvelle instance du simulateur. Compile le fichier si besoin. - * - * @return new simulator instance - * @throws IsisFishException - */ - public Simulator getNewSimulatorInstance() throws IsisFishException { - Simulator result = (Simulator)getNewInstance(); - return result; - } /** * Retourne le storage pour le simulateur demandée. Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/StorageChangeListener.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/StorageChangeListener.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/StorageChangeListener.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -31,9 +31,11 @@ * Listener for change made on storage. * * Such as : + * <ul> * <li>region added</li> * <li>script removed</li> * <li>plan renamed</li> + * </ul> * * @author chatellier * @version $Revision: 1.0 $ Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/VersionStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/VersionStorage.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/VersionStorage.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.datastore; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.io.IOException; @@ -33,9 +33,9 @@ import java.util.Collections; import java.util.List; +import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.util.FileUtil; import org.nuiton.util.ListenerSet; import org.nuiton.util.Version; @@ -309,16 +309,16 @@ } try { - getCurrentVCS().delete(files, _("isisfish.versionStorage.removed")); + getCurrentVCS().delete(files, t("isisfish.versionStorage.removed")); } catch (VCSException eee) { throw new StorageException( - _("isisfish.error.delete.vcs.files"), eee); + t("isisfish.error.delete.vcs.files"), eee); } } //TODO There is a bug to fix ? some files are not deleted! // due to h2, storage need to be closed before deletion if (getFile().isDirectory()) { - FileUtil.deleteRecursively(getFile()); + FileUtils.deleteQuietly(getFile()); } else { getFile().delete(); } Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/DatabaseMigrationClass.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/DatabaseMigrationClass.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/DatabaseMigrationClass.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -23,7 +23,7 @@ package fr.ifremer.isisfish.datastore.migration; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.util.List; @@ -50,6 +50,7 @@ protected static final Version VERSION_40 = new Version("4.0"); protected static final Version VERSION_41 = new Version("4.1"); protected static final Version VERSION_421 = new Version("4.2.1"); + protected static final Version VERSION_43 = new Version("4.3"); public DatabaseMigrationClass() { super(new MigrationResolver()); @@ -73,6 +74,8 @@ result = MigrationV40V41.class; } else if (version.equals(VERSION_421)) { result = MigrationV41V421.class; + } else if (version.equals(VERSION_43)) { + result = MigrationV421V43.class; } return result; } @@ -84,7 +87,7 @@ */ @Override public Version[] getAvailableVersions() { - Version[] result = new Version[] { VERSION_32, VERSION_33, VERSION_40, VERSION_41, VERSION_421}; + Version[] result = new Version[] { VERSION_32, VERSION_33, VERSION_40, VERSION_41, VERSION_421, VERSION_43}; return result; } @@ -105,8 +108,8 @@ boolean result = false; int answer = JOptionPane.showConfirmDialog( - null, _("isisfish.misc.databasemigration.question", dbVersion, versions.get(versions.size() - 1)), - _("isisfish.misc.databasemigration.title"), + null, t("isisfish.misc.databasemigration.question", dbVersion, versions.get(versions.size() - 1)), + t("isisfish.misc.databasemigration.title"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (answer == JOptionPane.YES_OPTION) { Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV33V40.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV33V40.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV33V40.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -23,7 +23,7 @@ package fr.ifremer.isisfish.datastore.migration; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.math.BigInteger; import java.util.List; @@ -153,7 +153,7 @@ equation.update(); } else { EquationEditorPaneUI frame = new EquationEditorPaneUI(); - frame.setTitle(_("isisfish.message.import.equation.convert")); + frame.setTitle(t("isisfish.message.import.equation.convert")); try { frame.setEquation(equation.getCategory(), equation.getName(), Copied: trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV421V43.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV421V43.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV421V43.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV421V43.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,76 @@ +/* + * #%L + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.datastore.migration; + +import java.util.List; + +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.framework.TopiaContextImplementor; +import org.nuiton.topia.migration.TopiaMigrationCallbackByClass; +import org.nuiton.topia.migration.TopiaMigrationCallbackByClass.MigrationCallBackForVersion; +import org.nuiton.util.Version; + +/** + * Migration between version 4.1 and 4.2.1. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class MigrationV421V43 extends MigrationCallBackForVersion { + + /** + * Constructor. + * + * @param version version + * @param callback callback + */ + public MigrationV421V43(Version version, TopiaMigrationCallbackByClass callback) { + super(version, callback); + } + + /* + * @see org.nuiton.topia.migration.TopiaMigrationCallbackByClass.MigrationCallBackForVersion#prepareMigrationScript(org.nuiton.topia.framework.TopiaContextImplementor, java.util.List, boolean, boolean) + */ + @Override + protected void prepareMigrationScript(TopiaContextImplementor tx, + List<String> queries, boolean showSql, boolean showProgression) + throws TopiaException { + + // ajout de la table 'observation' + queries.add("CREATE TABLE observation( " + + "TOPIAID VARCHAR(255) NOT NULL, " + + "TOPIAVERSION BIGINT NOT NULL, " + + "TOPIACREATEDATE DATE, " + + "NAME LONGVARCHAR, " + + "COMMENT LONGVARCHAR, " + + "VALUE_NAME VARCHAR(255), " + + "VALUE_DIM VARCHAR(255), " + + "VALUE_DIMNAMES LONGVARCHAR, " + + "VALUE_SEMANTICS LONGVARCHAR, " + + "VALUE_DATA LONGVARCHAR) "); + } +} Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/update/ImportFromV2.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/update/ImportFromV2.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/update/ImportFromV2.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.datastore.update; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.BufferedInputStream; import java.io.BufferedReader; @@ -198,14 +198,14 @@ */ private File convertXML(File file, String versionStart, String versionEnd) throws Exception { if(VersionUtil.greaterThan(versionStart, versionEnd)){ - throw new Exception(_("isisfish.error.import.recent.files")); + throw new Exception(t("isisfish.error.import.recent.files")); }else if(VersionUtil.smallerThan(versionStart, versionEnd)){ // upgrate du fichier try{ // recherche des fichiers XSL de conversion URL [] xslurl = getXSLFile(versionStart, versionEnd); if(xslurl == null){ - throw new Exception(_("isisfish.error.import.convertible")); + throw new Exception(t("isisfish.error.import.convertible")); } File dest = file; for (URL aXslurl : xslurl) { @@ -215,7 +215,7 @@ } file = dest; }catch(Exception eee){ - throw new Exception(_("isisfish.error.conversion.data"), eee); + throw new Exception(t("isisfish.error.conversion.data"), eee); } } return file; @@ -357,7 +357,7 @@ log.info("Ask user for manual equation conversion"); // EquationEditorFrame frame = new EquationEditorFrame(true, true); EquationEditorPaneUI frame = new EquationEditorPaneUI(); - frame.setTitle(_("isisfish.message.import.equation.convert")); + frame.setTitle(t("isisfish.message.import.equation.convert")); for (String id : equationId) { context = storage.getStorage().beginTransaction(); Equation eq = (Equation)context.findByTopiaId(id); @@ -511,7 +511,7 @@ pop3.setReproductionEquationContent(getEquationStringValue(pop, "equationReproduction")); convertEquation(pop3.getReproductionEquation(), getStringValue(pop, "equationReproduction")); pop3.setMonthGapBetweenReproRecrutement(getIntValue(pop, "nbMoisEntreReproRecrutement")); - pop3.setRecruitmentDistribution(getMatrixValue(pop, "etalementRecrutement")); //TODO la semantique devrait etre: sem.add(_("isisfish.common.month", i)); + pop3.setRecruitmentDistribution(getMatrixValue(pop, "etalementRecrutement")); //TODO la semantique devrait etre: sem.add(t("isisfish.common.month", i)); pop3.setComment(getStringValue(pop, "commentaire")); List<Zone> zones = getZoneValue(pop, "zonePopulation"); Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/EffortDescriptionImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/EffortDescriptionImpl.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/EffortDescriptionImpl.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.entities; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; /** * EffortDescriptionImpl. @@ -48,7 +48,7 @@ */ @Override public String toString() { - String result = _("isisfish.effortDescription.toString", + String result = t("isisfish.effortDescription.toString", getSetOfVessels(), getPossibleMetiers()); return result; } Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/EquationImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/EquationImpl.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/EquationImpl.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,12 +25,8 @@ package fr.ifremer.isisfish.entities; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; -import java.util.HashMap; -import java.util.Map; - -import bsh.Interpreter; import fr.ifremer.isisfish.IsisFishRuntimeException; import fr.ifremer.isisfish.datastore.FormuleStorage; import fr.ifremer.isisfish.equation.Language; @@ -56,64 +52,45 @@ /** * Evalue l'equation et retourne le résultat. * - * @param param equation args + * @param args equation args (arg name and arg value) * @return equation evaluation */ - public double evaluate(Map<String, Object> param) { + public double evaluate(Object... args) { String eq = getContent(); try { - // add Simulation context in map - param.put("context", SimulationContext.get()); // default is BSH - if (Language.BSH.equals(getLanguage()) - || (("".equals(getLanguage()) || getLanguage() == null) && getJavaInterface() == null)) { - Interpreter bsh = new Interpreter(); - for (Map.Entry<String, Object> e : param.entrySet()) { - bsh.set(e.getKey(), e.getValue()); - } - Object val = bsh.eval(eq); - if (val instanceof Number) { - double result = ((Number) val).doubleValue(); - return result; - } else { - throw new IsisFishRuntimeException(_("isisfish.error.equation.return.number", eq)); - } - } else if (Language.JAVA.equals(getLanguage()) + if (Language.JAVA.equals(getLanguage()) || getJavaInterface() != null) { + + // in Java, we don't need args names, only args value ordered + // build a new array with SimulationContext in first position + Object[] params = new Object[args.length / 2 + 1]; + params[0] = SimulationContext.get(); + for (int i = 0; i < args.length / 2; i++) { + params[i + 1] = args[i*2 + 1]; + } + // default Java if there are javaInterface Object val = EvaluatorHelper.evaluate( FormuleStorage.FORMULE_PATH, getTopiaId(), - getJavaInterface(), getContent(), param); + getJavaInterface(), getContent(), params); if (val instanceof Number) { double result = ((Number) val).doubleValue(); return result; } else { - throw new IsisFishRuntimeException(_("isisfish.error.equation.return.number", eq)); + throw new IsisFishRuntimeException(t("isisfish.error.equation.return.number", eq)); } } else { // TODO other language support - throw new IsisFishRuntimeException(_("isisfish.error.unsupported.equation.langage", + throw new IsisFishRuntimeException(t("isisfish.error.unsupported.equation.langage", getLanguage(), eq)); } } catch (Exception eee) { - throw new IsisFishRuntimeException(_("isisfish.error.evaluate.equation", eq), eee); + throw new IsisFishRuntimeException(t("isisfish.error.evaluate.equation", eq), eee); } - } - public double evaluate(String name, Object value, Object... others) { - Map<String, Object> param = new HashMap<String, Object>(); - param.put(name, value); - for (int i = 0; i < others.length;) { - name = (String) others[i++]; - value = others[i++]; - param.put(name, value); - } - double result = evaluate(param); - return result; - } - /* * @see fr.ifremer.isisfish.entities.EquationAbstract#toString() */ Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/FisheryRegionImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/FisheryRegionImpl.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/FisheryRegionImpl.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -231,6 +231,17 @@ } } + @Override + public List<Observation> getObservations() { + try { + ObservationDAO dao = IsisFishDAOHelper.getObservationDAO(getTopiaContext()); + List<Observation> result = dao.findAll(); + return result; + } catch (TopiaException eee) { + throw new IsisFishRuntimeException("Can't get observations", eee); + } + } + /* * @see fr.ifremer.isisfish.entities.FisheryRegionAbstract#toString() */ Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/MetierSeasonInfoImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/MetierSeasonInfoImpl.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/MetierSeasonInfoImpl.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.entities; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.util.ArrayList; import java.util.List; @@ -68,7 +68,7 @@ result = targetSpecies.getTargetFactor(group); } else { if (log.isDebugEnabled()) { - log.debug(_("isisfish.error.no.target.species", this, group)); + log.debug(t("isisfish.error.no.target.species", this, group)); } } return result; @@ -88,7 +88,7 @@ */ @Override public String toString() { - String result = _("isisfish.metierSeasonInfo.toString", this + String result = t("isisfish.metierSeasonInfo.toString", this .getMetier(), this.getFirstMonth(), this.getLastMonth()); return result; } Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationGroupImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationGroupImpl.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationGroupImpl.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.entities; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -73,7 +73,7 @@ */ @Override public double getLength() { - double result = 0; + double result = 0.0; if (getPopulation() != null && getPopulation().getSpecies() != null) { if (!getPopulation().getSpecies().getAgeGroupType()) { result = (getMinLength() + getMaxLength()) / 2.0; @@ -202,7 +202,7 @@ @Override public String toString() { - return _("isisfish.populationGroup.toString", this.getPopulation(), + return t("isisfish.populationGroup.toString", this.getPopulation(), this.getId()); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,8 +25,8 @@ package fr.ifremer.isisfish.entities; -import static org.nuiton.i18n.I18n._; -import static org.nuiton.i18n.I18n.n_; +import static org.nuiton.i18n.I18n.t; +import static org.nuiton.i18n.I18n.n; import java.util.Arrays; import java.util.Collection; @@ -170,7 +170,7 @@ } catch (TopiaException eee) { throw new IsisFishRuntimeException( - _("isisfish.error.change.equation"), eee); + t("isisfish.error.change.equation"), eee); } } @@ -201,7 +201,7 @@ fireOnPostWrite("content", _oldValue, content); } catch (TopiaException eee) { - throw new IsisFishRuntimeException(_("isisfish.change.equation"), + throw new IsisFishRuntimeException(t("isisfish.change.equation"), eee); } } @@ -234,7 +234,7 @@ } catch (TopiaException eee) { throw new IsisFishRuntimeException( - _("isisfish.error.change.equation"), eee); + t("isisfish.error.change.equation"), eee); } } @@ -266,7 +266,7 @@ } catch (TopiaException eee) { throw new IsisFishRuntimeException( - _("isisfish.error.change.equation"), eee); + t("isisfish.error.change.equation"), eee); } } @@ -298,7 +298,7 @@ } catch (TopiaException eee) { throw new IsisFishRuntimeException( - _("isisfish.error.change.equation"), eee); + t("isisfish.error.change.equation"), eee); } } @@ -329,7 +329,7 @@ fireOnPostWrite("content", _oldValue, content); } catch (TopiaException eee) { - throw new IsisFishRuntimeException(_("isisfish.change.equation"), + throw new IsisFishRuntimeException(t("isisfish.change.equation"), eee); } } @@ -361,7 +361,7 @@ fireOnPostWrite("content", _oldValue, content); } catch (TopiaException eee) { - throw new IsisFishRuntimeException(_("isisfish.change.equation"), + throw new IsisFishRuntimeException(t("isisfish.change.equation"), eee); } } @@ -394,7 +394,7 @@ } catch (TopiaException eee) { throw new IsisFishRuntimeException( - _("isisfish.error.change.equation"), eee); + t("isisfish.error.change.equation"), eee); } } @@ -524,10 +524,10 @@ getPopulationSeasonInfo(),}; MatrixND newmat = MatrixFactory.getInstance().create( - n_("isisfish.population.capturability"), + n("isisfish.population.capturability"), newsems, - new String[] { n_("isisfish.population.group"), - n_("isisfish.population.season") }); + new String[] { n("isisfish.population.group"), + n("isisfish.population.season") }); newmat.paste(value); value = newmat; } @@ -551,21 +551,19 @@ if (mat == null) { log.debug("Capturability is null, create new matrix"); mat = MatrixFactory.getInstance().create( - n_("isisfish.population.capturability"), + n("isisfish.population.capturability"), sems, - new String[] { n_("isisfish.population.group"), - n_("isisfish.population.season") }); + new String[] { n("isisfish.population.group"), + n("isisfish.population.season") }); // we don't call setCapturability because is better to create a valid // matrix when capturability is null instead check validity and // create new one and paste the old } else if (!Arrays.equals(mat.getSemantics(), sems)) { - log.debug("Capturability has changed, create new matrix and copy old: " - + mat.getSemantics() + " " + sems); MatrixND newmat = MatrixFactory.getInstance().create( - n_("isisfish.population.capturability"), + n("isisfish.population.capturability"), sems, - new String[] { n_("isisfish.population.group"), - n_("isisfish.population.season") }); + new String[] { n("isisfish.population.group"), + n("isisfish.population.season") }); boolean allNull = true; for (List l : mat.getSemantics()) { @@ -633,7 +631,7 @@ } catch (TopiaException eee) { throw new IsisFishRuntimeException( - _("isisfish.error.change.equation"), eee); + t("isisfish.error.change.equation"), eee); } } @@ -650,19 +648,19 @@ List[] sems = new List[] { getReproductionZone(), getRecruitmentZone(), }; if (mat == null) { mat = MatrixFactory.getInstance().create( - n_("isisfish.population.mappingZoneReproZoneRecru"), + n("isisfish.population.mappingZoneReproZoneRecru"), sems, - new String[] { n_("isisfish.population.reproduction"), - n_("isisfish.population.recruitment") }); + new String[] { n("isisfish.population.reproduction"), + n("isisfish.population.recruitment") }); // we don't call setMappingZoneReproZoneRecru because is better to create a valid // matrix when MappingZoneReproZoneRecru is null instead check validity and // create new one and paste the old } else if (!Arrays.equals(mat.getSemantics(), sems)) { MatrixND newmat = MatrixFactory.getInstance().create( - n_("isisfish.population.mappingZoneReproZoneRecru"), + n("isisfish.population.mappingZoneReproZoneRecru"), sems, - new String[] { n_("isisfish.population.reproduction"), - n_("isisfish.population.recruitment") }); + new String[] { n("isisfish.population.reproduction"), + n("isisfish.population.recruitment") }); newmat.paste(mat); mat = newmat; } @@ -672,7 +670,7 @@ /** * Convertie une matrice N 2D en une matrice N 1D strucutre pour les calculer. * - * N2D[classes, zones] --> N1D[classe1(zone1, zone2, ...), classe2(zone1, zone2, ...)] + * N2D[classes, zones] --> N1D[classe1(zone1, zone2, ...), classe2(zone1, zone2, ...)] * * @see #split2D(MatrixND) */ @@ -681,7 +679,7 @@ int maxY = N.getDim(1); MatrixND result = MatrixFactory.getInstance().create( - n_("isisfish.population.matrixAbundance1D"), + n("isisfish.population.matrixAbundance1D"), new int[] { 1, maxX * maxY }); for (int x = 0; x < maxX; x++) { @@ -705,10 +703,10 @@ int nbZone = zones.size(); MatrixND result = MatrixFactory.getInstance().create( - n_("isisfish.population.matrixAbundance"), + n("isisfish.population.matrixAbundance"), new List[] { groups, zones }, - new String[] { n_("isisfish.population.groups"), - n_("isisfish.population.zones") }); + new String[] { n("isisfish.population.groups"), + n("isisfish.population.zones") }); try { int c = 0; Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationSeasonInfoImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationSeasonInfoImpl.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationSeasonInfoImpl.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,8 +25,8 @@ package fr.ifremer.isisfish.entities; -import static org.nuiton.i18n.I18n._; -import static org.nuiton.i18n.I18n.n_; +import static org.nuiton.i18n.I18n.t; +import static org.nuiton.i18n.I18n.n; import java.util.ArrayList; import java.util.Arrays; @@ -87,9 +87,9 @@ if (!months.equals(oldMonths)) { MatrixND tmp = MatrixFactory.getInstance().create( - n_("isisfish.populationSeasonInfo.distributionSpawing"), + n("isisfish.populationSeasonInfo.distributionSpawing"), new List[] { months }, - new String[] { n_("isisfish.populationSeasonInfo.months") }); + new String[] { n("isisfish.populationSeasonInfo.months") }); tmp.pasteSemantics(result); result = tmp; } @@ -117,23 +117,23 @@ if (mat == null) { mat = MatrixFactory.getInstance().create( - n_("isisfish.populationSeasonInfo.migration"), + n("isisfish.populationSeasonInfo.migration"), sems, new String[] { - n_("isisfish.populationSeasonInfo.group"), - n_("isisfish.populationSeasonInfo.departure"), - n_("isisfish.populationSeasonInfo.arrival") }); + n("isisfish.populationSeasonInfo.group"), + n("isisfish.populationSeasonInfo.departure"), + n("isisfish.populationSeasonInfo.arrival") }); // we don't call setCapturability because is better to create a valid // matrix when capturability is null instead check validity and // create new one and paste the old } else if (!Arrays.equals(mat.getSemantics(), sems)) { MatrixND newmat = MatrixFactory.getInstance().create( - n_("isisfish.populationSeasonInfo.migration"), + n("isisfish.populationSeasonInfo.migration"), sems, new String[] { - n_("isisfish.populationSeasonInfo.group"), - n_("isisfish.populationSeasonInfo.departure"), - n_("isisfish.populationSeasonInfo.arrival") }); + n("isisfish.populationSeasonInfo.group"), + n("isisfish.populationSeasonInfo.departure"), + n("isisfish.populationSeasonInfo.arrival") }); newmat.pasteSemantics(mat); mat = newmat; // perhaps call setCapturability, but if possible wait the user @@ -157,21 +157,21 @@ if (mat == null) { mat = MatrixFactory.getInstance().create( - n_("isisfish.populationSeasonInfo.emigration"), + n("isisfish.populationSeasonInfo.emigration"), sems, new String[] { - n_("isisfish.populationSeasonInfo.group"), - n_("isisfish.populationSeasonInfo.departure") }); + n("isisfish.populationSeasonInfo.group"), + n("isisfish.populationSeasonInfo.departure") }); // we don't call setCapturability because is better to create a valid // matrix when capturability is null instead check validity and // create new one and paste the old } else if (!Arrays.equals(mat.getSemantics(), sems)) { MatrixND newmat = MatrixFactory.getInstance().create( - n_("isisfish.populationSeasonInfo.emigration"), + n("isisfish.populationSeasonInfo.emigration"), sems, new String[] { - n_("isisfish.populationSeasonInfo.group"), - n_("isisfish.populationSeasonInfo.departure") }); + n("isisfish.populationSeasonInfo.group"), + n("isisfish.populationSeasonInfo.departure") }); newmat.pasteSemantics(mat); mat = newmat; // perhaps call setCapturability, but if possible wait the user @@ -195,21 +195,21 @@ if (mat == null) { mat = MatrixFactory.getInstance().create( - n_("isisfish.populationSeasonInfo.immigration"), + n("isisfish.populationSeasonInfo.immigration"), sems, new String[] { - n_("isisfish.populationSeasonInfo.group"), - n_("isisfish.populationSeasonInfo.arrival") }); + n("isisfish.populationSeasonInfo.group"), + n("isisfish.populationSeasonInfo.arrival") }); // we don't call setCapturability because is better to create a valid // matrix when capturability is null instead check validity and // create new one and paste the old } else if (!Arrays.equals(mat.getSemantics(), sems)) { MatrixND newmat = MatrixFactory.getInstance().create( - n_("isisfish.populationSeasonInfo.immigration"), + n("isisfish.populationSeasonInfo.immigration"), sems, new String[] { - n_("isisfish.populationSeasonInfo.group"), - n_("isisfish.populationSeasonInfo.arrival") }); + n("isisfish.populationSeasonInfo.group"), + n("isisfish.populationSeasonInfo.arrival") }); newmat.pasteSemantics(mat); mat = newmat; // perhaps call setCapturability, but if possible wait the user @@ -396,7 +396,7 @@ c++; } if (c >= groups.size()) { - log.warn(_("isisfish.error.acceptable.population") + log.warn(t("isisfish.error.acceptable.population") + " (group=" + group + " new length: " + length[l] + ")"); // pas retrouver une classe pour cette longueur, on le laisse dans la meme classe. @@ -733,7 +733,7 @@ } catch (TopiaException eee) { throw new IsisFishRuntimeException( - _("isisfish.error.change.equation"), eee); + t("isisfish.error.change.equation"), eee); } } @@ -767,7 +767,7 @@ } catch (TopiaException eee) { throw new IsisFishRuntimeException( - _("isisfish.error.change.equation"), eee); + t("isisfish.error.change.equation"), eee); } } @@ -801,7 +801,7 @@ } catch (TopiaException eee) { throw new IsisFishRuntimeException( - _("isisfish.error.change.equation"), eee); + t("isisfish.error.change.equation"), eee); } } @@ -839,7 +839,7 @@ } public String toString() { - String result = _("isisfish.populationSeasonInfo.toString", this + String result = t("isisfish.populationSeasonInfo.toString", this .getPopulation(), this.getFirstMonth(), this.getLastMonth()); return result; } Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/SeasonImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/SeasonImpl.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/SeasonImpl.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -29,7 +29,7 @@ import java.util.List; import fr.ifremer.isisfish.types.Month; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; /*** * SeasonImpl. @@ -62,7 +62,7 @@ public List<Month> getMonths() { List<Month> result = new ArrayList<Month>(); Month m = getFirstMonth(); - while (m.equals(getLastMonth()) == false) { + while (!m.equals(getLastMonth())) { result.add(m); m = m.next(); } @@ -92,7 +92,7 @@ boolean result = month.equals(getLastMonth()); // check first last month, because loop don't do that Month m = getFirstMonth(); - while (result == false && m.equals(getLastMonth()) == false) { + while (!result && !m.equals(getLastMonth())) { result = m.equals(month); m = m.next(); } @@ -104,7 +104,7 @@ */ @Override public String toString() { - String result = _("isisfish.season.toString", this.getFirstMonth(), + String result = t("isisfish.season.toString", this.getFirstMonth(), this.getLastMonth()); return result; } Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/SelectivityImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/SelectivityImpl.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/SelectivityImpl.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.entities; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import org.nuiton.topia.TopiaException; @@ -110,7 +110,7 @@ } catch (TopiaException eee) { throw new IsisFishRuntimeException( - _("isisfish.error.change.equation"), eee); + t("isisfish.error.change.equation"), eee); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/SetOfVesselsImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/SetOfVesselsImpl.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/SetOfVesselsImpl.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.entities; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -135,7 +135,7 @@ fireOnPostWrite("content", _oldValue, content); } catch (TopiaException eee) { - throw new IsisFishRuntimeException(_("isisfish.change.equation"), + throw new IsisFishRuntimeException(t("isisfish.change.equation"), eee); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/StrategyImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/StrategyImpl.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/StrategyImpl.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.entities; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.util.ArrayList; import java.util.Arrays; @@ -98,7 +98,7 @@ List<StrategyMonthInfo> result = super.getStrategyMonthInfo(); if (result == null || result.size() != Month.NUMBER_OF_MONTH) { if (result != null) { - log.warn(_("isisfish.error.strategy.order", getName(), + log.warn(t("isisfish.error.strategy.order", getName(), result.size())); clearStrategyMonthInfo(); } else { @@ -201,7 +201,7 @@ fireOnPostWrite("content", _oldValue, content); } catch (TopiaException eee) { - throw new IsisFishRuntimeException(_("isisfish.change.equation"), + throw new IsisFishRuntimeException(t("isisfish.change.equation"), eee); } } @@ -235,10 +235,10 @@ List<Month> months = Arrays.asList(Month.MONTH); MatrixND result = MatrixFactory.getInstance().create( - _("isisfish.strategy.proportionMetier"), + t("isisfish.strategy.proportionMetier"), new List[] { metiers, months}, - new String[] { _("isisfish.strategyMonthInfo.metier"), - _("isisfish.common.months")}); + new String[] { t("isisfish.strategyMonthInfo.metier"), + t("isisfish.common.months")}); // copy sub StrategyMonthInfo's proportionMetier to current if (getStrategyMonthInfo() != null) { Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/StrategyMonthInfoImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/StrategyMonthInfoImpl.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/StrategyMonthInfoImpl.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.entities; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.util.ArrayList; import java.util.Collection; @@ -117,14 +117,14 @@ if (result == null) { result = MatrixFactory.getInstance().create( - _("isisfish.strategyMonthInfo.proportion"), + t("isisfish.strategyMonthInfo.proportion"), new List[] { metiers }, - new String[] { _("isisfish.strategyMonthInfo.metier") }); + new String[] { t("isisfish.strategyMonthInfo.metier") }); } else if (!result.getSemantic(0).equals(metiers)) { MatrixND tmp = MatrixFactory.getInstance().create( - _("isisfish.strategyMonthInfo.proportion"), + t("isisfish.strategyMonthInfo.proportion"), new List[] { metiers }, - new String[] { _("isisfish.strategyMonthInfo.metier") }); + new String[] { t("isisfish.strategyMonthInfo.metier") }); tmp.pasteSemantics(result); result = tmp; } @@ -170,7 +170,7 @@ */ @Override public String toString() { - String result = _("isisfish.strategyMonthInfo.toString", this + String result = t("isisfish.strategyMonthInfo.toString", this .getStrategy(), this.getMonth()); return result; } Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/TargetSpeciesImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/TargetSpeciesImpl.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/TargetSpeciesImpl.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.entities; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -73,7 +73,7 @@ setTargetFactorEquation(eq); } catch (TopiaException eee) { throw new IsisFishRuntimeException( - _("isisfish.error.create.equation"), eee); + t("isisfish.error.create.equation"), eee); } } @@ -102,7 +102,7 @@ } catch (TopiaException eee) { throw new IsisFishRuntimeException( - _("isisfish.error.change.equation"), eee); + t("isisfish.error.change.equation"), eee); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/VariableImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/VariableImpl.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/VariableImpl.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.entities; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import org.apache.commons.beanutils.BeanUtils; import org.nuiton.topia.TopiaException; @@ -115,7 +115,7 @@ fireOnPostWrite("content", _oldValue, content); } catch (TopiaException eee) { - throw new IsisFishRuntimeException(_("isisfish.change.equation"), eee); + throw new IsisFishRuntimeException(t("isisfish.change.equation"), eee); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/equation/Language.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/equation/Language.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/equation/Language.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -40,8 +40,6 @@ /** Java language. */ final static public String JAVA = "java"; - /** Bean shell language. */ - final static public String BSH = "BSH"; /** ECMAScript language. */ final static public String ECMASCRIPT = "ECMAScript"; /** GROOVY language. */ Modified: trunk/src/main/java/fr/ifremer/isisfish/logging/LogLevel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/logging/LogLevel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/logging/LogLevel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -26,8 +26,8 @@ package fr.ifremer.isisfish.logging; /** - * abstraction of a log level - * <p/> + * abstraction of a log level. + * * a LogLevel is defined by 3 properties : * <ul> * <li> his name (given by {@link #name()}) </li> @@ -36,10 +36,10 @@ * <li> his mask value (given by {@link #mask()}) </li> * </ul> * The mask value is introduced to make possible some performant search. - * <p/> - * Using the <b>"<code>1 << ordinal()</code>"</b> idiom is the easiest manner to manage + * + * Using the <b>"<code>1 << ordinal()</code>"</b> idiom is the easiest manner to manage * operations of set of LogLevels. - * <p/> + * <p> * To obtain a LogLevel from his severity, use {@link #getLogLevel(int)} * * @author chemit Modified: trunk/src/main/java/fr/ifremer/isisfish/logging/LogLevelUtil.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/logging/LogLevelUtil.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/logging/LogLevelUtil.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -35,17 +35,17 @@ * To make performant filtering operations on a lots of LogRecord, * we use as representation for set of LogLevel an integer * as the sum of the {@link LogLevel#mask()} values. - * <p/> + * * The <code>0</code> value correspond to all levels and is a violating the rule * (but how to make a search with no level ?) - * <p/> + * * to test if a set of LogLevel contains a given LogLevel use * {@link #contains(int, int)} - * <p/> + * * to add a level in a set of LogLevel use {@link #addToSet(int, int)} - * <p/> + * * to remove a level in a set of LogLevel use {@link #removeFromSet(int, int)} - * <p/> + * * to obtain all levels contained in a set of LogLevel use * {@link #getLogLevels(int)} * @@ -80,7 +80,7 @@ /** * Compute the sum of levels toInit() value for * all given levels (given with their ordinal value). - * <p/> + * <p> * This value will be used for a performant filter process. * * @param firstOrdinal the first level of levels to use Modified: trunk/src/main/java/fr/ifremer/isisfish/logging/SimulationLoggerUtil.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/logging/SimulationLoggerUtil.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/logging/SimulationLoggerUtil.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -36,7 +36,7 @@ import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.io.IOException; @@ -51,15 +51,15 @@ * * Usefull class for dealing with hot configuration of log4J. this is temporary * we must find a way to abstract this layer. - * <p/> + * * the class offers three public static methods : - * <p/> + * * {@link #addSimulationAppender(String, String, String, String, String, String)} * to add a logger for a given simulation in a given thread, with simulLogLevel, * scriptLogLvel and libLogLevel given. - * <p/> - * {@link #removeAppender(String, String)} to remove a appender of a simulation - * <p/> + * + * {@code #removeAppender(String, String)} to remove a appender of a simulation + * * {@link #showSimulationLogConsole(String)} to display the log console of * a simulation, given his name. * @@ -137,10 +137,10 @@ Logger.getRootLogger().addAppender(appender); if (log.isDebugEnabled()) { - log.debug(_("isisfish.log.addAppender", appenderId)); + log.debug(t("isisfish.log.addAppender", appenderId)); } } catch (IOException ex) { - log.error(_("isisfish.error.log.createAppender", appenderId, ex.getMessage())); + log.error(t("isisfish.error.log.createAppender", appenderId, ex.getMessage())); throw new IsisFishException("Can't add appender", ex); } @@ -153,7 +153,7 @@ */ public static void removeSimulationAppender(String appenderId) { if (log.isDebugEnabled()) { - log.debug(_("isisfish.log.removeAppender", appenderId)); + log.debug(t("isisfish.log.removeAppender", appenderId)); } removeAppender(null, appenderId); // push back to original levels @@ -182,12 +182,12 @@ String smtpServer = IsisFish.config.getSmtpServer(); String defaultFrom = IsisFish.config.getUserMail(); - String title = _("isisfish.simulation.log.console.title", simulationName); + String title = t("isisfish.simulation.log.console.title", simulationName); LogConsole.newConsole(logFile, smtpServer, defaultFrom, null, title); if (log.isInfoEnabled()) { - log.info(_("isisfish.simulation.log.showConsole", simulationName)); + log.info(t("isisfish.simulation.log.showConsole", simulationName)); } } @@ -218,7 +218,7 @@ // we found a logger to keep at his level result.put(logger.getName(), logger.getLevel()); if (log.isDebugEnabled()) { - log.debug(_("isisfish.log.swapLogLevel", loggerName, logger.getLevel(), logLevel)); + log.debug(t("isisfish.log.swapLogLevel", loggerName, logger.getLevel(), logLevel)); } // change to new level logger.setLevel(level); @@ -242,7 +242,7 @@ if (logger != null) { Level oldLevel = entry.getValue(); if (log.isDebugEnabled()) { - log.debug(_("isisfish.log.restoreLogLevel", logger.getName(), logger.getLevel(), oldLevel)); + log.debug(t("isisfish.log.restoreLogLevel", logger.getName(), logger.getLevel(), oldLevel)); } logger.setLevel(oldLevel); } @@ -262,16 +262,16 @@ // get logger for the category Logger logger = category == null ? Logger.getRootLogger() : Logger.getLogger(category); if (logger == null) { - Logger.getRootLogger().warn(_("isisfish.error.log.closeAppender", name, category)); + Logger.getRootLogger().warn(t("isisfish.error.log.closeAppender", name, category)); return; } // get the required appender Appender app = logger.getAppender(name); if (app == null) { - logger.warn(_("isisfish.error.log.foundAppender", name, category)); + logger.warn(t("isisfish.error.log.foundAppender", name, category)); return; } - logger.info(_("isisfish.log.closeAppender", name, category)); + logger.info(t("isisfish.log.closeAppender", name, category)); // close appender app.close(); // and remove it from the logger Modified: trunk/src/main/java/fr/ifremer/isisfish/logging/console/LogConsole.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/logging/console/LogConsole.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/logging/console/LogConsole.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.logging.console; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.EventQueue; import java.awt.event.ActionEvent; @@ -96,7 +96,7 @@ defaultFrom, String defaultTo, String title) throws IOException, IllegalArgumentException { if (!logFile.exists()) { - String message1 = _("could not found log file %1$s", logFile); + String message1 = t("could not found log file %1$s", logFile); log.warn(message1); throw new IllegalArgumentException(message1); } @@ -179,8 +179,8 @@ protected boolean disableScroll = true; /** - * the console listen the change on the model - * <p/> + * the console listen the change on the model. + * * TODO Deal with ui data update : use a Timer (or a Worker) * * @param e change event Modified: trunk/src/main/java/fr/ifremer/isisfish/logging/console/LogConsoleHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/logging/console/LogConsoleHandler.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/logging/console/LogConsoleHandler.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -29,7 +29,7 @@ import static fr.ifremer.isisfish.logging.console.LogConsole.RESET_CHANGED_PROPERTY; import static fr.ifremer.isisfish.logging.console.LogConsole.TEXT_CHANGED_PROPERTY; import static org.apache.commons.logging.LogFactory.getLog; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.event.AdjustmentEvent; import java.awt.event.AdjustmentListener; @@ -61,7 +61,7 @@ /** * This class is responsible of provinding LogRecord, it deals with LogReecord * stored in a file with a serializedForm for performance issue. - * <p/> + * * <b>Use one LogConsoleHandler for one log file</b> * * @author chemit @@ -143,7 +143,7 @@ try { levelsReader.close(); } catch (IOException e) { - log.warn(_("could not close reader %1$s", levelsReader)); + log.warn(t("could not close reader %1$s", levelsReader)); } } @@ -151,7 +151,7 @@ try { reader.close(); } catch (IOException e) { - log.warn(_("could not close reader %1$s", reader)); + log.warn(t("could not close reader %1$s", reader)); } } } @@ -212,7 +212,7 @@ dontAdjust = true; read(newOffset); } catch (IOException e1) { - log.warn(_("could not read at offset %1$s for reason %2$s", newOffset, e1.getMessage())); + log.warn(t("could not read at offset %1$s for reason %2$s", newOffset, e1.getMessage())); } } @@ -225,7 +225,7 @@ dontAdjust = true; read(e.getValue()); } catch (IOException e1) { - log.warn(_("could not read at offset %1$s for reason %2$s", e.getValue(), e1.getMessage())); + log.warn(t("could not read at offset %1$s for reason %2$s", e.getValue(), e1.getMessage())); } } @@ -240,7 +240,7 @@ try { close(); } catch (Exception e) { - log.warn(_("isisfish.error.log.console.dispose" ,this,e.getMessage())); + log.warn(t("isisfish.error.log.console.dispose" ,this,e.getMessage())); } return; } @@ -360,7 +360,7 @@ read(0); dontAdjust = true; model.fireStateChanged(); - getStatusBar().setStatus(_("filter loaded in %1$s ms : found %2$s lines.", (System.currentTimeMillis() - t0), reader.getNbLines())); + getStatusBar().setStatus(t("filter loaded in %1$s ms : found %2$s lines.", (System.currentTimeMillis() - t0), reader.getNbLines())); } catch (IOException e) { log.warn("could not open reader [" + this.reader + "] for reason " + e.getMessage()); } Modified: trunk/src/main/java/fr/ifremer/isisfish/logging/console/LogConsoleModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/logging/console/LogConsoleModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/logging/console/LogConsoleModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -34,7 +34,7 @@ /** * This class is the model used in LogConsole. - * <p/> + * * The model deals with ChangeEvent to notify ui, model has changed. * * @author chemit Modified: trunk/src/main/java/fr/ifremer/isisfish/logging/console/LogMail.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/logging/console/LogMail.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/logging/console/LogMail.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.logging.console; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -57,6 +57,7 @@ import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; +import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.FileUtil; @@ -70,7 +71,6 @@ * * @author chemit */ - public class LogMail extends LogMailUI { /** serialVersionUID */ @@ -97,7 +97,7 @@ protected StatusBar statusBar; public LogMail(final StatusBar statusBar, String from, File logFile, File simulationFile, final String smtpServer) { - setTitle(_("isisfish.log.mail.send.title", simulationFile.getName())); + setTitle(t("isisfish.log.mail.send.title", simulationFile.getName())); this.from = from; this.logFile = logFile; this.simulationFile = simulationFile; @@ -108,9 +108,9 @@ public void actionPerformed(ActionEvent e) { try { sendMail(mailTo.getText(), content.getText(), sendAll.isSelected()); - statusBar.setStatus(_("isisfish.log.mail.send" , to)); + statusBar.setStatus(t("isisfish.log.mail.send" , to)); } catch (Exception eee) { - statusBar.setStatus(_("isisfish.log.mail.failed", smtpServer)); + statusBar.setStatus(t("isisfish.log.mail.failed", smtpServer)); } finally { dispose(); } @@ -157,7 +157,7 @@ BodyPart attPart = new MimeBodyPart(); // -- Set the subject and body text -- - String subject = _("isisfish.log.simulation.name",simulationFile.getName()); + String subject = t("isisfish.log.simulation.name",simulationFile.getName()); msg.setSubject(subject); final File zipFile; @@ -174,7 +174,7 @@ ZipOutputStream zipOutputStream = new ZipOutputStream(byteArrayOutputStream); BufferedWriter zipWriter = new BufferedWriter(new OutputStreamWriter(zipOutputStream)); zipOutputStream.putNextEntry(new ZipEntry(zipFile.getName())); - String content = FileUtil.readAsString(zipFile); + String content = FileUtils.readFileToString(zipFile); zipWriter.write(content); zipWriter.flush(); @@ -251,8 +251,8 @@ Transport.send(msg); if (tmpDirectory != null) { - if (!FileUtil.deleteRecursively(tmpDirectory)) { - log.warn(_("isisfish.error.remove.directory", tmpDirectory)); + if (!FileUtils.deleteQuietly(tmpDirectory)) { + log.warn(t("isisfish.error.remove.directory", tmpDirectory)); } } } Modified: trunk/src/main/java/fr/ifremer/isisfish/logging/io/FileOffsetReader.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/logging/io/FileOffsetReader.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/logging/io/FileOffsetReader.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -37,7 +37,7 @@ /** * A simple implementation of {@link OffsetReader} using a file for * dealing with offsets. - * <p/> + * * The offset of lines are pre-computed in a file {@link #offsetFile}, generated * by {@link #createOffsets(LineReader)}. or * {@link #createOffsets(LineReader , LineReader)}. Modified: trunk/src/main/java/fr/ifremer/isisfish/logging/io/LineReader.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/logging/io/LineReader.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/logging/io/LineReader.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -35,10 +35,10 @@ /** * A lineReader reads lines from a file using a {@link java.io.RandomAccessFile}. - * <p/> - * To perfrom efficient io operations, we use a {@link OffsetReader} to obtain + * + * To perform efficient io operations, we use a {@link OffsetReader} to obtain * the offset of the first char of a line. - * <p/> + * * You can create a new LineReader from a previous one, the matchings lines of * the new LineReader will all match the parent one (subset LineReader). * Modified: trunk/src/main/java/fr/ifremer/isisfish/logging/io/MemoryOffsetReader.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/logging/io/MemoryOffsetReader.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/logging/io/MemoryOffsetReader.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -34,9 +34,8 @@ /** * This class is a Offset Reader using a memory cache. - * <p/> + * * All offsets are saved in memory. - * <p/> * * @author chemit */ Modified: trunk/src/main/java/fr/ifremer/isisfish/map/CellSelectionLayer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/map/CellSelectionLayer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/map/CellSelectionLayer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -227,13 +227,11 @@ * listener is interested in. * Layers interested in receiving events should register for * receiving events in "select" mode. - * <code> * <pre> * return new String[1] { * SelectMouseMode.modeID * }; * </pre> - * <code> * @see NavMouseMode#modeID * @see SelectMouseMode#modeID * @see NullMouseMode#modeID Modified: trunk/src/main/java/fr/ifremer/isisfish/map/CopyMapToClipboardListener.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/map/CopyMapToClipboardListener.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/map/CopyMapToClipboardListener.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.map; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Graphics; import java.awt.GraphicsEnvironment; @@ -87,7 +87,7 @@ menu = new JPopupMenu(); JMenuItem copyClicboardItem = new JMenuItem(); - copyClicboardItem.setText(_("isisfish.input.map.copytoclicboard")); + copyClicboardItem.setText(t("isisfish.input.map.copytoclicboard")); copyClicboardItem.setActionCommand(COPY_TO_CLICBOARD_COMMAND); copyClicboardItem.addActionListener(this); menu.add(copyClicboardItem); Modified: trunk/src/main/java/fr/ifremer/isisfish/map/IsisMapBean.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/map/IsisMapBean.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/map/IsisMapBean.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2002 - 2010 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin + * Copyright (C) 2002 - 2014 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -25,27 +25,32 @@ package fr.ifremer.isisfish.map; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; +import java.awt.Color; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Properties; +import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; -import com.bbn.openmap.BufferedMapBean; import com.bbn.openmap.Layer; import com.bbn.openmap.LayerHandler; +import com.bbn.openmap.MapBean; import com.bbn.openmap.MouseDelegator; +import com.bbn.openmap.PropertyHandler; +import com.bbn.openmap.event.CoordMouseMode; import com.bbn.openmap.event.MapMouseListener; import com.bbn.openmap.event.MapMouseMode; import com.bbn.openmap.event.NavMouseMode; +import com.bbn.openmap.gui.OverlayMapPanel; import com.bbn.openmap.layer.GraticuleLayer; import com.bbn.openmap.layer.dted.DTEDLayer; import com.bbn.openmap.layer.e00.E00Layer; @@ -68,13 +73,13 @@ * * Created: 16 mai 2005 * - * @author Benjamin Poussin <poussin@codelutin.com> + * @author Benjamin Poussin <poussin@codelutin.com> * @version $Revision$ * * Mise a jour: $Date$ * par : $Author$ */ -public class IsisMapBean extends BufferedMapBean { +public class IsisMapBean extends OverlayMapPanel { /** serialVersionUID. */ private static final long serialVersionUID = -4162103384132928473L; @@ -101,24 +106,36 @@ protected static final float SCALE = 9500000f; public IsisMapBean() { + super(new PropertyHandler(new Properties()), true); + create(); init(); - setActiveMouseMode(new NavMouseMode()); } - protected void init() { - setScale(SCALE); + public void init() { + MapBean mapBean = getMapBean(); + mapBean.setScale(SCALE); // Let the LayerHandler know who is interested in Layers. //MapBean is just one component - layerHandler.addLayerListener(this); + //layerHandler.addLayerListener(this); - md = new MouseDelegator(this); + md = new MouseDelegator(mapBean); // md.addMouseMode(selectMouseMode); // Tell the delegator to use the default modes: Navigation // and Selection md.setDefaultMouseModes(); + addMapComponent(md); + addMapComponent(layerHandler); + + getMapBean().setBackgroundColor(new Color(0x99b3cc)); + + NavMouseMode mouseMode = new NavMouseMode(); + setActiveMouseMode(mouseMode); + + // add copy to clipboard support + addMapMouseListener(new CopyMapToClipboardListener(mapBean)); } - public void setActiveMouseMode(MapMouseMode mode) { + public void setActiveMouseMode(CoordMouseMode mode) { md.setActiveMouseMode(mode); currentMouseMode = mode; // il faut remettre les listeners @@ -278,7 +295,7 @@ public void addResultatLayer(String id, ResultatLayer layer) { layer.setName(id); addMapMouseListener(layer); - layerHandler.addLayer(layer); + addMapComponent(layer); } public void removeAllResultatLayer() { @@ -304,25 +321,27 @@ Layer layer = null; // get layer depending on type - if (mapFile.endsWith(".shp")) { + switch (FilenameUtils.getExtension(mapFile)) { + case "shp": layer = getShapeLayer(layerId, mapFile, lineColor, fillColor); - } - else if (mapFile.endsWith(".e00")) { + break; + case "e00": layer = getE00Layer(layerId, mapFile, lineColor, fillColor); - } - else if (mapFile.endsWith(".mif")) { + break; + case "mif": layer = getMIFLayer(layerId, mapFile, lineColor, fillColor); - } - else if (mapFile.endsWith(".rpf") || mapFile.endsWith(".cadrg") || mapFile.endsWith(".cib")) { + break; + case "rpf": + case "cadrg": + case "cib": layer = getRPFLayer(layerId, mapFile, lineColor, fillColor); - } - else if (mapFile.endsWith(".vmap") || mapFile.endsWith(".dcw") || mapFile.endsWith(".vpf")) { + break; + case "vmap": + case "dcw": + case "vpf": layer = getVPFLayer(layerId, mapFile, lineColor, fillColor); - } - /*else if (mapFile.endsWith(".dt0")) { - layer = getDTEDLayer(layerId, mapFile, lineColor, fillColor); - }*/ - else { + break; + default: if (log.isErrorEnabled()) { log.error("Can't find layer for " + mapFile + " (unknown type)"); } @@ -333,7 +352,7 @@ if (log.isDebugEnabled()) { log.debug("Add layer " + layer); } - layerHandler.addLayer(layer); + addMapComponent(layer); } } @@ -561,12 +580,12 @@ p.setProperty("." + GraticuleLayer.TextColorProperty, "FF000000"); layer.setProperties("", p); - layerHandler.addLayer(layer); + addMapComponent(layer); } protected void addZoneDelimiterLayer() throws TopiaException { ZoneDelimiterLayer layer = new ZoneDelimiterLayer(fisheryRegion); - layerHandler.addLayer(layer); + addMapComponent(layer); } protected void addSpecificLayer() { @@ -595,9 +614,8 @@ // OR this one //setProjection(new CADRG(new LatLonPoint(centerLat, centerLong), SCALE, 480, 540)); - setCenter(new LatLonPoint.Float(centerLat, centerLong)); + getMapBean().setCenter(new LatLonPoint.Float(centerLat, centerLong)); //setScale(SCALE); - addSpecificLayer(); addGraticuleLayer(); // ajout des shapes @@ -605,7 +623,7 @@ for (String filename : getFisheryRegion().getMapFilePath()) { if (!StringUtils.isEmpty(filename)) { if (log.isDebugEnabled()) { - log.debug(_("isisfish.message.load.map", filename)); + log.debug(t("isisfish.message.load.map", filename)); } addLayer(filename, filename, "ff000000", "ffbdde83"); shapeLoaded = true; @@ -621,10 +639,12 @@ String filename = IsisFish.config.getDefaultMapFilename(); addLayer(filename, filename, "ff000000", "ffbdde83"); } + + addSpecificLayer(); } catch (Exception eee) { if (log.isErrorEnabled()) { - log.error(_("isisfish.error.init.map"), eee); + log.error(t("isisfish.error.init.map"), eee); } } } @@ -653,7 +673,7 @@ try { activeSelectionLayer = new CellSelectionLayer(fisheryRegion, getSelectionMode()); addMapMouseListener(activeSelectionLayer); - layerHandler.addLayer(activeSelectionLayer); + addMapComponent(activeSelectionLayer); } catch (TopiaException eee) { if (log.isWarnEnabled()) { log.warn("Can't add selection layer", eee); Copied: trunk/src/main/java/fr/ifremer/isisfish/map/OpenMapEvents.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/map/OpenMapEvents.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/map/OpenMapEvents.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/map/OpenMapEvents.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,129 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2005 - 2010 Ifremer, Code Lutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.map; + +import java.awt.event.MouseEvent; + +import com.bbn.openmap.Layer; +import com.bbn.openmap.event.CoordMouseMode; +import com.bbn.openmap.event.MapMouseListener; +import com.bbn.openmap.event.MapMouseMode; +import com.bbn.openmap.event.ProjectionEvent; +import com.bbn.openmap.event.SelectMouseMode; + +/** + * OpenMapEvents.java + * + * Created: 5 septembre 2005 03:21:41 CEST + * + * @author Benjamin POUSSIN <poussin@codelutin.com> + * @version $Revision: 202 $ + * + * Last update: $Date: 2006-06-30 18:39:09 +0200 (ven, 30 jun 2006) $ + * by : $Author: bpoussin $ + */ +public abstract class OpenMapEvents extends Layer implements MapMouseListener { // OpenMapEvents + + /** serialVersionUID. */ + private static final long serialVersionUID = -8365120112075269288L; + + /** + * SelectMouseMode property: Null, Distance, Nav, Select + */ + protected MapMouseMode mouseMode; + protected IsisMapBean map; + + protected int selectMode = CellSelectionLayer.SINGLE_SELECTION; + + /** + * Constructor. + * + * Register himself to {@code map} mapMouseListener. + * Also set mouseMode and selectMode on map. + * + * @param map map bean + * @param mouseMode mouse mode + * @param selectMode select mode + */ + public OpenMapEvents(IsisMapBean map, CoordMouseMode mouseMode, int selectMode) { + super(); + this.mouseMode = mouseMode; + this.map = map; + this.selectMode = selectMode; + map.setSelectionMode(selectMode); + map.setActiveMouseMode(mouseMode); + map.addMapMouseListener(this); + + } + + @Override + public void projectionChanged(ProjectionEvent e) { + // do nothing, it's not reel layer + } + + @Override + public String[] getMouseModeServiceList() { + return new String[] { SelectMouseMode.modeID }; + } + + @Override + public boolean mouseClicked(MouseEvent e) { + return true; + } + + @Override + public boolean mouseDragged(MouseEvent e) { + return false; + } + + @Override + public void mouseEntered(MouseEvent e) { + } + + @Override + public void mouseExited(MouseEvent e) { + } + + @Override + public void mouseMoved() { + } + + @Override + public boolean mouseMoved(MouseEvent e) { + return false; + } + + @Override + public boolean mousePressed(MouseEvent e) { + return false; + } + + @Override + public boolean mouseReleased(MouseEvent e) { + return false; + } + +} // OpenMapEvents Modified: trunk/src/main/java/fr/ifremer/isisfish/map/ResultatLayer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/map/ResultatLayer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/map/ResultatLayer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.map; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Color; import java.awt.Component; @@ -298,11 +298,10 @@ * The source MouseEvents will only get sent to the MapMouseListener if the * mode is set to one that the listener is interested in. Layers interested * in receiving events should register for receiving events in "select" - * mode. <code> + * mode. * <pre> * return new String[1] { SelectMouseMode.modeID }; * </pre> - * <code> * @see SelectMouseMode#modeID */ public String[] getMouseModeServiceList() { @@ -359,11 +358,11 @@ for (Object datamap : datamaps) { DefaultDataMap dataMap = (DefaultDataMap) datamap; if (dataMap.getInfo() != null) { - info += _("Info") + ": " + dataMap.getInfo().getLabels() - + " " + _("isisfish.common.value") + ":" + dataMap.getValue() + "\n"; + info += t("Info") + ": " + dataMap.getInfo().getLabels() + + " " + t("isisfish.common.value") + ":" + dataMap.getValue() + "\n"; } else { - info += " " + _("isisfish.common.value") + ":" + dataMap.getValue() + "\n"; + info += " " + t("isisfish.common.value") + ":" + dataMap.getValue() + "\n"; } } Modified: trunk/src/main/java/fr/ifremer/isisfish/mexico/MexicoHelper.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/MexicoHelper.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/MexicoHelper.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -46,9 +46,8 @@ import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConvertUtilsBean; import org.apache.commons.io.FileUtils; -import org.apache.commons.io.FilenameUtils; -import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.dom4j.Document; @@ -61,7 +60,6 @@ import org.nuiton.topia.TopiaContext; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; -import org.omg.CosNaming.NamingContextExtPackage.StringNameHelper; import org.xml.sax.InputSource; import fr.ifremer.isisfish.IsisFishDAOHelper; @@ -97,11 +95,12 @@ * Get xml representation of a design plan. * * @param designPlan design plan + * @param args some meta information to put into generated xml (author, date, id, license) * @return xml design plan representation */ - public static String getDesignPlanAsXML(DesignPlan designPlan) { + public static String getDesignPlanAsXML(DesignPlan designPlan, String... args) { - DesignPlanXMLVisitor visitor = new DesignPlanXMLVisitor(); + DesignPlanXMLVisitor visitor = new DesignPlanXMLVisitor(args); designPlan.accept(visitor); String designPlanXml = visitor.getXML(); @@ -181,23 +180,23 @@ * * Format is : * <pre> - * <mx name="une matrice"> - * <dimension name="classe" size="2"> - * <label>jeune</label> - * <label>vieux</label> - * </dimension> - * <dimension name="x" size="3"> - * <label>0</label> - * <label>1</label> - * <label>2</label> - * </dimension> - * <d>2.0</d> - * <d>3.1415</d> - * <d>2.0</d> - * <d>3.1415</d> - * <d>2.0</d> - * <d>3.1415</d> - * </mx> + * <mx name="une matrice"> + * <dimension name="classe" size="2"> + * <label>jeune</label> + * <label>vieux</label> + * </dimension> + * <dimension name="x" size="3"> + * <label>0</label> + * <label>1</label> + * <label>2</label> + * </dimension> + * <d>2.0</d> + * <d>3.1415</d> + * <d>2.0</d> + * <d>3.1415</d> + * <d>2.0</d> + * <d>3.1415</d> + * </mx> * </pre> * * @param matrix matrix @@ -266,23 +265,23 @@ * * Format is : * <pre> - * <mx name="une matrice"> - * <dimension name="classe" size="2"> - * <label>jeune</label> - * <label>vieux</label> - * </dimension> - * <dimension name="x" size="3"> - * <label>0</label> - * <label>1</label> - * <label>2</label> - * </dimension> - * <d>2.0</d> - * <d>3.1415</d> - * <d>2.0</d> - * <d>3.1415</d> - * <d>2.0</d> - * <d>3.1415</d> - * </mx> + * <mx name="une matrice"> + * <dimension name="classe" size="2"> + * <label>jeune</label> + * <label>vieux</label> + * </dimension> + * <dimension name="x" size="3"> + * <label>0</label> + * <label>1</label> + * <label>2</label> + * </dimension> + * <d>2.0</d> + * <d>3.1415</d> + * <d>2.0</d> + * <d>3.1415</d> + * <d>2.0</d> + * <d>3.1415</d> + * </mx> * </pre> * * @param mxElement dom element @@ -387,16 +386,16 @@ * * Format is : * <pre> - * <rules> - * <rule name="RuleName1"> - * <param key="rule.0.parameter.param1">param1</param> - * <param key="rule.0.parameter.pop">topiaId1</param> - * </rule> - * <rule name="RuleName2"> - * <param key="rule.0.parameter.param1">param2</param> - * <param key="rule.0.parameter.pop">topiaId2</param> - * </rule> - * </rules> + * <rules> + * <rule name="RuleName1"> + * <param key="rule.0.parameter.param1">param1</param> + * <param key="rule.0.parameter.pop">topiaId1</param> + * </rule> + * <rule name="RuleName2"> + * <param key="rule.0.parameter.param1">param2</param> + * <param key="rule.0.parameter.pop">topiaId2</param> + * </rule> + * </rules> * </pre> * * @param rules rules list @@ -430,16 +429,16 @@ * * Format is : * <pre> - * <rules> - * <rule name="RuleName1"> - * <param key="rule.0.parameter.param1">param1</param> - * <param key="rule.0.parameter.pop">topiaId1</param> - * </rule> - * <rule name="RuleName2"> - * <param key="rule.0.parameter.param1">param2</param> - * <param key="rule.0.parameter.pop">topiaId2</param> - * </rule> - * </rules> + * <rules> + * <rule name="RuleName1"> + * <param key="rule.0.parameter.param1">param1</param> + * <param key="rule.0.parameter.pop">topiaId1</param> + * </rule> + * <rule name="RuleName2"> + * <param key="rule.0.parameter.param1">param2</param> + * <param key="rule.0.parameter.pop">topiaId2</param> + * </rule> + * </rules> * </pre> * * @param rulesElement rules dom element @@ -452,7 +451,7 @@ for (Element ruleElement : ruleElements) { String name = ruleElement.attributeValue("name"); try { - Rule rule = RuleStorage.getRule(name).getNewRuleInstance(); + Rule rule = RuleStorage.getRule(name).getNewInstance(); // get properties Properties props = new Properties(); @@ -485,7 +484,7 @@ * <li>Species:Nephrops</li> * <li>Population:Anchois</li> * <li>TimeStep:21</li> - * <li>... + * <li>...</li> * </ul> * * @param content content to parse Modified: trunk/src/main/java/fr/ifremer/isisfish/mexico/export/RegionExportFactorXML.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/export/RegionExportFactorXML.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/export/RegionExportFactorXML.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -44,9 +44,9 @@ import fr.ifremer.isisfish.entities.StrategyMonthInfo; import fr.ifremer.isisfish.entities.TargetSpecies; import fr.ifremer.isisfish.mexico.MexicoHelper; +import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils; import fr.ifremer.isisfish.types.RangeOfValues; import fr.ifremer.isisfish.types.TimeUnit; -import fr.ifremer.isisfish.ui.sensitivity.SensitivityUtils; /** * Export implementation for factor into xml. @@ -110,7 +110,6 @@ String factorName = factorClass + "." + propertyName; // test if factor name is enabled - // TODO move SensitivityUtils outside of UI boolean enabled = SensitivityUtils.isSensitivityFactorEnabled(factorName); if (log.isDebugEnabled()) { @@ -186,7 +185,7 @@ /** * Get factor name. * - * Dans la majorité des cas, on a un {@link lastReadName} défini. Dans les + * Dans la majorité des cas, on a un {@link #lastReadName} défini. Dans les * autre cas, il faut chercher un meilleur nom. * * @param entity entity to get factor name Modified: trunk/src/main/java/fr/ifremer/isisfish/mexico/package-info.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/package-info.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/package-info.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 1999 - 2011 Ifremer, CodeLutin, Chatellier Eric + * Copyright (C) 1999 - 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 Modified: trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/AbstractXMLVisitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/AbstractXMLVisitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/AbstractXMLVisitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -3,7 +3,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 Modified: trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/ContinuousDomainXMLVisitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/ContinuousDomainXMLVisitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/ContinuousDomainXMLVisitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2010 Ifremer, Code Lutin, Chatellier Eric + * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, 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 @@ -25,6 +25,11 @@ package fr.ifremer.isisfish.mexico.xml; +import java.util.Map.Entry; + +import org.nuiton.math.matrix.MatrixND; + +import fr.ifremer.isisfish.mexico.MexicoHelper; import fr.ifremer.isisfish.simulator.sensitivity.Domain; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; @@ -44,33 +49,31 @@ */ @Override public void start(Domain domain) { - xmlBuffer.append("<domain>"); - xmlBuffer.append("<fixed>"); - ContinuousDomain cDomain = (ContinuousDomain)domain; - appendDomain(cDomain); + xmlBuffer.append("<domain distributionName=\"" + cDomain.getDistribution().toString().toLowerCase() + "\">"); + for (Entry<String, Object> distributionParameterEntry : cDomain.getDistributionParameters().entrySet()) { + String name = distributionParameterEntry.getKey(); + Object value = distributionParameterEntry.getValue(); + xmlBuffer.append("<distributionParameter name=\"" + name + "\""); + appendParamValue(xmlBuffer, value); + xmlBuffer.append("</distributionParameter>"); + } } /** - * Default ContinuousDomain implementation for double. - * Maybe overridden by specific continuous domains. + * Append value type and value content. * - * @param domain domain to print + * @param xmlBuffer buffer + * @param value value to append */ - protected void appendDomain(ContinuousDomain domain) { - // facteur continue pourcentage - if (domain.isPercentageType()) { - xmlBuffer.append("<reference coefficient=\"" + domain.getCoefficient() + "\">"); - xmlBuffer.append(domain.getReferenceValue()); - xmlBuffer.append("</reference>"); + protected void appendParamValue(StringBuffer xmlBuffer, Object value) { + if (value instanceof MatrixND) { + xmlBuffer.append(" type=\"matrix\">"); + xmlBuffer.append(MexicoHelper.getMatrixAsXML((MatrixND)value)); + } else { + xmlBuffer.append(" type=\"decimal\">"); + xmlBuffer.append(value.toString()); } - else { - // facteur continue min/max - xmlBuffer.append("<range>"); - xmlBuffer.append("<min>" + domain.getMinBound() + "</min>"); - xmlBuffer.append("<max>" + domain.getMaxBound() + "</max>"); - xmlBuffer.append("</range>"); - } } /** @@ -81,12 +84,11 @@ } - /** - * {@inheritDoc} + /* + * @see fr.ifremer.isisfish.simulator.sensitivity.visitor.DomainVisitor#end(fr.ifremer.isisfish.simulator.sensitivity.Domain) */ @Override public void end(Domain domain) { - xmlBuffer.append("</fixed>"); xmlBuffer.append("</domain>"); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/DesignPlanXMLVisitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/DesignPlanXMLVisitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/DesignPlanXMLVisitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2010 Ifremer, Code Lutin, Chatellier Eric + * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, 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 @@ -25,6 +25,10 @@ package fr.ifremer.isisfish.mexico.xml; +import java.util.Date; + +import org.apache.commons.lang3.ArrayUtils; + import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup; import fr.ifremer.isisfish.simulator.sensitivity.visitor.DesignPlanVisitor; @@ -40,28 +44,50 @@ */ public class DesignPlanXMLVisitor extends AbstractXMLVisitor implements DesignPlanVisitor { + protected String[] args; + + public DesignPlanXMLVisitor(String... args) { + this.args = args; + } + /** * {@inheritDoc} * * Changes : - * v2 : depuis la v2, meilleur gestion des min/max, pourcentage poru quasiment + * v3 : depuis la v3, les min/max, pourcentage, coefficient... ont été + * remplacé par les distributions et leur parametres + * v2 : depuis la v2, meilleur gestion des min/max, pourcentage pour quasiment * tous les facteurs continue * v0 : version original */ @Override public void start(DesignPlan designPlan) { - xmlBuffer.append("<experimentalDesign version=\"2\">"); + + int authorIndex = ArrayUtils.indexOf(args, "author"); + int licenseIndex = ArrayUtils.indexOf(args, "license"); + int dateIndex = ArrayUtils.indexOf(args, "date"); + int idIndex = ArrayUtils.indexOf(args, "id"); + + xmlBuffer.append("<experimentalDesign"); + // for validation (tests) + //xmlBuffer.append(" xmlns='http://www.reseau-mexico.fr/sites/reseau-mexico.fr/files/expDesign.xsd'"); + xmlBuffer.append(" version=\"3\""); + xmlBuffer.append(" author=\"" + (authorIndex != -1 ? args[authorIndex + 1] : "") + "\""); + xmlBuffer.append(" license=\"" + (licenseIndex != -1 ? args[licenseIndex + 1] : "") + "\""); + xmlBuffer.append(" date=\"" + (dateIndex != -1 ? args[dateIndex + 1] : new Date()) + "\""); + xmlBuffer.append(" id=\"" + (idIndex != -1 ? args[idIndex + 1] : "") + "\">"); } /** * {@inheritDoc} */ @Override - public void visit(DesignPlan designPlan, - FactorGroup factorGroup) { + public void visit(DesignPlan designPlan, FactorGroup factorGroup) { + xmlBuffer.append("<factors>"); FactorGroupXMLVisitor visitor = new FactorGroupXMLVisitor(); factorGroup.accept(visitor); xmlBuffer.append(visitor.getXML()); + xmlBuffer.append("</factors>"); } /** Modified: trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/DiscreteDomainXMLVisitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/DiscreteDomainXMLVisitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/DiscreteDomainXMLVisitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + * Copyright (C) 2009 - 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 @@ -27,6 +27,7 @@ import fr.ifremer.isisfish.mexico.MexicoHelper; import fr.ifremer.isisfish.simulator.sensitivity.Domain; +import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; /** * XML discrete domain visitor. @@ -39,14 +40,31 @@ */ public class DiscreteDomainXMLVisitor extends DomainXMLVisitor { - /** - * {@inheritDoc} + /* + * @see fr.ifremer.isisfish.simulator.sensitivity.visitor.DomainVisitor#start(fr.ifremer.isisfish.simulator.sensitivity.Domain) */ @Override public void start(Domain domain) { - xmlBuffer.append("<domain>"); - xmlBuffer.append("<fixed>"); - xmlBuffer.append("<enumeration>"); + DiscreteDomain discreteDomain = (DiscreteDomain)domain; + + // lorsque le facteur est catégoriel, la liste de ses niveaux, par une + // liste ouverte d'éléments 'level', d'attributs 'value' et 'weight') + xmlBuffer.append("<domain distributionName=\"categorical\" type=\""); + + if (!discreteDomain.getValues().isEmpty()) { + Object first = discreteDomain.getValues().firstKey(); + Object firstValue = discreteDomain.getValues().get(first); + + if (firstValue instanceof Integer) { + xmlBuffer.append("integer"); + } else if (firstValue instanceof Double) { + xmlBuffer.append("double"); + } else { + xmlBuffer.append("string"); + } + } + + xmlBuffer.append("\">"); } /** @@ -54,17 +72,16 @@ */ @Override public void visit(Domain domain, Object label, Object value) { - String stringValue = MexicoHelper.getStringFromObject(value); - xmlBuffer.append("<value>" + stringValue + "</value>"); + xmlBuffer.append("<level>"); + xmlBuffer.append(MexicoHelper.getStringFromObject(value)); + xmlBuffer.append("</level>"); } - /** - * {@inheritDoc} + /* + * @see fr.ifremer.isisfish.simulator.sensitivity.visitor.DomainVisitor#end(fr.ifremer.isisfish.simulator.sensitivity.Domain) */ @Override public void end(Domain domain) { - xmlBuffer.append("</enumeration>"); - xmlBuffer.append("</fixed>"); xmlBuffer.append("</domain>"); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + * Copyright (C) 2009 - 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 @@ -25,10 +25,14 @@ package fr.ifremer.isisfish.mexico.xml; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.dom4j.Element; import org.nuiton.math.matrix.MatrixND; import org.nuiton.topia.TopiaContext; @@ -36,13 +40,13 @@ import fr.ifremer.isisfish.mexico.MexicoHelper; import fr.ifremer.isisfish.rule.Rule; import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; +import fr.ifremer.isisfish.simulator.sensitivity.Distribution; +import fr.ifremer.isisfish.simulator.sensitivity.Distribution.DistributionParam; import fr.ifremer.isisfish.simulator.sensitivity.Factor; import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; /** @@ -58,32 +62,7 @@ */ public class DomXMLParser { - public static final String DISCRETE = "discrete"; - public static final String ENUMERATION = "enumeration"; - public static final String DOMAIN = "domain"; - public static final String FIXED = "fixed"; - public static final String VALUE = "value"; - public static final String RULE = "rule"; - public static final String RULES = "rules"; - public static final String VERSION = "version"; - public static final String NAME = "name"; - public static final String TYPE = "type"; - public static final String PROPERTY = "property"; - public static final String TARGET = "target"; - public static final String CONTINUOUS = "continuous"; - public static final String MATRIXCONTINUOUS = "matrixcontinuous"; - public static final String COEFFICIENT = "coefficient"; - public static final String EQUATIONCONTINUOUS = "equationcontinuous"; - public static final String EQUATION = "equation"; - public static final String VARIABLE = "variable"; - public static final String PERCENTAGE = "percentage"; - public static final String REFERENCE = "reference"; - public static final String RANGE = "range"; - public static final String MIN = "min"; - public static final String MAX = "max"; - public static final String CARDINALITY = "cardinality"; - public static final String INTEGER = "integer"; - public static final String MX = "mx"; + private static Log log = LogFactory.getLog(DomXMLParser.class); /** * Parse element root node as Design plan. @@ -97,12 +76,14 @@ DesignPlan plan = new DesignPlan(); // could return "2" or null - String version = rootElement.attributeValue(VERSION); + String version = rootElement.attributeValue("version"); - List<Element> factorGroupElements = rootElement.selectNodes("child::factors"); + List<Element> factorGroupElements = rootElement.elements("factors"); FactorGroup factorGroup = null; if (!factorGroupElements.isEmpty()) { - if ("2".equals(version)) { + if ("3".equals(version)) { + factorGroup = parseFactorGroupV3(factorGroupElements.get(0), topiaContext); + } else if ("2".equals(version)) { factorGroup = parseFactorGroupV2(factorGroupElements.get(0), topiaContext); } else { @@ -128,7 +109,7 @@ @Deprecated protected static FactorGroup parseFactorGroup(Element fgElement, TopiaContext topiaContext) { - String factorGroupName = fgElement.attributeValue(NAME); + String factorGroupName = fgElement.attributeValue("name"); String factorGroupType = fgElement.attributeValue("type"); boolean continuous = "continuous".equalsIgnoreCase(factorGroupType); FactorGroup factorGroup = new FactorGroup(factorGroupName, continuous); @@ -144,141 +125,140 @@ List<Element> factorElements = fgElement.selectNodes("child::factor"); for (Element factorElement : factorElements) { - String type = factorElement.attributeValue(TYPE); - String name = factorElement.attributeValue(NAME); - String property = factorElement.attributeValue(PROPERTY); - String path = factorElement.element(TARGET).getText().trim(); + String type = factorElement.attributeValue("type"); + String name = factorElement.attributeValue("name"); + String property = factorElement.attributeValue("property"); + String path = factorElement.element("target").getTextTrim(); // double if ("real".equals(type)) { Factor factor = new Factor(name); factor.setPath(path); - Element fixedElement = factorElement.element(DOMAIN).element(FIXED); + Element fixedElement = factorElement.element("domain").element("fixed"); // tous les domaines continues - if (property.endsWith(CONTINUOUS)) { + if (property.endsWith("continuous")) { ContinuousDomain domain; - if (property.equals(MATRIXCONTINUOUS)) { + if (property.equals("matrixcontinuous")) { // matrix specific // <coefficient operator="-" value="0.799"/> - MatrixContinuousDomain mdomain = new MatrixContinuousDomain(true); - Element coefficientElement = fixedElement.element(COEFFICIENT); - mdomain.setCoefficient(Double.valueOf(coefficientElement.attributeValue(VALUE))); + domain = new ContinuousDomain(Distribution.QUNIFPC); // <mx name="test1" step="0">... - Element matrixElement = fixedElement.element(MX); + Element matrixElement = fixedElement.element("mx"); MatrixND matrix = MexicoHelper.getMatrixFromXml(matrixElement, topiaContext); - mdomain.setReferenceValue(matrix); - - domain = mdomain; + domain.addDistributionParam("reference", matrix); + + Element coefficientElement = fixedElement.element("coefficient"); + domain.addDistributionParam("coefficient", Double.valueOf(coefficientElement.attributeValue("value"))); } - else if (property.equals(EQUATIONCONTINUOUS)) { + else if (property.equals("equationcontinuous")) { // equation specific - EquationContinuousDomain edomain = new EquationContinuousDomain(true); - Element coefficientElement = fixedElement.element(COEFFICIENT); - edomain.setCoefficient(Double.valueOf(coefficientElement.attributeValue(VALUE))); + domain = new ContinuousDomain(Distribution.QUNIFPC); + + Element equationElement = fixedElement.element("equation"); + domain.addDistributionParam("reference", Double.valueOf(equationElement.attributeValue("reference"))); + String variable = equationElement.attributeValue("variable"); + factor.setEquationVariableName(variable); + // hack since 4.0.1, factor name doesn't contains variable + name = StringUtils.removeEnd(name, "." + variable); + factor.setName(name); + + Element coefficientElement = fixedElement.element("coefficient"); + domain.addDistributionParam("coefficient", Double.valueOf(coefficientElement.attributeValue("value"))); - Element equationElement = fixedElement.element(EQUATION); - edomain.setReferenceValue(Double.valueOf(equationElement.attributeValue(REFERENCE))); - edomain.setVariableName(equationElement.attributeValue(VARIABLE)); - domain = edomain; } else { // continous domain - domain = new ContinuousDomain(); - Element percentageElement = fixedElement.element(PERCENTAGE); + Element percentageElement = fixedElement.element("percentage"); if (percentageElement != null) { - domain.setCoefficient(Double.valueOf(percentageElement.attributeValue(COEFFICIENT))); - domain.setReferenceValue(Double.valueOf(percentageElement.attributeValue(REFERENCE))); - domain.setPercentageType(true); + domain = new ContinuousDomain(Distribution.QUNIFPC); + domain.addDistributionParam("reference", Double.valueOf(percentageElement.attributeValue("reference"))); + domain.addDistributionParam("coefficient", Double.valueOf(percentageElement.attributeValue("coefficient"))); } else { // <range max="1.0" min="0.0"/> - Element rangeElement = fixedElement.element(RANGE); - domain.setMinBound(Double.valueOf(rangeElement.attributeValue(MIN))); - domain.setMaxBound(Double.valueOf(rangeElement.attributeValue(MAX))); + domain = new ContinuousDomain(Distribution.QUNIFMM); + Element rangeElement = fixedElement.element("range"); + domain.addDistributionParam("min", Double.valueOf(rangeElement.attributeValue("min"))); + domain.addDistributionParam("max", Double.valueOf(rangeElement.attributeValue("max"))); } } - factor.setCardinality(Integer.valueOf(fixedElement.attributeValue(CARDINALITY))); + factor.setCardinality(Integer.valueOf(fixedElement.attributeValue("cardinality"))); factor.setDomain(domain); - } else if (DISCRETE.equals(property)) { + } else if ("discrete".equals(property)) { DiscreteDomain domain = new DiscreteDomain(); - List<Element> valueElements = fixedElement.element( - ENUMERATION).elements(VALUE); + List<Element> valueElements = fixedElement.element("enumeration").elements("value"); int label = 0; for (Element valueElement : valueElements) { - domain.getValues().put(label, - Double.valueOf(valueElement.getTextTrim())); + domain.getValues().put(label, Double.valueOf(valueElement.getTextTrim())); ++label; } factor.setDomain(domain); } factorGroup.addFactor(factor); - } else if (INTEGER.equals(type)) { + } else if ("integer".equals(type)) { Factor factor = new Factor(name); factor.setPath(path); - Element fixedElement = factorElement.element(DOMAIN).element(FIXED); - if (CONTINUOUS.equals(property)) { + Element fixedElement = factorElement.element("domain").element("fixed"); + if ("continuous".equals(property)) { ContinuousDomain domain; - if(property.equals(MATRIXCONTINUOUS)) { + if(property.equals("matrixcontinuous")) { // matrix specific - MatrixContinuousDomain mdomain = new MatrixContinuousDomain(true); + domain = new ContinuousDomain(Distribution.QUNIFPC); - Element coefficientElement = fixedElement.element(COEFFICIENT); - mdomain.setCoefficient(Double.valueOf(coefficientElement.attributeValue(VALUE))); - // matrix specific - Element matrixElement = fixedElement.element(MX); + Element matrixElement = fixedElement.element("mx"); MatrixND matrix = MexicoHelper.getMatrixFromXml(matrixElement, topiaContext); - mdomain.setReferenceValue(matrix); - - domain = mdomain; + domain.addDistributionParam("reference", matrix); + + Element coefficientElement = fixedElement.element("coefficient"); + domain.addDistributionParam("coefficient", Double.valueOf(coefficientElement.attributeValue("value"))); } - else if (property.equals(EQUATIONCONTINUOUS)) { + else if (property.equals("equationcontinuous")) { // equation specific - - EquationContinuousDomain edomain = new EquationContinuousDomain(true); - - Element coefficientElement = fixedElement.element(COEFFICIENT); - edomain.setCoefficient(Double.valueOf(coefficientElement.attributeValue(VALUE))); - - Element equationElement = fixedElement.element(EQUATION); - edomain.setReferenceValue(Double.valueOf(equationElement.attributeValue(REFERENCE))); - edomain.setVariableName(equationElement.attributeValue(VARIABLE)); + domain = new ContinuousDomain(Distribution.QUNIFPC); - domain = edomain; + Element equationElement = fixedElement.element("equation"); + domain.addDistributionParam("reference", Double.valueOf(equationElement.attributeValue("reference"))); + String variable = equationElement.attributeValue("variable"); + factor.setEquationVariableName(variable); + // hack since 4.0.1, factor name doesn't contains variable + name = StringUtils.removeEnd(name, "." + variable); + factor.setName(name); + + Element coefficientElement = fixedElement.element("coefficient"); + domain.addDistributionParam("coefficient", Double.valueOf(coefficientElement.attributeValue("value"))); } else { // continous domain - domain = new ContinuousDomain(); - - Element percentageElement = fixedElement.element(PERCENTAGE); + Element percentageElement = fixedElement.element("percentage"); if (percentageElement != null) { - domain.setCoefficient(Double.valueOf(percentageElement.attributeValue(COEFFICIENT))); - domain.setReferenceValue(Double.valueOf(percentageElement.attributeValue(REFERENCE))); - domain.setPercentageType(true); + domain = new ContinuousDomain(Distribution.QUNIFPC); + domain.addDistributionParam("reference", Double.valueOf(percentageElement.attributeValue("reference"))); + domain.addDistributionParam("coefficient", Double.valueOf(percentageElement.attributeValue("coefficient"))); } else { // <range max="1" min="3"/> - Element rangeElement = fixedElement.element(RANGE); - domain.setMinBound(Integer.valueOf(rangeElement.attributeValue(MIN))); - domain.setMaxBound(Integer.valueOf(rangeElement.attributeValue(MAX))); + domain = new ContinuousDomain(Distribution.QUNIFMM); + Element rangeElement = fixedElement.element("range"); + domain.addDistributionParam("min", Integer.valueOf(rangeElement.attributeValue("min"))); + domain.addDistributionParam("max", Integer.valueOf(rangeElement.attributeValue("max"))); } - } - factor.setCardinality(Integer.valueOf(fixedElement.attributeValue(CARDINALITY))); + factor.setCardinality(Integer.valueOf(fixedElement.attributeValue("cardinality"))); factor.setDomain(domain); - } else if (DISCRETE.equals(property)) { + } else if ("discrete".equals(property)) { DiscreteDomain domain = new DiscreteDomain(); List<Element> valueElements = fixedElement.element( - ENUMERATION).elements(VALUE); + "enumeration").elements("value"); int label = 0; for (Element valueElement : valueElements) { domain.getValues().put(label, @@ -288,16 +268,16 @@ factor.setDomain(domain); } factorGroup.addFactor(factor); - } else if (RULE.equals(type)) { + } else if ("rule".equals(type)) { Factor factor = new Factor(name); factor.setPath(path); - Element fixedElement = factorElement.element(DOMAIN).element(FIXED); - if (DISCRETE.equals(property)) { + Element fixedElement = factorElement.element("domain").element("fixed"); + if ("discrete".equals(property)) { RuleDiscreteDomain domain = new RuleDiscreteDomain(); - List<Element> valueElements = fixedElement.element(ENUMERATION).elements(VALUE); + List<Element> valueElements = fixedElement.element("enumeration").elements("value"); int label = 0; for (Element valueElement : valueElements) { - Element rulesElement = valueElement.element(RULES); + Element rulesElement = valueElement.element("rules"); List<Rule> rulesValue = MexicoHelper.getRulesFromXml(rulesElement, topiaContext); domain.getValues().put(label, rulesValue); ++label; @@ -320,10 +300,14 @@ * @param fgElement factor group element (>factors<) * @param topiaContext context * @return factor group + * + * @deprecated since 4.0.1.0, this parsing method parse experimentalDesign + * in version "2", don't remove for + * data reading purpose, but could be removed in a future version */ protected static FactorGroup parseFactorGroupV2(Element fgElement, TopiaContext topiaContext) { - String factorGroupName = fgElement.attributeValue(NAME); + String factorGroupName = fgElement.attributeValue("name"); String factorGroupType = fgElement.attributeValue("type"); boolean continuous = "continuous".equalsIgnoreCase(factorGroupType); FactorGroup factorGroup = new FactorGroup(factorGroupName, continuous); @@ -339,11 +323,11 @@ List<Element> factorElements = fgElement.selectNodes("child::factor"); for (Element factorElement : factorElements) { - String type = factorElement.attributeValue(TYPE); - String name = factorElement.attributeValue(NAME); - String property = factorElement.attributeValue(PROPERTY); - String path = factorElement.element(TARGET).getText().trim(); - String cardinalityString = factorElement.attributeValue(CARDINALITY); + String type = factorElement.attributeValue("type"); + String name = factorElement.attributeValue("name"); + String property = factorElement.attributeValue("property"); + String path = factorElement.element("target").getTextTrim(); + String cardinalityString = factorElement.attributeValue("cardinality"); Integer cardinality = 0; if (StringUtils.isNotEmpty(cardinalityString)) { cardinality = Integer.valueOf(cardinalityString); @@ -353,82 +337,84 @@ if ("real".equals(type)) { Factor factor = new Factor(name); factor.setPath(path); - Element fixedElement = factorElement.element(DOMAIN).element(FIXED); + Element fixedElement = factorElement.element("domain").element("fixed"); // tous les domaines continues - if (property.endsWith(CONTINUOUS)) { + if (property.endsWith("continuous")) { ContinuousDomain domain; - if(property.equals(MATRIXCONTINUOUS)) { - - MatrixContinuousDomain mdomain = new MatrixContinuousDomain(); - Element referenceElement = fixedElement.element(REFERENCE); + if(property.equals("matrixcontinuous")) { + + Element referenceElement = fixedElement.element("reference"); if (referenceElement != null) { + domain = new ContinuousDomain(Distribution.QUNIFPC); // matrix specific // <coefficient operator="-" value="0.799"/> - mdomain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT))); // <mx name="test1" step="0">... - Element matrixElement = referenceElement.element(MX); + Element matrixElement = referenceElement.element("mx"); MatrixND matrix = MexicoHelper.getMatrixFromXml(matrixElement, topiaContext); - mdomain.setReferenceValue(matrix); - mdomain.setPercentageType(true); + domain.addDistributionParam("reference", matrix); + + domain.addDistributionParam("coefficient", Double.valueOf(referenceElement.attributeValue("coefficient"))); } else { - Element rangeElement = fixedElement.element(RANGE); - Element minElement = rangeElement.element(MIN); - Element maxElement = rangeElement.element(MAX); - MatrixND minMatrix = MexicoHelper.getMatrixFromXml(minElement.element(MX), topiaContext); - MatrixND maxMatrix = MexicoHelper.getMatrixFromXml(maxElement.element(MX), topiaContext); - mdomain.setMinBound(minMatrix); - mdomain.setMaxBound(maxMatrix); + domain = new ContinuousDomain(Distribution.QUNIFMM); + Element rangeElement = fixedElement.element("range"); + Element minElement = rangeElement.element("min"); + Element maxElement = rangeElement.element("max"); + MatrixND minMatrix = MexicoHelper.getMatrixFromXml(minElement.element("mx"), topiaContext); + MatrixND maxMatrix = MexicoHelper.getMatrixFromXml(maxElement.element("mx"), topiaContext); + domain.addDistributionParam("min", minMatrix); + domain.addDistributionParam("max", maxMatrix); } - - domain = mdomain; } - else if (property.equals(EQUATIONCONTINUOUS)) { + else if (property.equals("equationcontinuous")) { // equation specific - EquationContinuousDomain edomain = new EquationContinuousDomain(); - edomain.setVariableName(fixedElement.attributeValue(VARIABLE)); - Element referenceElement = fixedElement.element(REFERENCE); + + String variable = fixedElement.attributeValue("variable"); + factor.setEquationVariableName(variable); + // hack since 4.0.1, factor name doesn't contains variable + name = StringUtils.removeEnd(name, "." + variable); + factor.setName(name); + + Element referenceElement = fixedElement.element("reference"); if (referenceElement != null) { - edomain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT))); - edomain.setReferenceValue(Double.valueOf(referenceElement.getTextTrim())); - edomain.setPercentageType(true); + domain = new ContinuousDomain(Distribution.QUNIFPC); + domain.addDistributionParam("reference", Double.valueOf(referenceElement.getTextTrim())); + domain.addDistributionParam("coefficient", Double.valueOf(referenceElement.attributeValue("coefficient"))); } else { - Element rangeElement = fixedElement.element(RANGE); - Element minElement = rangeElement.element(MIN); - Element maxElement = rangeElement.element(MAX); - edomain.setMinBound(Double.valueOf(minElement.getTextTrim())); - edomain.setMaxBound(Double.valueOf(maxElement.getTextTrim())); + domain = new ContinuousDomain(Distribution.QUNIFMM); + Element rangeElement = fixedElement.element("range"); + Element minElement = rangeElement.element("min"); + Element maxElement = rangeElement.element("max"); + domain.addDistributionParam("min", minElement.getTextTrim()); + domain.addDistributionParam("max", maxElement.getTextTrim()); } - - domain = edomain; } else { // continous domain - domain = new ContinuousDomain(); - - Element referenceElement = fixedElement.element(REFERENCE); + Element referenceElement = fixedElement.element("reference"); if (referenceElement != null) { - domain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT))); - domain.setReferenceValue(Double.valueOf(referenceElement.getTextTrim())); - domain.setPercentageType(true); + domain = new ContinuousDomain(Distribution.QUNIFPC); + domain.addDistributionParam("reference", Double.valueOf(referenceElement.getTextTrim())); + domain.addDistributionParam("coefficient", Double.valueOf(referenceElement.attributeValue("coefficient"))); } else { // <range max="1.0" min="0.0"/> - Element rangeElement = fixedElement.element(RANGE); - Element minElement = rangeElement.element(MIN); - Element maxElement = rangeElement.element(MAX); - domain.setMinBound(Double.valueOf(minElement.getTextTrim())); - domain.setMaxBound(Double.valueOf(maxElement.getTextTrim())); + domain = new ContinuousDomain(Distribution.QUNIFMM); + Element rangeElement = fixedElement.element("range"); + Element minElement = rangeElement.element("min"); + Element maxElement = rangeElement.element("max"); + domain.addDistributionParam("min", Double.valueOf(minElement.getTextTrim())); + domain.addDistributionParam("max", Double.valueOf(maxElement.getTextTrim())); } } factor.setDomain(domain); - } else if (DISCRETE.equals(property)) { + } else if ("discrete".equals(property)) { DiscreteDomain domain = new DiscreteDomain(); List<Element> valueElements = fixedElement.element( - ENUMERATION).elements(VALUE); + "enumeration").elements("value"); int label = 0; for (Element valueElement : valueElements) { domain.getValues().put(label, @@ -439,84 +425,85 @@ } factor.setCardinality(cardinality); factorGroup.addFactor(factor); - } else if (INTEGER.equals(type)) { + } else if ("integer".equals(type)) { Factor factor = new Factor(name); factor.setPath(path); - Element fixedElement = factorElement.element(DOMAIN).element(FIXED); - if (CONTINUOUS.equals(property)) { + Element fixedElement = factorElement.element("domain").element("fixed"); + if ("continuous".equals(property)) { ContinuousDomain domain; - if(property.equals(MATRIXCONTINUOUS)) { + if(property.equals("matrixcontinuous")) { - MatrixContinuousDomain mdomain = new MatrixContinuousDomain(); - Element referenceElement = fixedElement.element(REFERENCE); + + Element referenceElement = fixedElement.element("reference"); if (referenceElement != null) { + domain = new ContinuousDomain(Distribution.QUNIFPC); // matrix specific // <coefficient operator="-" value="0.799"/> - mdomain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT))); // <mx name="test1" step="0">... - Element matrixElement = referenceElement.element(MX); + Element matrixElement = referenceElement.element("mx"); MatrixND matrix = MexicoHelper.getMatrixFromXml(matrixElement, topiaContext); - mdomain.setReferenceValue(matrix); - mdomain.setPercentageType(true); + domain.addDistributionParam("reference", matrix); + domain.addDistributionParam("coefficient", Double.valueOf(referenceElement.attributeValue("coefficient"))); } else { - Element rangeElement = fixedElement.element(RANGE); - Element minElement = rangeElement.element(MIN); - Element maxElement = rangeElement.element(MAX); - MatrixND minMatrix = MexicoHelper.getMatrixFromXml(minElement.element(MX), topiaContext); - MatrixND maxMatrix = MexicoHelper.getMatrixFromXml(maxElement.element(MX), topiaContext); - mdomain.setMinBound(minMatrix); - mdomain.setMaxBound(maxMatrix); + domain = new ContinuousDomain(Distribution.QUNIFMM); + Element rangeElement = fixedElement.element("range"); + Element minElement = rangeElement.element("min"); + Element maxElement = rangeElement.element("max"); + MatrixND minMatrix = MexicoHelper.getMatrixFromXml(minElement.element("mx"), topiaContext); + MatrixND maxMatrix = MexicoHelper.getMatrixFromXml(maxElement.element("mx"), topiaContext); + domain.addDistributionParam("min", minMatrix); + domain.addDistributionParam("max", maxMatrix); } - - domain = mdomain; } - else if (property.equals(EQUATIONCONTINUOUS)) { + else if (property.equals("equationcontinuous")) { // equation specific - EquationContinuousDomain edomain = new EquationContinuousDomain(); - edomain.setVariableName(fixedElement.attributeValue(VARIABLE)); - Element referenceElement = fixedElement.element(REFERENCE); + String variable = fixedElement.attributeValue("variable"); + factor.setEquationVariableName(variable); + // hack since 4.0.1, factor name doesn't contains variable + name = StringUtils.removeEnd(name, "." + variable); + factor.setName(name); + + Element referenceElement = fixedElement.element("reference"); if (referenceElement != null) { - edomain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT))); - edomain.setReferenceValue(Double.valueOf(referenceElement.getTextTrim())); - edomain.setPercentageType(true); + domain = new ContinuousDomain(Distribution.QUNIFPC); + domain.addDistributionParam("reference", Double.valueOf(referenceElement.getTextTrim())); + domain.addDistributionParam("coefficient", Double.valueOf(referenceElement.attributeValue("coefficient"))); } else { - Element rangeElement = fixedElement.element(RANGE); - Element minElement = rangeElement.element(MIN); - Element maxElement = rangeElement.element(MAX); - edomain.setMinBound(Double.valueOf(minElement.getTextTrim())); - edomain.setMaxBound(Double.valueOf(maxElement.getTextTrim())); + domain = new ContinuousDomain(Distribution.QUNIFMM); + Element rangeElement = fixedElement.element("range"); + Element minElement = rangeElement.element("min"); + Element maxElement = rangeElement.element("max"); + domain.addDistributionParam("min", Double.valueOf(minElement.getTextTrim())); + domain.addDistributionParam("max", Double.valueOf(maxElement.getTextTrim())); } - - domain = edomain; } else { // continous domain - domain = new ContinuousDomain(); - - Element referenceElement = fixedElement.element(REFERENCE); + Element referenceElement = fixedElement.element("reference"); if (referenceElement != null) { - domain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT))); - domain.setReferenceValue(Double.valueOf(referenceElement.getTextTrim())); - domain.setPercentageType(true); + domain = new ContinuousDomain(Distribution.QUNIFPC); + domain.addDistributionParam("reference", Double.valueOf(referenceElement.getTextTrim())); + domain.addDistributionParam("coefficient", Double.valueOf(referenceElement.attributeValue("coefficient"))); } else { // <range max="1.0" min="0.0"/> - Element rangeElement = fixedElement.element(RANGE); - Element minElement = rangeElement.element(MIN); - Element maxElement = rangeElement.element(MAX); - domain.setMinBound(Integer.valueOf(minElement.getTextTrim())); - domain.setMaxBound(Integer.valueOf(maxElement.getTextTrim())); + domain = new ContinuousDomain(Distribution.QUNIFMM); + Element rangeElement = fixedElement.element("range"); + Element minElement = rangeElement.element("min"); + Element maxElement = rangeElement.element("max"); + domain.addDistributionParam("min", Integer.valueOf(minElement.getTextTrim())); + domain.addDistributionParam("max", Integer.valueOf(maxElement.getTextTrim())); } } factor.setDomain(domain); - } else if (DISCRETE.equals(property)) { + } else if ("discrete".equals(property)) { DiscreteDomain domain = new DiscreteDomain(); List<Element> valueElements = fixedElement.element( - ENUMERATION).elements(VALUE); + "enumeration").elements("value"); int label = 0; for (Element valueElement : valueElements) { domain.getValues().put(label, @@ -527,16 +514,16 @@ } factor.setCardinality(cardinality); factorGroup.addFactor(factor); - } else if (RULE.equals(type)) { + } else if ("rule".equals(type)) { Factor factor = new Factor(name); factor.setPath(path); - Element fixedElement = factorElement.element(DOMAIN).element(FIXED); - if (DISCRETE.equals(property)) { + Element fixedElement = factorElement.element("domain").element("fixed"); + if ("discrete".equals(property)) { RuleDiscreteDomain domain = new RuleDiscreteDomain(); - List<Element> valueElements = fixedElement.element(ENUMERATION).elements(VALUE); + List<Element> valueElements = fixedElement.element("enumeration").elements("value"); int label = 0; for (Element valueElement : valueElements) { - Element rulesElement = valueElement.element(RULES); + Element rulesElement = valueElement.element("rules"); List<Rule> rulesValue = MexicoHelper.getRulesFromXml(rulesElement, topiaContext); domain.getValues().put(label, rulesValue); ++label; @@ -545,13 +532,13 @@ } factor.setCardinality(cardinality); factorGroup.addFactor(factor); - } else if (EQUATION.equals(type)) { + } else if ("equation".equals(type)) { Factor factor = new Factor(name); factor.setPath(path); - Element fixedElement = factorElement.element(DOMAIN).element(FIXED); - if (DISCRETE.equals(property)) { + Element fixedElement = factorElement.element("domain").element("fixed"); + if ("discrete".equals(property)) { EquationDiscreteDomain domain = new EquationDiscreteDomain(); - List<Element> valueElements = fixedElement.element(ENUMERATION).elements(VALUE); + List<Element> valueElements = fixedElement.element("enumeration").elements("value"); int label = 0; for (Element valueElement : valueElements) { String content = StringEscapeUtils.unescapeXml(valueElement.getText()); @@ -565,10 +552,10 @@ } else if ("string".equals(type)) { Factor factor = new Factor(name); factor.setPath(path); - Element fixedElement = factorElement.element(DOMAIN).element(FIXED); - if (DISCRETE.equals(property)) { + Element fixedElement = factorElement.element("domain").element("fixed"); + if ("discrete".equals(property)) { DiscreteDomain domain = new DiscreteDomain(); - List<Element> valueElements = fixedElement.element(ENUMERATION).elements(VALUE); + List<Element> valueElements = fixedElement.element("enumeration").elements("value"); int label = 0; for (Element valueElement : valueElements) { String content = valueElement.getText(); @@ -585,4 +572,160 @@ return factorGroup; } + + /** + * Non recursive parse of factor group elements (>factors<). + * + * This version handle xml file distribution definition in each continuous + * factors. + * + * The parsing is more complicated here because mexico file format is a bit + * hard too read (factor groups, features...) + * + * @param fgElement factor group element (>factors<) + * @param topiaContext context + * @return factor group + * @since 4.0.1.0 + */ + protected static FactorGroup parseFactorGroupV3(Element fgElement, TopiaContext topiaContext) { + + FactorGroup rootGroup = new FactorGroup(null); // root group + Map<String, FactorGroup> groups = new HashMap<String, FactorGroup>(); + + // normal factors + List<Element> factorElements = fgElement.elements("factor"); + for (Element factorElement : factorElements) { + String name = factorElement.attributeValue("name"); + String groupName = null; + String groupType = null; + + Factor factor = new Factor(name); + + Element cardinalityElement = (Element)factorElement.selectSingleNode("child::feature[@name='cardinality']"); + if (cardinalityElement != null) { + factor.setCardinality(Integer.valueOf(cardinalityElement.getTextTrim())); + } + Element targetElement = (Element)factorElement.selectSingleNode("child::feature[@name='target']"); + if (targetElement != null) { + factor.setPath(targetElement.getTextTrim()); + } + Element groupElement = (Element)factorElement.selectSingleNode("child::feature[@name='group']"); + if (groupElement != null) { + groupName = groupElement.getTextTrim(); + } + Element groupTypeElement = (Element)factorElement.selectSingleNode("child::feature[@name='grouptype']"); + if (groupTypeElement != null) { + groupType = groupTypeElement.getTextTrim(); + } + Element varNameElement = (Element)factorElement.selectSingleNode("child::feature[@name='equationVariableName']"); + if (varNameElement != null) { + factor.setEquationVariableName(varNameElement.getTextTrim()); + } + + + // parse domain + Element domainElement = factorElement.element("domain"); + String distributionName = domainElement.attributeValue("distributionName"); + String type = domainElement.attributeValue("type"); + + // facteur discret + if ("categorical".equals(distributionName)) { + DiscreteDomain domain; + + List<Element> levelElements = domainElement.elements("level"); + if ("rule".equals(type)) { + domain = new RuleDiscreteDomain(); + int valueName = 0; + for (Element levelElement : levelElements) { + Element rulesElement = levelElement.element("rules"); + List<Rule> rulesValue = MexicoHelper.getRulesFromXml(rulesElement, topiaContext); + domain.getValues().put(valueName++, rulesValue); + } + } else if ("equation".equals(type)) { // topia entities ... + domain = new EquationDiscreteDomain(); + int valueName = 0; + for (Element levelElement : levelElements) { // no trim here + Object object = StringEscapeUtils.unescapeXml(levelElement.getText()); + domain.getValues().put(valueName++, object); + } + } else if ("string".equals(type)) { // topia entities ... + domain = new DiscreteDomain(); + int valueName = 0; + for (Element levelElement : levelElements) { + Object object = MexicoHelper.getObjectFromString(levelElement.getTextTrim(), topiaContext); + domain.getValues().put(valueName++, object); + } + } else if ("integer".equals(type)) { + domain = new DiscreteDomain(); + int valueName = 0; + for (Element levelElement : levelElements) { + Integer levelValue = Integer.valueOf(levelElement.getTextTrim()); + domain.getValues().put(valueName++, levelValue); + } + } else { + domain = new DiscreteDomain(); + int valueName = 0; + for (Element levelElement : levelElements) { + Double levelValue = Double.valueOf(levelElement.getTextTrim()); + domain.getValues().put(valueName++, levelValue); + } + } + + factor.setDomain(domain); + + } else if ("sequence".equals(distributionName)) { + // can happen in mexico, but not in isis + // skip this one + if (log.isInfoEnabled()) { + log.info(String.format("Skip factor %s : unknown distribution name : %s !", name, distributionName)); + } + } else { + + // facteur continuous with custom distribution + Distribution distribution = Distribution.valueOf(distributionName.toUpperCase()); + if (distribution == null) { + if (log.isWarnEnabled()) { + log.warn(String.format("Skip factor %s : can't found distribution name : %s !", name, distributionName)); + } + continue; + } + + ContinuousDomain domain = new ContinuousDomain(distribution); + + // ne tient pas compte de l'ordre des parametres + // dans le fichier xml + DistributionParam[] paramsDef = distribution.getDistibutionParams(); + for (DistributionParam paramDef : paramsDef) { + Element paramElement = (Element)domainElement.selectSingleNode("distributionParameter[@name='" + paramDef.getName() + "']"); + String paramName = paramElement.attributeValue("name"); + String paramType = paramElement.attributeValue("type"); + + if ("matrix".equals(paramType)) { + Element mxElement = paramElement.element("mx"); + MatrixND mxMatrix = MexicoHelper.getMatrixFromXml(mxElement, topiaContext); + domain.addDistributionParam(paramName, mxMatrix); + } else if ("decimal".equals(paramType)) { + Double doubleValue = Double.parseDouble(paramElement.getTextTrim()); + domain.addDistributionParam(paramName, doubleValue); + } + } + + factor.setDomain(domain); + } + + // add factor to existing or new group + FactorGroup group = rootGroup; + if (StringUtils.isNotBlank(groupName)) { + group = groups.get(group); + if (group == null) { + group = new FactorGroup(groupName, "continuous".equals(groupType)); + groups.put(groupName, group); + rootGroup.addFactor(group); + } + } + group.addFactor(factor); + } + + return rootGroup; + } } Modified: trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/DomainXMLVisitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/DomainXMLVisitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/DomainXMLVisitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2010 Ifremer, CodeLutin, Chatellier Eric + * Copyright (C) 2009 - 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 Deleted: trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationContinuousDomainXMLVisitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationContinuousDomainXMLVisitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationContinuousDomainXMLVisitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,88 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 1999 - 2011 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 - * 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package fr.ifremer.isisfish.mexico.xml; - -import fr.ifremer.isisfish.simulator.sensitivity.Domain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; - -/** - * XML domain visitor for Equation Continous Domain. - * - * @author chatellier - * @version $Revision: 1.0 $ - * - * Last update : $Date: 30 mars 2009 $ - * By : $Author: chatellier $ - */ -public class EquationContinuousDomainXMLVisitor extends ContinuousDomainXMLVisitor { - - /** - * {@inheritDoc} - */ - @Override - public void start(Domain domain) { - xmlBuffer.append("<domain>"); - xmlBuffer.append("<fixed"); - - EquationContinuousDomain eDomain = (EquationContinuousDomain)domain; - // this version add variable name - xmlBuffer.append(" variable=\"") - .append(eDomain.getVariableName()) - .append("\">"); - - appendDomain(eDomain); - } - - /** - * {@inheritDoc} - */ - @Override - protected void appendDomain(ContinuousDomain domain) { - - EquationContinuousDomain eDomain = (EquationContinuousDomain)domain; - - // facteur continue pourcentage - if (domain.isPercentageType()) { - xmlBuffer.append("<reference coefficient=\"") - .append(eDomain.getCoefficient()) - .append( "\">"); - xmlBuffer.append(eDomain.getReferenceValue()); - xmlBuffer.append("</reference>"); - } - else { - // facteur continue min/max - xmlBuffer.append("<range>"); - xmlBuffer.append("<min>") - .append(domain.getMinBound()) - .append("</min>"); - xmlBuffer.append("<max>") - .append(domain.getMaxBound()) - .append("</max>"); - xmlBuffer.append("</range>"); - } - } -} Modified: trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationDiscreteDomainXMLVisitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationDiscreteDomainXMLVisitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationDiscreteDomainXMLVisitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -40,14 +40,21 @@ */ public class EquationDiscreteDomainXMLVisitor extends DiscreteDomainXMLVisitor { + @Override + public void start(Domain domain) { + // lorsque le facteur est catégoriel, la liste de ses niveaux, par une + // liste ouverte d'éléments 'level', d'attributs 'value' et 'weight') + xmlBuffer.append("<domain distributionName=\"categorical\" type=\"equation\">"); + } + /** * {@inheritDoc} */ @Override public void visit(Domain domain, Object label, Object value) { String content = (String)value; - xmlBuffer.append("<value>"); - xmlBuffer.append(StringEscapeUtils.escapeXml(content)); - xmlBuffer.append("</value>"); + xmlBuffer.append("<level>"); + xmlBuffer.append(StringEscapeUtils.escapeXml11(content)); + xmlBuffer.append("</level>"); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorGroupXMLVisitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorGroupXMLVisitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorGroupXMLVisitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -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 @@ -45,16 +45,7 @@ */ @Override public void start(FactorGroup factorGroup) { - xmlBuffer.append("<factors"); - if (factorGroup.getName() != null) { - xmlBuffer.append(" name=\"" + factorGroup.getName() + "\""); - } - if (factorGroup.isContinuous()) { - xmlBuffer.append(" type=\"continuous\""); - } else { - xmlBuffer.append(" type=\"discrete\""); - } - xmlBuffer.append(">"); + } /* @@ -64,12 +55,10 @@ public void visit(FactorGroup factorGroup, Factor factor) { if (factor instanceof FactorGroup) { FactorGroup factorGroup2 = (FactorGroup)factor; - FactorGroupXMLVisitor visitor = new FactorGroupXMLVisitor(); - factorGroup2.accept(visitor); - xmlBuffer.append(visitor.getXML()); + factorGroup2.accept(this); } else { - FactorXMLVisitor visitor = new FactorXMLVisitor(); + FactorXMLVisitor visitor = new FactorXMLVisitor(factorGroup); factor.accept(visitor); xmlBuffer.append(visitor.getXML()); } @@ -80,6 +69,6 @@ */ @Override public void end(FactorGroup factorGroup) { - xmlBuffer.append("</factors>"); + } } Modified: trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2010 Ifremer, CodeLutin, Chatellier Eric + * Copyright (C) 2009 - 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 @@ -25,20 +25,16 @@ package fr.ifremer.isisfish.mexico.xml; -import org.nuiton.math.matrix.MatrixND; -import org.nuiton.topia.persistence.TopiaEntity; +import org.apache.commons.lang3.StringUtils; import fr.ifremer.isisfish.simulator.sensitivity.Domain; import fr.ifremer.isisfish.simulator.sensitivity.Factor; +import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.visitor.FactorVisitor; -import fr.ifremer.isisfish.types.Month; -import fr.ifremer.isisfish.types.TimeStep; /** * XML factor visitor. @@ -51,65 +47,57 @@ */ public class FactorXMLVisitor extends AbstractXMLVisitor implements FactorVisitor { + protected FactorGroup group; + + /** + * Factor constructor with group (for mexico features). + * + * @param group group + */ + public FactorXMLVisitor(FactorGroup group) { + this.group = group; + } + /* * @see fr.ifremer.isisfish.simulator.sensitivity.visitor.FactorVisitor#start(fr.ifremer.isisfish.simulator.sensitivity.Factor) */ @Override public void start(Factor factor) { + + // required by mexico, must be unique, but not used by isis + String factorId = factor.getPath(); + if (StringUtils.isNotBlank(factor.getEquationVariableName())) { + factorId += "." + factor.getEquationVariableName(); + } + xmlBuffer.append("<factor"); + xmlBuffer.append(" id=\"").append(factorId).append("\""); xmlBuffer.append(" name=\"").append(factor.getName()).append("\""); - Object referenceValueForType = null; - // property attribute + if (StringUtils.isNotBlank(factor.getComment())) { + xmlBuffer.append(" description=\"").append(factor.getComment()).append("\""); + } + xmlBuffer.append(">"); - Domain domain = factor.getDomain(); - - if (domain instanceof ContinuousDomain) { - if (domain instanceof MatrixContinuousDomain) { - xmlBuffer.append(" property=\"matrixcontinuous\""); - } else if (domain instanceof EquationContinuousDomain) { - xmlBuffer.append(" property=\"equationcontinuous\""); + // other things are features + //cardinality + xmlBuffer.append("<feature name=\"cardinality\">" + factor.getCardinality() + "</feature>"); + // group + if (StringUtils.isNotBlank(group.getName())) { + xmlBuffer.append("<feature name=\"group\">" + group.getName() + "</feature>"); + xmlBuffer.append("<feature name=\"grouptype\">"); + if (group.isContinuous()) { + xmlBuffer.append("continuous"); } else { - xmlBuffer.append(" property=\"continuous\""); + xmlBuffer.append("discrete"); } - referenceValueForType = ((ContinuousDomain) domain).getReferenceValue(); - if (referenceValueForType == null) { - referenceValueForType = ((ContinuousDomain) domain).getMinBound(); - } - } else if (domain instanceof DiscreteDomain) { - xmlBuffer.append(" property=\"discrete\""); - Object firstKey = ((DiscreteDomain) domain).getValues().firstKey(); - referenceValueForType = ((DiscreteDomain) domain).getValues().get(firstKey); + xmlBuffer.append("</feature>"); } - // type attribute - if (referenceValueForType instanceof Double || referenceValueForType instanceof Float - || referenceValueForType instanceof MatrixND) { - xmlBuffer.append(" type=\"real\""); - } else if (referenceValueForType instanceof Integer) { - xmlBuffer.append(" type=\"integer\""); - } else if (domain instanceof RuleDiscreteDomain) { - xmlBuffer.append(" type=\"rule\""); - } else if (domain instanceof EquationDiscreteDomain) { - xmlBuffer.append(" type=\"equation\""); - } else if (referenceValueForType instanceof TopiaEntity || - referenceValueForType instanceof TimeStep || - referenceValueForType instanceof Month) { - xmlBuffer.append(" type=\"string\""); + //path + xmlBuffer.append("<feature name=\"target\">" + factor.getPath() + "</feature>"); + // equation variable name + if (StringUtils.isNotBlank(factor.getEquationVariableName())) { + xmlBuffer.append("<feature name=\"equationVariableName\">" + factor.getEquationVariableName() + "</feature>"); } - - //cardinality - xmlBuffer.append(" cardinality=\""); - xmlBuffer.append(factor.getCardinality()); - xmlBuffer.append("\""); - - xmlBuffer.append(">"); - // target element - xmlBuffer.append("<target>").append(factor.getPath()).append("</target>"); - // value element - /* TODO value should be only in simulation export, - not in design plan export - if (factor.getValue() != null) { - xmlBuffer.append("<value>" + factor.getValue() + "</value>"); - }*/ } /* @@ -118,11 +106,7 @@ @Override public void visit(Factor factor, Domain domain) { DomainXMLVisitor visitor = null; - if (factor.getDomain() instanceof MatrixContinuousDomain) { - visitor = new MatrixContinuousDomainXMLVisitor(); - } else if (factor.getDomain() instanceof EquationContinuousDomain) { - visitor = new EquationContinuousDomainXMLVisitor(); - } else if (factor.getDomain() instanceof ContinuousDomain) { + if (factor.getDomain() instanceof ContinuousDomain) { visitor = new ContinuousDomainXMLVisitor(); } else if (factor.getDomain() instanceof RuleDiscreteDomain) { visitor = new RuleDiscreteDomainXMLVisitor(); Deleted: trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/MatrixContinuousDomainXMLVisitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/MatrixContinuousDomainXMLVisitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/MatrixContinuousDomainXMLVisitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,73 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2011 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 - * 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package fr.ifremer.isisfish.mexico.xml; - -import org.nuiton.math.matrix.MatrixND; - -import fr.ifremer.isisfish.mexico.MexicoHelper; -import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; - -/** - * XML domain visitor for Matrix continuous. - * - * @author chatellier - * @version $Revision: 1.0 $ - * - * Last update : $Date: 5 mars 2009 $ - * By : $Author: chatellier $ - */ -public class MatrixContinuousDomainXMLVisitor extends ContinuousDomainXMLVisitor { - - /** - * {@inheritDoc} - */ - @Override - protected void appendDomain(ContinuousDomain domain) { - - MatrixContinuousDomain mDomain = (MatrixContinuousDomain)domain; - - // facteur continue pourcentage - if (domain.isPercentageType()) { - xmlBuffer.append("<reference coefficient=\"") - .append(mDomain.getCoefficient()) - .append("\">"); - xmlBuffer.append(MexicoHelper.getMatrixAsXML((MatrixND)mDomain.getReferenceValue())); - xmlBuffer.append("</reference>"); - } - else { - // facteur continue min/max - xmlBuffer.append("<range>"); - xmlBuffer.append("<min>") - .append(MexicoHelper.getMatrixAsXML((MatrixND)mDomain.getMinBound())) - .append("</min>"); - xmlBuffer.append("<max>") - .append(MexicoHelper.getMatrixAsXML((MatrixND)mDomain.getMaxBound())) - .append("</max>"); - xmlBuffer.append("</range>"); - } - } -} Modified: trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/RuleDiscreteDomainXMLVisitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/RuleDiscreteDomainXMLVisitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/RuleDiscreteDomainXMLVisitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -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 @@ -42,6 +42,13 @@ */ public class RuleDiscreteDomainXMLVisitor extends DiscreteDomainXMLVisitor { + @Override + public void start(Domain domain) { + // lorsque le facteur est catégoriel, la liste de ses niveaux, par une + // liste ouverte d'éléments 'level', d'attributs 'value' et 'weight') + xmlBuffer.append("<domain distributionName=\"categorical\" type=\"rule\">"); + } + /** * {@inheritDoc} */ @@ -50,8 +57,8 @@ List<Rule> rulesList = (List<Rule>)value; String rulesAsXml = MexicoHelper.getRulesAsXml(rulesList); - xmlBuffer.append("<value>"); + xmlBuffer.append("<level>"); xmlBuffer.append(rulesAsXml); - xmlBuffer.append("</value>"); + xmlBuffer.append("</level>"); } } Deleted: trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/ScenarioXMLVisitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/ScenarioXMLVisitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/ScenarioXMLVisitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,68 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2010 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 - * 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package fr.ifremer.isisfish.mexico.xml; - -import fr.ifremer.isisfish.simulator.sensitivity.Factor; -import fr.ifremer.isisfish.simulator.sensitivity.Scenario; -import fr.ifremer.isisfish.simulator.sensitivity.visitor.ScenarioVisitor; - -/** - * XML domain visitor. - * - * @author chatellier - * @version $Revision: 1.0 $ - * - * Last update : $Date: 5 mars 2009 $ - * By : $Author: chatellier $ - */ -public class ScenarioXMLVisitor extends AbstractXMLVisitor implements ScenarioVisitor { - - /** - * {@inheritDoc} - */ - @Override - public void start(Scenario scenario) { - xmlBuffer.append("<scenario>"); - } - - /** - * {@inheritDoc} - */ - @Override - public void visit(Scenario scenario, Factor factor) { - FactorXMLVisitor visitor = new FactorXMLVisitor(); - factor.accept(visitor); - xmlBuffer.append(visitor.getXML()); - } - - /** - * {@inheritDoc} - */ - @Override - public void end(Scenario scenario) { - xmlBuffer.append("</scenario>"); - } -} Deleted: trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/SensitivityScenariosXMLVisitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/SensitivityScenariosXMLVisitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/SensitivityScenariosXMLVisitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,70 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2010 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 - * 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package fr.ifremer.isisfish.mexico.xml; - -import fr.ifremer.isisfish.simulator.sensitivity.Scenario; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; -import fr.ifremer.isisfish.simulator.sensitivity.visitor.SensitivityScenariosVisitor; - -/** - * XML sensitivity scenarios visitor. - * - * @author chatellier - * @version $Revision: 1.0 $ - * - * Last update : $Date: 5 mars 2009 $ - * By : $Author: chatellier $ - */ -public class SensitivityScenariosXMLVisitor extends AbstractXMLVisitor implements SensitivityScenariosVisitor { - - /** - * {@inheritDoc} - */ - @Override - public void start(SensitivityScenarios scenarios) { - xmlBuffer.append("<experimentalScenarios>"); - xmlBuffer.append("<scenarios>"); - } - - /** - * {@inheritDoc} - */ - @Override - public void visit(SensitivityScenarios scenarios, Scenario scenario) { - ScenarioXMLVisitor visitor = new ScenarioXMLVisitor(); - scenario.accept(visitor); - xmlBuffer.append(visitor.getXML()); - } - - /** - * {@inheritDoc} - */ - @Override - public void end(SensitivityScenarios scenarios) { - xmlBuffer.append("</scenarios>"); - xmlBuffer.append("</experimentalScenarios>"); - } -} Modified: trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/package-info.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/package-info.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/mexico/xml/package-info.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + * Copyright (C) 2009 - 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 Modified: trunk/src/main/java/fr/ifremer/isisfish/rule/Rule.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/rule/Rule.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/rule/Rule.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -37,15 +37,17 @@ * ait, doivent etre des attributs public commencant par param. * * <p> Les types acceptable pour un parametre sont: - * <li> un nombre (int, long, float, double, ...) - * <li> un boolean - * <li> une chaine String - * <li> un objet Date ({@link fr.ifremer.isisfish.types.TimeStep}) - * <li> un objet Month ({@link fr.ifremer.isisfish.types.Month}) - * <li> Le type d'une entité (@see fr.ifremer.isisfish.entities) + * <ul> + * <li> un nombre (int, long, float, double, ...)</li> + * <li> un boolean</li> + * <li> une chaine String</li> + * <li> un objet Date ({@link fr.ifremer.isisfish.types.TimeStep})</li> + * <li> un objet Month ({@link fr.ifremer.isisfish.types.Month})</li> + * <li> Le type d'une entité (@see fr.ifremer.isisfish.entities)</li> + * </ul> * * <p> Pour supporter d'autre type il faut créer des converters commons-beanutils - * //{@link fr.ifremer.isisfish.simulator.SimulationParameter#ruleParametertoProperties(int, Rule)} + * //{@link fr.ifremer.isisfish.rule.RuleHelper#getRuleAsProperties(int, org.nuiton.topia.TopiaContext, Rule)} * * Created: 12 janv. 2006 17:02:43 * @@ -84,7 +86,7 @@ /** * La condition qui doit etre vrai pour faire les actions. * - * Si la confition return vrai alors les methodes + * Si la condition return vrai alors les methodes * {@link #preAction(SimulationContext, TimeStep, Metier)} et * {@link #postAction(SimulationContext, TimeStep, Metier)} seront appelée. * Modified: trunk/src/main/java/fr/ifremer/isisfish/rule/RuleHelper.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/rule/RuleHelper.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/rule/RuleHelper.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -27,8 +27,6 @@ import java.util.Properties; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaContext; import fr.ifremer.isisfish.datastore.RegionStorage; @@ -52,9 +50,6 @@ */ public class RuleHelper extends StorageHelper { - /** Logger for this class. */ - private static final Log log = LogFactory.getLog(RuleHelper.class); - /** * Recupere dans propriétés les valeurs des champs spécifiques à la règle et * met à jour les champs de la règle. Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/MetierMonitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/MetierMonitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/MetierMonitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.simulator; -import static org.nuiton.i18n.I18n.n_; +import static org.nuiton.i18n.I18n.n; import java.util.ArrayList; import java.util.Collection; @@ -35,9 +35,9 @@ import java.util.Map; import java.util.Set; -import org.apache.commons.collections.MapIterator; -import org.apache.commons.collections.keyvalue.MultiKey; -import org.apache.commons.collections.map.MultiKeyMap; +import org.apache.commons.collections4.MapIterator; +import org.apache.commons.collections4.keyvalue.MultiKey; +import org.apache.commons.collections4.map.MultiKeyMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.math.matrix.MatrixFactory; @@ -160,7 +160,7 @@ result = MatrixFactory.getInstance().create( name, new List[] {strategies, metiers}, - new String[] {n_("isisfish.metierMonitor.strategies"), n_("isisfish.metierMonitor.metiers")}); + new String[] {n("isisfish.metierMonitor.strategies"), n("isisfish.metierMonitor.metiers")}); setNoActivity(step, result); } return result; @@ -179,7 +179,7 @@ // ////////////////////////////////////////////////////////////////////////// - /** key <Metier, Month, Month> value: <Licence> */ + /** key <Metier, Month, Month> value: <Licence> */ protected MultiKeyMap list = new MultiKeyMap(); class Licence { Copied: trunk/src/main/java/fr/ifremer/isisfish/simulator/Objective.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/Objective.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/Objective.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/Objective.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,63 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2014 Ifremer, Code Lutin, 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ +package fr.ifremer.isisfish.simulator; + +import java.util.List; + +import org.nuiton.math.matrix.MatrixND; + +/** + * Interface des fonctions d'objectifs. + * + * @author Eric Chatellier + * @since 4.3.0.0 + */ +public interface Objective { + + /** + * Return plan necessary Results. + * + * @return the necessaryResult name + */ + public String[] getNecessaryResult(); + + /** + * Return plan description. + * + * @return plan description + * @throws Exception + */ + public String getDescription() throws Exception; + + /** + * Effectue une evaluation entre les exports et les observations. + * + * @param context optimisation context + * @param exports exports + * @param observations observations + * @return double value + */ + double eval(OptimizationContext context, List<MatrixND> exports, List<MatrixND> observations); +} Copied: trunk/src/main/java/fr/ifremer/isisfish/simulator/Optimization.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/Optimization.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/Optimization.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/Optimization.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,87 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2014 Ifremer, Code Lutin, 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ +package fr.ifremer.isisfish.simulator; + +/** + * Script d'optimisation. + * + * @author Eric Chatellier + * @since 4.3.0.0 + */ +public interface Optimization { + + /** + * Return plan necessary Results. + * + * @return the necessaryResult name + */ + public String[] getNecessaryResult(); + + /** + * Return plan description. + * + * @return plan description + * @throws Exception + */ + public String getDescription() throws Exception; + + /** + * Appele lors de l'initialisation. La premiere generation doit etre construite + * dans l'init. + * + * @param context + */ + void init(OptimizationContext context) throws Exception; + + /** + * La premiere generation doit etre construite dans cette methode + * dans l'init. + * + * @param context + */ + void firstSimulation(OptimizationContext context) throws Exception; + + /** + * Génère une nouvelle série de simulation suivant le context d'optimisation. + * + * @param context context + */ + void nextSimulation(OptimizationContext context) throws Exception; + + /** + * Cette methode est appelee après chaque serie de simulation soit apres firstSimulation et + * nextSimulation. + * + * @param context + */ + void endSimulation(OptimizationContext context) throws Exception; + + /** + * Cette methode est appelee lorsqu'il n'y a plus de simulation a faire + * (init ou nextSimulation n'ont pas fait appel a context.addSimulation) + * @param context + */ + void finish(OptimizationContext context) throws Exception; +} Copied: trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContext.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContext.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContext.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContext.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,153 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2014 Ifremer, Code Lutin, 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ +package fr.ifremer.isisfish.simulator; + +import fr.ifremer.isisfish.IsisFishRuntimeException; +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.simulator.launcher.SimulationJob; +import fr.ifremer.isisfish.simulator.sensitivity.Factor; +import fr.ifremer.isisfish.simulator.sensitivity.FactorHelper; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import org.apache.commons.collections4.CollectionUtils; + +/** + * Context utilisé pour gérer les différentes simulation lancées par un script d'optimisation. + * + * @author Eric Chatellier + * @since 4.3.0.0 + */ +public class OptimizationContext extends SimulationPlanContext { + + protected SimulationJob job; + + protected List<List<SimulationStorage>> generations = + new ArrayList<List<SimulationStorage>>(); + + /** Simulation to do during next generation simulation */ + protected List<SimulationStorage> nextSimulations; + + public OptimizationContext(String id, SimulationParameter param, SimulationJob job) { + super(id, param); + this.job = job; + } + + public List<SimulationStorage> getNextSimulations() { + if (nextSimulations == null) { + nextSimulations = new ArrayList<SimulationStorage>(); + } + return nextSimulations; + } + + /** + * Get simulation to do, put it generations and increment currentGeneration + * This method must be call be Simulator when it want to get next simulations + * to do. + * @return null or empty collection if no more simulation to do + */ + public List<SimulationStorage> clearNextSimulation() { + List<SimulationStorage> result = nextSimulations; + + if (CollectionUtils.isNotEmpty(result)) { + generations.add(result); + nextSimulations = null; + } + + return result; + } + + public List<SimulationStorage> getLastSimulations() { + List<SimulationStorage> result = getGeneration(generations.size() - 1); + return result; + } + + /** + * Return new simulation. This new simulation is automaticaly added to + * next simulation. + * + * @return new Simulation + */ + public SimulationStorage newSimulation() { + try { + String simId = id + "_" + number; + SimulationParameter childParam = param.copy(); + childParam.setSimulationPlanNumber(number); + SimulationStorage result = SimulationStorage.importAndRenameZip(job.getItem().getSimulationZip(), simId); + + incNumber(); + addSimulation(result); + + return result; + } catch (Exception eee) { + throw new IsisFishRuntimeException("can't create new simulation", eee); + } + } + + protected void addSimulation(SimulationStorage s) { + getNextSimulations().add(s); + } + + /** + * Create simulation. This new simulation is automatically added to + * next simulations. Database will be modified with factors in parameters + */ + public void newSimulation(Factor ... factors) { + SimulationStorage s = newSimulation(); + + Collection<Factor> colFactors = new ArrayList<Factor>(); + Collections.addAll(colFactors, factors); + String script = FactorHelper.generatePreScript(colFactors); + + SimulationParameter childParam = s.getParameter(); + childParam.setGeneratedPreScript(script); + } + + /** + * Return the current generation. + * 0 for no generation + * 1 for one generation simulation + * ... + * @return + */ + public int getCurrentGeneration() { + return generations.size(); + } + + public int getSimulationNumber() { + return number; + } + + public List<SimulationStorage> getGeneration(int n) { + List<SimulationStorage> result = null; + if (n >= 0 && CollectionUtils.isNotEmpty(generations)) { + result = generations.get(n); + } + + return result; + } + +} Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/PopulationMonitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/PopulationMonitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/PopulationMonitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,6 +25,7 @@ package fr.ifremer.isisfish.simulator; +import fr.ifremer.isisfish.IsisFishRuntimeException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -43,6 +44,7 @@ import fr.ifremer.isisfish.entities.Zone; import fr.ifremer.isisfish.types.TimeStep; import fr.ifremer.isisfish.types.Month; +import java.util.AbstractMap; import java.util.Collections; /** @@ -70,10 +72,10 @@ protected List<Population> pops = null; /** current number of fish by Pop */ protected Map<Population, MatrixND> Ns = new HashMap<Population, MatrixND>(); - /** reproduction key: <date, pop> value:<MatrixND> */ + /** reproduction key: <date, pop> value:<MatrixND> */ protected Map<Population, Map<TimeStep, MatrixND>> reproductions = new HashMap<Population, Map<TimeStep, MatrixND>>(); - /** discard key: <date, pop> value:<MatrixND> */ - protected Map<Population, Map<TimeStep, MatrixND>> discards = new HashMap<Population, Map<TimeStep, MatrixND>>(); + /** discard key: <date, pop> value:<MatrixND> */ + protected Map<Population, Map.Entry<TimeStep, MatrixND>> discards = new HashMap<Population, Map.Entry<TimeStep, MatrixND>>(); /** catch per population, only last catch is remaining */ protected Map<Population, MatrixND> catchs = new HashMap<Population, MatrixND>(); /** catch per population, only last catch is remaining */ @@ -97,7 +99,6 @@ .unmodifiableList(new ArrayList<Population>(pops)); for (Population pop : this.pops) { reproductions.put(pop, new HashMap<TimeStep, MatrixND>()); - discards.put(pop, new HashMap<TimeStep, MatrixND>()); } } @@ -222,7 +223,7 @@ /** * * TODO les reproductions qui sont trop veille pour encore servir - * doivent être supprimées. c-a-d date < currentDate - etalement - gap between repro recru + * doivent être supprimées. c-a-d date < currentDate - etalement - gap between repro recru * Une autre facon de faire est de supprimer les repro == 0 car normalement * toute la repro doit etre utilisé au bout d'un certain temps * @@ -395,12 +396,21 @@ * @return le discard */ public MatrixND getDiscard(TimeStep step, Population pop) { - MatrixND result = discards.get(pop).get(step); + checkStep(step, "You can only get discard for current step simulation, for old discard you must use ResultStorage"); + + MatrixND result = null; + // seul le discard de l'annee en cours est disponible, sinon on doit + // aller le chercher dans les resultats + Map.Entry<TimeStep, MatrixND> discard = discards.get(pop); + if (discard != null && discard.getValue().equals(step)) { + result = discard.getValue(); + } return result; } /** * Set discard. + * Only work for current step simulation * * Force discard at date for population. * @@ -409,33 +419,37 @@ * @param discard le discard */ public void setDiscard(TimeStep step, Population pop, MatrixND discard) { - Map<TimeStep, MatrixND> oneDiscard = discards.get(pop); - synchronized (oneDiscard) { - // meme si discards.get(pop) != null - // replace toujours le précédent - MatrixND tmp = discard.copy(); - discards.get(pop).put(step, tmp); - } + checkStep(step, "You can only change discard for current step simulation"); + // meme si discards.get(pop) != null + // replace toujours le précédent + MatrixND tmp = discard.copy(); + discards.put(pop, new AbstractMap.SimpleEntry<TimeStep, MatrixND>(step, tmp)); } /** - * FIXME: discards n'est jamais vider, on le conserve pour toutes les annees - * il serait bon de faire un peu le menage de temps en temps. + * Only work for current step simulation * * @param step * @param pop * @param discard */ public void addDiscard(TimeStep step, Population pop, MatrixND discard) { - Map<TimeStep, MatrixND> oneDiscard = discards.get(pop); - synchronized (oneDiscard) { - MatrixND tmp = oneDiscard.get(step); - if (tmp == null) { - tmp = discard.copy(); - discards.get(pop).put(step, tmp); - } else { - tmp.add(discard); - } + checkStep(step, "You can only add discard for current step simulation"); + + MatrixND oneDiscard = getDiscard(step, pop); + if (oneDiscard == null) { + oneDiscard = discard.copy(); + } else { + oneDiscard.add(discard); } + setDiscard(step, pop, oneDiscard); } + + public void checkStep(TimeStep step, String msg) { + SimulationContext sim = SimulationContext.get(); + TimeStep simStep = sim.getSimulationControl().getStep(); + if (!step.equals(simStep )) { + throw new IsisFishRuntimeException(msg); + } + } } Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/ResultManager.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/ResultManager.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/ResultManager.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,12 +25,13 @@ package fr.ifremer.isisfish.simulator; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.util.Collection; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.commons.logging.Log; @@ -39,6 +40,7 @@ import fr.ifremer.isisfish.IsisFishException; import fr.ifremer.isisfish.datastore.ExportStorage; +import fr.ifremer.isisfish.entities.Observation; import fr.ifremer.isisfish.entities.Population; import fr.ifremer.isisfish.export.Export; import fr.ifremer.isisfish.rule.Rule; @@ -123,13 +125,13 @@ for (String exportName : exportNames) { ExportStorage storage = ExportStorage.getExport(exportName); try { - Export export = storage.getNewExportInstance(); + Export export = storage.getNewInstance(); for (String resultName : export.getNecessaryResult()) { enabledResult.add(resultName); } } catch (IsisFishException eee) { if (log.isWarnEnabled()) { - log.warn(_("Can't instanciate export %1$s", exportName), eee); + log.warn(t("Can't instanciate export %1$s", exportName), eee); } } } @@ -150,7 +152,33 @@ } } } - log.info("Enabled result: " + enabledResult); + + // on objective and optimization + Objective objective = param.getObjective(); + if (objective != null) { + for (String resultName : objective.getNecessaryResult()) { + enabledResult.add(resultName); + } + } + + Optimization optimization = param.getOptimization(); + if (optimization != null) { + for (String resultName : optimization.getNecessaryResult()) { + enabledResult.add(resultName); + } + } + + // optimization export + Map<Export, Observation> optimizationExportsObservations = param.getOptimizationExportsObservations(); + if (optimizationExportsObservations != null) { + for (Export export : optimizationExportsObservations.keySet()) { + for (String resultName : export.getNecessaryResult()) { + enabledResult.add(resultName); + } + } + } + + log.info("Enabled result: " + enabledResult); } boolean result = enabledResult.contains(name); return result; @@ -203,7 +231,7 @@ /** * Retourne la matrice stocke pour un pas de temps - * @param date le pas de temps que l'on souhaite + * @param step le pas de temps que l'on souhaite * @param pop la population pour lequelle on souhaite le resultat * @param name le nom des resultats dont on veut la matrice * @return La matrice demandée ou null si aucune matrice ne correspond a Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/RuleMonitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/RuleMonitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/RuleMonitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.simulator; -import org.apache.commons.collections.map.MultiKeyMap; +import org.apache.commons.collections4.map.MultiKeyMap; import fr.ifremer.isisfish.entities.Metier; import fr.ifremer.isisfish.rule.Rule; Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationContext.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationContext.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationContext.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -46,11 +46,13 @@ /** * Keep all information on one simulation. * - * <li> Launch parameter - * <li> Database (TopiaContext) - * <li> SimulationControl - * <li> Effective by pop (N) - * <li> Result + * <ul> + * <li> Launch parameter</li> + * <li> Database (TopiaContext)</li> + * <li> SimulationControl</li> + * <li> Effective by pop (N)</li> + * <li> Result</li> + * </ul> * * Created: 3 juil. 2006 17:05:27 * @@ -86,7 +88,7 @@ /** TopiaContext must be used to save result */ protected TopiaContext dbResult = null; - /** CacheAspect des variables d'entités. Topia id > map of attributes. */ + /** CacheAspect des variables d'entités. Topia id > map of attributes. */ protected Map<TopiaEntity, SimulationVariable> variablesCache = new HashMap<TopiaEntity, SimulationVariable>(); /** Context value used in equation. */ Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationControl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationControl.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationControl.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -28,6 +28,7 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; +import java.util.Objects; import java.util.Properties; import org.apache.commons.logging.Log; @@ -41,7 +42,7 @@ * * Created: Fri Oct 6 2000 * - * @author POUSSIN Benjamin <poussin@codelutin.com> + * @author POUSSIN Benjamin <poussin@codelutin.com> * @version $Revision$ * * Mise a jour: $Date$ @@ -198,7 +199,8 @@ * @param text The text to set. */ public void setText(String text) { - if (log.isInfoEnabled()) { + // pevent multiples logging of same string during remote simulations + if (!Objects.equals(this.text, text) && log.isInfoEnabled()) { log.info(text); } String oldValue = this.text; Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationException.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationException.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationException.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -30,7 +30,7 @@ * * Created: Wed Aug 14 2002 * - * @author <poussin@codelutin.com> + * @author <poussin@codelutin.com> * @version $Revision$ * * Mise a jour: $Date$ Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationExportResultWrapper.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationExportResultWrapper.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationExportResultWrapper.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,11 +25,14 @@ package fr.ifremer.isisfish.simulator; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; + import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Set; +import org.apache.commons.collections4.ListUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -78,7 +81,7 @@ for (String exportName : parameters.getExportNames()) { try { ExportStorage storage = ExportStorage.getExport(exportName); - Export export = storage.getNewExportInstance(); + Export export = storage.getNewInstance(); allExports.add(export); } catch (IsisFishException e) { if (log.isErrorEnabled()) { @@ -94,10 +97,20 @@ if (sensitivityExports != null) { allExports.addAll(sensitivityExports); } - + + // third, optimization export + Set<Export> optimizationExports = parameters.getOptimizationExportsObservations().keySet(); + for (Export export : optimizationExports) { + // exclude export already added with regular exports + String exportName = ExportStorage.getName(export); + if (parameters.getExportNames() == null || !parameters.getExportNames().contains(exportName)) { + allExports.add(export); + } + } + // make exports if (!allExports.isEmpty()) { - control.setText(_("isisfish.message.export.export")); + control.setText(t("isisfish.message.export.export")); File exportDir = SimulationStorage .getResultExportDirectory(rootDirectory); exportDir.mkdirs(); Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationMeta.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationMeta.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationMeta.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -29,7 +29,7 @@ import fr.ifremer.isisfish.ui.widget.filter.FilterParamModel; import fr.ifremer.isisfish.ui.widget.filter.ValueGetter; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -40,7 +40,7 @@ /** * This enum represents all properties on which we can perform search. - * <p/> + * * Each constant is also used as acceptor for the property it represents (using {@link FilterAcceptor#accept(Object, Object)} * and permit to access SimulationProperties values with methods * {@link #getValue(SimulationProperties)} @@ -116,7 +116,7 @@ result = dateFormat.parse(d); } catch (ParseException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.parse.date", d), eee); + log.warn(t("isisfish.error.parse.date", d), eee); } } } Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -35,8 +35,10 @@ import fr.ifremer.isisfish.IsisConfig; import fr.ifremer.isisfish.datastore.RegionStorage; +import fr.ifremer.isisfish.entities.Observation; import fr.ifremer.isisfish.entities.Population; import fr.ifremer.isisfish.entities.Strategy; +import fr.ifremer.isisfish.export.Export; import fr.ifremer.isisfish.export.SensitivityExport; import fr.ifremer.isisfish.rule.Rule; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityAnalysis; @@ -236,23 +238,23 @@ public void clearRules(); /** - * Return if optimization sould be used. + * Return if cache should be used. * * Default to : true. * - * @return use optimization + * @return use cache */ - public boolean getUseOptimization(); + public boolean getUseCache(); /** * Change use optimization parameter. * - * @param useOptimization use optimization to set + * @param useCache use cache to set */ - public void setUseOptimization(boolean useOptimization); + public void setUseCache(boolean useCache); /** - * Return if statistic sould be used. + * Return if statistic should be used. * * Default to false; * @@ -340,10 +342,55 @@ /** * @param sensitivityExport the sensitivityExportNames to set */ - public void setSensitivityExport( - List<SensitivityExport> sensitivityExport); + public void setSensitivityExport(List<SensitivityExport> sensitivityExport); + public boolean getUseOptimization(); + + public void setUseOptimization(boolean useOptimization); + /** + * Return used optimization script. + * + * @return optimization method + */ + public Optimization getOptimization(); + + /** + * Set simulation optimization. + * + * @param optimization optimization + */ + public void setOptimization(Optimization optimization); + + /** + * Return used objective. + * + * @return + */ + public Objective getObjective(); + + /** + * Set objective. + * + * @param objective objective + */ + public void setObjective(Objective objective); + + /** + * Get exports and observations map. + * + * @return exports and observations map + */ + public Map<Export, Observation> getOptimizationExportsObservations(); + + /** + * Set exports and observations map. + * + * @param exportsObservations exports and observations map + */ + public void setOptimizationExportsObservations(Map<Export, Observation> exportsObservations); + + /** * Get use simulation plans property. * * @return use simulation plan. @@ -410,12 +457,28 @@ /** * Set pre script content. - * + * * @param preScript prescript content */ public void setPreScript(String preScript); /** + * Generated pre script is internal script generated by isis. This script + * must be executed before user defined preScript. + * + * @return generated pre script + */ + public String getGeneratedPreScript(); + + /** + * Generated pre script is internal script generated by isis. This script + * must be executed before user defined preScript + * + * @param preScript prescript content + */ + public void setGeneratedPreScript(String preScript); + + /** * Get region name. * * @return region name Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -45,8 +45,10 @@ import fr.ifremer.isisfish.IsisFishRuntimeException; import fr.ifremer.isisfish.datastore.RegionStorage; +import fr.ifremer.isisfish.entities.Observation; import fr.ifremer.isisfish.entities.Population; import fr.ifremer.isisfish.entities.Strategy; +import fr.ifremer.isisfish.export.Export; import fr.ifremer.isisfish.export.SensitivityExport; import fr.ifremer.isisfish.rule.Rule; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityAnalysis; @@ -87,8 +89,7 @@ paramFile = File.createTempFile("isis-fish-param", ".properties"); paramFile.deleteOnExit(); store(param); - } - catch (IOException eee) { + } catch (IOException eee) { throw new IsisFishRuntimeException("Can't cache param to disk", eee); } @@ -101,11 +102,9 @@ try { writer = new BufferedWriter(new FileWriter(paramFile)); prop.store(writer, "Parameter cache"); - } - catch (IOException eee) { + } catch (IOException eee) { throw new IsisFishRuntimeException("Can't cache param to disk", eee); - } - finally { + } finally { IOUtils.closeQuietly(writer); } } @@ -122,11 +121,9 @@ result = new SimulationParameterImpl(); result.fromProperties(prop); ref = new SoftReference<SimulationParameter>(result); - } - catch (IOException eee) { + } catch (IOException eee) { throw new IsisFishRuntimeException("Can't cache param to disk", eee); - } - finally { + } finally { IOUtils.closeQuietly(reader); } @@ -179,7 +176,6 @@ SimulationParameter param = getParam(); param.setDescription(description); store(param); - } /* @@ -217,7 +213,6 @@ SimulationParameter param = getParam(); param.addExtraRules(extraRules); store(param); - } /* @@ -237,7 +232,6 @@ SimulationParameter param = getParam(); param.setPopulations(populations); store(param); - } /* @@ -257,7 +251,6 @@ SimulationParameter param = getParam(); param.setStrategies(strategies); store(param); - } /* @@ -268,7 +261,6 @@ SimulationParameter param = getParam(); param.addSimulationPlan(plan); store(param); - } /* @@ -299,7 +291,6 @@ SimulationParameter param = getParam(); param.setSimulationPlans(plans); store(param); - } /* @@ -319,7 +310,6 @@ SimulationParameter param = getParam(); param.clearPlans(); store(param); - } /* @@ -330,7 +320,6 @@ SimulationParameter param = getParam(); param.addRule(rule); store(param); - } /* @@ -361,7 +350,6 @@ SimulationParameter param = getParam(); param.setRules(rules); store(param); - } /* @@ -372,7 +360,6 @@ SimulationParameter param = getParam(); param.clearRules(); store(param); - } /* @@ -392,7 +379,6 @@ SimulationParameter param = getParam(); param.setUseOptimization(useOptimization); store(param); - } /* @@ -412,7 +398,6 @@ SimulationParameter param = getParam(); param.setUseStatistic(useStatistic); store(param); - } /* @@ -432,7 +417,6 @@ SimulationParameter param = getParam(); param.setExportNames(exportNames); store(param); - } /* @@ -453,7 +437,6 @@ SimulationParameter param = getParam(); param.setNumberOfSensitivitySimulation(numberOfSensitivitySimulation); store(param); - } /* @@ -473,7 +456,6 @@ SimulationParameter param = getParam(); param.setSensitivityAnalysis(sensitivityAnalysis); store(param); - } /* @@ -493,7 +475,6 @@ SimulationParameter param = getParam(); param.setSensitivityExport(sensitivityExport); store(param); - } /* @@ -513,7 +494,6 @@ SimulationParameter param = getParam(); param.setUseSimulationPlan(useSimulationPlan); store(param); - } /* @@ -605,10 +585,29 @@ SimulationParameter param = getParam(); param.setPreScript(preScript); store(param); - + } /* + * @see fr.ifremer.isisfish.simulator.SimulationParameter#getGeneratedPreScript() + */ + @Override + public String getGeneratedPreScript() { + SimulationParameter param = getParam(); + return param.getGeneratedPreScript(); + } + + /* + * @see fr.ifremer.isisfish.simulator.SimulationParameter#setGeneratedPreScript(java.lang.String) + */ + @Override + public void setGeneratedPreScript(String preScript) { + SimulationParameter param = getParam(); + param.setGeneratedPreScript(preScript); + store(param); + } + + /* * @see fr.ifremer.isisfish.simulator.SimulationParameter#getRegionName() */ @Override @@ -900,7 +899,6 @@ SimulationParameter param = getParam(); param.fromProperties(props); store(param); - } /* @@ -912,4 +910,56 @@ param.reloadContextParameters(); store(param); } + + @Override + public Optimization getOptimization() { + SimulationParameter param = getParam(); + return param.getOptimization(); + } + + @Override + public Objective getObjective() { + SimulationParameter param = getParam(); + return param.getObjective(); + } + + @Override + public void setOptimization(Optimization optimization) { + SimulationParameter param = getParam(); + param.setOptimization(optimization); + store(param); + } + + @Override + public void setObjective(Objective objective) { + SimulationParameter param = getParam(); + param.setObjective(objective); + store(param); + } + + @Override + public Map<Export, Observation> getOptimizationExportsObservations() { + SimulationParameter param = getParam(); + return param.getOptimizationExportsObservations(); + } + + @Override + public void setOptimizationExportsObservations(Map<Export, Observation> exportsObservations) { + SimulationParameter param = getParam(); + param.setOptimizationExportsObservations(exportsObservations); + store(param); + } + + @Override + public boolean getUseCache() { + SimulationParameter param = getParam(); + return param.getUseCache(); + } + + @Override + public void setUseCache(boolean useCache) { + SimulationParameter param = getParam(); + param.setUseCache(useCache); + store(param); + } } Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.simulator; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.lang.reflect.Field; import java.lang.reflect.Modifier; @@ -50,20 +50,26 @@ import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.util.SortedProperties; import org.nuiton.util.StringUtil; +import org.nuiton.util.VersionUtil; import fr.ifremer.isisfish.IsisConfig; import fr.ifremer.isisfish.IsisFishDAOHelper; import fr.ifremer.isisfish.IsisFishException; +import fr.ifremer.isisfish.datastore.ExportStorage; +import fr.ifremer.isisfish.datastore.ObjectiveStorage; +import fr.ifremer.isisfish.datastore.OptimizationStorage; import fr.ifremer.isisfish.datastore.RegionStorage; import fr.ifremer.isisfish.datastore.RuleStorage; import fr.ifremer.isisfish.datastore.SensitivityAnalysisStorage; import fr.ifremer.isisfish.datastore.SensitivityExportStorage; import fr.ifremer.isisfish.datastore.SimulationPlanStorage; import fr.ifremer.isisfish.datastore.StorageHelper; +import fr.ifremer.isisfish.entities.Observation; import fr.ifremer.isisfish.entities.Population; import fr.ifremer.isisfish.entities.PopulationDAO; import fr.ifremer.isisfish.entities.Strategy; import fr.ifremer.isisfish.entities.StrategyDAO; +import fr.ifremer.isisfish.export.Export; import fr.ifremer.isisfish.export.ExportHelper; import fr.ifremer.isisfish.export.SensitivityExport; import fr.ifremer.isisfish.rule.Rule; @@ -105,8 +111,8 @@ /** Le nom de l'objet script a utiliser pour faire la simulation. */ protected String simulatorName; - /** Utilisation ou non des optimisations. */ - protected Boolean useOptimization; + /** Utilisation ou non du cache. */ + protected Boolean useCache; /** Utilisation ou non des statistiques. */ protected Boolean useStatistic; @@ -138,6 +144,9 @@ /** Le script de pre simulation a utiliser. */ protected String preScript; + /** Le script de pre simulation defini par Isis */ + protected String generatedPreScript; + /** Utilisation du plan de simulation. */ protected Boolean useSimulationPlan; @@ -171,6 +180,18 @@ /** Script utilisé pour les analyses de sensibilités. */ protected SensitivityAnalysis sensitivityAnalysis; + /** Utilisation d'un script de simulation. */ + protected Boolean useOptimization; + + /** Script d'optimisation. */ + protected Optimization optimization; + + /** Fonction d'objectif. */ + protected Objective objective; + + /** Exports et observations (optimisation). */ + protected Map<Export, Observation> optimizationExportsObservations; + /** La liste des resultats qui nous interesse. */ protected Collection<String> resultEnabled; @@ -268,7 +289,7 @@ region = RegionStorage.getRegion(getRegionName()); } else { if (log.isDebugEnabled()) { - log.debug(_("Region %s already inited", getRegionName())); + log.debug(t("Region %s already inited", getRegionName())); } } return this.region; @@ -498,7 +519,7 @@ try { SimulationPlanStorage planStorage = SimulationPlanStorage.getSimulationPlan(name); if (planStorage != null) { // since 4.0.0.3 can return null - SimulationPlan plan = planStorage.getNewSimulationPlanInstance(); + SimulationPlan plan = planStorage.getNewInstance(); StorageHelper.populateStorageParams(planIndex++, getRegion().getStorage(), plan, propertiesParameters, "plan"); simulationPlans.add(plan); @@ -596,7 +617,7 @@ for (String name : ruleList) { if (name != null && !"".equals(name)) { try { - Rule rule = RuleStorage.getRule(name).getNewRuleInstance(); + Rule rule = RuleStorage.getRule(name).getNewInstance(); RuleHelper.populateRule(ruleIndex++, tx, rule, propertiesParameters); rules.add(rule); } catch (IsisFishException eee) { @@ -644,28 +665,27 @@ } } - /* - * @see fr.ifremer.isisfish.simulator.SimulationParameter#getUseOptimization() - */ @Override - public boolean getUseOptimization() { - - if (useOptimization == null) { + public boolean getUseCache() { + if (useCache == null) { if (propertiesParameters != null) { - useOptimization = Boolean.valueOf(propertiesParameters.getProperty("useOptimization", "true")); + // en version < 4.3, le parametre était nommé 'useOptimization' + // qualifiait le cache, il été renommé ensuite + if (VersionUtil.smallerThan(getIsisFishVersion(), "4.3.0.0")) { + useCache = Boolean.valueOf(propertiesParameters.getProperty("useOptimization", "true")); + } else { + useCache = Boolean.valueOf(propertiesParameters.getProperty("useCache", "true")); + } } else { - useOptimization = Boolean.TRUE; + useCache = Boolean.TRUE; } } - return useOptimization.booleanValue(); + return useCache.booleanValue(); } - /* - * @see fr.ifremer.isisfish.simulator.SimulationParameter#setUseOptimization(boolean) - */ @Override - public void setUseOptimization(boolean useOptimization) { - this.useOptimization = useOptimization; + public void setUseCache(boolean useCache) { + this.useCache = useCache; } /* @@ -762,7 +782,7 @@ if (!StringUtils.isEmpty(analysisName)) { try { SensitivityAnalysisStorage sensitivityStorage = SensitivityAnalysisStorage.getSensitivityAnalysis(analysisName); - sensitivityAnalysis = sensitivityStorage.getNewSensitivityAnalysisInstance(); + sensitivityAnalysis = sensitivityStorage.getNewInstance(); // 0 = only single sensitivity StorageHelper.populateStorageParams(0, getRegion().getStorage(), sensitivityAnalysis, propertiesParameters, "sensitivity"); @@ -819,7 +839,7 @@ if (!StringUtils.isEmpty(name)) { SensitivityExport sensitivityExport = SensitivityExportStorage .getSensitivityExport(name) - .getNewSensitivityExportInstance(); + .getNewInstance(); ExportHelper.populateSensitivityExport( sensitivityExportIndex++, tx, sensitivityExport, @@ -860,6 +880,151 @@ this.sensitivityExports = sensitivityExport; } + @Override + public Optimization getOptimization() { + if (optimization == null) { + if (propertiesParameters != null) { + String optimizationName = propertiesParameters.getProperty("optimization"); + if (!StringUtils.isEmpty(optimizationName)) { + try { + OptimizationStorage optimizationStorage = OptimizationStorage.getOptimization(optimizationName); + optimization = optimizationStorage.getNewInstance(); + // 0 = only single optimization + StorageHelper.populateStorageParams(0, getRegion().getStorage(), optimization, + propertiesParameters, "optimization"); + } catch (IsisFishException eee) { + optimization = null; + if (log.isWarnEnabled()) { + log.warn("Can't find optimization: " + optimization, eee); + } + } + } + } + } + + return optimization; + } + + @Override + public boolean getUseOptimization() { + if (useOptimization == null) { + if (propertiesParameters != null) { + // en version < 4.3, le parametre était nommé 'useOptimization' + // qualifiant le cache, il a été renommé ensuite + if (VersionUtil.smallerThan(getIsisFishVersion(), "4.3.0.0")) { + useOptimization = Boolean.FALSE; + } else { + useOptimization = Boolean.valueOf(propertiesParameters.getProperty("useOptimization", "false")); + } + } else { + useOptimization = Boolean.FALSE; + } + } + return useOptimization.booleanValue(); + } + + @Override + public void setUseOptimization(boolean useOptimization) { + this.useOptimization = useOptimization; + } + + @Override + public void setOptimization(Optimization optimization) { + this.optimization = optimization; + } + + @Override + public Objective getObjective() { + if (objective == null) { + if (propertiesParameters != null) { + String objectiveName = propertiesParameters.getProperty("objective"); + if (!StringUtils.isEmpty(objectiveName)) { + try { + ObjectiveStorage objectiveStorage = ObjectiveStorage.getObjective(objectiveName); + objective = objectiveStorage.getNewInstance(); + // 0 = only single objective + StorageHelper.populateStorageParams(0, getRegion().getStorage(), objective, + propertiesParameters, "objective"); + } catch (IsisFishException eee) { + objective = null; + if (log.isWarnEnabled()) { + log.warn("Can't find objective: " + objective, eee); + } + } + } + } + } + return objective; + } + + @Override + public void setObjective(Objective objective) { + this.objective = objective; + } + + @Override + public Map<Export, Observation> getOptimizationExportsObservations() { + if (optimizationExportsObservations == null) { + // must be sorted for ui (LinkedHashMap) + optimizationExportsObservations = new LinkedHashMap<>(); + + if (propertiesParameters != null) { + try { + // On verifie tout d'abord que l'on ai pas dans une simulation + // si on y es, on utilise le context static non null du thread local + // Resoud les lazy exceptions des parametres des regles + boolean mustClose = false; + TopiaContext tx = SimulationContext.get().getDB(); + + if (tx == null) { + // not in simulation, create transaction + tx = getRegion().getStorage().beginTransaction(); + mustClose = true; + } + + // rules + String[] optimizationExportList = propertiesParameters.getProperty("optimizationexports", "").split(","); + int optimizationExportIndex = 0; + for (String name : optimizationExportList) { + if (name != null && !"".equals(name)) { + try { + Export export = ExportStorage.getExport(name).getNewInstance(); + Observation observation = null; + String observationId = propertiesParameters.getProperty("optimizationobservation." + optimizationExportIndex); + if (StringUtils.isNotBlank(observationId)) { + observation = (Observation)tx.findByTopiaId(observationId); + } + optimizationExportsObservations.put(export, observation); + } catch (IsisFishException eee) { + if (log.isWarnEnabled()) { + log.warn("Can't find rule: " + name, eee); + } + } + } + optimizationExportIndex++; + } + + // si la transaction a été ouverte (pas dans une simulation) + // on la referme + if (mustClose) { + tx.closeContext(); + } + } catch (TopiaException eee) { + if (log.isWarnEnabled()) { + log.warn("Can't get TopiaContext", eee); + } + } + } + } + + return optimizationExportsObservations; + } + + @Override + public void setOptimizationExportsObservations(Map<Export, Observation> optimizationExportsObservations) { + this.optimizationExportsObservations = optimizationExportsObservations; + } + /* * @see fr.ifremer.isisfish.simulator.SimulationParameter#getUseAnalysePlan() */ @@ -1007,6 +1172,26 @@ this.preScript = preScript; } + @Override + public String getGeneratedPreScript() { + + if (generatedPreScript == null) { + + if (propertiesParameters != null) { + generatedPreScript = propertiesParameters.getProperty("generatedPreScript", ""); + } else { + generatedPreScript = ""; + } + } + + return generatedPreScript; + } + + @Override + public void setGeneratedPreScript(String preScript) { + this.generatedPreScript = preScript; + } + /* * @see fr.ifremer.isisfish.simulator.SimulationParameter#getRegionName() */ @@ -1143,7 +1328,7 @@ @Override public void setSimulLogLevel(String logLevel) { if (log.isDebugEnabled()) { - log.debug(_("isisfish.params.changeLogLev", simulLogLevel, + log.debug(t("isisfish.params.changeLogLev", simulLogLevel, logLevel)); } this.simulLogLevel = logLevel; @@ -1173,7 +1358,7 @@ @Override public void setScriptLogLevel(String logLevel) { if (log.isDebugEnabled()) { - log.debug(_("isisfish.params.changeLogLev", scriptLogLevel, + log.debug(t("isisfish.params.changeLogLev", scriptLogLevel, logLevel)); } this.scriptLogLevel = logLevel; @@ -1201,7 +1386,7 @@ @Override public void setLibLogLevel(String logLevel) { if (log.isDebugEnabled()) { - log.debug(_("isisfish.params.changeLogLev", libLogLevel, logLevel)); + log.debug(t("isisfish.params.changeLogLev", libLogLevel, logLevel)); } this.libLogLevel = logLevel; } @@ -1337,10 +1522,11 @@ result.regionName = getRegionName(); result.numberOfYear = getNumberOfYear(); result.simulatorName = getSimulatorName(); - result.useOptimization = getUseOptimization(); + result.useCache = getUseCache(); result.useStatistic = getUseStatistic(); result.usePreScript = getUsePreScript(); result.preScript = getPreScript(); + result.generatedPreScript = getGeneratedPreScript(); result.useSimulationPlan = getUseSimulationPlan(); result.simulationPlanNumber = getSimulationPlanNumber(); if (exportNames != null) { @@ -1358,6 +1544,16 @@ if (simulationPlans != null) { result.simulationPlans = new LinkedList<SimulationPlan>(simulationPlans); } + if (objective != null) { + result.objective = objective; + } + result.useOptimization = getUseOptimization(); + if (optimization != null) { + result.optimization = optimization; + } + if (optimizationExportsObservations != null) { + result.optimizationExportsObservations = new LinkedHashMap<Export, Observation>(optimizationExportsObservations); + } if (resultEnabled != null) { result.resultEnabled = new LinkedList<String>(resultEnabled); } @@ -1397,25 +1593,30 @@ public String toString() { StringBuffer result = new StringBuffer(); result.append( - _("isisfish.params.toString.simulation.done", + t("isisfish.params.toString.simulation.done", getIsisFishVersion())).append('\n'); result.append("--------------------\n"); result.append(getDescription()).append('\n'); result.append("--------------------\n"); if (getUseSimulationPlan()) { - result.append(_("isisfish.params.toString.plan.number", + result.append(t("isisfish.params.toString.plan.number", getSimulationPlanNumber())); } + if (getUseCache()) { + result.append(t("isisfish.params.toString.use.cache", + getUseCache())); + } + RegionStorage region = getRegion(); - result.append(_("isisfish.params.toString.fishery", region.getName())); - result.append(_("isisfish.params.toString.number.years", + result.append(t("isisfish.params.toString.fishery", region.getName())); + result.append(t("isisfish.params.toString.number.years", getNumberOfYear())); // startegies List<Strategy> strs = getStrategies(); - result.append(_("isisfish.params.toString.strategies")); + result.append(t("isisfish.params.toString.strategies")); String sep = ""; for (Strategy str : strs) { result.append(sep).append(str.getName()); @@ -1424,7 +1625,7 @@ result.append("\n\n"); // populations - result.append(_("isisfish.params.toString.populations")); + result.append(t("isisfish.params.toString.populations")); sep = ""; for (Population pop : getPopulations()) { result.append(sep).append(pop.getName()); @@ -1444,7 +1645,7 @@ + name, eee); } } - result.append(_("isisfish.params.toString.rule", name)); + result.append(t("isisfish.params.toString.rule", name)); result.append('\n'); result.append(param); result.append("\n"); @@ -1454,7 +1655,7 @@ // simulation plans for (SimulationPlan plan : getSimulationPlans()) { - String name = RuleStorage.getName(plan); + String name = SimulationPlanStorage.getName(plan); String param = ""; try { param = SimulationPlanStorage.getParamAsString(plan); @@ -1464,24 +1665,80 @@ + name, eee); } } - result.append(_("isisfish.params.toString.plan", name)); + result.append(t("isisfish.params.toString.plan", name)); result.append('\n'); result.append(param); result.append('\n'); } + + if (getUseOptimization()) { + result.append(t("isisfish.params.toString.use.optimization", + getUseOptimization())); + } + if (objective != null) { + String name = ObjectiveStorage.getName(objective); + String param = ""; + try { + param = ObjectiveStorage.getParamAsString(objective); + } catch (IsisFishException eee) { + if (log.isWarnEnabled()) { + log.warn("Can't convert objective parameter to string for " + + name, eee); + } + } + result.append(t("isisfish.params.toString.objective", name)); + result.append('\n'); + result.append(param); + result.append('\n'); + } + + if (optimization != null) { + String name = OptimizationStorage.getName(optimization); + String param = ""; + try { + param = OptimizationStorage.getParamAsString(optimization); + } catch (IsisFishException eee) { + if (log.isWarnEnabled()) { + log.warn("Can't convert optimization parameter to string for " + + name, eee); + } + } + result.append(t("isisfish.params.toString.optimization", name)); + result.append('\n'); + result.append(param); + result.append('\n'); + } + + for (Map.Entry<Export, Observation> exportObservationEntry : getOptimizationExportsObservations().entrySet()) { + Export export = exportObservationEntry.getKey(); + Observation observation = exportObservationEntry.getValue(); + + String name = ExportStorage.getName(export); + result.append(t("isisfish.params.toString.optimizationExport", name)); + result.append('\n'); + if (observation != null) { + result.append(t("isisfish.params.toString.optimizationObservation", observation.getName())); + result.append('\n'); + } + } + result.append('\n'); - result.append(_("isisfish.params.toString.script.presimulation")) + result.append(t("isisfish.params.toString.script.generatedpresimulation")) .append(":\n"); + result.append(getGeneratedPreScript()); + result.append('\n'); + result.append(t("isisfish.params.toString.script.presimulation")) + .append(":\n"); result.append(getPreScript()); result.append('\n'); - result.append(_("isisfish.params.toString.simul.logger.level", + result.append(t("isisfish.params.toString.simul.logger.level", simulLogLevel)); result.append('\n'); - result.append(_("isisfish.params.toString.script.logger.level", + result.append(t("isisfish.params.toString.script.logger.level", scriptLogLevel)); result.append('\n'); - result.append(_("isisfish.params.toString.lib.logger.level", + result.append(t("isisfish.params.toString.lib.logger.level", libLogLevel)); result.append('\n'); return result.toString(); @@ -1499,7 +1756,7 @@ result.setProperty("regionName", getRegionName()); result.setProperty("numberOfYear", String.valueOf(getNumberOfYear())); result.setProperty("simulatorName", getSimulatorName()); - result.setProperty("useOptimization", String.valueOf(getUseOptimization())); + result.setProperty("useCache", String.valueOf(getUseCache())); result.setProperty("useStatistic", String.valueOf(getUseStatistic())); // strategies @@ -1587,6 +1844,75 @@ } } + // objective + if (objective != null) { + String objectiveName = ObjectiveStorage.getName(objective); + Properties objectiveProp = StorageHelper.getParamsAsProperties(0, + getRegion().getStorage(), objective, "objective"); + result.putAll(objectiveProp); + result.setProperty("objective", objectiveName); + } else { + if (propertiesParameters != null + && propertiesParameters.containsKey("objective")) { + result.setProperty("objective", propertiesParameters + .getProperty("objective")); + for (String key : propertiesParameters.stringPropertyNames()) { + if (key.startsWith("objective.")) { + result.setProperty(key, propertiesParameters.getProperty(key)); + } + } + } + } + + // optimization + if (optimization != null) { + String optimizationName = ObjectiveStorage.getName(optimization); + Properties optimizationProp = StorageHelper.getParamsAsProperties(0, + getRegion().getStorage(), optimization, "optimization"); + result.putAll(optimizationProp); + result.setProperty("optimization", optimizationName); + } else { + if (propertiesParameters != null + && propertiesParameters.containsKey("optimization")) { + result.setProperty("optimization", propertiesParameters + .getProperty("optimization")); + for (String key : propertiesParameters.stringPropertyNames()) { + if (key.startsWith("optimization.")) { + result.setProperty(key, propertiesParameters.getProperty(key)); + } + } + } + } + + // optimization export and observations + if (optimizationExportsObservations != null) { + String optimizationExportsList = ""; + int optimizationExportIndex = 0; + for (Map.Entry<Export, Observation> exportObservationEntry : optimizationExportsObservations.entrySet()) { + Export export = exportObservationEntry.getKey(); + optimizationExportsList += ExportStorage.getName(export) + ","; + + // add in props observation id export index + Observation observation = exportObservationEntry.getValue(); + if (observation != null) { + result.setProperty("optimizationobservation." + optimizationExportIndex, observation.getTopiaId()); + } + optimizationExportIndex++; + } + result.setProperty("optimizationexports", optimizationExportsList); + } else { + if (propertiesParameters != null) { + if (propertiesParameters.containsKey("optimizationexports")) { + result.setProperty("optimizationexports", propertiesParameters.getProperty("optimizationexports")); + } + for (String key : propertiesParameters.stringPropertyNames()) { + if (key.startsWith("optimizationobservation.")) { + result.setProperty(key, propertiesParameters.getProperty(key)); + } + } + } + } + // export names String exportList = ""; for (String export : getExportNames()) { @@ -1650,10 +1976,12 @@ // sensitivity params result.setProperty("sensitivityAnalysisOnlyKeepFirst", String.valueOf(isSensitivityAnalysisOnlyKeepFirst())); + result.setProperty("generatedPreScript", getGeneratedPreScript()); result.setProperty("usePreScript", String.valueOf(getUsePreScript())); result.setProperty("preScript", getPreScript()); result.setProperty("useSimulationPlan", String.valueOf(getUseSimulationPlan())); result.setProperty("simulationPlanNumber", String.valueOf(getSimulationPlanNumber())); + result.setProperty("useOptimization", String.valueOf(getUseOptimization())); String resultList = ""; for (String r : getResultEnabled()) { Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScript.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScript.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScript.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -3,9 +3,9 @@ * IsisFish * * $Id$ - * $HeadURL$ + * $HeadURL: http://svn.forge.codelutin.com/svn/isis-fish/branches/4.0.1/src/main/java/fr... $ * %% - * Copyright (C) 2007 - 2010 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin + * Copyright (C) 2014 Ifremer, Code Lutin, 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 @@ -22,71 +22,26 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ - package fr.ifremer.isisfish.simulator; -import static org.nuiton.i18n.I18n._; - +import fr.ifremer.isisfish.util.Args; import org.nuiton.topia.TopiaContext; -import fr.ifremer.isisfish.datastore.SimulationStorage; - -import bsh.Interpreter; - /** - * SimulationPreScript. + * Interface d'utilisation d'un prescript. * - * Created: 14 nov. 07 00:06:18 - * - * @author poussin - * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ + * @author Eric Chatellier */ -public class SimulationPreScript implements SimulationListener { +public interface SimulationPreScript { - /* - * @see fr.ifremer.isisfish.simulator.SimulationListener#afterSimulation(fr.ifremer.isisfish.simulator.SimulationContext) + /** + * Compute prescript + * + * @param context simulation context + * @param db database use during simulation + * @throws Exception */ - @Override - public void afterSimulation(SimulationContext context) { - } + @Args({"context", "db"}) + public void compute(SimulationContext context, TopiaContext db) throws Exception; - /* - * @see fr.ifremer.isisfish.simulator.SimulationListener#beforeSimulation(fr.ifremer.isisfish.simulator.SimulationContext) - */ - @Override - public void beforeSimulation(SimulationContext context) { - try { - context.message(_("isisfish.message.presimulation.script.execution")); - - SimulationStorage simulation = context.getSimulationStorage(); - SimulationParameter parameters = simulation.getParameter(); - String presimulationScript = parameters.getPreScript(); - if ((parameters.getUsePreScript() || parameters.getUseSimulationPlan()) - && presimulationScript != null - && !"".equals(presimulationScript)) { - - // utilisation de la db en memoire que l'on commitera - TopiaContext tx = context.getDB(); - - Interpreter bsh = new Interpreter(); - bsh.set("context", context); - bsh.set("db", tx); - bsh.eval("import org.nuiton.topia.*;"); - bsh.eval("import org.nuiton.topia.persistence.*;"); - bsh.eval("import fr.ifremer.isisfish.*;"); - bsh.eval("import fr.ifremer.isisfish.types.*;"); - bsh.eval("import fr.ifremer.isisfish.entities.*;"); - bsh.eval("import java.util.*;"); - bsh.eval(presimulationScript); - - tx.commitTransaction(); - } - } catch (Exception eee) { - throw new SimulationException( - _("Can't evaluate simulation prescript"), eee); - } - } } Copied: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScriptListener.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScriptListener.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScriptListener.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScriptListener.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,100 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2007 - 2010 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.simulator; + +import static org.nuiton.i18n.I18n.t; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.nuiton.topia.TopiaContext; + +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.util.EvaluatorHelper; + +/** + * SimulationPreScript. + * + * Created: 14 nov. 07 00:06:18 + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class SimulationPreScriptListener implements SimulationListener { + + /* + * @see fr.ifremer.isisfish.simulator.SimulationListener#afterSimulation(fr.ifremer.isisfish.simulator.SimulationContext) + */ + @Override + public void afterSimulation(SimulationContext context) { + } + + /* + * @see fr.ifremer.isisfish.simulator.SimulationListener#beforeSimulation(fr.ifremer.isisfish.simulator.SimulationContext) + */ + @Override + public void beforeSimulation(SimulationContext context) { + try { + context.message(t("isisfish.message.presimulation.script.execution")); + + SimulationStorage simulation = context.getSimulationStorage(); + SimulationParameter parameters = simulation.getParameter(); + + String generatedPreScript = parameters.getGeneratedPreScript(); + String presimulationScript = parameters.getPreScript(); + + if (StringUtils.isNotBlank(generatedPreScript) || + (parameters.getUsePreScript() && StringUtils.isNotBlank(presimulationScript))) { + + // utilisation de la db en memoire que l'on commitera + TopiaContext tx = context.getDB(); + + Map<String, Object> args = new HashMap<>(); + args.put("context", context); + args.put("db", tx); + + if (StringUtils.isNotBlank(generatedPreScript)) { + EvaluatorHelper.evaluate(SimulationPreScript.class.getPackage().getName(), + "GeneratedPreScript", SimulationPreScript.class, generatedPreScript, args); + } + + if (parameters.getUsePreScript() && StringUtils.isNotBlank(presimulationScript)) { + EvaluatorHelper.evaluate(SimulationPreScript.class.getPackage().getName(), + "PreScript", SimulationPreScript.class, presimulationScript, args); + } + + tx.commitTransaction(); + } + } catch (Exception eee) { + throw new SimulationException( + t("Can't evaluate simulation prescript"), eee); + } + } +} Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationProperties.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationProperties.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationProperties.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.simulator; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.BufferedReader; import java.io.File; @@ -42,14 +42,14 @@ /** * This class contains all usefull informations about a simulation. - * <p/> + * * This is used for filter or search a simulation. - * <p/> + * <p> * This is a mix of SimulationParameter and SimulationInformation. - * <p/> - * The class is only a properties container, no method to acces a data directly + * <p> + * The class is only a properties container, no method to access a data directly * (except to obtain name of underlying simulation). - * <p/> + * <p> * For this purpose use {@link SimulationMeta#getValue(SimulationProperties)} * and {@link SimulationMeta#getDateValue(SimulationProperties)} */ @@ -81,7 +81,7 @@ } catch (IOException e) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.load.file", file)); + log.warn(t("isisfish.error.load.file", file)); } } finally { IOUtils.closeQuietly(reader); Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationResultXML.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationResultXML.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationResultXML.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -35,7 +35,7 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.math.matrix.MatrixIterator; import org.nuiton.math.matrix.MatrixND; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import fr.ifremer.isisfish.IsisFishException; import fr.ifremer.isisfish.datastore.SimulationStorage; @@ -43,29 +43,29 @@ /** - * <!ELEMENT outData (m,d,i,s)*> - * <!ELEMENT m (dim+, (d|i|s)+)> - * <!ELEMENT dim (label)+)> - * <!ELEMENT d (#PCDATA)> - * <!ELEMENT i (#PCDATA)> - * <!ELEMENT s (#PCDATA)> + * <!ELEMENT outData (m,d,i,s)*> + * <!ELEMENT m (dim+, (d|i|s)+)> + * <!ELEMENT dim (label)+)> + * <!ELEMENT d (#PCDATA)> + * <!ELEMENT i (#PCDATA)> + * <!ELEMENT s (#PCDATA)> * - * <!ATTLIST m + * <!ATTLIST m * name CDATA #REQUIRED - * step CDATA #IMPLIED> + * step CDATA #IMPLIED> * - * <!ATTLIST dim + * <!ATTLIST dim * name CDATA #REQUIRED - * size CDATA #REQUIRED> + * size CDATA #REQUIRED> * - * <!ATTLIST d - * step CDATA #IMPLIED> + * <!ATTLIST d + * step CDATA #IMPLIED> * - * <!ATTLIST i - * step CDATA #IMPLIED> + * <!ATTLIST i + * step CDATA #IMPLIED> * - * <!ATTLIST s - * step CDATA #IMPLIED> + * <!ATTLIST s + * step CDATA #IMPLIED> * * @author poussin */ @@ -111,7 +111,7 @@ out.close(); } catch (IOException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.simulation.resultXml.close",eee.getMessage()), eee); + log.warn(t("isisfish.error.simulation.resultXml.close",eee.getMessage()), eee); } } } @@ -133,7 +133,7 @@ out.write("<outData>\n"); } catch (IOException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.simulation.resultXml.open",eee.getMessage()), eee); + log.warn(t("isisfish.error.simulation.resultXml.open",eee.getMessage()), eee); } } } @@ -158,7 +158,7 @@ out.write(" </m>\n"); } catch (IOException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.simulation.resultXml.write",eee.getMessage()), eee); + log.warn(t("isisfish.error.simulation.resultXml.write",eee.getMessage()), eee); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationVariable.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationVariable.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationVariable.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -56,7 +56,7 @@ /** Managed entity id. */ protected TopiaEntity topiaEntity; - /** Variable name > variable entity. */ + /** Variable name > variable entity. */ protected Map<String, Variable> variablesCache = new HashMap<String, Variable>(); public SimulationVariable(SimulationContext simulationContext, TopiaEntity topiaEntity) { Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulatorServerBadIdException.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulatorServerBadIdException.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulatorServerBadIdException.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -30,7 +30,7 @@ * * Created: Fri Sep 6 2002 * - * @author <poussin@codelutin.com> + * @author Benjamin Poussin : poussin@codelutin.com * @version $Revision$ * * Mise a jour: $Date$ Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.simulator.launcher; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.net.MalformedURLException; @@ -36,6 +36,8 @@ import java.util.Arrays; import java.util.List; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DurationFormatUtils; import org.apache.commons.logging.Log; @@ -45,14 +47,13 @@ import org.nuiton.topia.event.TopiaTransactionEvent; import org.nuiton.topia.event.TopiaTransactionListener; import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.util.FileUtil; import org.nuiton.util.ObjectUtil; import org.nuiton.util.StringUtil; import fr.ifremer.isisfish.IsisConfig; import fr.ifremer.isisfish.IsisFish; import fr.ifremer.isisfish.IsisFishRuntimeException; -import fr.ifremer.isisfish.aspect.AspectClassLoader; +import fr.ifremer.isisfish.aspect.AspectJUrlClassLoader; import fr.ifremer.isisfish.aspect.CacheAspect; import fr.ifremer.isisfish.aspect.RuleAspect; import fr.ifremer.isisfish.aspect.TraceAspect; @@ -65,7 +66,7 @@ import fr.ifremer.isisfish.simulator.SimulationExportResultWrapper; import fr.ifremer.isisfish.simulator.SimulationListener; import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.SimulationPreScript; +import fr.ifremer.isisfish.simulator.SimulationPreScriptListener; import fr.ifremer.isisfish.simulator.Simulator; import fr.ifremer.isisfish.types.Month; import fr.ifremer.isisfish.types.TimeStep; @@ -100,7 +101,7 @@ String id = control.getId(); if (log.isInfoEnabled()) { - log.info(_("simulate %s with file %s", id, simulationZip)); + log.info(t("simulate %s with file %s", id, simulationZip)); } try { @@ -115,7 +116,7 @@ SimulationStorage storage = SimulationStorage.getSimulation(id); storage.closeStorage(); - FileUtil.deleteRecursively(storage.getFile()); + FileUtils.deleteQuietly(storage.getFile()); } if (log.isDebugEnabled()) { @@ -146,7 +147,7 @@ simulation = localSimulate(control, simulation); } catch (Exception eee) { - log.error(_("Can't do simulation %s", id), eee); + log.error(t("Can't do simulation %s", id), eee); if (simulation != null) { simulation.getInformation().setException(eee); } @@ -188,7 +189,7 @@ @Override public String toString() { - return _("isisfish.simulator.launcher.inprocess"); + return t("isisfish.simulator.launcher.inprocess"); } /** @@ -231,7 +232,7 @@ libLogLevel, simThread.getName()); } catch (Exception e) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.add.logger.simulation", e)); + log.warn(t("isisfish.error.add.logger.simulation", e)); } } try { @@ -240,7 +241,7 @@ simThread.join(); } catch (InterruptedException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.wait.simThread"), eee); + log.warn(t("isisfish.error.wait.simThread"), eee); } } } finally { @@ -276,17 +277,14 @@ * @param directory le répertoire qui servira pour le classloader * @return le classe loader modifié */ - protected AspectClassLoader changeClassLoader(Thread thread, File directory) { + protected AspectJUrlClassLoader changeClassLoader(Thread thread, File directory) { try { URL[] classpath = new URL[] { directory.toURI().toURL(), // poussin 20080821 : il semble ne plus trouve les formules, // est-ce mieux avec le compile dir ? IsisFish.config.getCompileDirectory().toURI().toURL() }; - //URL [] classpath = new URL[]{directory.toURL()}; - AspectClassLoader loader = new AspectClassLoader(classpath, - IsisFish.class.getClassLoader()); //new URLClassLoader(classpath); - //AspectClassLoader loader = new AspectClassLoader(classpath, ClassLoader.getSystemClassLoader()); - //new URLClassLoader(classpath); + AspectJUrlClassLoader loader = new AspectJUrlClassLoader(classpath, + IsisFish.class.getClassLoader()); thread.setContextClassLoader(loader); log.info("Classloader used for simulation: " + loader + " " + Arrays.toString(loader.getURLs())); @@ -295,7 +293,7 @@ // on leve un runtime, car normalement cette erreur est pratiquement // impossible car on creer l'url a partir d'un File ce qui ne pose // noralement pas de probleme - throw new IsisFishRuntimeException(_("isisfish.error.change.classloader", directory), eee); + throw new IsisFishRuntimeException(t("isisfish.error.change.classloader", directory), eee); } } @@ -318,7 +316,7 @@ + IsisConfig.getVersion()); long start = System.nanoTime(); simulation.getInformation().setSimulationStart(new java.util.Date()); - AspectClassLoader classLoader; + AspectJUrlClassLoader classLoader = null; try { File rootDirectory = simulation.getDirectory(); @@ -329,6 +327,10 @@ context.setSimulationControl(control != null ? control : new SimulationControl(simulation.getName())); + // make compile directory outside getCompileDirectory() to improve performance + File compileDirectory = IsisFish.config.getCompileDirectory(); + compileDirectory.mkdirs(); + // changement de classloader // IMPORTANT : must be set AFTER : // - SimulationContext.get(); @@ -352,23 +354,25 @@ // // Activation de l'OAP demandée // - if (parameters.getUseStatistic() || parameters.getUseOptimization()) { + if (parameters.getUseStatistic() || parameters.getUseCache()) { if (parameters.getUseStatistic()) { - message(control, _("isisfish.message.setting.trace.aspects")); + message(control, t("isisfish.message.setting.trace.aspects")); classLoader.deploy(TraceAspect.class); } - if (parameters.getUseOptimization()) { - message(control, _("isisfish.message.setting.cache.aspects")); + if (parameters.getUseCache()) { + message(control, t("isisfish.message.setting.cache.aspects")); classLoader.deploy(CacheAspect.class); } } + classLoader.prepare(); + // recherche du simulateur a utiliser String simulatorName = parameters.getSimulatorName(); SimulatorStorage simulator = SimulatorStorage .getSimulator(simulatorName); - Simulator simulatorObject = simulator.getNewSimulatorInstance(); + Simulator simulatorObject = simulator.getNewInstance(); // on se met listener sur tc pour connaitre tous les nouveaux objets ObjectCreationListener objectCreationListener = new ObjectCreationListener(); @@ -382,7 +386,7 @@ // // Lancement du script de simulation selectionné // - message(control, _("isisfish.message.simulation.execution")); + message(control, t("isisfish.message.simulation.execution")); // // Call listener simulation (used per example for prescript) @@ -393,7 +397,7 @@ // // Ajout des nouveaux objets créés durant la simulation // - message(control, _("isisfish.message.add.objets.simulation")); + message(control, t("isisfish.message.add.objets.simulation")); // on ajoute sur le DBResult car pour les exports peut-etre auront // nous besoin de ces nouveaux objets, et durant la simulation // les resultats sont recuperer dans le DBResult @@ -410,7 +414,7 @@ // context.fireAfterSimulation(); - message(control, _("isisfish.message.simulation.ended")); + message(control, t("isisfish.message.simulation.ended")); simulation.getInformation().setSimulationEnd(new java.util.Date()); @@ -428,14 +432,14 @@ resultStorage.close(); } catch (OutOfMemoryError eee) { - log.error(_("isisfish.error.during.simulation"), eee); + log.error(t("isisfish.error.during.simulation"), eee); simulation.getInformation().setException(eee); - throw new SimulationException(_("isisfish.error.out.memory"), eee); + throw new SimulationException(t("isisfish.error.out.memory"), eee); } catch (Exception eee) { - log.error(_("isisfish.error.during.simulation"), eee); + log.error(t("isisfish.error.during.simulation"), eee); simulation.getInformation().setException(eee); throw new SimulationException( - _("isisfish.error.during.simulation"), eee); + t("isisfish.error.during.simulation"), eee); } finally { // // Finaly close all TopiaContext used during simulation @@ -474,12 +478,18 @@ simulation.getInformation().setOptimizationUsage(cache); } + // try to fix memory leak + LogFactory.release(classLoader); + + // close classloader to release resource + IOUtils.closeQuietly(classLoader); + // cleanup specific context build directory File simulationBuildDirectory = IsisFish.config.getCompileDirectory(); if (log.isDebugEnabled()) { log.debug("Delete simulation build directory : " + simulationBuildDirectory.getAbsolutePath()); } - FileUtil.deleteRecursively(simulationBuildDirectory); + FileUtils.deleteQuietly(simulationBuildDirectory); // context is used in TraceAspect.printStatistiqueAndClear() SimulationContext.remove(); @@ -509,7 +519,7 @@ // enregistrement des listeners de simulation // - prescript (before simulation) // - export (after simulation) - context.addSimulationListener(new SimulationPreScript()); + context.addSimulationListener(new SimulationPreScriptListener()); // si le simulateur est de type SimulationStep il faut ajouter les regles context.addSimulationListener(new SimulationExportResultWrapper()); } Copied: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,215 @@ +package fr.ifremer.isisfish.simulator.launcher; + +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2014 Ifremer, Code Lutin, Benjamin Poussin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import static org.nuiton.i18n.I18n.t; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.math.matrix.MatrixND; + +import fr.ifremer.isisfish.IsisFishRuntimeException; +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.entities.Observation; +import fr.ifremer.isisfish.export.Export; +import fr.ifremer.isisfish.simulator.Objective; +import fr.ifremer.isisfish.simulator.Optimization; +import fr.ifremer.isisfish.simulator.OptimizationContext; +import fr.ifremer.isisfish.simulator.SimulationControl; +import fr.ifremer.isisfish.simulator.SimulationParameter; + +/** + * Permet de generer l'enchainement des simulations d'optimisation. + * Gere les differentes generation (plusieurs simulations par generation) + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class OptimizationPrepareJob implements Runnable, SimulationJob.PostAction { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private final Log log = LogFactory.getLog(OptimizationPrepareJob.class); + + protected SimulationService simulationService; + protected OptimizationContext optimizationContext; + protected SimulationJob job; + protected String id; + protected SimulationControl control; + protected SimulationParameter param; + protected Objective objective; + protected Optimization optimization; + + /** nombre de simulation faite ou en cours */ + protected int simNumber = 0; + /** nombre de simulation faite */ + protected int done = 0; + /** true if exception occure in one simulation */ + protected boolean exception = false; + + public OptimizationPrepareJob(SimulationService simulationService, SimulationJob job) { + this.simulationService = simulationService; + this.job = job; + + id = job.getItem().getControl().getId(); + control = job.getItem().getControl(); + param = job.getItem().getParameter(); + + objective = param.getObjective(); + optimization = param.getOptimization(); + optimizationContext = new OptimizationContext(id, param, job); + } + + @Override + public void run() { + try { + optimization.init(optimizationContext); + optimization.firstSimulation(optimizationContext); + + List<SimulationStorage> sims = optimizationContext.clearNextSimulation(); + while (!exception && !control.isStopSimulationRequest() + && CollectionUtils.isNotEmpty(sims)) { + for (SimulationStorage s : sims) { + if (!exception && !control.isStopSimulationRequest()) { + String simId = s.getName(); + + File zip = s.createZip(); + SimulationParameter childParam = s.getParameter(); + int childNumber = childParam.getSimulationPlanNumber(); + SimulationControl childControl = new SimulationControl(simId); + SimulationItem item = new SimulationItem(childControl, childParam); + item.setStandaloneSimulation(false); + item.setSimulationNumber(childNumber); + item.setSimulationZip(zip); + + SimulationJob subJob = new SimulationJob(simulationService, job, item, job.getPriority()); + subJob.setLauncher(job.getLauncher()); + + subJob.addPostAction(this); + simulationService.submitSubJob(subJob); + + simNumber++; + } + } + + control.setProgressMax(simNumber); + + // wait until wall simulation for this generation are done + while(!exception && !control.isStopSimulationRequest() + && simNumber > done) { + Thread.sleep(2000); + } + + if (!exception && !control.isStopSimulationRequest()) { + optimization.endSimulation(optimizationContext); + optimization.nextSimulation(optimizationContext); + sims = optimizationContext.clearNextSimulation(); + } + } + + if (!exception && !control.isStopSimulationRequest()) { + optimization.finish(optimizationContext); + } + + } catch (Exception eee) { + // add manual log + // we are in a thread, IsisFishRuntimeException is displayed + // outside a log + if (log.isErrorEnabled()) { + log.error(t("isisfish.error.evaluate.optimization.script"), eee); + } + throw new IsisFishRuntimeException(t("isisfish.error.evaluate.optimization.script"), eee); + } finally { + // on enleve le master plan des simulations en cours, vu que + // toutes les simu sont terminees (correctement ou echouee) + simulationService.fireStopEvent(this.job); + } + } + + @Override + public void finished(SimulationJob job, SimulationStorage sim) { + if (objective != null) { + + // appel de la methode d'objectif + try { + List<MatrixND> exports = new ArrayList<>(); + List<MatrixND> observations = new ArrayList<>(); + + // recuperation des exports et observations + Map<Export, Observation> exportsObservations = sim.getParameter().getOptimizationExportsObservations(); + for (Map.Entry<Export, Observation> exportObservation : exportsObservations.entrySet()) { + Export export = exportObservation.getKey(); + Observation observation = exportObservation.getValue(); + + File rootDirectory = sim.getDirectory(); + File resultExportDirectory = SimulationStorage.getResultExportDirectory(rootDirectory); + String fullFilename = export.getExportFilename() + export.getExtensionFilename(); + File exportFile = new File(resultExportDirectory, fullFilename); + + // read matrix file + MatrixND exportMatrix = null; + if (observation.getValue() != null) { + + // on fait ici un clone, car on ne connait pas les dimensions de la + // matrix à importer; cela n'a peut être aucun sens. + exportMatrix = observation.getValue().clone(); + + // import + exportMatrix.importCSV(exportFile, new int[] {0, 0}); + } + + exports.add(exportMatrix); + observations.add(observation.getValue()); + } + + double obj = objective.eval(optimizationContext, exports, observations); + sim.setObjective(obj); + } catch (IOException eee) { + throw new IsisFishRuntimeException("Can't evaluate objective", eee); + } + } + done++; + control.setProgress(done); + } + + @Override + public void exception(SimulationJob job, Throwable eee) { + // il y a une simulation d'echoue, on ne fait pas les suivantes + // cela n'impacte pas les plan independant puisque toutes les + // simulation on deja ete generee + exception = true; + } + +} Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.simulator.launcher; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.BufferedInputStream; import java.io.File; @@ -44,7 +44,6 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.util.FileUtil; import org.nuiton.util.MD5InputStream; import org.nuiton.util.StringUtil; import org.nuiton.util.ZipUtil; @@ -76,22 +75,22 @@ * * Caparmor file layout ($i = plan/as increment) : * <ul> - * <li>$ISIS-TMP/simulation-$id-preparation.zip - * <li>$ISIS-TMP/simulation-$id-prescript.bsh - * <li>$ISIS-TMP/simulation-$id-script.seq - * <li>$ISIS-TMP/simulation-$id-result.zip - * <li>$ISIS-TMP/simulation-$id-result.zip.md5 - * <li>$ISIS-TMP/simulation-$id-output.txt - * <li>$ISIS-TMP/simulation-$id-pbs.id + * <li>$ISIS-TMP/simulation-$id-preparation.zip</li> + * <li>$ISIS-TMP/simulation-$id-prescript.bsh</li> + * <li>$ISIS-TMP/simulation-$id-script.seq</li> + * <li>$ISIS-TMP/simulation-$id-result.zip</li> + * <li>$ISIS-TMP/simulation-$id-result.zip.md5</li> + * <li>$ISIS-TMP/simulation-$id-output.txt</li> + * <li>$ISIS-TMP/simulation-$id-pbs.id</li> * </ul> * All $ISIS-TMP/simulation-$id-* files are deteled after result download. * * Special case : * <ul> * <li>standalone zip : $ISIS-TMP/simulation-$shortid-result.zip - * (uploaded at first simulation) + * (uploaded at first simulation)</li> * <li>standalone simulations : $ISIS-TMP/simulation-$shortid-script.seq - * (uploaded at last simulation) + * (uploaded at last simulation)</li> * </ul> * where {@code $shortid} is id of parent job (without increment), they are not * deleted after result download. @@ -204,7 +203,7 @@ */ @Override public String toString() { - return _("isisfish.simulator.launcher.remote"); + return t("isisfish.simulator.launcher.remote"); } /** @@ -255,16 +254,16 @@ * * Dans le cas de ssh: * <ul> - * <li>upload la simulation - * <li>construit le script pour qsub - * <li>upload le script qsub - * <li>ajoute le script a qsub - * <ul> + * <li>upload la simulation</li> + * <li>construit le script pour qsub</li> + * <li>upload le script qsub</li> + * <li>ajoute le script a qsub</li> + * </ul> * * Et : * <ul> - * <li>lance le thread de control de la simulation - * <ul> + * <li>lance le thread de control de la simulation</li> + * </ul> */ @Override public void simulate(SimulationService simulationService, @@ -286,18 +285,18 @@ String simulationid = control.getId(); // connection - message(control, _("isisfish.simulation.remote.message.connection")); + message(control, t("isisfish.simulation.remote.message.connection")); Session sshSession = getSSHSession(); //Session sshSftpSession = getSSHSftpSession(); // upload simulation on server - message(control, _("isisfish.simulation.remote.message.upload")); + message(control, t("isisfish.simulation.remote.message.upload")); String simulationRemotePath = uploadSimulationIfNecessary(sshSession, simulationItem, simulationid, simulationZip); String remoteResultZip = getRemoteResultArchivePath(simulationid); // build du contenu du script - message(control,_("isisfish.simulation.remote.message.waitingstart")); + message(control,t("isisfish.simulation.remote.message.waitingstart")); String simulationPreScriptPath = uploadPreScriptIfNecessary( sshSession, control.getId(), simulationPrescript); @@ -306,10 +305,10 @@ } catch (Exception e) { if (log.isErrorEnabled()) { - log.error(_("isisfish.error.simulation.remote.global")); + log.error(t("isisfish.error.simulation.remote.global")); } throw new RemoteException( - _("isisfish.error.simulation.remote.global"), e); + t("isisfish.error.simulation.remote.global"), e); } } @@ -389,7 +388,7 @@ // file doesn't exist if (log.isDebugEnabled()) { // not add ,e plz :) - log.debug(_("Remote control file doesn't exists %s", e.getMessage())); + log.debug(t("Remote control file doesn't exists %s", e.getMessage())); } } @@ -398,13 +397,15 @@ // try do download md5 control file // MD5 + SIMULATION zip file + // FIXME echatellier 20140402 check not yet existing md5ControlFile and simulation ended + // simulation result will never be downloaded try { File md5ControlFile = downloadResultsMD5File(sshSession, control.getId()); if (md5ControlFile != null) { - control.setText(_("isisfish.simulation.remote.message.downloadresults")); + control.setText(t("isisfish.simulation.remote.message.downloadresults")); - String md5sum = FileUtil.readAsString(md5ControlFile); + String md5sum = FileUtils.readFileToString(md5ControlFile); if (log.isDebugEnabled()) { log.debug("MD5 Control file have been downloaded : " + md5ControlFile.getAbsolutePath()); @@ -445,7 +446,7 @@ } catch(SSHException e) { if (log.isDebugEnabled()) { - log.debug(_("Can't download archive : %s", e.getMessage())); + log.debug(t("Can't download archive : %s", e.getMessage())); } } @@ -482,14 +483,14 @@ // file doesn't exist if (log.isDebugEnabled()) { // not add ,e plz :) - log.debug(_("Remote information file doesn't exists %s", e + log.debug(t("Remote information file doesn't exists %s", e .getMessage())); } } } catch (IOException e) { if (log.isErrorEnabled()) { // not add ,e plz :) - log.error(_("Can't download file"), e); + log.error(t("Can't download file"), e); } } } @@ -534,7 +535,7 @@ port = Integer.parseInt(sPort); } catch (NumberFormatException e) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.error.simulation.remote.wrongportvalue", + log.warn(t("isisfish.error.simulation.remote.wrongportvalue", sPort)); } } @@ -542,7 +543,7 @@ } if (log.isInfoEnabled()) { - log.info(_("Try to log on %s@%s:%d", username, host, port)); + log.info(t("Try to log on %s@%s:%d", username, host, port)); } // add ssh key @@ -550,7 +551,7 @@ File sshKey = IsisFish.config.getSSHPrivateKeyFilePath(); if (sshKey.canRead()) { if (log.isInfoEnabled()) { - log.info(_("Ssh key found '%s' will be used to connect to", + log.info(t("Ssh key found '%s' will be used to connect to", sshKey.getAbsoluteFile(), host)); } jsch.addIdentity(sshKey.getAbsolutePath()); @@ -558,7 +559,7 @@ } else { if (log.isInfoEnabled()) { - log.info(_("Can't read ssh key : %s", sshKey)); + log.info(t("Can't read ssh key : %s", sshKey)); } } @@ -601,7 +602,7 @@ /** * Add ssh key into $HOME/.ssh/authorized_keys file. * - * Just connect and do an "echo xx >> .ssh/authorized_keys" + * Just connect and do an "echo xx >> .ssh/authorized_keys" * * @param session opened session * @param sshKey @@ -639,12 +640,12 @@ } } catch (IOException e) { if (log.isErrorEnabled()) { - log.error(_("Error while uploading public key to remote serveur authorized_keys"), + log.error(t("Error while uploading public key to remote serveur authorized_keys"), e); } } catch (SSHException e) { if (log.isErrorEnabled()) { - log.error(_("Error while uploading public key to remote serveur authorized_keys"), + log.error(t("Error while uploading public key to remote serveur authorized_keys"), e); } } @@ -716,7 +717,7 @@ int exit = SSHUtils.exec(session, command); if (exit != 0) { - throw new SSHException(_("Command '%s' fail to execute", command)); + throw new SSHException(t("Command '%s' fail to execute", command)); } SSHUtils.scpTo(session, simulationFile, remoteSimulationZipPath); @@ -892,7 +893,7 @@ protected void clearSimulationFiles(Session session, SimulationControl control) throws IOException, SSHException { - control.setText(_("isisfish.simulation.remote.message.deletingfiles")); + control.setText(t("isisfish.simulation.remote.message.deletingfiles")); // execute rm -f "isis-tmp/simulation-$id-"* // on remote. Note * outside quotes !!! @@ -967,7 +968,7 @@ File tempPreScriptFile = File.createTempFile("simulation-" + simulationId + "-prescript", ".bsh"); tempPreScriptFile.deleteOnExit(); - FileUtil.writeString(tempPreScriptFile, simulationPreScript); + FileUtils.writeStringToFile(tempPreScriptFile, simulationPreScript, "utf-8"); // remote temp directory should have been created // by #uploadSimulation(Session, String) @@ -1061,7 +1062,7 @@ String fileContent = getSimulationScriptLaunchContent( QSUB_SCRIPT_TEMPLATE, simuationId, simulationZip, standaloneZip, simulationResultZip, preScriptPath, multipleSimulationScript); - FileUtil.writeString(tempScript, fileContent); + FileUtils.writeStringToFile(tempScript, fileContent, "utf-8"); return tempScript; } @@ -1120,10 +1121,10 @@ } catch (TemplateException e) { if (log.isErrorEnabled()) { - log.error(_("Process template error"), e); + log.error(t("Process template error"), e); } - throw new IOException(_("Process template error"), e); + throw new IOException(t("Process template error"), e); } return scriptContent; @@ -1169,12 +1170,12 @@ int exit = SSHUtils.exec(session, command, output); if (exit != 0) { - throw new SSHException(_("Command '%s' fail to execute", command)); + throw new SSHException(t("Command '%s' fail to execute", command)); } String out = output.toString(); - // multiple jobs id are like : 78600[].service4 - if (out.trim().matches("\\d+\\.\\[\\]\\w+") && log.isInfoEnabled()) { + // multiple jobs id are like : 78600[].service4 ou 6199230.service0 + if (out.trim().matches("\\d+(\\[\\])?\\.\\w+") && log.isInfoEnabled()) { log.info("Job submitted with job id : " + out); } } @@ -1205,14 +1206,14 @@ // can fail, already stopped /*if (exit != 0) { - throw new SSHException(_("Command '%s' fail to execute", command)); + throw new SSHException(t("Command '%s' fail to execute", command)); }*/ } /** * Get remote directory absolute path. * - * Don't use {@link java.io.File.separator} here, caparmor is always unix. + * Don't use {@link java.io.File#separator} here, caparmor is always unix. * * @return remote temp directory path */ Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationExecutor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationExecutor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationExecutor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -27,7 +27,7 @@ import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ThreadPoolExecutor; @@ -40,9 +40,11 @@ * executer les jobs soumis dans la queue de {@link SimulationService} * <p> * Les fonctionnalites en plus par rapport a un {@link ThreadPoolExecutor} sont: - * <li> la possibilite de suspendre l'executor puis ensuite de le relancer + * <ul> + * <li> la possibilite de suspendre l'executor puis ensuite de le relancer</li> * <li> l'utilisation de beforeExecute pour fixer le {@link SimulatorLauncher} - * du job + * du job</li> + * </ul> * <p> * Il est aussi possible d'ecoute l'etat de l'attribut pause * @@ -70,12 +72,13 @@ public SimulationExecutor(SimulationService simulationService, SimulatorLauncher launcher, SimulationQueue workQueue) { - super(launcher.maxSimulationThread(), launcher.maxSimulationThread(), + // need 2 threads for Optimization simulation, ensure that executor has 2 threads (Math.max) + super(Math.max(2, launcher.maxSimulationThread()), Math.max(2, launcher.maxSimulationThread()), 0L, TimeUnit.MILLISECONDS, (BlockingQueue) workQueue); this.simulationService = simulationService; this.launcher = launcher; lastCorePoolSize = prestartAllCoreThreads(); - log.info(_("SimulationExecutor started with %s thread for %s", + log.info(t("SimulationExecutor started with %s thread for %s", lastCorePoolSize, launcher)); } @@ -132,7 +135,7 @@ SimulationService.getService().resubmit((SimulationJob) r); } throw new RuntimeException( - _("Normal stop thread, this is not an error")); + t("Normal stop thread, this is not an error")); } if (r instanceof SimulationJob) { SimulationJob job = (SimulationJob) r; @@ -154,7 +157,7 @@ job.setLauncher(launcher); } } else { - log.warn(_("Jobs submited is not ItemSimulation but was %s", r + log.warn(t("Jobs submited is not ItemSimulation but was %s", r .getClass().getName())); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationJob.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationJob.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationJob.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.simulator.launcher; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.rmi.RemoteException; import java.util.HashSet; @@ -201,7 +201,7 @@ if (control.isStopSimulationRequest() || (getParentJob() != null && getParentJob().getItem() .getControl().isStopSimulationRequest())) { - log.info(_("Not start simulation %s because user ask stop", + log.info(t("Not start simulation %s because user ask stop", id)); return; } @@ -215,10 +215,10 @@ && param.getUseSimulationPlan() && !param.isIndependentPlan()) { // on est sur un plan de simulation dependant, il faut generer les // simulation les unes apres les autres - SimulationService.PrepareSimulationJob i = new SimulationService.PrepareSimulationJob( + SimulationPlanPrepareJob i = new SimulationPlanPrepareJob( simulationService, this); while (!control.isStopSimulationRequest() && i.hasNext()) { - log.info(_("Generate next simulation")); + log.info(t("Generate next simulation")); SimulationJob subjob = i.next(); subjob.setLauncher(getLauncher()); // c'est bloquant seulement le temps du lancement @@ -261,6 +261,12 @@ } } + } else if (!onlyCheckControl && getParentJob() == null + && param.getUseOptimization()) { + // on est sur une optimisation, il faut faire toutes les simulations demandees + OptimizationPrepareJob optiPreJob = + new OptimizationPrepareJob(simulationService, this); + optiPreJob.run(); } else { // on est sur une simple simulation, ou le resultat d'un plan @@ -320,7 +326,7 @@ .getName(), id); } } catch (Exception eee) { - log.error(_("Can't export simulation %s", id), eee); + log.error(t("Can't export simulation %s", id), eee); } try { @@ -335,20 +341,20 @@ } } } catch (Exception eee) { - log.error(_("Can't delete simulation %s ", id), eee); + log.error(t("Can't delete simulation %s ", id), eee); } for (PostAction action : postActions) { try { action.finished(this, simulation); } catch (Exception eee) { - log.error(_("Can't do post action %s", action), eee); + log.error(t("Can't do post action %s", action), eee); } }*/ } } catch (Throwable eee) { - log.warn(_("Can't simulate %s", item.getControl().getId()), eee); + log.warn(t("Can't simulate %s", item.getControl().getId()), eee); if (eee instanceof RemoteException) { simulationService.reportError(getLauncher(), this); } else { Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.simulator.launcher; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; @@ -425,7 +425,7 @@ waitAndCheckProgression(); } catch (Exception e) { if (log.isErrorEnabled()) { - log.error("An exception occurs durring monitoring", e); + log.error("An exception occurs during monitoring", e); } } } @@ -506,7 +506,7 @@ * * @param job job to check progression * @param launcher SimulatorLauncher that manage simulation - * @return <tt>true</tt> is simulation is finished, <tt>false<tt> otherwise + * @return {@code true} is simulation is finished, {@code false} otherwise */ protected boolean checkProgression(SimulationJob job, SimulatorLauncher launcher) { @@ -551,6 +551,9 @@ File informationFile = SimulationStorage.getSimulationInformationFile(simulationRoot); SimulationInformation information = new SimulationInformation(informationFile); if (StringUtils.isNotEmpty(information.getException())) { + if (log.isWarnEnabled()) { + log.warn("Simulation exception : " + information.getException()); + } simulationEnded = true; } } @@ -615,7 +618,7 @@ action.finished(job, simulation); } catch (Exception eee) { if (log.isErrorEnabled()) { - log.error(_("Can't do post action %s", action), eee); + log.error(t("Can't do post action %s", action), eee); } } } @@ -680,7 +683,7 @@ // display user text "Looking for last simulation" SimulationControl control = job.getItem().getControl(); - control.setText(_("isisfish.simulation.message.lookingforlast")); + control.setText(t("isisfish.simulation.message.lookingforlast")); // this is a sensitivity simulation String simulationId = job.getId(); @@ -694,7 +697,7 @@ // et on l'envoie au script d'analyse de sensibilite if (numberFinished == numberOfSimulation) { - control.setText(_("isisfish.simulation.message.analyzeResults")); + control.setText(t("isisfish.simulation.message.analyzeResults")); SensitivityAnalysis sensitivityAnalysis = params.getSensitivityAnalysis(); if (sensitivityAnalysis != null) { @@ -723,7 +726,7 @@ } } - control.setText(_("isisfish.message.simulation.ended")); + control.setText(t("isisfish.message.simulation.ended")); } } Copied: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationPlanPrepareJob.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationPlanPrepareJob.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationPlanPrepareJob.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationPlanPrepareJob.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,279 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2014 Ifremer, Code Lutin, Benjamin Poussin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.simulator.launcher; + +import static org.nuiton.i18n.I18n.t; + +import fr.ifremer.isisfish.IsisFishRuntimeException; +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.simulator.SimulationControl; +import fr.ifremer.isisfish.simulator.SimulationParameter; +import fr.ifremer.isisfish.simulator.SimulationPlan; +import fr.ifremer.isisfish.simulator.SimulationPlanContext; +import java.io.File; +import java.util.Iterator; +import java.util.List; +import org.apache.commons.io.FileUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.i18n.I18n; +import org.nuiton.util.FileUtil; + +/** + * Permet de genere les sous simulations d'un plan de simulation. Pour les + * plan independant, on l'utilise en Runnable pour genere tous les plans + * possible et les soumettre a la queue. Pour les plans dependant + * on l'utilise seulement comme iterator. La methode afterSimulation des plans + * est appelee automatiquement a la fin de la simulation grace au mecanisme + * de PostAction sur les {@link SimulationJob}. + */ +public class SimulationPlanPrepareJob implements Runnable, Iterator<SimulationJob>, SimulationJob.PostAction { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + private static final Log log = LogFactory.getLog(SimulationPlanPrepareJob.class); + + protected SimulationService simulationService; + protected SimulationPlanContext planContext; + protected SimulationJob job; + protected SimulationJob nextJob; + protected boolean doNext = true; + protected String id; + protected SimulationControl control; + protected SimulationParameter param; + protected int done = 0; + protected List<SimulationPlan> simulationPlan; + + public SimulationPlanPrepareJob(SimulationService simulationService, SimulationJob job) { + this.simulationService = simulationService; + this.job = job; + id = job.getItem().getControl().getId(); + control = job.getItem().getControl(); + param = job.getItem().getParameter(); + // take a copy of simulation paln list + // because they a freed during simulation (soft reference) + // is there is not enought memory available + simulationPlan = param.getSimulationPlans(); + this.planContext = new SimulationPlanContext(control.getId(), param); + try { + // appel de init sur chaque plan + for (SimulationPlan plan : simulationPlan) { + plan.init(planContext); + } + } catch (Exception eee) { + // add manual log + // we are in a thread, IsisFishRuntimeException is displayed + // outside a log + if (log.isErrorEnabled()) { + log.error(t("isisfish.error.evaluate.preplan.script"), eee); + } + throw new IsisFishRuntimeException(t("isisfish.error.evaluate.preplan.script"), eee); + } + } + + /** + * Genere toutes les sous simulations et les places dans la queue. + * + * Cette methode {@code run()} est appelée seulement dans le cas de la + * génération de plans indépendants. + * + * @see SimulationJob#run() pour les plans dépendants + */ + public void run() { + /* Original code + while (hasNext()) { + try { + SimulationJob subJob = next(); + if (log.isInfoEnabled()) { + log.info("Simulation generee: " + subJob.getId()); + } + simulationService.submitSubJob(subJob); + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error(_("Can't add simulation: %s", job.getItem() + .getControl().getId()), eee); + } + } + }*/ + // New iteration remember always simulation N and N+1 + // needed to know witch simulation is the last one + // get simulation N + SimulationJob subJobN = null; + if (hasNext()) { + subJobN = next(); + } + while (subJobN != null) { + try { + if (log.isInfoEnabled()) { + log.info("Simulation generated: " + subJobN.getId()); + } + // set item additionnal informations + SimulationItem itemN = subJobN.getItem(); + itemN.setStandaloneSimulation(false); // independant plan + // - 1 because planContext.getNumber() is set to next simulation to generate + itemN.setSimulationNumber(planContext.getNumber() - 1); + // job N+1 + // carefull call this next after itemN.setSimulationNumber() + SimulationJob subJobNp1 = next(); + if (subJobNp1 == null) { + // there is no N+1 job, N is the last one + itemN.setLastSimulation(true); + } + simulationService.submitSubJob(subJobN); + subJobN = subJobNp1; + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error(t("Can't add simulation: %s", job.getItem().getControl().getId()), eee); + } + } + } + } + + /** + * Indique s'il y a encore des simulations dans le plan. Par defaut pour + * Eviter les plans sans fin, le nombre de plan genere par simulation + * est limite a {@link SimulationService#MAX_PLAN_SIMULATION} + * + * @return <tt>true</tt> if has next + */ + public boolean hasNext() { + try { + // if user request stop simulation, stop all futur planned simulation + // and if last doNext is false not do next simulation + boolean result = !control.isStopSimulationRequest() && doNext; + if (result) { + // hasNext() est appelee par un autre thread concurrent + // via la methode finished(SimulationJob, SimulationStorage) + synchronized (this) { + // si deja creer on ne le refait pas + if (nextJob == null) { + // Prepration de la simulation a faire + // create next id simulation + // this start a 0 + int planNumber = planContext.getNumber(); + if (planNumber > SimulationService.MAX_PLAN_SIMULATION) { + log.error(t("Analyse plan error, too many simulation for %s : %s", id, planNumber)); + doNext = false; + result = false; + } else { + String simId = id + "_" + planNumber; + param.setSimulationPlanNumber(planNumber); + File tmpDirectory = FileUtil.createTempDirectory("isisfish-simulation-", "-preparation"); + SimulationStorage sim = SimulationStorage.importAndRenameZip(tmpDirectory, job.getItem().getSimulationZip(), simId); + sim.getParameter().setSimulationPlanNumber(planNumber); + // appel de tous les plans pour modifier la simulation + for (SimulationPlan plan : simulationPlan) { + result = result && plan.beforeSimulation(planContext, sim); + if (!result) { + nextJob = null; + break; + } + } + doNext = result; + if (result) { + File zip = sim.createZip(); + SimulationControl childControl = new SimulationControl(simId); + SimulationParameter childParam = param.copy(); + SimulationItem item = new SimulationItem(childControl, childParam); + item.setSimulationZip(zip); + nextJob = new SimulationJob(simulationService, job, item, job.getPriority()); + nextJob.setLauncher(job.getLauncher()); + // FIXME on retire la post action pour les plan dépendants + // sera appelé directement par le job de preparations + if (param.isIndependentPlan()) { + nextJob.addPostAction(this); // pour l'appel des after des plans + } + } + // close context for plan generator + // FIXME echatellier 20120904 could throw + //org.nuiton.topia.TopiaException: Ce contexte a deja ete ferme + sim.closeStorage(); + // quoi qu'il arrive on supprime le repertoire temporaire + if (!FileUtils.deleteQuietly(tmpDirectory)) { + log.warn(t("isisfish.error.remove.directory", tmpDirectory)); + } + } + // increment number for next simulation job + planContext.incNumber(); + } + } + } + return result; + } catch (Exception eee) { + throw new IsisFishRuntimeException(I18n._("isisfish.error.evalute.plan.script"), eee); + } + } + + public SimulationJob next() { + hasNext(); // pour etre sur qu'il a ete appele au moins une fois + SimulationJob result = null; + // next est appelee par un autre thread concurrent + // via la methode finished(SimulationJob, SimulationStorage) + synchronized (this) { + result = nextJob; + nextJob = null; + } + return result; + } + + @Override + public void remove() { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public void finished(SimulationJob job, SimulationStorage sim) { + // doNext = true; + // appel de tous les plans pour modifier la simulation + // EC20090716 : use param.getSimulationPlans() instances, + // not sim.getParameters().getSimulationPlans() not sames !!! + for (SimulationPlan plan : simulationPlan) { + try { + boolean result = plan.afterSimulation(planContext, sim); + doNext = doNext && result; + } catch (Exception eee) { + log.error(t("Stop simulation plan, because can't call afterSimulation correctly on plan %s", plan.getClass().getName()), eee); + doNext = false; + } + } + // une sim vient de se finir, on incremente le compteur + done++; + if (!hasNext() && (done + 1 == planContext.getNumber())) { + // on enleve le master plan des simulations en cours, vu que + // toutes les simu sont terminees + simulationService.fireStopEvent(this.job); + } + } + + @Override + public void exception(SimulationJob job, Throwable eee) { + // il y a une simulation d'echoue, on ne fait pas les suivantes + // cela n'impacte pas les plan independant puisque toutes les + // simulation on deja ete generee + doNext = false; + simulationService.fireStopEvent(this.job); + } + +} Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2002 - 2011 Ifremer, Code Lutin, Benjamin Poussin, Chatellier Eric + * Copyright (C) 2002 - 2012 Ifremer, Code Lutin, Benjamin Poussin, 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 @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.simulator.launcher; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; @@ -37,7 +37,6 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -46,19 +45,15 @@ import java.util.TreeSet; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.apache.commons.beanutils.BeanUtils; -import org.apache.commons.beanutils.ConvertUtils; -import org.apache.commons.beanutils.ConvertUtilsBean; +import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.mutable.MutableInt; import org.apache.commons.lang3.time.DurationFormatUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.math.matrix.MatrixND; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaEntity; @@ -67,6 +62,7 @@ import org.nuiton.util.ObjectUtil; import org.nuiton.util.ZipUtil; +import fr.ifremer.isisfish.IsisConfig; import fr.ifremer.isisfish.IsisFish; import fr.ifremer.isisfish.IsisFishRuntimeException; import fr.ifremer.isisfish.datastore.ExportStorage; @@ -78,28 +74,24 @@ import fr.ifremer.isisfish.datastore.SimulationPlanStorage; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.datastore.SimulatorStorage; +import fr.ifremer.isisfish.export.Export; import fr.ifremer.isisfish.export.SensitivityExport; import fr.ifremer.isisfish.mexico.MexicoHelper; import fr.ifremer.isisfish.rule.Rule; -import fr.ifremer.isisfish.rule.RuleHelper; import fr.ifremer.isisfish.simulator.SimulationControl; import fr.ifremer.isisfish.simulator.SimulationException; import fr.ifremer.isisfish.simulator.SimulationParameter; import fr.ifremer.isisfish.simulator.SimulationPlan; -import fr.ifremer.isisfish.simulator.SimulationPlanContext; import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; import fr.ifremer.isisfish.simulator.sensitivity.Domain; import fr.ifremer.isisfish.simulator.sensitivity.Factor; -import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup; +import fr.ifremer.isisfish.simulator.sensitivity.FactorHelper; import fr.ifremer.isisfish.simulator.sensitivity.Scenario; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityAnalysis; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; import fr.ifremer.isisfish.util.CompileHelper; -import fr.ifremer.isisfish.util.ConverterUtil; /** * Cette classe est responsable de conservation de toutes les simulations faites @@ -194,7 +186,7 @@ .newInstance(value); addSimulationLauncher(sl); } catch (Exception eee) { - log.warn(_("Can't instantiate %s", value), eee); + log.warn(t("Can't instantiate %s", value), eee); } } @@ -384,6 +376,9 @@ // make deep copy, ui, still work with // copy need to be deep for simulation plan to reload SimulationParameter localParameters = param.deepCopy(); + + // for migration purpose, we need to override IsisFishVersion here + localParameters.setIsisFishVersion(IsisConfig.getVersion()); // on l'ajoute tout de suite a la liste des simulations demandee SimulationControl control = new SimulationControl(id); @@ -392,12 +387,12 @@ job.setLauncher(launcher); fireStartEvent(job); - // Attention, dans le cas d'un plan de simulation, le new PrepareSimulationJob + // Attention, dans le cas d'un plan de simulation, le new SimulationPlanPrepareJob // doit etre fait AVANT de faire le prepareSimulationZipFile // car, il est possible que l'init des plans ajoute des regles !!! - PrepareSimulationJob task = null; + SimulationPlanPrepareJob task = null; if (localParameters.getUseSimulationPlan()) { - task = new PrepareSimulationJob(this, job); + task = new SimulationPlanPrepareJob(this, job); } // on construit le zip de la simulation @@ -434,6 +429,9 @@ // copy need to be deep for simulation plan to reload SimulationParameter localParameters = param.deepCopy(); + // for migration purpose, we need to override IsisFishVersion here + localParameters.setIsisFishVersion(IsisConfig.getVersion()); + try { // build master sensitivity export directory @@ -488,10 +486,9 @@ // subParam only convenient for add pre script // for launcher SimulationParameter subParam = localParameters.copy(); - String preScriptContent = generatePreScript(scenario); + String generatedScriptContent = FactorHelper.generatePreScript(scenario); // usefull next two line ? - subParam.setUsePreScript(true); - subParam.setPreScript(preScriptContent); + subParam.setGeneratedPreScript(generatedScriptContent); // build new simulation id String subsimulationId = id + "_" + simulationIndex; @@ -512,7 +509,7 @@ if (subParam.getUseSimulationPlan() && subParam.isIndependentPlan()) { // c un plan de simulation independant, on construit toute les sous simu - Runnable task = new PrepareSimulationJob(this, job); + Runnable task = new SimulationPlanPrepareJob(this, job); subSimulationComputationExecutor.execute(task); } else { // l'item est fini d'etre initialise, on peut l'ajouter a la queue @@ -565,154 +562,6 @@ } } - /** Permet de manipuler un int entre plusieurs appele de methodes recursive. */ - public static class Counter { - protected int counter = 0; - public void inc() { - counter++; - } - public int getCounter() { - return counter; - } - } - - /** - * Generate prescript to set factor values before simulation start. - * - * @param scenario to generate prescript - * @return simulation pre script with correct values - */ - protected String generatePreScript(Scenario scenario) { - ConvertUtilsBean beanUtils = ConverterUtil.getConverter(null); - - // n'utilise plus freemarker, car il y avait plus d'instruction - // freemarker compliqué que de code a afficher - StringBuffer buffer = new StringBuffer(); - buffer.append("import org.apache.commons.beanutils.BeanUtils;\n"); - buffer.append("import org.apache.commons.beanutils.ConvertUtilsBean;\n"); - buffer.append("import fr.ifremer.isisfish.util.ConverterUtil;\n"); - buffer.append("import fr.ifremer.isisfish.simulator.SimulationParameter;\n"); - buffer.append("ConvertUtilsBean beanUtils = ConverterUtil.getConverter(db);\n"); - buffer.append("SimulationParameter params = context.getSimulationStorage().getParameter();\n"); - - generatePreScript(beanUtils, buffer, new Counter(), scenario.getFactors()); - - String scriptContent = buffer.toString(); - if (log.isTraceEnabled()) { - log.trace("Simulation prescript content = " + scriptContent); - } - return scriptContent; - } - - /** - * Generate prescript for a factor list that can be called recursively to - * manage factor group. - * - * @param beanUtils beanUtils converter - * @param buffer buffer to fill - * @param counter call counter used to avoid variables name collision - * @param factors factor list to manage - */ - protected void generatePreScript(ConvertUtilsBean beanUtils, StringBuffer buffer, Counter counter, Collection<Factor> factors) { - - for (Factor factor : factors) { - if (factor instanceof FactorGroup) { - buffer.append("/* factor group : ").append(factor.getName()).append(" */\n"); - FactorGroup factorGroup = (FactorGroup)factor; - generatePreScript(beanUtils, buffer, counter, factorGroup.getFactors()); - } - else { - int factorIndex = counter.getCounter(); - buffer.append("/* factor : ").append(factor.getName()).append(" */\n"); - - // cas special 1 : population de départ - if (factor.getPath().matches("parameters.population\\.\\w+\\.number")) { - String paramName = StringUtils.removeStart(factor.getPath(), "parameters."); - // pas de convert, c'est fait comme ca dans - // SimulationParameters.toProperties(); - MatrixND matrix = (MatrixND)factor.getValue(); - Object stringValue = String.valueOf(matrix.toList()); - buffer.append("params.setProperty(\"").append(paramName).append("\",\"").append(stringValue).append("\");\n"); - } - // cas special 2 : regles - else if (factor.getPath().equals("parameters.rules")) { - List<Rule> rules = (List<Rule>)factor.getValue(); - List<String> rulesNames = new ArrayList<String>(); - int ruleIndex = 0; - for (Rule rule : rules) { - rulesNames.add(rule.getClass().getSimpleName()); - Properties rulesProps = RuleHelper.getRuleAsProperties(ruleIndex++, null, rule); - for (String rulesProp : rulesProps.stringPropertyNames()) { - String value = rulesProps.getProperty(rulesProp); - buffer.append("params.setProperty(\"").append(rulesProp).append("\",\"").append(value).append("\");\n"); - } - } - buffer.append("params.setProperty(\"rules\",\"").append(StringUtils.join(rulesNames, ",")).append("\");\n"); - } - // cas special 3 : facteur sur les parametres des regles - else if (factor.getPath().startsWith("parameters.rule.")) { - // special case for rule parameter with - Pattern pattern = Pattern.compile("^parameters\\.(rule\\.\\d+\\.parameter\\.\\w+)\\..+$"); - Matcher matcher = pattern.matcher(factor.getPath()); - String paramName = null; - if (matcher.matches()) { - paramName = matcher.group(1); - } else { - paramName = StringUtils.removeStart(factor.getPath(), "parameters."); - } - String stringValue = ConvertUtils.convert(factor.getValue()); - buffer.append("params.setProperty(\"").append(paramName).append("\",\"").append(stringValue).append("\");\n"); - } - // cas special 4 : equation - else if (factor.getDomain() instanceof EquationContinuousDomain) { - buffer.append("context.setComputeValue(\"").append(factor.getName()); - buffer.append("\",").append(factor.getValue()).append(");\n"); - } - // cas pas si special - else { - Object value = factor.getValue(); - String stringValue = beanUtils.convert(value); - String escValue = stringValue; - if (factor.getDomain() instanceof EquationDiscreteDomain) { - // echatellier: equation can contains quotes that break - // prescript, only quote, not all java replacements - // a ne pas faire pour le reste, pour les - // matrice par exemple, ca passe mal - escValue = StringUtils.replace(escValue, "\n", ""); - escValue = StringUtils.replace(escValue, "\r", ""); - escValue = StringUtils.replace(escValue, "\"", "\\\""); - } - String path = factor.getPath(); - String topiaId = path.substring(0, path.lastIndexOf('#')); - String property = path.substring(path.lastIndexOf('#') + 1); - // Double value123 = beanUtils.convert("mystringvalue", Double.class); - buffer.append(value.getClass().getName()).append(" value"); - buffer.append(factorIndex).append(" = beanUtils.convert(\""); - buffer.append(escValue).append("\", ").append(value.getClass().getName()); - buffer.append(".class);\n"); - // TopiaEntity entity123 = db.findByTopiaId(topiaId); - buffer.append("TopiaEntity entity").append(factorIndex); - buffer.append(" = db.findByTopiaId(\"").append(topiaId); - buffer.append("\");\n"); - - if (factor.getDomain() instanceof EquationDiscreteDomain) { - // BeanUtils.setProperty(entity123, "propertyContent", value123); - buffer.append("BeanUtils.setProperty(entity").append(factorIndex); - buffer.append(", \"").append(property).append("Content\", "); - buffer.append("value").append(factorIndex).append(");\n"); - } else { - // BeanUtils.setProperty(entity123, "property", value123); - buffer.append("BeanUtils.setProperty(entity").append(factorIndex); - buffer.append(", \"").append(property).append("\", "); - buffer.append("value").append(factorIndex).append(");\n"); - } - } - } - - counter.inc(); - } - } - protected void submit(SimulationJob job) { SimulatorLauncher launcher = job.getLauncher(); // on ajoute a la queue qui utilise le launcher defini dans le job @@ -726,7 +575,7 @@ } } // dernier recours on ajoute a la queue sans launcher - log.info(_("Add to default queue")); + log.info(t("Add to default queue")); queue.add(job); } @@ -813,7 +662,7 @@ i.setValue(i.intValue() + 1); // si on a plus de N error, on stop l'executor associe if (i.intValue() >= 50) { - log.error(_("Launcher %s will be stopped because there are too many error (%s)", + log.error(t("Launcher %s will be stopped because there are too many error (%s)", launcher, i.intValue())); SimulationExecutor e = executors.get(launcher); e.pause(); @@ -827,282 +676,16 @@ } /** - * Permet de genere les sous simulations d'un plan de simulation. Pour les - * plan independant, on l'utilise en Runnable pour genere tous les plans - * possible et les soumettre a la queue. Pour les plans dependant - * on l'utilise seulement comme iterator. La methode afterSimulation des plans - * est appelee automatiquement a la fin de la simulation grace au mecanisme - * de PostAction sur les {@link SimulationJob}. - */ - public static class PrepareSimulationJob implements Runnable, - Iterator<SimulationJob>, SimulationJob.PostAction { - - protected SimulationService simulationService; - protected SimulationPlanContext planContext; - protected SimulationJob job; - protected SimulationJob nextJob; - protected boolean doNext = true; - protected String id; - protected SimulationControl control; - protected SimulationParameter param; - protected int done = 0; - protected List<SimulationPlan> simulationPlan; - - public PrepareSimulationJob(SimulationService simulationService, - SimulationJob job) { - this.simulationService = simulationService; - this.job = job; - id = job.getItem().getControl().getId(); - control = job.getItem().getControl(); - param = job.getItem().getParameter(); - // take a copy of simulation paln list - // because they a freed during simulation (soft reference) - // is there is not enought memory available - simulationPlan = param.getSimulationPlans(); - this.planContext = new SimulationPlanContext(control.getId(), param); - - try { - // appel de init sur chaque plan - for (SimulationPlan plan : simulationPlan) { - plan.init(planContext); - } - } catch (Exception eee) { - // add manual log - // we are in a thread, IsisFishRuntimeException is displayed - // outside a log - if (log.isErrorEnabled()) { - log.error(_("isisfish.error.evaluate.preplan.script"), eee); - } - throw new IsisFishRuntimeException(_("isisfish.error.evaluate.preplan.script"), eee); - } - } - - /** - * Genere toutes les sous simulations et les places dans la queue. - * - * Cette methode {@code run()} est appelée seulement dans le cas de la - * génération de plans indépendants. - * - * @see SimulationJob#run() pour les plans dépendants - */ - public void run() { - /* Original code - while (hasNext()) { - try { - SimulationJob subJob = next(); - - if (log.isInfoEnabled()) { - log.info("Simulation generee: " + subJob.getId()); - } - simulationService.submitSubJob(subJob); - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error(_("Can't add simulation: %s", job.getItem() - .getControl().getId()), eee); - } - } - }*/ - - // New iteration remember always simulation N and N+1 - // needed to know witch simulation is the last one - // get simulation N - SimulationJob subJobN = null; - if (hasNext()) { - subJobN = next(); - } - - while (subJobN != null) { - - try { - if (log.isInfoEnabled()) { - log.info("Simulation generated: " + subJobN.getId()); - } - - // set item additionnal informations - SimulationItem itemN = subJobN.getItem(); - itemN.setStandaloneSimulation(false); // independant plan - // - 1 because planContext.getNumber() is set to next simulation to generate - itemN.setSimulationNumber(planContext.getNumber() - 1); - - // job N+1 - // carefull call this next after itemN.setSimulationNumber() - SimulationJob subJobNp1 = next(); - if (subJobNp1 == null) { - // there is no N+1 job, N is the last one - itemN.setLastSimulation(true); - } - - simulationService.submitSubJob(subJobN); - - subJobN = subJobNp1; - } - catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error(_("Can't add simulation: %s", job.getItem() - .getControl().getId()), eee); - } - } - } - } - - /** - * Indique s'il y a encore des simulations dans le plan. Par defaut pour - * Eviter les plans sans fin, le nombre de plan genere par simulation - * est limite a {@link SimulationService#MAX_PLAN_SIMULATION} - * - * @return <tt>true</tt> if has next - */ - public boolean hasNext() { - try { - // if user request stop simulation, stop all futur planned simulation - // and if last doNext is false not do next simulation - boolean result = !control.isStopSimulationRequest() && doNext; - if (result) { - - // hasNext() est appelee par un autre thread concurrent - // via la methode finished(SimulationJob, SimulationStorage) - synchronized (this) { - - // si deja creer on ne le refait pas - if (nextJob == null) { - // Prepration de la simulation a faire - // create next id simulation - - // this start a 0 - int planNumber = planContext.getNumber(); - - if (planNumber > MAX_PLAN_SIMULATION) { - log.error(_("Analyse plan error, too many simulation for %s : %s", - id, planNumber)); - doNext = false; - result = false; - } else { - String simId = id + "_" + planNumber; - param.setSimulationPlanNumber(planNumber); - - File tmpDirectory = FileUtil.createTempDirectory( - "isisfish-simulation-", "-preparation"); - SimulationStorage sim = SimulationStorage - .importAndRenameZip(tmpDirectory, job - .getItem().getSimulationZip(), - simId); - sim.getParameter().setSimulationPlanNumber(planNumber); - - // appel de tous les plans pour modifier la simulation - for (SimulationPlan plan : simulationPlan) { - result = result - && plan.beforeSimulation(planContext, sim); - if (!result) { - nextJob = null; - break; - } - } - doNext = result; - if (result) { - - File zip = sim.createZip(); - SimulationControl childControl = new SimulationControl(simId); - SimulationParameter childParam = param.copy(); - SimulationItem item = new SimulationItem(childControl, childParam); - item.setSimulationZip(zip); - - nextJob = new SimulationJob(simulationService, job, item, job.getPriority()); - nextJob.setLauncher(job.getLauncher()); - - // FIXME on retire la post action pour les plan dépendants - // sera appelé directement par le job de preparations - if (param.isIndependentPlan()) { - nextJob.addPostAction(this); // pour l'appel des after des plans - } - } - - // close context for plan generator - // FIXME echatellier 20120904 could throw - //org.nuiton.topia.TopiaException: Ce contexte a deja ete ferme - sim.closeStorage(); - - // quoi qu'il arrive on supprime le repertoire temporaire - if (!FileUtil.deleteRecursively(tmpDirectory)) { - log.warn(_("isisfish.error.remove.directory", - tmpDirectory)); - } - } - - // increment number for next simulation job - planContext.incNumber(); - } - } - } - return result; - } catch (Exception eee) { - throw new IsisFishRuntimeException( - _("isisfish.error.evalute.plan.script"), eee); - } - - } - - public SimulationJob next() { - hasNext(); // pour etre sur qu'il a ete appele au moins une fois - SimulationJob result = null; - - // next est appelee par un autre thread concurrent - // via la methode finished(SimulationJob, SimulationStorage) - synchronized (this) { - result = nextJob; - nextJob = null; - } - - return result; - - } - - public void remove() { - throw new UnsupportedOperationException("Not supported."); - } - - public void finished(SimulationJob job, SimulationStorage sim) { - // doNext = true; - - // appel de tous les plans pour modifier la simulation - // EC20090716 : use param.getSimulationPlans() instances, - // not sim.getParameters().getSimulationPlans() not sames !!! - for (SimulationPlan plan : simulationPlan) { - try { - boolean result = plan.afterSimulation(planContext, sim); - doNext = doNext && result; - } catch (Exception eee) { - log.error(_("Stop simulation plan, because can't call afterSimulation correctly on plan %s", - plan.getClass().getName()), eee); - doNext = false; - } - } - - // une sim vient de se finir, on incremente le compteur - done++; - if (!hasNext() && (done + 1 == planContext.getNumber())) { - // on enleve le master plan des simulations en cours, vu que - // toutes les simu sont terminees - simulationService.fireStopEvent(this.job); - } - } - - public void exception(SimulationJob job, Throwable eee) { - // il y a une simulation d'echoue, on ne fait pas les suivantes - // cela n'impacte pas les plan independant puisque toutes les - // simulation on deja ete generee - doNext = false; - simulationService.fireStopEvent(this.job); - } - } - - /** * Prepare les fichiers qui seront utilsé à la simulation: - * <li> scripts - * <li> rules - * <li> exports - * <li> simulators - * <li> export de la database de la region - * <li> simultionplan + * Prepare les fichiers qui seront utilsé à la simulation: + * <ul> + * <li> scripts</li> + * <li> rules</li> + * <li> exports</li> + * <li> simulators</li> + * <li> export de la database de la region</li> + * <li> simultionplan</li> + * </ul> * <p> * Le tout est zippé et le zip est retourné, il peut-être directement * importé dans le {@link SimulationStorage} (en le renommant comme @@ -1144,13 +727,13 @@ // backup pour toutes les simulations, pour eviter que l'utilisateur // ne puisse le modifier en meme temps - control.setText(_("isisfish.message.backup.database.progress")); + control.setText(t("isisfish.message.backup.database.progress")); RegionStorage region = RegionStorage.getRegion(param .getRegionName()); TopiaContext tc = region.getStorage().beginTransaction(); tc.backup(regionXML, true); tc.closeContext(); - control.setText(_("isisfish.message.backup.database.finished")); + control.setText(t("isisfish.message.backup.database.finished")); // copie de toutes regles a utiliser List<Rule> rules = param.getRules(); @@ -1173,7 +756,7 @@ if (!ruleFile.isFile()) { ruleFile = new File(RuleStorage.getCommunityRuleDirectory(), name + ".java"); } - FileUtil.copy(ruleFile, new File(tmpDirectory, RuleStorage.RULE_PATH + FileUtils.copyFile(ruleFile, new File(tmpDirectory, RuleStorage.RULE_PATH + File.separator + name + ".java")); } @@ -1183,7 +766,7 @@ if (!ruleFile.isFile()) { ruleFile = new File(RuleStorage.getCommunityRuleDirectory(), name + ".java"); } - FileUtil.copy(ruleFile, new File(tmpDirectory, RuleStorage.RULE_PATH + FileUtils.copyFile(ruleFile, new File(tmpDirectory, RuleStorage.RULE_PATH + File.separator + name + ".java")); } @@ -1195,7 +778,7 @@ if (!planFile.isFile()) { planFile = new File(SimulationPlanStorage.getCommunitySimulationPlanDirectory(), name + ".java"); } - FileUtil.copy(planFile, new File(tmpDirectory, SimulationPlanStorage.SIMULATION_PLAN_PATH + FileUtils.copyFile(planFile, new File(tmpDirectory, SimulationPlanStorage.SIMULATION_PLAN_PATH + File.separator + name + ".java")); } @@ -1206,7 +789,7 @@ if (!exportFile.isFile()) { exportFile = new File(ExportStorage.getCommunityExportDirectory(), name); } - FileUtil.copy(exportFile, + FileUtils.copyFile(exportFile, new File(tmpDirectory, ExportStorage.EXPORT_PATH + File.separator + name)); } @@ -1219,11 +802,27 @@ if (!sensitivityFile.isFile()) { sensitivityFile = new File(SensitivityExportStorage.getCommunitySensitivityExportDirectory(), name); } - FileUtil.copy(sensitivityFile, + FileUtils.copyFile(sensitivityFile, new File(tmpDirectory, SensitivityExportStorage.SENSITIVITY_EXPORT_PATH + File.separator + name)); } + // copie des export d'optimisation + for (Export export : param.getOptimizationExportsObservations().keySet()) { + String name = ExportStorage.getName(export); + if (!param.getExportNames().contains(name)) { + // duplicated code + name = name.endsWith(".java") ? name : name + ".java"; + File exportFile = new File(ExportStorage.getExportDirectory(), name); + if (!exportFile.isFile()) { + exportFile = new File(ExportStorage.getCommunityExportDirectory(), name); + } + FileUtils.copyFile(exportFile, + new File(tmpDirectory, ExportStorage.EXPORT_PATH + + File.separator + name)); + } + } + // copie de tous les scripts a utiliser // les script officiel prevalent sur les scripts communautés FileUtil.copyRecursively(ScriptStorage.getCommunityScriptDirectory(), @@ -1236,7 +835,7 @@ if (!simulatorFile.isFile()) { simulatorFile = new File(SimulatorStorage.getCommunitySimulatorDirectory(), param.getSimulatorName()); } - FileUtil.copy(simulatorFile, new File(tmpDirectory, + FileUtils.copyFile(simulatorFile, new File(tmpDirectory, SimulatorStorage.SIMULATOR_PATH + File.separator + param.getSimulatorName())); @@ -1250,7 +849,7 @@ // Sauvegarde du design plan en XML if (!StringUtils.isEmpty(xmlDesignPlan)) { File simulationDesignPlanFile = SimulationStorage.getMexicoDesignPlan(tmpDirectory); - FileUtil.writeString(simulationDesignPlanFile, xmlDesignPlan, "utf-8"); + FileUtils.writeStringToFile(simulationDesignPlanFile, xmlDesignPlan, "utf-8"); } // creation du zip @@ -1259,17 +858,17 @@ ZipUtil.compress(result, tmpDirectory, null); // poussin 20071015: remove temp directory - if (!FileUtil.deleteRecursively(tmpDirectory)) { - log.warn(_("isisfish.error.remove.directory", tmpDirectory)); + if (!FileUtils.deleteQuietly(tmpDirectory)) { + log.warn(t("isisfish.error.remove.directory", tmpDirectory)); } return result; } catch (IOException eee) { throw new SimulationException( - _("isisfish.error.prepare.information.simulation"), eee); + t("isisfish.error.prepare.information.simulation"), eee); } catch (TopiaException eee) { throw new SimulationException( - _("isisfish.error.prepare.information.simulation"), eee); + t("isisfish.error.prepare.information.simulation"), eee); } } @@ -1329,7 +928,7 @@ */ protected void compileAllFile(SimulationControl control, File directory) { - control.setText(_("isisfish.simulation.message.scriptscompilation")); + control.setText(t("isisfish.simulation.message.scriptscompilation")); long currentTime = System.nanoTime(); // @@ -1361,7 +960,7 @@ CompileHelper.compile(directory, fileToCompile, directory, null); long time = System.nanoTime() - currentTime; - control.setText(_("isisfish.message.compilation.time", + control.setText(t("isisfish.message.compilation.time", DurationFormatUtils.formatDuration(time / 1000000, "s'.'S"))); } Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTableModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.simulator.launcher; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -69,11 +69,11 @@ /** Columns names. */ protected final static String[] columnHeader = new String[] { - _("isisfish.queue.id"), - _("isisfish.queue.plan"), - _("isisfish.queue.launcher"), - _("isisfish.queue.status"), - _("isisfish.queue.progression"), }; + t("isisfish.queue.id"), + t("isisfish.queue.plan"), + t("isisfish.queue.launcher"), + t("isisfish.queue.status"), + t("isisfish.queue.progression"), }; /** Columns types. */ protected Class<?>[] columnClass = new Class[] { @@ -249,9 +249,9 @@ case 2: if (job.getLauncher() == null) { if (param.getUseSimulationPlan()) { - result = _("isisfish.queue.masterplan"); + result = t("isisfish.queue.masterplan"); } else { - result = _("isisfish.queue.notstarted"); + result = t("isisfish.queue.notstarted"); } } else { result = job.getLauncher().toString(); @@ -259,7 +259,7 @@ break; case 3: if (control.isStopSimulationRequest()) { - result = _("isisfish.launch.stop"); + result = t("isisfish.launch.stop"); } else { result = control.getText(); } Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SubProcessSimulationLauncher.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SubProcessSimulationLauncher.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SubProcessSimulationLauncher.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.simulator.launcher; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.BufferedReader; import java.io.File; @@ -38,10 +38,10 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.util.FileUtil; import fr.ifremer.isisfish.IsisFish; import fr.ifremer.isisfish.datastore.SimulationStorage; @@ -73,7 +73,7 @@ @Override public String toString() { - return _("isisfish.simulator.launcher.subprocess"); + return t("isisfish.simulator.launcher.subprocess"); } @Override @@ -93,7 +93,7 @@ simulation = subProcessSimulate(control, simulationZip, simulationPrescript); } catch (Exception eee) { if (log.isErrorEnabled()) { - log.error(_("Can't do simulation %s", simulationId), eee); + log.error(t("Can't do simulation %s", simulationId), eee); } // FIXME simulation is always null if exception if (simulation != null) { @@ -151,7 +151,7 @@ public SimulationStorage subProcessSimulate(SimulationControl control, File simulationZip, String simulationPrescript) throws Exception { - message(control, _("isisfish.message.simulation.prepare")); + message(control, t("isisfish.message.simulation.prepare")); String simulationId = control.getId(); // on ferme le SimulationStorage pour ne pas interferer avec le process @@ -162,7 +162,7 @@ if (!StringUtils.isEmpty(simulationPrescript)) { tempPrescriptFile = File.createTempFile("isis", ".prescript"); tempPrescriptFile.deleteOnExit(); - FileUtil.writeString(tempPrescriptFile, simulationPrescript); + FileUtils.writeStringToFile(tempPrescriptFile, simulationPrescript, "utf-8"); } String java = System.getProperty("java.home") + File.separator + "bin" @@ -239,7 +239,7 @@ // demarrage du process Process process = processBuilder.start(); if (log.isInfoEnabled()) { - log.info(_("SubProcess start: %s %s", process, processBuilder.command())); + log.info(t("SubProcess start: %s %s", process, processBuilder.command())); } // prepare de thread de surveillance du process si control n'est pas null @@ -325,7 +325,7 @@ } } catch (IOException e) { if (log.isErrorEnabled()) { - log.error( _("isisfish.simulator.subprocess.readoutput.error"), + log.error( t("isisfish.simulator.subprocess.readoutput.error"), e); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/package-info.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/package-info.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/package-info.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 1999 - 2011 Ifremer, CodeLutin, Chatellier Eric + * Copyright (C) 1999 - 2014 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 @@ -54,7 +54,7 @@ * </ul> * * <h2>Architecture global</h2> - * <img src="doc-files/isis-simulation.png" alt="archi"/> + * <img src="doc-files/isis-simulation.png" alt="archi"> * * <h2>Principe general</h2> * <p> @@ -98,7 +98,7 @@ * fr.ifremer.isisfish.simulator.launcher.SimulationExecutor} sont responsable de l'execution des simulations de la * queue. Chaque {@link fr.ifremer.isisfish.simulator.launcher.SimulationExecutor} a un * {@link fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher} qu'il utilise - * si la simulation n'a pas encore de {@link SimulatorLauncher} + * si la simulation n'a pas encore de {@code SimulatorLauncher} * d'assigne. * </p> * <p> Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityAnalysis.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityAnalysis.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityAnalysis.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2010 Ifremer, CodeLutin + * Copyright (C) 2009 - 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 @@ -25,10 +25,13 @@ package fr.ifremer.isisfish.simulator.sensitivity; +import static org.nuiton.i18n.I18n.t; + import java.io.File; import java.io.IOException; import java.util.Collection; import java.util.List; +import java.util.Map; import javax.swing.Box; import javax.swing.JLabel; @@ -36,12 +39,14 @@ import javax.swing.JScrollPane; import javax.swing.JTextPane; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.j2r.REngine; import org.nuiton.j2r.RException; import org.nuiton.j2r.RProxy; -import org.nuiton.util.FileUtil; +import org.nuiton.math.matrix.MatrixND; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.export.SensitivityExport; @@ -49,21 +54,21 @@ import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; public abstract class AbstractSensitivityAnalysis implements - SensitivityAnalysis { + SensitivityAnalysis { /** to use log facility, just put in your code: log.info("..."); */ - private static Log log = LogFactory - .getLog(AbstractSensitivityAnalysis.class); - + private static Log log = LogFactory.getLog(AbstractSensitivityAnalysis.class); + /** * Method to create the isis.factors dataframe in R. * * @param plan Design plan of the sensitivity analysis - * @param outputdirectory the directory on which we will calculate the - * destination RData file. The RData file will be named directory.RData and - * saved in the directory parent. + * @param outputdirectory the directory on which we will calculate the destination RData + * file. The RData file will be named directory.RData and saved + * in the directory parent. * - * @throws SensitivityException if an error occur while talking to R + * @throws SensitivityException + * if an error occur while talking to R */ public void setIsisFactorsR(DesignPlan plan, File outputdirectory) throws SensitivityException { @@ -79,24 +84,23 @@ String bsup = "Bsup<-c(%s)"; String bsupValues = ""; String attribute = "attr(isis.factors,\"%s\")<-\"%s\""; - String isisfactors = "isis.factors<-data.frame(" + - "\"nomFacteur\"=nomFacteur," + - "\"Nominal\"=Nominal," + - "\"Continu\"=Continu," + - "\"Binf\"=Binf," + - "\"Bsup\"=Bsup)"; + String isisfactors = "isis.factors<-data.frame(" + + "\"nomFacteur\"=nomFacteur," + "\"Nominal\"=Nominal," + + "\"Continu\"=Continu," + "\"Binf\"=Binf," + "\"Bsup\"=Bsup)"; - //Create the vectors + // Create the vectors List<Factor> factors = plan.getFactors(); - for (Factor factor:factors){ - if (factor instanceof FactorGroup && ((FactorGroup) factor).isDiscrete()) { + for (Factor factor : factors) { + if (factor instanceof FactorGroup + && ((FactorGroup) factor).isDiscrete()) { List<Factor> subfactors = ((FactorGroup) factor).getFactors(); int cardinality = subfactors.get(0).getCardinality(); - for (Factor subfactor:subfactors) { + for (Factor subfactor : subfactors) { if (subfactor.getCardinality() != cardinality) { - throw new SensitivityException("All the factors of group " + - factor.getName() + " do not have the same cardinality"); + throw new SensitivityException( + "All the factors of group " + factor.getName() + + " do not have the same cardinality"); } } } @@ -112,36 +116,35 @@ bsupValues += ","; } - //Factor names + // Factor names factorNames += "\"" + factor.getName() + "\""; if (factor.getDomain() instanceof ContinuousDomain) { - //Continu values, binf values, bsup values and discrete factors attributes + // Continu values, binf values, bsup values and discrete factors + // attributes nominalValues += "\"" + factor.getNominalValue() + "\""; - //Continu values + // Continu values continuValues += "TRUE"; - //Binf values + // Binf values - binfValues += ((ContinuousDomain) factor.getDomain()) - .getCalculatorMinBound(); + // FIXME echatellier to replace since 4.0.1 + binfValues += "0.0"; //((ContinuousDomain) factor.getDomain()).getCalculatorMinBound(); + //Bsup values bsupValues += ((ContinuousDomain) + bsupValues += "0.0"; //factor.getDomain()) .getCalculatorMaxBound(); - //Bsup values - bsupValues += ((ContinuousDomain) factor.getDomain()) - .getCalculatorMaxBound(); - } else { nominalValues += "\"" + factor.getNominalValue() + "\""; - //Continu values + // Continu values continuValues += "FALSE"; - //Binf values + // Binf values binfValues += "0.0"; - //Bsup values + // Bsup values bsupValues += ((DiscreteDomain) factor.getDomain()).getValues() .size(); } @@ -149,11 +152,10 @@ String Rcall; - try { REngine engine = new RProxy(); - //clear the engine (to be sure it's empty) + // clear the engine (to be sure it's empty) engine.clearSession(); Rcall = String.format(nomFacteur, factorNames); @@ -176,12 +178,12 @@ Rcall = String.format(attribute, "nomModel", "isis-fish-externeR"); engine.voidEval(Rcall); - for (Factor factor:factors) { + for (Factor factor : factors) { if (factor.getDomain() instanceof DiscreteDomain) { String attributeValues = "list("; - Collection<Object> values = ((DiscreteDomain) factor.getDomain()) - .getValues().values(); - for (Object j:values) { + Collection<Object> values = ((DiscreteDomain) factor + .getDomain()).getValues().values(); + for (Object j : values) { attributeValues += j + ","; } attributeValues = attributeValues.substring(0, @@ -194,9 +196,9 @@ } } - //Save the Isis R session + // Save the Isis R session engine.saveRData(outputdirectory.getParentFile(), - outputdirectory.getName()); + outputdirectory.getName()); } catch (RException eee) { if (log.isErrorEnabled()) { @@ -208,45 +210,158 @@ } - protected String editRInstruction(String rCall){ - JLabel label = new JLabel( - "Modifier le code R envoyé si vous le souhaitez"); - JTextPane text = new JTextPane(); - text.setText(rCall); - text.setSize(400, 400); - text.setPreferredSize(text.getSize()); + /** + * Open R engine and load RData file. + * + * @param outputDirectory save directory + * @return rengine + * @throws RException + */ + protected REngine openEngine(File outputDirectory) throws RException { + REngine engine = new RProxy(); - Box box = Box.createVerticalBox(); - box.add(label); - box.add(new JScrollPane(text)); + // Clear session + engine.clearSession(); - JOptionPane.showMessageDialog(null, box, "R modif", - JOptionPane.QUESTION_MESSAGE); - return text.getText(); + String sensitivityAnalysisName = outputDirectory.getName(); + // Get Isis R session + engine.loadRData(outputDirectory.getParentFile(), sensitivityAnalysisName); + + // - is a non allowed character name in R + String prefixName = sensitivityAnalysisName.replaceAll("-", ""); + + // Rename R objects for manipulation purpose (if exists) + String renameIsisSimule = "if (exists(\"%1$s.isis.simule\")) isis.simule<-%1$s.isis.simule"; + String renameIsisFactorDistribution = "if (exists(\"%1$s.isis.factor.distribution\")) isis.factor.distribution<-%1$s.isis.factor.distribution"; + String renameIsisFactor = "if (exists(\"%1$s.isis.factors\")) isis.factors<-%1$s.isis.factors"; + String renameIsisMethodExp = "if (exists(\"%1$s.isis.methodExp\")) isis.methodExp<-%1$s.isis.methodExp"; + String renameIsisMethodAnalyse = "if (exists(\"%1$s.isis.methodAnalyse\")) isis.methodAnalyse<-%1$s.isis.methodAnalyse"; + engine.voidEval(String.format(renameIsisSimule, prefixName)); + engine.voidEval(String.format(renameIsisFactorDistribution, prefixName)); + engine.voidEval(String.format(renameIsisFactor, prefixName)); + engine.voidEval(String.format(renameIsisMethodExp, prefixName)); + engine.voidEval(String.format(renameIsisMethodAnalyse, prefixName)); + + return engine; } - protected void testNoDiscrete(List<Factor> factors) throws SensitivityException{ - for (Factor factor:factors) { + /** + * Save RData file and close Rengine. + * + * @param engine r engine + * @param outputDirectory save directory + * @throws RException + */ + protected void closeEngine(REngine engine, File outputDirectory) throws RException { + + String sensitivityAnalysisName = outputDirectory.getName(); + // - is a non allowed character name in R + String prefixName = sensitivityAnalysisName.replaceAll("-", ""); + + // Rename R objects for saving purpose + String renameIsisSimule = "%s.isis.simule<-isis.simule"; + String renameIsisFactorDistribution = "%s.isis.factor.distribution<-isis.factor.distribution"; + String renameIsisFactor = "%s.isis.factors<-isis.factors"; + String renameIsisMethodExp = "%s.isis.methodExp<-isis.methodExp"; + String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse"; + engine.voidEval(String.format(renameIsisSimule, prefixName)); + engine.voidEval(String.format(renameIsisFactorDistribution, prefixName)); + engine.voidEval(String.format(renameIsisFactor, prefixName)); + engine.voidEval(String.format(renameIsisMethodExp, prefixName)); + engine.voidEval(String.format(renameIsisMethodAnalyse, prefixName)); + + // Clean temporary R objects + for (String object : engine.ls()) { + if (!object.startsWith(prefixName)) { + engine.remove(object); + } + } + + // Save Isis R session + engine.saveRData(outputDirectory.getParentFile(), sensitivityAnalysisName); + + engine.terminate(); + } + + /** + * Affiche une boite de dialogue modale permettant de modifier l'expression + * R. + * + * @param rCall r instruction to edit + * @return user edited r instruction + */ + protected String editRInstruction(String rCall) { + JLabel label = new JLabel(t("Modifier le code R envoyé si vous le souhaitez")); + JTextPane text = new JTextPane(); + text.setText(rCall); + text.setSize(400, 400); + text.setPreferredSize(text.getSize()); + + Box box = Box.createVerticalBox(); + box.add(label); + box.add(new JScrollPane(text)); + + JOptionPane.showMessageDialog(null, box, t("R modif"), JOptionPane.QUESTION_MESSAGE); + return text.getText(); + } + + /** + * Test que tous les facteurs sont continues. Leve une exception si un + * facteur discret est présent. + * + * @param factors factor list to check + * @throws SensitivityException + */ + protected void checkAllFactorContinuous(List<Factor> factors) + throws SensitivityException { + for (Factor factor : factors) { if (factor.getDomain() instanceof DiscreteDomain) { - throw new SensitivityException(factor.getName() + - " has a discrete domain, this is not acceptable for " + - "this method."); + throw new SensitivityException(t("%s has a discrete domain, this is not acceptable for this method.", factor.getName())); } } } - protected String createImportInstruction( - SensitivityExport export, + /** + * Test que tous les facteurs sont continues. Leve une exception si un + * facteur discret est présent. + * + * @param factors factor list to check + * @throws SensitivityException + */ + protected void checkAllUniformDistribution(List<Factor> factors) + throws SensitivityException { + for (Factor factor : factors) { + if (factor.getDomain() instanceof ContinuousDomain) { + ContinuousDomain domain = (ContinuousDomain)factor.getDomain(); + Distribution distribution = domain.getDistribution(); + if (distribution != Distribution.QUNIFPC && distribution != Distribution.QUNIFMM) { + throw new SensitivityException(t("%s has a non uniform distribution, this is not acceptable for this method.", factor.getName())); + } + } else { + throw new SensitivityException(t("%s has a discrete domain, this is not acceptable for this method.", factor.getName())); + } + } + } + + /** + * Cree l'instruction R qui permet de relire le contenu d'un fichier genere + * par un Export Isis. + * + * @param export export to get filename to read + * @param simulationStorages simulation list to read export + * @return r instruction + */ + protected String createImportInstruction(SensitivityExport export, List<SimulationStorage> simulationStorages) { - //the filename to read + // the filename to read String name = export.getExportFilename(); - //the extension to read + // the extension to read String extension = export.getExtensionFilename(); - //the rInstruction + // the rInstruction String rInstruction = name + "<-c("; - //iterate on all the simulations and read the value for each one + // iterate on all the simulations and read the value for each one for (int l = 0; l < simulationStorages.size(); l++) { SimulationStorage simulationStorage = simulationStorages.get(l); @@ -257,15 +372,13 @@ File importFile = new File(directoryPath, name + extension); - String simulResult=""; - try{ - simulResult = FileUtil.readAsString(importFile); + String simulResult = ""; + try { + simulResult = FileUtils.readFileToString(importFile); } catch (IOException ioe) { - log.error ("An error occured trying to read a result file : " + - ioe.getMessage()); + log.error("An error occured trying to read a result file : ", ioe); } - double simulationResult = Double.valueOf(simulResult); if (l < simulationStorages.size() - 1) { @@ -279,23 +392,95 @@ return rInstruction; } - protected void renameObjects(REngine engine, String simulationName) - throws RException { + /** + * Get factor domain min bound depending on distribution. + */ + protected double getMinBound(Factor factor) { + return getBound(factor, true); + } - String renameIsisSimule = "%s.isis.simule<-isis.simule"; - String renameIsisFactorDistribution = "%s.isis.factor.distribution" + - "<-isis.factor.distribution"; - String renameIsisFactor = "%s.isis.factor<-isis.factors"; - String renameIsisMethodExp = "%s.isis.methodExp<-isis.MethodExp"; + /** + * Get factor domain max bound depending on distribution. + */ + protected double getMaxBound(Factor factor) { + return getBound(factor, false); + } + + /** + * Get factor domain bound depending on distribution. + * + * @param min min or max + */ + protected double getBound(Factor factor, boolean min) { + ContinuousDomain domain = (ContinuousDomain)factor.getDomain(); + Distribution distribution = domain.getDistribution(); + double result = 0; + if (distribution == Distribution.QUNIFPC) { + Object reference = (Double)domain.getDistributionParameter(Distribution.QUNIFPC.getDistibutionParams()[0].getName()); + if (reference instanceof MatrixND) { + result = min ? 0 : 1; + } else { + Double coefficient = (Double)domain.getDistributionParameter(Distribution.QUNIFPC.getDistibutionParams()[1].getName()); + if (min) { + result = (Double)reference - ((Double)reference * coefficient); + } else { + result = (Double)reference + ((Double)reference * coefficient); + } + } + } else if (distribution == Distribution.QUNIFMM) { + Object value = domain.getDistributionParameter(Distribution.QUNIFMM.getDistibutionParams()[min ? 0 : 1].getName()); + // pour les matrices, on prend 1 et on multipliera le retour + // de R sur la matrice pour faire varier la matrice completement + // note: on ne fait pas ca pour les réels car les utilisateurs + // prefere avoir les valeurs réelles dans le RData. + if (value instanceof MatrixND) { + result = min ? 0 : 1; + } else { + result = (Double)value; + } + } else { + if (log.isWarnEnabled()) { + log.warn("Can't call getBound for distribution " + distribution); + } + } + return result; + } - engine.voidEval(String.format(renameIsisSimule, simulationName)); + protected String getIsisFactorDistribution(List<Factor> factors){ + String isisFactorDistribution = "isis.factor.distribution<-" + + "data.frame(NomFacteur=c(%s)," + + "NomDistribution=c(%s)," + + "ParametreDistribution=c(%s))"; - engine.voidEval(String.format(renameIsisFactorDistribution, - simulationName)); + // Creating the vectors. + String distribution = ""; + String parameters = ""; + String factorNames = ""; - engine.voidEval(String.format(renameIsisFactor, simulationName)); + for (int i = 0; i < factors.size(); i++) { + Factor factor = factors.get(i); + ContinuousDomain domain = (ContinuousDomain)factor.getDomain(); + if (i != 0) { + distribution += ","; + parameters += ","; + factorNames += ","; + } - engine.voidEval(String.format(renameIsisMethodExp, simulationName)); + Distribution r_distribution = domain.getDistribution(); + + distribution += "\""+ r_distribution.getInstruction() +"\""; + parameters += "\"["; + + for (Map.Entry<String,Object> param:domain.getDistributionParameters().entrySet()){ + parameters += param.getKey() + "=" + param.getValue() + ";"; + } + + parameters = StringUtils.removeEnd(parameters, ";"); + parameters += "]\""; + + factorNames += "\"" + factor.getName() + "\""; + } + + return String.format(isisFactorDistribution, factorNames, distribution, parameters); } - } Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/DesignPlan.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/DesignPlan.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/DesignPlan.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + * Copyright (C) 2009 - 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 @@ -34,6 +34,8 @@ /** * Design plan contenant toutes les valeurs de facteurs possible. * + * It's equivalent to "experimentalDesign" in mexico. + * * @author chatellier * @version $Revision: 1.0 $ * Copied: trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Distribution.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Distribution.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Distribution.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Distribution.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,167 @@ +/* + * #%L + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.simulator.sensitivity; + +import static org.nuiton.i18n.I18n.t; +import jdistlib.Binomial; +import jdistlib.Cauchy; +import jdistlib.ChiSquare; +import jdistlib.Exponential; +import jdistlib.F; +import jdistlib.Gamma; +import jdistlib.Geometric; +import jdistlib.HyperGeometric; +import jdistlib.Normal; +import jdistlib.Uniform; + +/** + * Distribution used in sensitivity analysis (for continuous domain). + * + * @author chatellier + * @version $Revision$ + * @since 4.0.1.0 + * + * Last update : $Date$ + * By : $Author$ + */ +public enum Distribution { + + QUNIFPC(t("QUnif %"), + "runif", + Uniform.class, + new DistributionParam("reference", t("Reference value"), true), + new DistributionParam("coefficient", t("Coefficient"), false)), + QUNIFMM(t("QUnif Min/Max"), + "runif", + Uniform.class, + new DistributionParam("min", t("Minimum value"), true), + new DistributionParam("max", t("Maximum value"), true)), + DBINOM(t("Dbimom"), + "rbinom", + Binomial.class, + new DistributionParam("size", t("number of trials (zero or more)")), + new DistributionParam("prob", t("probability of success on each trial"))), + DCAUCHY(t("dcauchy"), + "rcauchy", + Cauchy.class, + new DistributionParam("location", t("location and scale parameters. (location = 0, scale = 1)")), + new DistributionParam("scale", t("location and scale parameters. (location = 0, scale = 1)"))), + DCHISQ(t("dchisq"), + "rchisq", + ChiSquare.class, + new DistributionParam("df", t("degrees of freedom (non-negative, but can be non-integer)"))), + DEXP(t("dexp"), + "rexp", + Exponential.class, + new DistributionParam("rate", t("vector of rates"))), + DF(t("df"), + "rf", + F.class, + new DistributionParam("df1", t("degrees of freedom. 'Inf' is allowed")), + new DistributionParam("df2", t("degrees of freedom. 'Inf' is allowed")), + new DistributionParam("ncp", t("non-centrality parameter. If omitted the central F is assumed"))), + DGAMMA(t("dgamma"), + "rgamma", + Gamma.class, + new DistributionParam("shape", t("shape and scale parameters. Must be positive, 'scale' strictly")), + new DistributionParam("rate", t("an alternative way to specify the scale.")), + new DistributionParam("scale", t("shape and scale parameters. Must be positive, 'scale' strictly"))), + DGEOM(t("dgeom"), + "rgeom", + Geometric.class, + new DistributionParam("prob", t("probability of success in each trial. '0 < prob <= 1'"))), + DHYPER(t("dhyper"), + "rhyper", + HyperGeometric.class, + new DistributionParam("m", t("the number of white balls in the urn.")), + new DistributionParam("n", t("the number of black balls in the urn.")), + new DistributionParam("k", t("the number of balls drawn from the urn."))), + DLNORM(t("dlnorm"), + "rlnorm", + Normal.class, + new DistributionParam("meanlog", t("mean and standard deviation of the distribution on the log scale with default values of '0' and '1' respectively."), false), + new DistributionParam("sdlog", t("mean and standard deviation of the distribution on the log scale with default values of '0' and '1' respectively."), false)); + + protected String description; + + protected String instruction; + + protected Class distClass; + + protected DistributionParam[] params; + + private Distribution(String description, String instruction, Class distClass, DistributionParam... params) { + this.description = description; + this.instruction = instruction; + this.distClass = distClass; + this.params = params; + } + + public String getDescription() { + return description; + } + + public String getInstruction() { + return instruction; + } + + public Class getDistClass() { + return distClass; + } + + public DistributionParam[] getDistibutionParams() { + return params; + } + + public static class DistributionParam { + protected String name; + + protected String description; + + /** If original value must be set in UI (matrix). */ + protected boolean originalValue; + + public DistributionParam(String name, String description, boolean originalValue) { + this.name = name; + this.description = description; + this.originalValue = originalValue; + } + + public DistributionParam(String name, String description) { + this(name, description, false); + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public boolean isOriginalValue() { + return originalValue; + } + } +} Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Factor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Factor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Factor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + * Copyright (C) 2009 - 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 @@ -25,13 +25,12 @@ package fr.ifremer.isisfish.simulator.sensitivity; -import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; +import java.io.Serializable; + +import org.nuiton.math.matrix.MatrixND; + import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; -import java.io.Serializable; - import fr.ifremer.isisfish.simulator.sensitivity.visitor.FactorVisitor; /** @@ -98,14 +97,17 @@ * * Par exemple: topiaID#gear aura pour effet de recuperer l'objet * correspondant au topiaID fournit et d'appeler le propriete - * <tt>setGear(value)</tt> dessus. + * {@code setGear(value)} dessus. */ protected String path; /** Cardinality */ protected int cardinality; - /** + /** Variable name in case of equation factor (must be java valid identifier) */ + protected String equationVariableName; + + /** * Constructor with name. * * @param name factor name @@ -179,25 +181,28 @@ /** * Get the factor value for displaying (for example in R). - * + * * @return the value */ public Object getDisplayedValue() { - if (domain instanceof MatrixContinuousDomain) { - return identifier; - } if (domain instanceof EquationDiscreteDomain || - domain instanceof EquationContinuousDomain) { - return "\"" + getValue() + "\""; + Object result; + // add quotes for equation, but why ? + if (equationVariableName != null) { + result = "\"" + getValue() + "\""; } else { - return getValue(); + result = getValue(); + + // no idea either + if (result instanceof MatrixND) { + result = identifier; + } } + return result; } /** * Set value. * - * FIXME JC 2011-10-24 Unused (or only for test ?). - * * @param value new value */ public void setValue(Object value) { @@ -243,10 +248,11 @@ } public int getCardinality() { + int result = cardinality; if (domain instanceof DiscreteDomain) { - return ((DiscreteDomain)domain).getValues().size(); + result = ((DiscreteDomain)domain).getValues().size(); } - return cardinality; + return result; } public void setCardinality(int cardinality) { @@ -254,6 +260,24 @@ } /** + * Get variable name. + * + * @return the variableName + */ + public String getEquationVariableName() { + return equationVariableName; + } + + /** + * Set variable name. + * + * @param equationVariableName the variableName to set + */ + public void setEquationVariableName(String equationVariableName) { + this.equationVariableName = equationVariableName; + } + + /** * Accept a new visitor. * * @param visitor Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorGroup.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorGroup.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorGroup.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -251,9 +251,10 @@ public Domain getDomain() { Domain domain = null; if (isContinuous()) { - domain = new ContinuousDomain(0.0, 1.0); - } - else if (isDiscrete()) { + domain = new ContinuousDomain(Distribution.QUNIFMM); + ((ContinuousDomain)domain).addDistributionParam("min", 0.0); + ((ContinuousDomain)domain).addDistributionParam("max", 1.0); + } else if (isDiscrete()) { // les domaines doivent avoir les même domaines // et pour l'utilisation quand fera l'appelant // de getDomain(), on peut en retourner un au hazard @@ -284,7 +285,7 @@ public String toString() { return "FactorGroup(" + name + ")"; } - + /** * Set value for label. * @@ -297,7 +298,7 @@ factor.setValueForIdentifier(valueIdentifier); } } - + /** * Get the factor value for displaying (for example in R). * Copied: trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorHelper.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorHelper.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorHelper.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorHelper.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,170 @@ +package fr.ifremer.isisfish.simulator.sensitivity; + + +import fr.ifremer.isisfish.rule.Rule; +import fr.ifremer.isisfish.rule.RuleHelper; +import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; +import fr.ifremer.isisfish.util.ConverterUtil; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Properties; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.apache.commons.beanutils.ConvertUtils; +import org.apache.commons.beanutils.ConvertUtilsBean; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.math.matrix.MatrixND; + +/** + * Useful method for factor + * - create prescript with factor list + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class FactorHelper { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + private static final Log log = LogFactory.getLog(FactorHelper.class); + + /** + * Generate prescript to set factor values before simulation start. + * + * @param scenario to generate prescript + * @return simulation pre script with correct values + */ + public static String generatePreScript(Scenario scenario) { + return generatePreScript(scenario.getFactors()); + } + + public static String generatePreScript(Collection<Factor> factors) { + ConvertUtilsBean beanUtils = ConverterUtil.getConverter(null); + // n'utilise plus freemarker, car il y avait plus d'instruction + // freemarker compliqué que de code a afficher + StringBuffer buffer = new StringBuffer(); + buffer.append("import org.apache.commons.beanutils.BeanUtils;\n"); + buffer.append("import org.apache.commons.beanutils.ConvertUtilsBean;\n"); + buffer.append("import fr.ifremer.isisfish.util.ConverterUtil;\n"); + buffer.append("import fr.ifremer.isisfish.simulator.SimulationParameter;\n"); + buffer.append("ConvertUtilsBean beanUtils = ConverterUtil.getConverter(db);\n"); + buffer.append("SimulationParameter params = context.getSimulationStorage().getParameter();\n"); + generatePreScript(beanUtils, buffer, new AtomicInteger(), factors); + String scriptContent = buffer.toString(); + if (log.isTraceEnabled()) { + log.trace("Simulation prescript content = " + scriptContent); + } + return scriptContent; + } + + /** + * Generate prescript for a factor list that can be called recursively to + * manage factor group. + * + * @param beanUtils beanUtils converter + * @param buffer buffer to fill + * @param counter call counter used to avoid variables name collision + * @param factors factor list to manage + */ + protected static void generatePreScript(ConvertUtilsBean beanUtils, StringBuffer buffer, AtomicInteger counter, Collection<Factor> factors) { + for (Factor factor : factors) { + if (factor instanceof FactorGroup) { + buffer.append("/* factor group : ").append(factor.getName()).append(" */\n"); + FactorGroup factorGroup = (FactorGroup) factor; + generatePreScript(beanUtils, buffer, counter, factorGroup.getFactors()); + } else { + int factorIndex = counter.get(); + buffer.append("/* factor : ").append(factor.getName()).append(" */\n"); + // cas special 1 : population de départ + if (factor.getPath().matches("parameters.population\\.\\w+\\.number")) { + String paramName = StringUtils.removeStart(factor.getPath(), "parameters."); + // pas de convert, c'est fait comme ca dans + // SimulationParameters.toProperties(); + MatrixND matrix = (MatrixND) factor.getValue(); + Object stringValue = String.valueOf(matrix.toList()); + buffer.append("params.setProperty(\"").append(paramName).append("\",\"").append(stringValue).append("\");\n"); + } + // cas special 2 : regles + else if (factor.getPath().equals("parameters.rules")) { + List<Rule> rules = (List<Rule>) factor.getValue(); + List<String> rulesNames = new ArrayList<String>(); + int ruleIndex = 0; + for (Rule rule : rules) { + rulesNames.add(rule.getClass().getSimpleName()); + Properties rulesProps = RuleHelper.getRuleAsProperties(ruleIndex++, null, rule); + for (String rulesProp : rulesProps.stringPropertyNames()) { + String value = rulesProps.getProperty(rulesProp); + buffer.append("params.setProperty(\"").append(rulesProp).append("\",\"").append(value).append("\");\n"); + } + } + buffer.append("params.setProperty(\"rules\",\"").append(StringUtils.join(rulesNames, ",")).append("\");\n"); + } + // cas special 3 : facteur sur les parametres des regles + else if (factor.getPath().startsWith("parameters.rule.")) { + // special case for rule parameter with + Pattern pattern = Pattern.compile("^parameters\\.(rule\\.\\d+\\.parameter\\.\\w+)(\\..+)?$"); + Matcher matcher = pattern.matcher(factor.getPath()); + String paramName = null; + if (matcher.matches()) { + paramName = matcher.group(1); + } else { + paramName = StringUtils.removeStart(factor.getPath(), "parameters."); + } + String stringValue = ConvertUtils.convert(factor.getValue()); + buffer.append("params.setProperty(\"").append(paramName).append("\",\"").append(stringValue).append("\");\n"); + } + // cas special 4 : equation + else if (StringUtils.isNotBlank(factor.getEquationVariableName())) { + buffer.append("context.setComputeValue(\"").append(factor.getName() + "." + factor.getEquationVariableName()); + buffer.append("\",").append(factor.getValue()).append(");\n"); + } + // cas pas si special + else { + Object value = factor.getValue(); + String stringValue = beanUtils.convert(value); + String escValue = stringValue; + if (factor.getDomain() instanceof EquationDiscreteDomain) { + // echatellier: equation can contains quotes that break + // prescript, only quote, not all java replacements + // a ne pas faire pour le reste, pour les + // matrice par exemple, ca passe mal + escValue = StringUtils.replace(escValue, "\n", ""); + escValue = StringUtils.replace(escValue, "\r", ""); + escValue = StringUtils.replace(escValue, "\"", "\\\""); + } + String path = factor.getPath(); + String topiaId = path.substring(0, path.lastIndexOf('#')); + String property = path.substring(path.lastIndexOf('#') + 1); + // Double value123 = beanUtils.convert("mystringvalue", Double.class); + buffer.append(value.getClass().getName()).append(" value"); + buffer.append(factorIndex).append(" = beanUtils.convert(\""); + buffer.append(escValue).append("\", ").append(value.getClass().getName()); + buffer.append(".class);\n"); + // TopiaEntity entity123 = db.findByTopiaId(topiaId); + buffer.append("TopiaEntity entity").append(factorIndex); + buffer.append(" = db.findByTopiaId(\"").append(topiaId); + buffer.append("\");\n"); + if (factor.getDomain() instanceof EquationDiscreteDomain) { + // BeanUtils.setProperty(entity123, "propertyContent", value123); + buffer.append("BeanUtils.setProperty(entity").append(factorIndex); + buffer.append(", \"").append(property).append("Content\", "); + buffer.append("value").append(factorIndex).append(");\n"); + } else { + // BeanUtils.setProperty(entity123, "property", value123); + buffer.append("BeanUtils.setProperty(entity").append(factorIndex); + buffer.append(", \"").append(property).append("\", "); + buffer.append("value").append(factorIndex).append(");\n"); + } + } + } + counter.incrementAndGet(); + } + } + +} Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysis.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysis.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysis.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -65,7 +65,7 @@ * scenarios à prendre en compte pour les simulations. * * @param plan plan a analyser - * @param outputdirectory master sensitivity export directory + * @param outputDirectory master sensitivity export directory * * @return un {@link SensitivityScenarios} * @throws SensitivityException if calculator impl fail to execute @@ -74,7 +74,7 @@ * @see Scenario * @see SensitivityScenarios */ - SensitivityScenarios compute(DesignPlan plan, File outputdirectory) + SensitivityScenarios compute(DesignPlan plan, File outputDirectory) throws SensitivityException; /** Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtils.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtils.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtils.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -23,8 +23,18 @@ package fr.ifremer.isisfish.simulator.sensitivity; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import fr.ifremer.isisfish.entities.Equation; +import fr.ifremer.isisfish.types.RangeOfValues; +import fr.ifremer.isisfish.types.TimeUnit; + /** * Utility methods for sensitivity analysis. * @@ -36,6 +46,14 @@ */ public class SensitivityUtils { + private static final Log log = LogFactory.getLog(SensitivityUtils.class); + + /** Properties file resource path. */ + protected final static String PROPERTIES_PATH = "/sensitivity.properties"; + + /** Cached properties. */ + protected static Properties sensitivityProperties; + /** * Escape factor name. * @@ -49,4 +67,106 @@ name = name.replaceAll("\\W", "_"); return name; } + + /** + * Is field sensitivity enabled. + * + * Return true, if field name is present in properties file. + * + * @param sensitivityFactorName name + * @return <tt>true</tt> if factor name is sensitivity enabled + */ + public static boolean isSensitivityFactorEnabled(String sensitivityFactorName) { + Properties data = getProperties(); + return data.getProperty(sensitivityFactorName) != null; + + } + + /** + * Return cached properties file. + * Load it at first call. + * + * @return properties + */ + public static Properties getProperties() { + + if (sensitivityProperties == null) { + sensitivityProperties = new Properties(); + InputStream stream = null; + try { + stream = SensitivityUtils.class.getResourceAsStream(PROPERTIES_PATH); + sensitivityProperties.load(stream); + } catch (IOException ex) { + if (log.isErrorEnabled()) { + log.error("Can't load sensitivity properties file", ex); + } + } finally { + try { + if (stream != null) { + stream.close(); + } + } catch (IOException ex) { + if (log.isErrorEnabled()) { + log.error("Can't load sensitivity properties file", ex); + } + } + } + } + return sensitivityProperties; + } + + /** + * Return true if value can be defined in continuous factor. + * + * Il serait plus interessant de le faire sur les types et non sur les + * valeur mais pour {@link RangeOfValues} par exemple, seule la valeur + * a un type Float... donc pas evident. + * + * @param value value + * @return continuous enabled + */ + public static boolean canBeContinue(Object value) { + boolean result = false; + + if (value instanceof Double) { + result = true; + } else if (value instanceof Long) { + result = true; + } else if (value instanceof Equation) { + result = true; + } else if (value instanceof RangeOfValues) { + RangeOfValues rangeOfValues = (RangeOfValues)value; + if (rangeOfValues.getType().equals("Float")) { + result = true; + } + } else if (value instanceof TimeUnit) { + result = true; + } else if (value instanceof String) { + // todo fix string value :( + result = true; + } + + return result; + } + + /** + * Return if value is is continue factor enable. + * + * @param value value to test + * @return {@code true} if value is is continue factor enable + */ + public static boolean isContinue(Object value) { + boolean result = false; + if (value instanceof RangeOfValues) { + RangeOfValues range = (RangeOfValues)value; + if (range.getType().equals(RangeOfValues.TYPE_FLOAT)) { + String textValue = range.getValues(); + // TODO need comment !!! + if (textValue.matches("^\\ *[0-9]*\\ *\\-\\ *[0-9]*\\ *$")) { + result = true; + } + } + } + return result; + } } Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ContinuousDomain.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ContinuousDomain.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ContinuousDomain.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + * Copyright (C) 2009 - 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 @@ -25,25 +25,25 @@ package fr.ifremer.isisfish.simulator.sensitivity.domain; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.SortedMap; + +import org.apache.commons.beanutils.MethodUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import fr.ifremer.isisfish.IsisFishRuntimeException; +import fr.ifremer.isisfish.simulator.sensitivity.Distribution; +import fr.ifremer.isisfish.simulator.sensitivity.Distribution.DistributionParam; import fr.ifremer.isisfish.simulator.sensitivity.Domain; import fr.ifremer.isisfish.simulator.sensitivity.visitor.DomainVisitor; /** - * - * All the continuous domains can be of 2 different types (min/max or - * percentage). - * - * A min/max domain can take 2 values : {@link #minBound} and {@link #maxBound}. - * A percentage domain got 2 values {@link #coefficient} and - * {@link #referenceValue} that are the basis to calculate the {@link #minBound} - * and {@link #maxBound} values. - * - * A continuous domain also got a cardinality, either filled in by the user or - * the sensitivity method if it manages it. - * - * To do sensitivity calculations, you MUST use {@link #getCalculatorMinBound()}, - * {@link #getCalculatorMaxBound()}. + * All the continuous domains are based on distribution definition. * * @author chatellier * @version $Revision: 1.0 $ @@ -53,195 +53,169 @@ */ public class ContinuousDomain implements Domain { + private static Log log = LogFactory.getLog(ContinuousDomain.class); + /** serialVersionUID. */ private static final long serialVersionUID = -2037768174807839046L; - /** Min value. */ - protected Object minBound; + /** Continuous domain distribution. */ + protected Distribution distribution; - /** Max value. */ - protected Object maxBound; + /** Distribution params (param name > param value). */ + protected Map<String, Object> distributionParameters = new HashMap<String, Object>(); - /** Value used to create the factor. */ - protected Object referenceValue; - - /** Coefficient in percent */ - protected Double coefficient; - - /** Flag to know the type of the domain **/ - protected boolean percentageType; - /** - * Min/max type constructor. + * Default constructor. */ public ContinuousDomain() { - this(false); + } /** - * Constructor with bounds. + * Constructor with distribution. * - * @param minBound min bound - * @param maxBound max bound + * @param distribution distribution */ - public ContinuousDomain(Object minBound, Object maxBound) { + public ContinuousDomain(Distribution distribution) { this(); - this.minBound = minBound; - this.maxBound = maxBound; + this.distribution = distribution; } /** - * Constructor with type. + * Constructor with distribution and parameters. * - * @param percentageType if {@code true} percentage type + * @param distribution distribution + * @param distributionParameters distribution params */ - public ContinuousDomain(boolean percentageType) { - this.percentageType = percentageType; + public ContinuousDomain(Distribution distribution, SortedMap<String, Object> distributionParameters) { + this(distribution); + setDistributionParams(distributionParameters); } /** - * Return factor type (min/max or percentage). + * Get distribution. * - * @return {@code true} if percentage type + * @return distribution */ - public boolean isPercentageType() { - return percentageType; + public Distribution getDistribution() { + return distribution; } /** - * Set domain type (min/max or percentage). + * Get distribution parameters. * - * @param percentageType new type value + * @return distribution parameters */ - public void setPercentageType(boolean percentageType) { - this.percentageType = percentageType; + public Map<String, Object> getDistributionParameters() { + return distributionParameters; } - + /** - * Return the minimum bound of the domain. Do not use this value for - * sensitivity calculation, prefer using {@link #getCalculatorMinBound}. + * Return distribution parameter value by parameter name. * - * @return the minimum bound + * @param name name + * @return param value */ - public Object getMinBound() { - Object result; - if (isPercentageType()) { - result = ((Double)referenceValue + (((Double)referenceValue * coefficient) * ((2 * getCalculatorMinBound() - 1)))); - } else { - result = minBound; - } - return result; + public Object getDistributionParameter(String name) { + return distributionParameters.get(name); } - - /** - * Return the minimum bound for sensitivity calculators. It always returns 0. - * - * @return the minimum bound for sensitivity analysis. - */ - public double getCalculatorMinBound() { - return 0; - } /** - * Set the minimum bound of the domain. + * Set distribution parameters (clear previous). * - * @param minBound the minimum bound. + * @param distributionParameters distribution params */ - public void setMinBound(Object minBound) { - this.minBound = minBound; + public void setDistributionParams(SortedMap<String, Object> distributionParameters) { + distributionParameters.clear(); + addDistributionParams(distributionParameters); } /** - * Return the maximum bound of the domain. Do not use this value for - * sensitivity calculation, prefer using {@link #getCalculatorMaxBound}. + * Add distribution parameters. * - * @return the maximum bound + * @param distributionParameters distribution parameters. */ - public Object getMaxBound() { - Object result; - if (isPercentageType()) { - result = ((Double) referenceValue + - (((Double) referenceValue * coefficient) - * ((2 * getCalculatorMaxBound() - 1)))); - } else { - result = maxBound; + public void addDistributionParams(SortedMap<String, Object> distributionParameters) { + for (Entry<String, Object> entry : distributionParameters.entrySet()) { + addDistributionParam(entry.getKey(), entry.getValue()); } - return result; } - - /** - * Return the minimum bound for sensitivity calculators. It always returns 1. - * - * @return the maximum bound for sensitivity analysis. - */ - public double getCalculatorMaxBound() { - return 1; - } /** - * Set max value. + * Add distribution parameter. * - * @param maxBound the maxBound to set - */ - public void setMaxBound(Object maxBound) { - this.maxBound = maxBound; - } - - - /** - * Get coefficient. + * Parameter name must be in current distribution parameter list. * - * @return the coefficient + * @param name parameter name + * @param value parameter value */ - public Double getCoefficient() { - return coefficient; - } + public void addDistributionParam(String name, Object value) { + + if (distribution == null) { + throw new IllegalStateException("Distribution not set"); + } - /** - * Set coefficient. - * - * @param coefficient the coefficient to set - */ - public void setCoefficient(Double coefficient) { - this.coefficient = coefficient; - } + // get current parameter definition + boolean found = false; + DistributionParam[] defDistribParams = distribution.getDistibutionParams(); + for (DistributionParam defDistribParam : defDistribParams) { + if (defDistribParam.getName().equals(name)) { + found = true; + } + } + if (!found) { + throw new IllegalArgumentException(String.format("Wrong parameter name, %s not supported by distribution", name)); + } - /** - * Get reference value. - * - * @return the reference value - */ - public Object getReferenceValue() { - return referenceValue; + distributionParameters.put(name, value); } - /** - * Set reference value. - * - * @param referenceValue the reference value.to set - */ - public void setReferenceValue(Object referenceValue) { - this.referenceValue = referenceValue; - } - - /** - * {@inheritDoc}. - */ + @Override public Object getValueForIdentifier(Object identifier) { - Double result; + // first quantite args is always identifier value + List<Object> args = new ArrayList<Object>(); + args.add(identifier); - if (isPercentageType()) { - // since 3.4.0.0, operator is always * - result = ((Double)referenceValue + (((Double)referenceValue * coefficient) - * ((2 * (Double)identifier - 1)))); + // build distribution param args list + Class distClass = distribution.getDistClass(); + if (distribution == Distribution.QUNIFPC) { + // special management : % to min/max + Object reference = distributionParameters.get(Distribution.QUNIFPC.getDistibutionParams()[0].getName()); + double coef = (Double)distributionParameters.get(Distribution.QUNIFPC.getDistibutionParams()[1].getName()); + double ref = (Double)reference; + args.add(ref * (1.0 - coef)); // min + args.add(ref * (1.0 + coef)); // max + } else if (distribution == Distribution.QUNIFMM) { + Object min = distributionParameters.get(Distribution.QUNIFMM.getDistibutionParams()[0].getName()); + args.add(min); + Object max = distributionParameters.get(Distribution.QUNIFMM.getDistibutionParams()[1].getName()); + args.add(max); } else { - result = ((Double)identifier * ((Double)maxBound - (Double)minBound)) - + (Double)minBound; + for (DistributionParam param : distribution.getDistibutionParams()) { + String name = param.getName(); + Object value = distributionParameters.get(name); + args.add(value); + } } + + // add default value for lower.tail = TRUE, log.p = FALSE + args.add(true); + args.add(false); + + // invoke quantile method + Object result = null; + try { + result = MethodUtils.invokeStaticMethod(distClass, "quantile", args.toArray()); + } catch (Exception ex) { + if (log.isErrorEnabled()) { + log.error("Can't invoke quantile method : args was " + args, ex); + } + } + return result; } - + /** * Accept a new visitor. * Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/DiscreteDomain.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/DiscreteDomain.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/DiscreteDomain.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -35,7 +35,7 @@ /** * Un domain discret a un ensemble de valeur. - * Chaque valeur est identifiée par un label pour sont utilisation par les + * Chaque valeur est identifiée par un label pour son utilisation par les * script d'AS. * * @author chatellier @@ -62,7 +62,7 @@ } /** - * Get domaine values. + * Get domain values. * * @return the values */ @@ -80,6 +80,25 @@ } /** + * Set domain value. + * + * @param key the key + * @param value the value + */ + public void putValue(Object key, Object value) { + this.values.put(key, value); + } + + /** + * Get domain value count. + * + * @return domain value count + */ + public int getValuesCount() { + return values.size(); + } + + /** * {@inheritDoc}. * * @throws IllegalArgumentException if identifier is not a valid key Deleted: trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationContinuousDomain.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationContinuousDomain.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationContinuousDomain.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,99 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2011 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 - * 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package fr.ifremer.isisfish.simulator.sensitivity.domain; - -/** - * Domaine continu portant sur variable pouvant prendre diférente valeur par - * rapport à une valeur initiale. - * - * Composé d'un borne min et max et d'un opération. - * - * @author chatellier - * @version $Revision: 1.0 $ - * - * Last update : $Date: 24 févr. 2009 $ By : $Author: chatellier $ - */ -public class EquationContinuousDomain extends ContinuousDomain { - - /** serialVersionUID. */ - private static final long serialVersionUID = -2037768174807839046L; - - /** Variable name (must be java valid identifier) */ - protected String variableName; - - /** - * Min/max type constructor. - */ - public EquationContinuousDomain() { - super(); - } - - /** - * Constructor with type. - * - * @param percentageType if {@code true} percentage type - */ - public EquationContinuousDomain(boolean percentageType) { - super(percentageType); - } - - /** - * Get variable name. - * - * @return the variableName - */ - public String getVariableName() { - return variableName; - } - - /** - * Set variable name. - * - * @param variableName the variableName to set - */ - public void setVariableName(String variableName) { - this.variableName = variableName; - } - - @Override - public EquationContinuousDomain clone() { - EquationContinuousDomain cloned = (EquationContinuousDomain)super.clone(); - cloned.setMaxBound(this.maxBound); - cloned.setMinBound(this.minBound); - cloned.setCoefficient(this.coefficient); - cloned.setReferenceValue(this.referenceValue); - cloned.setVariableName(this.variableName); - return cloned; - } - - @Override - public String toString() { - String result = "variableName=" + variableName + - " coefficient=" + coefficient + " referenceValue=" + referenceValue + - " min=" + minBound + "max=" + maxBound; - return result; - } -} Deleted: trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/MatrixContinuousDomain.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/MatrixContinuousDomain.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/MatrixContinuousDomain.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,132 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2011 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 - * 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package fr.ifremer.isisfish.simulator.sensitivity.domain; - -import org.nuiton.math.matrix.MapFunction; -import org.nuiton.math.matrix.MatrixND; - -/** - * Domaine continu portant sur une matrice. - * - * @author chatellier - * @version $Revision: 1.0 $ - * - * Last update : $Date: 24 févr. 2009 $ By : $Author: chatellier $ - */ -public class MatrixContinuousDomain extends ContinuousDomain { - - /** serialVersionUID. */ - private static final long serialVersionUID = -2037768174807839046L; - - /** - * Min/max type constructor. - */ - public MatrixContinuousDomain() { - super(); - } - - /** - * Constructor with type. - * - * @param percentageType if {@code true} percentage type - */ - public MatrixContinuousDomain(boolean percentageType) { - super(percentageType); - } - - @Override - public Object getValueForIdentifier(Object identifier) { - return getValueForIdentifier((Double)identifier); - } - - /** - * In matrix continuous domain, return a new matrix. - * - * @param identifier identifier - * @return a new computed matrix - */ - public MatrixND getValueForIdentifier(final Double identifier) { - MatrixND temp = ((MatrixND)getReferenceValue()).copy(); - - // since 3.4.0.0, operator is always * - temp.map(new MapFunction() { - public double apply(double val) { - return (val + ((val * coefficient) * ((2 * identifier - 1)))); - } - }); - return temp; - } - - @Override - public MatrixContinuousDomain clone() { - MatrixContinuousDomain cloned = (MatrixContinuousDomain)super.clone(); - return cloned; - } - - /** - * {@inheritDoc} - * - * @return the minimum bound - */ - public Object getMinBound() { - - if (minBound == null) { - MatrixND temp = ((MatrixND) getReferenceValue()).copy(); - - // since 3.4.0.0, operator is always * - temp.map(new MapFunction() { - public double apply(double val) { - return (val + ((val * coefficient) * ((2 * getCalculatorMinBound() - 1)))); - } - }); - return temp; - } else { - return minBound; - } - } - - /** - * {@inheritDoc} - * - * @return the maximum bound - */ - public Object getMaxBound() { - - if (maxBound == null) { - MatrixND temp = ((MatrixND) getReferenceValue()).copy(); - - // since 3.4.0.0, operator is always * - temp.map(new MapFunction() { - public double apply(double val) { - return (val + ((val * coefficient) * ((2 * getCalculatorMaxBound() - 1)))); - } - }); - return temp; - } else { - return maxBound; - } - } -} Modified: trunk/src/main/java/fr/ifremer/isisfish/types/Month.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/types/Month.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/types/Month.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.types; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.Serializable; import java.util.ArrayList; @@ -146,29 +146,29 @@ public String toString() { switch (getMonthNumber()) { case 0: - return _("isisfish.month.january"); + return t("isisfish.month.january"); case 1: - return _("isisfish.month.february"); + return t("isisfish.month.february"); case 2: - return _("isisfish.month.march"); + return t("isisfish.month.march"); case 3: - return _("isisfish.month.april"); + return t("isisfish.month.april"); case 4: - return _("isisfish.month.may"); + return t("isisfish.month.may"); case 5: - return _("isisfish.month.june"); + return t("isisfish.month.june"); case 6: - return _("isisfish.month.july"); + return t("isisfish.month.july"); case 7: - return _("isisfish.month.august"); + return t("isisfish.month.august"); case 8: - return _("isisfish.month.september"); + return t("isisfish.month.september"); case 9: - return _("isisfish.month.october"); + return t("isisfish.month.october"); case 10: - return _("isisfish.month.november"); + return t("isisfish.month.november"); case 11: - return _("isisfish.month.december"); + return t("isisfish.month.december"); default: return "" + getMonthNumber(); Modified: trunk/src/main/java/fr/ifremer/isisfish/types/TimeStep.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/types/TimeStep.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/types/TimeStep.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -26,7 +26,7 @@ package fr.ifremer.isisfish.types; import java.io.Serializable; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; /** * This object can't be modified. If this behavior is modified pay attention @@ -184,7 +184,7 @@ */ @Override public String toString() { - String result = _("isisfish.date.toString", getMonth(), getYear()); + String result = t("isisfish.date.toString", getMonth(), getYear()); return result; } Modified: trunk/src/main/java/fr/ifremer/isisfish/types/TimeUnit.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/types/TimeUnit.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/types/TimeUnit.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.types; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.Serializable; @@ -111,9 +111,9 @@ public String toString() { String result = ""; if (getDay() >= 1) { - result += getDay() + _("isisfish.timeUnit.day"); + result += getDay() + t("isisfish.timeUnit.day"); } else { - result += getHour() + _("isisfish.timeUnit.hours"); + result += getHour() + t("isisfish.timeUnit.hours"); } return result; Modified: trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/MatrixType.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/MatrixType.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/MatrixType.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -42,7 +42,7 @@ import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.util.StringUtil; import org.hibernate.HibernateException; -import org.hibernate.engine.SessionImplementor; +import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.jdbc.NonContextualLobCreator; import org.hibernate.type.StandardBasicTypes; import org.hibernate.type.Type; @@ -56,7 +56,7 @@ * * Created: 23 janv. 2006 * - * @author Arnaud Thimel <thimel@codelutin.com> + * @author Arnaud Thimel <thimel@codelutin.com> * @version $Revision$ * * Mise a jour: $Date$ @@ -69,9 +69,6 @@ */ private static final Log log = LogFactory.getLog(MatrixType.class); - public MatrixType() { - } - public boolean isMutable() { return true; } @@ -92,7 +89,7 @@ if(str.startsWith("[") && str.endsWith("]")) { str = str.substring(1, str.length()-1); // remove [ and ] } - String [] dimAsString = StringUtil.split(str, ","); + String [] dimAsString = StringUtil.split(str, ","); int[] result = new int[dimAsString.length]; int i = 0; for (String dim : dimAsString) { @@ -285,8 +282,8 @@ private static final Type[] hibernateTypes = { StandardBasicTypes.STRING, //name (String) StandardBasicTypes.STRING, //dim (int[]) - StandardBasicTypes.CLOB, //dimNames (String[]) - StandardBasicTypes.CLOB, //semantics (List[]) + StandardBasicTypes.CLOB, //dimNames (String[]) + StandardBasicTypes.CLOB, //semantics (List[]) StandardBasicTypes.CLOB //data (List<List<...>>) }; Modified: trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/MonthType.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/MonthType.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/MonthType.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -40,7 +40,7 @@ * * Created: 19 janv. 2006 * - * @author Arnaud Thimel <thimel@codelutin.com> + * @author Arnaud Thimel <thimel@codelutin.com> * @version $Revision$ * * Mise a jour: $Date$ Modified: trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/RangeOfValuesType.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/RangeOfValuesType.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/RangeOfValuesType.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -40,7 +40,7 @@ * * Created: 19 janv. 2006 * - * @author Arnaud Thimel <thimel@codelutin.com> + * @author Arnaud Thimel <thimel@codelutin.com> * @version $Revision$ * * Mise a jour: $Date$ Modified: trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/TimeStepType.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/TimeStepType.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/TimeStepType.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -40,7 +40,7 @@ * * Created: 19 janv. 2006 * - * @author Arnaud Thimel <thimel@codelutin.com> + * @author Arnaud Thimel <thimel@codelutin.com> * @version $Revision$ * * Mise a jour: $Date$ Modified: trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/TimeUnitType.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/TimeUnitType.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/types/hibernate/TimeUnitType.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -40,7 +40,7 @@ * * Created: 19 janv. 2006 * - * @author Arnaud Thimel <thimel@codelutin.com> + * @author Arnaud Thimel <thimel@codelutin.com> * @version $Revision$ * * Mise a jour: $Date$ Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/SimulationUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/SimulationUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/SimulationUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -69,8 +69,13 @@ public abstract void setEnabledSimulationPlanTab(boolean selected); /** + * Change optimization tab enabled property. + */ + public abstract void setEnabledOptimizationTab(boolean selected); + + /** * Open user dialog to selected a parameter file. - * Reload it, and call {@link refresh()}. + * Reload it, and call {@link #refresh()}. */ protected void importSimulation() { JFileChooser fc = new JFileChooser(); @@ -111,5 +116,5 @@ <JMenuItem id="miImport" text="isisfish.simulation.menu.import" onActionPerformed="importSimulation()"/> </JMenu> </JMenuBar> - <JTabbedPane id="bodyTabbedPane" constraints='BorderLayout.CENTER'/> + <JTabbedPane id="bodyTabbedPane" constraints='BorderLayout.CENTER' decorator="boxed"/> </JPanel> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -23,7 +23,7 @@ package fr.ifremer.isisfish.ui; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.BorderLayout; import java.awt.Color; @@ -41,8 +41,8 @@ import javax.swing.ToolTipManager; import jaxx.runtime.context.JAXXInitialContext; -import jaxx.runtime.swing.editor.config.ConfigUI; -import jaxx.runtime.swing.editor.config.ConfigUIHelper; +import jaxx.runtime.swing.config.ConfigUI; +import jaxx.runtime.swing.config.ConfigUIHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -137,7 +137,7 @@ context.add(new SimulAction()); context.add(this); SimulUI simulUI = new SimulUI(context); - openFrame(welcomeUI, simulUI, _("isisfish.simulation.title")); + openFrame(welcomeUI, simulUI, t("isisfish.simulation.title")); } /** @@ -145,7 +145,7 @@ * @param welcomeUI */ public void newResultFrame(WelcomeUI welcomeUI) { - openFrame(welcomeUI, new ResultUI(), _("isisfish.result.title")); + openFrame(welcomeUI, new ResultUI(), t("isisfish.result.title")); } /** @@ -153,7 +153,7 @@ * @param welcomeUI */ public void newInputFrame(WelcomeUI welcomeUI) { - openFrame(welcomeUI, new InputUI(new JAXXInitialContext().add(verifier).add(new InputAction()).add(new InputSaveVerifier()).add(this)), _("isisfish.input.title")); + openFrame(welcomeUI, new InputUI(new JAXXInitialContext().add(verifier).add(new InputAction()).add(new InputSaveVerifier()).add(this)), t("isisfish.input.title")); } /** @@ -161,7 +161,7 @@ * @param welcomeUI */ public void newScriptFrame(WelcomeUI welcomeUI) { - openFrame(welcomeUI, new ScriptUI(), _("isisfish.script.title")); + openFrame(welcomeUI, new ScriptUI(), t("isisfish.script.title")); } /** @@ -169,7 +169,7 @@ * @param welcomeUI */ public void newSensitivityFrame(WelcomeUI welcomeUI) { - openFrame(welcomeUI, new SensitivityUI(new JAXXInitialContext().add(new InputAction()).add(new SensitivitySaveVerifier()).add(new SimulAction()).add(this)), _("isisfish.sensitivity.title")); + openFrame(welcomeUI, new SensitivityUI(new JAXXInitialContext().add(new InputAction()).add(new SensitivitySaveVerifier()).add(new SimulAction()).add(this)), t("isisfish.sensitivity.title")); } /** @@ -177,7 +177,7 @@ * @param welcomeUI */ public void newQueueFrame(WelcomeUI welcomeUI) { - openFrame(welcomeUI, new QueueUI(), _("isisfish.queue.title")); + openFrame(welcomeUI, new QueueUI(), t("isisfish.queue.title")); } /** @@ -208,7 +208,7 @@ ConfigUIHelper modelBuilder = new ConfigUIHelper(IsisFish.config); // category main - modelBuilder.addCategory(_("isisfish.config.category.main"), _("isisfish.config.category.main.description")); + modelBuilder.addCategory(t("isisfish.config.category.main"), t("isisfish.config.category.main.description")); modelBuilder.addOption(IsisConfig.Option.CONFIG_FILE); modelBuilder.addOption(IsisConfig.Option.DATABASE_DIRECTORY); modelBuilder.addOption(IsisConfig.Option.COMMUNITY_DATABASE_DIRECTORY); @@ -221,14 +221,14 @@ modelBuilder.addOption(IsisConfig.Option.SIMULATION_SCRIPT_AUTOCONFIG); // category simulation - modelBuilder.addCategory(_("isisfish.config.category.simulation"), _("isisfish.config.category.simulation.description")); + modelBuilder.addCategory(t("isisfish.config.category.simulation"), t("isisfish.config.category.simulation.description")); modelBuilder.addOption(IsisConfig.Option.SIMULATOR_IN_MAXTHREADS); modelBuilder.addOption(IsisConfig.Option.SIMULATOR_SUB_MAXPROCESS); modelBuilder.addOption(IsisConfig.Option.SIMULATOR_SUB_MAXMEMORY); modelBuilder.addOption(IsisConfig.Option.MAPPED_RESULT_MATRIX_VECTOR_CLASS); // category database vcs - modelBuilder.addCategory(_("isisfish.config.category.officialvcs"), _("isisfish.config.category.officialvcs.description")); + modelBuilder.addCategory(t("isisfish.config.category.officialvcs"), t("isisfish.config.category.officialvcs.description")); modelBuilder.addOption(IsisConfig.Option.VCS_TYPE); modelBuilder.addOption(IsisConfig.Option.VCS_PROTOCOL); modelBuilder.addOption(IsisConfig.Option.VCS_HOST_NAME); @@ -237,7 +237,7 @@ modelBuilder.addOption(IsisConfig.Option.VCS_USER_PASSWORD); // category community vcs - modelBuilder.addCategory(_("isisfish.config.category.communityvcs"), _("isisfish.config.category.communityvcs.description")); + modelBuilder.addCategory(t("isisfish.config.category.communityvcs"), t("isisfish.config.category.communityvcs.description")); modelBuilder.addOption(IsisConfig.Option.VCS_COMMUNITY_TYPE); modelBuilder.addOption(IsisConfig.Option.VCS_COMMUNITY_PROTOCOL); modelBuilder.addOption(IsisConfig.Option.VCS_COMMUNITY_HOST_NAME); @@ -246,14 +246,14 @@ modelBuilder.addOption(IsisConfig.Option.VCS_COMMUNITY_PASSWORD); // category misc - modelBuilder.addCategory(_("isisfish.config.category.misc"), _("isisfish.config.category.misc.description")); + modelBuilder.addCategory(t("isisfish.config.category.misc"), t("isisfish.config.category.misc.description")); modelBuilder.addOption(IsisConfig.Option.SSH_KEY_FILE); modelBuilder.addOption(IsisConfig.Option.USER_NAME); modelBuilder.addOption(IsisConfig.Option.SMTP_SERVER); modelBuilder.addOption(IsisConfig.Option.USER_MAIL); - ConfigUI configUI = modelBuilder.buildUI(welcomeUI, _("isisfish.config.category.main")); - JDialog dialogUI = new JDialog(welcomeUI, _("isisfish.config.title")); + ConfigUI configUI = modelBuilder.buildUI(welcomeUI, t("isisfish.config.category.main")); + JDialog dialogUI = new JDialog(welcomeUI, t("isisfish.config.title")); dialogUI.add(configUI); dialogUI.pack(); dialogUI.setLocationRelativeTo(welcomeUI); @@ -328,10 +328,10 @@ */ public void about(WelcomeUI welcomeUI) { AboutFrame about = new AboutFrame(); - about.setTitle(_("isisfish.about.title")); + about.setTitle(t("isisfish.about.title")); about.setIconPath("images/isislogo.png"); - about.setAboutHtmlText(_("isisfish.about.abouthtmltext", IsisConfig.getVersion())); - about.setLicenseText(_("isisfish.about.licensetext")); + about.setAboutHtmlText(t("isisfish.about.abouthtmltext", IsisConfig.getVersion())); + about.setLicenseText(t("isisfish.about.licensetext")); about.setBackgroundColor(Color.WHITE); about.setSize(640, 520); about.setLocationRelativeTo(welcomeUI); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomePanelUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomePanelUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomePanelUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2006 - 2010 Ifremer, Code Lutin + Copyright (C) 2006 - 2013 Ifremer, Code Lutin, 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 Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeSaveVerifier.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeSaveVerifier.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeSaveVerifier.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -56,7 +56,7 @@ /** * Check that all 'input' opened interface has no non-saved modification. * - * @return <tt>true> if interface can be closed + * @return {@code true} if interface can be closed */ public boolean allIsSaved() { boolean canExit = true; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeTabUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeTabUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeTabUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2006 - 2010 Ifremer, Code Lutin + Copyright (C) 2006 - 2014 Ifremer, Code Lutin, 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 Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/config/RConfigHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/config/RConfigHandler.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/config/RConfigHandler.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -23,7 +23,7 @@ package fr.ifremer.isisfish.ui.config; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Color; import java.io.File; @@ -73,11 +73,11 @@ String systemPath = System.getenv("PATH"); String rBinPath = rHome + File.separator + "bin"; if (systemPath.contains(rBinPath)) { - rconfigUI.getSystemPathField().setText(_("isisfish.simulator.configuration.r.systempathok", rBinPath)); + rconfigUI.getSystemPathField().setText(t("isisfish.simulator.configuration.r.systempathok", rBinPath)); } else { rconfigUI.getSystemPathField().setBackground(Color.RED); - rconfigUI.getSystemPathField().setText(_("isisfish.simulator.configuration.r.systempathnok", rBinPath)); + rconfigUI.getSystemPathField().setText(t("isisfish.simulator.configuration.r.systempathnok", rBinPath)); } rconfigUI.getSystemPathField().setToolTipText(systemPath); } @@ -100,8 +100,8 @@ if (log.isWarnEnabled()) { log.warn("Can find 'lhs'", ex); } - JOptionPane.showMessageDialog(rconfigUI, _("isisfish.simulator.configuration.r.lhsnotinstalled"), - _("isisfish.simulator.configuration.r.title"), JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(rconfigUI, t("isisfish.simulator.configuration.r.lhsnotinstalled"), + t("isisfish.simulator.configuration.r.title"), JOptionPane.ERROR_MESSAGE); error = true; } try { @@ -111,22 +111,22 @@ if (log.isWarnEnabled()) { log.warn("Can find 'sensitivity'", ex); } - JOptionPane.showMessageDialog(rconfigUI, _("isisfish.simulator.configuration.r.sensitivitynotinstalled"), - _("isisfish.simulator.configuration.r.title"), JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(rconfigUI, t("isisfish.simulator.configuration.r.sensitivitynotinstalled"), + t("isisfish.simulator.configuration.r.title"), JOptionPane.ERROR_MESSAGE); error = true; } if (!error) { - JOptionPane.showMessageDialog(rconfigUI, _("isisfish.simulator.configuration.r.testok"), - _("isisfish.simulator.configuration.r.title"), JOptionPane.INFORMATION_MESSAGE); + JOptionPane.showMessageDialog(rconfigUI, t("isisfish.simulator.configuration.r.testok"), + t("isisfish.simulator.configuration.r.title"), JOptionPane.INFORMATION_MESSAGE); } } catch (RException ex) { if (log.isWarnEnabled()) { log.warn("Can find call R", ex); } - JOptionPane.showMessageDialog(rconfigUI, _("isisfish.simulator.configuration.r.cantinit", ex.getMessage()), - _("isisfish.simulator.configuration.r.title"), JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(rconfigUI, t("isisfish.simulator.configuration.r.cantinit", ex.getMessage()), + t("isisfish.simulator.configuration.r.title"), JOptionPane.ERROR_MESSAGE); } } } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigAction.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigAction.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigAction.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.config; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Color; import java.io.File; @@ -122,8 +122,8 @@ configUI.setConnected(false); configUI.getMessageLabel().setText(""); - configUI.getStatusFreeDatabaseLabel().setText(_("isisfish.simulator.ssh.configuration.freespace.label", "isis-database", "0")); - configUI.getStatusFreeTempLabel().setText(_("isisfish.simulator.ssh.configuration.freespace.label", "isis-tmp", "0")); + configUI.getStatusFreeDatabaseLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", "isis-database", "0")); + configUI.getStatusFreeTempLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", "isis-tmp", "0")); } @@ -275,14 +275,14 @@ boolean sshKeyUsed = false; if (currentSSHKey.canRead()) { if (log.isInfoEnabled()) { - log.info(_("Ssh key found '%s' will be used to connect to", + log.info(t("Ssh key found '%s' will be used to connect to", currentSSHKey.getAbsoluteFile(), host)); } jsch.addIdentity(currentSSHKey.getAbsolutePath()); sshKeyUsed = true; } else { if (log.isInfoEnabled()) { - log.info(_("Can't read ssh key : %s", currentSSHKey)); + log.info(t("Can't read ssh key : %s", currentSSHKey)); } } @@ -294,14 +294,14 @@ String passphrase = null; passphrase = SSHAgent.getAgent().getPassphrase(currentSSHKey); ui.setPassphrase(passphrase); - setTestMessage(_("isisfish.simulator.ssh.configuration.connectingpk"), false); + setTestMessage(t("isisfish.simulator.ssh.configuration.connectingpk"), false); } else { - setTestMessage(_("isisfish.simulator.ssh.configuration.connecting"), false); + setTestMessage(t("isisfish.simulator.ssh.configuration.connecting"), false); } session.setUserInfo(ui); session.connect(10000); // timeout - setTestMessage(_("isisfish.simulator.ssh.configuration.connectionok"), false); + setTestMessage(t("isisfish.simulator.ssh.configuration.connectionok"), false); // get user home currentSSHUserhome = getUserHomeDirectory(session); @@ -309,8 +309,8 @@ // get space disk String databaseSize = getFolderSize(session, currentSSHDatapath); String temppathSize = getFolderSize(session, currentSSHTempPath); - configUI.getStatusFreeDatabaseLabel().setText(_("isisfish.simulator.ssh.configuration.freespace.label", currentSSHDatapath, databaseSize)); - configUI.getStatusFreeTempLabel().setText(_("isisfish.simulator.ssh.configuration.freespace.label", currentSSHTempPath, temppathSize)); + configUI.getStatusFreeDatabaseLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", currentSSHDatapath, databaseSize)); + configUI.getStatusFreeTempLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", currentSSHTempPath, temppathSize)); session.disconnect(); configUI.setConnected(true); @@ -318,26 +318,26 @@ if (log.isErrorEnabled()) { log.error("Can't connect", e); } - setTestMessage(_("isisfish.error.simulation.remote.wrongportvalue", + setTestMessage(t("isisfish.error.simulation.remote.wrongportvalue", sPort), true); } catch (JSchException e) { if (log.isErrorEnabled()) { log.error("Can't connect", e); } - setTestMessage(_("isisfish.simulator.ssh.configuration.connectionerror", e + setTestMessage(t("isisfish.simulator.ssh.configuration.connectionerror", e .getMessage()), true); } catch (SSHException e) { if (log.isErrorEnabled()) { log.error("Can't connect", e); } - setTestMessage(_("isisfish.simulator.ssh.configuration.connectionerror", e + setTestMessage(t("isisfish.simulator.ssh.configuration.connectionerror", e .getMessage()), true); } catch (InvalidPassphraseException e) { if (log.isErrorEnabled()) { log.error("Can't connect", e); } setTestMessage( - _("isisfish.simulator.ssh.configuration.invalidpassphrase"), + t("isisfish.simulator.ssh.configuration.invalidpassphrase"), true); } } @@ -356,7 +356,7 @@ int exit = SSHUtils.exec(session, command, output); if (exit != 0) { - throw new SSHException(_("Command '%s' fail to execute", command)); + throw new SSHException(t("Command '%s' fail to execute", command)); } String out = output.toString(); @@ -408,8 +408,8 @@ throw new IllegalArgumentException("Can't delete directory : " + path); } - int response = JOptionPane.showConfirmDialog(configUI, _("isisfish.simulator.ssh.configuration.freespace.confirmdelete", path), - _("isisfish.common.confirm"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); + int response = JOptionPane.showConfirmDialog(configUI, t("isisfish.simulator.ssh.configuration.freespace.confirmdelete", path), + t("isisfish.common.confirm"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); if (response == JOptionPane.YES_OPTION) { JSch jsch = new JSch(); @@ -429,14 +429,14 @@ boolean sshKeyUsed = false; if (currentSSHKey.canRead()) { if (log.isInfoEnabled()) { - log.info(_("Ssh key found '%s' will be used to connect to", + log.info(t("Ssh key found '%s' will be used to connect to", currentSSHKey.getAbsoluteFile(), host)); } jsch.addIdentity(currentSSHKey.getAbsolutePath()); sshKeyUsed = true; } else { if (log.isInfoEnabled()) { - log.info(_("Can't read ssh key : %s", currentSSHKey)); + log.info(t("Can't read ssh key : %s", currentSSHKey)); } } @@ -463,20 +463,20 @@ // get space disk String databaseSize = getFolderSize(session, currentSSHDatapath); String temppathSize = getFolderSize(session, currentSSHTempPath); - configUI.getStatusFreeDatabaseLabel().setText(_("isisfish.simulator.ssh.configuration.freespace.label", currentSSHDatapath, databaseSize)); - configUI.getStatusFreeTempLabel().setText(_("isisfish.simulator.ssh.configuration.freespace.label", currentSSHTempPath, temppathSize)); + configUI.getStatusFreeDatabaseLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", currentSSHDatapath, databaseSize)); + configUI.getStatusFreeTempLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", currentSSHTempPath, temppathSize)); session.disconnect(); session.disconnect(); if (exit != 0) { - throw new SSHException(_("Command '%s' fail to execute", command)); + throw new SSHException(t("Command '%s' fail to execute", command)); } } catch (Exception e) { if (log.isErrorEnabled()) { log.error("Can't connect", e); } - setTestMessage(_("isisfish.simulator.ssh.configuration.connectionerror", e.getMessage()), true); + setTestMessage(t("isisfish.simulator.ssh.configuration.connectionerror", e.getMessage()), true); } } else { Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2009 - 2012 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2009 - 2014 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 @@ -24,7 +24,9 @@ --> <JDialog resizable="false" title="isisfish.simulator.ssh.configuration.title" layout="{new javax.swing.BoxLayout(this.getContentPane(), javax.swing.BoxLayout.PAGE_AXIS)}"> - + <import> + static org.nuiton.i18n.I18n.t + </import> <SSHLauncherConfigAction id="action" javaBean="new SSHLauncherConfigAction(this)" /> <Boolean id="connected" javaBean="false" /> @@ -35,7 +37,7 @@ ]]></script> - <Table border='{BorderFactory.createTitledBorder(_("isisfish.simulator.ssh.configuration.connection"))}' + <Table border='{BorderFactory.createTitledBorder(t("isisfish.simulator.ssh.configuration.connection"))}' fill='horizontal'> <row> <cell> @@ -70,7 +72,7 @@ </cell> </row> </Table> - <Table border='{BorderFactory.createTitledBorder(_("isisfish.simulator.ssh.configuration.environment"))}'> + <Table border='{BorderFactory.createTitledBorder(t("isisfish.simulator.ssh.configuration.environment"))}'> <row fill='horizontal'> <cell> <JLabel id='sshUserhomeLabel' text='isisfish.config.main.simulation.ssh.userhome' @@ -194,7 +196,7 @@ </cell> </row> </Table> - <Table border='{BorderFactory.createTitledBorder(_("isisfish.simulator.ssh.configuration.status"))}'> + <Table border='{BorderFactory.createTitledBorder(t("isisfish.simulator.ssh.configuration.status"))}'> <row fill='horizontal'> <cell columns="2" fill='horizontal'> <JLabel id='messageLabel' text=' ' font-weight='bold' opaque='true' horizontalAlignment='center' Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/CellUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/CellUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/CellUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -28,18 +28,18 @@ <fr.ifremer.isisfish.entities.Cell id='bean' javaBean='null'/> <import> - static org.nuiton.i18n.I18n.n_ - java.awt.event.MouseEvent; - fr.ifremer.isisfish.entities.Cell; - com.bbn.openmap.gui.Tool; - com.bbn.openmap.gui.OMToolSet; - com.bbn.openmap.event.SelectMouseMode; - fr.ifremer.isisfish.map.CellSelectionLayer; - fr.ifremer.isisfish.map.CopyMapToClipboardListener; - fr.ifremer.isisfish.ui.sensitivity.SensitivityTabUI; - java.beans.PropertyChangeEvent; - java.beans.PropertyChangeListener; - javax.swing.DefaultComboBoxModel; + static org.nuiton.i18n.I18n.n + static org.nuiton.i18n.I18n.t + java.awt.event.MouseEvent + fr.ifremer.isisfish.entities.Cell + com.bbn.openmap.event.SelectMouseMode + fr.ifremer.isisfish.map.CellSelectionLayer + fr.ifremer.isisfish.map.OpenMapEvents + fr.ifremer.isisfish.map.CopyMapToClipboardListener + fr.ifremer.isisfish.ui.sensitivity.SensitivityTabUI + java.beans.PropertyChangeEvent + java.beans.PropertyChangeListener + javax.swing.DefaultComboBoxModel </import> <BeanValidator id='validator' @@ -49,14 +49,13 @@ </BeanValidator> <script><![CDATA[ -protected OMToolSet toolSet = new OMToolSet(); - boolean cellChanged = true; protected void $afterCompleteSetup() { - setButtonTitle(_("isisfish.input.continueZones")); - setNextPath(n_("isisfish.input.tree.zones")); + setButtonTitle(t("isisfish.input.continueZones")); + setNextPath(n("isisfish.input.tree.zones")); + //cellMap.init(cellMapInfo); new OpenMapEvents(cellMap, new SelectMouseMode(false), CellSelectionLayer.SINGLE_SELECTION) { @Override public boolean mouseClicked(MouseEvent e) { @@ -77,11 +76,6 @@ } }; - // add copy to clipboard support - cellMap.addMapMouseListener(new CopyMapToClipboardListener(cellMap)); - toolSet.setupListeners(cellMap); - toolMap.add((Tool)toolSet); - addPropertyChangeListener(PROPERTY_BEAN, new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if (evt.getNewValue() == null) { @@ -207,12 +201,11 @@ </row> </Table> <JPanel id='map' layout='{new BorderLayout()}'> - <com.bbn.openmap.gui.ToolPanel id='toolMap' javaBean='new com.bbn.openmap.gui.ToolPanel()' - constraints='BorderLayout.NORTH' decorator='boxed' enabled='{getBean() != null}' /> <fr.ifremer.isisfish.map.IsisMapBean id='cellMap' javaBean='new fr.ifremer.isisfish.map.IsisMapBean()' selectionMode="{fr.ifremer.isisfish.map.CellSelectionLayer.SINGLE_SELECTION}" fisheryRegion='{getFisheryRegion()}' selectedCells='{getBean()}' constraints='BorderLayout.CENTER' decorator='boxed' enabled='{getBean() != null}'/> + <com.bbn.openmap.InformationDelegator id="cellMapInfo" constraints='BorderLayout.SOUTH' /> </JPanel> </JSplitPane> </JPanel> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/EffortDescriptionParametersUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/EffortDescriptionParametersUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/EffortDescriptionParametersUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -30,6 +30,7 @@ <fr.ifremer.isisfish.entities.EffortDescription id='effortDescription' javaBean='null'/> <import> + static org.nuiton.i18n.I18n.t java.util.ArrayList; fr.ifremer.isisfish.entities.EffortDescription; fr.ifremer.isisfish.entities.SetOfVessels; @@ -148,7 +149,7 @@ </JScrollPane> </cell> <cell columns='2' fill='both' weightx='1.0'> - <Table border='{BorderFactory.createTitledBorder(_("isisfish.effortDescription.effortTitle"))}'> + <Table border='{BorderFactory.createTitledBorder(t("isisfish.effortDescription.effortTitle"))}'> <row> <cell anchor='east'> <JLabel text="isisfish.effortDescription.fishingOperation" enabled='{getEffortDescription() != null}'/> @@ -193,7 +194,7 @@ </row> <row> <cell columns='2' fill='both' weighty='1.0'> - <Table anchor='north' fill='both' weighty='1.0' border='{BorderFactory.createTitledBorder(_("isisfish.effortDescription.economicTitle"))}'> + <Table anchor='north' fill='both' weighty='1.0' border='{BorderFactory.createTitledBorder(t("isisfish.effortDescription.economicTitle"))}'> <row> <cell anchor='east' fill='none' weighty='0.0'> <JLabel text="isisfish.effortDescription.crewSize" enabled='{getEffortDescription() != null}'/> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/FisheryRegionUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/FisheryRegionUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/FisheryRegionUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -28,11 +28,10 @@ <fr.ifremer.isisfish.entities.FisheryRegion id='bean' javaBean='null'/> <import> - static org.nuiton.i18n.I18n.n_ + static org.nuiton.i18n.I18n.n + static org.nuiton.i18n.I18n.t fr.ifremer.isisfish.entities.FisheryRegion; fr.ifremer.isisfish.map.CopyMapToClipboardListener; - com.bbn.openmap.gui.Tool; - com.bbn.openmap.gui.OMToolSet; java.beans.PropertyChangeEvent; java.beans.PropertyChangeListener; javax.swing.DefaultListModel @@ -46,18 +45,14 @@ <script><![CDATA[ -protected OMToolSet toolSet = new OMToolSet(); protected void $afterCompleteSetup() { - toolSet.setupListeners(cellMap); - toolMap.add((Tool)toolSet); + + //cellMap.init(cellMapInfo); - // add copy to clipboard support - cellMap.addMapMouseListener(new CopyMapToClipboardListener(cellMap)); + setButtonTitle(t("isisfish.input.continueCells")); + setNextPath(n("isisfish.input.tree.cells")); - setButtonTitle(_("isisfish.input.continueCells")); - setNextPath(n_("isisfish.input.tree.cells")); - addPropertyChangeListener(PROPERTY_BEAN, new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if (evt.getNewValue() == null) { @@ -119,11 +114,11 @@ protected void check() { getContextValue(InputAction.class).checkFisheryRegion(getBean()); - setInfoText(_("isisfish.message.check.finished")); + setInfoText(t("isisfish.message.check.finished")); } protected void save() { - setInfoText(_("isisfish.message.checking.cell")); + setInfoText(t("isisfish.message.checking.cell")); // this make save done by verifier instead of saveFisheryRegion // and refresh tree is not working @@ -136,7 +131,7 @@ InputUI inputUI = getParentContainer(InputUI.class); inputUI.getHandler().reloadFisheryTree(inputUI); - setInfoText(_("isisfish.message.save.finished")); + setInfoText(t("isisfish.message.save.finished")); } ]]></script> <JPanel id="body"> @@ -313,12 +308,11 @@ </row> </Table> <JPanel id='map' layout='{new BorderLayout()}'> - <com.bbn.openmap.gui.ToolPanel id='toolMap' javaBean='new com.bbn.openmap.gui.ToolPanel()' - constraints='BorderLayout.NORTH' decorator='boxed'/> <fr.ifremer.isisfish.map.IsisMapBean id='cellMap' selectionMode="{fr.ifremer.isisfish.map.CellSelectionLayer.NO_SELECTION}" javaBean='new fr.ifremer.isisfish.map.IsisMapBean()' fisheryRegion='{getBean()}' constraints='BorderLayout.CENTER' decorator='boxed'/> + <com.bbn.openmap.InformationDelegator id="cellMapInfo" constraints='BorderLayout.SOUTH' /> </JPanel> </JSplitPane> </JPanel> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/GearTabUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/GearTabUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/GearTabUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -29,7 +29,6 @@ <import> fr.ifremer.isisfish.entities.Gear; - jaxx.runtime.swing.editor.NumberEditor; java.beans.PropertyChangeEvent; java.beans.PropertyChangeListener; </import> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/GearUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/GearUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/GearUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -27,15 +27,16 @@ <fr.ifremer.isisfish.entities.Gear id='bean' javaBean='null'/> <import> - static org.nuiton.i18n.I18n.n_ + static org.nuiton.i18n.I18n.t + static org.nuiton.i18n.I18n.n java.beans.PropertyChangeEvent; java.beans.PropertyChangeListener; </import> <script><![CDATA[ protected void $afterCompleteSetup() { - setButtonTitle(_("isisfish.input.continueMetiers")); - setNextPath(n_("isisfish.input.tree.metiers")); + setButtonTitle(t("isisfish.input.continueMetiers")); + setNextPath(n("isisfish.input.tree.metiers")); addPropertyChangeListener(PROPERTY_BEAN, new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputAction.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputAction.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputAction.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2005 - 2010 Ifremer, Code Lutin, Cedric Pineau, Benjamin Poussin + * Copyright (C) 2005 - 2012 Ifremer, Code Lutin, Cedric Pineau, Benjamin Poussin, 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 @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.input; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.geom.Point2D; import java.io.File; @@ -35,6 +35,8 @@ import javax.swing.JOptionPane; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.math.matrix.MatrixFactory; @@ -59,17 +61,16 @@ import fr.ifremer.isisfish.entities.Metier; import fr.ifremer.isisfish.entities.MetierSeasonInfo; import fr.ifremer.isisfish.entities.MetierSeasonInfoDAO; +import fr.ifremer.isisfish.entities.Observation; import fr.ifremer.isisfish.entities.Population; import fr.ifremer.isisfish.entities.PopulationDAO; import fr.ifremer.isisfish.entities.PopulationGroup; import fr.ifremer.isisfish.entities.PopulationSeasonInfo; import fr.ifremer.isisfish.entities.PopulationSeasonInfoDAO; -import fr.ifremer.isisfish.entities.PopulationSeasonInfoImpl; import fr.ifremer.isisfish.entities.Selectivity; import fr.ifremer.isisfish.entities.SelectivityDAO; import fr.ifremer.isisfish.entities.SetOfVessels; import fr.ifremer.isisfish.entities.Species; -import fr.ifremer.isisfish.entities.SpeciesDAO; import fr.ifremer.isisfish.entities.TargetSpecies; import fr.ifremer.isisfish.entities.TargetSpeciesDAO; import fr.ifremer.isisfish.entities.Zone; @@ -85,7 +86,7 @@ * * Created: 1 aout 2005 18:37:25 CEST * - * @author Benjamin POUSSIN <poussin@codelutin.com> + * @author Benjamin POUSSIN <poussin@codelutin.com> * @version $Revision: 1312 $ * * Last update: $Date: 2008-08-28 10:21:07 +0200 (jeu, 28 aoû 2008) $ @@ -128,7 +129,7 @@ if (log.isErrorEnabled()) { log.error("Can't create entity", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.region.new"), eee); + ErrorHelper.showErrorDialog(t("isisfish.error.region.new"), eee); } return null; }*/ @@ -159,7 +160,7 @@ if (log.isErrorEnabled()) { log.error("Can't save region", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.save"), eee); + ErrorHelper.showErrorDialog(t("isisfish.error.input.save"), eee); } return selected; }*/ @@ -188,7 +189,7 @@ if (log.isErrorEnabled()) { log.error("Can't cancel modification in region", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.region.cancel"), eee); + ErrorHelper.showErrorDialog(t("isisfish.error.region.cancel"), eee); } return selected; }*/ @@ -211,21 +212,21 @@ boolean doDelete; List<TopiaEntity> allWillBeRemoved = selected.getComposite(); if (allWillBeRemoved.size() > 0) { - String text = _("isisfish.message.delete.object", selected + String text = t("isisfish.message.delete.object", selected .toString()); for (TopiaEntity e : allWillBeRemoved) { text += ClassUtils.getShortClassName(e.getClass()) + " - " + e.toString() + "\n"; } int resp = JOptionPane.showConfirmDialog(null, text, - _("isisfish.message.delete.entities"), + t("isisfish.message.delete.entities"), JOptionPane.YES_NO_OPTION); doDelete = resp == JOptionPane.YES_OPTION; } else { - String text = _("isisfish.message.confirm.delete.object", + String text = t("isisfish.message.confirm.delete.object", selected.toString()); int resp = JOptionPane.showConfirmDialog(null, text, - _("isisfish.message.delete.entity"), + t("isisfish.message.delete.entity"), JOptionPane.YES_NO_OPTION); doDelete = resp == JOptionPane.YES_OPTION; } @@ -233,9 +234,9 @@ if (doDelete) { selected.delete(); selected.getTopiaContext().commitTransaction(); - msg = _("isisfish.message.remove.finished"); + msg = t("isisfish.message.remove.finished"); } else { - msg = _("isisfish.message.remove.canceled"); + msg = t("isisfish.message.remove.canceled"); } } catch (Exception eee) { if (log.isErrorEnabled()) { @@ -257,7 +258,7 @@ if (eq != null) { String name = showInputDialog(""); //if ("".equals(name)) { - // showMsgBox("Error " +_("isisfish.error.invalid.equation.name")); + // showMsgBox("Error " +t("isisfish.error.invalid.equation.name")); //} if (name != null) { FormuleStorage storage = FormuleStorage.createFormule(eq @@ -285,9 +286,9 @@ public Object saveAsModel(String category, String language, String content) { try { String name = JOptionPane - .showInputDialog(_("isisfish.message.saveModel.dialog")); + .showInputDialog(t("isisfish.message.saveModel.dialog")); /*if ("".equals(name)) { - showMsgBox("Error " +_("isisfish.error.invalid.equation.name")); + showMsgBox("Error " +t("isisfish.error.invalid.equation.name")); }*/ if (name != null) { FormuleStorage storage = FormuleStorage.createFormule(category, @@ -299,7 +300,7 @@ if (log.isErrorEnabled()) { log.error("Can't save equation as model", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.equation.savemodel"), + ErrorHelper.showErrorDialog(t("isisfish.error.equation.savemodel"), eee); } return null; @@ -324,7 +325,7 @@ log.error("Can't open editor", eee); } ErrorHelper.showErrorDialog( - _("isisfish.error.equation.openeditor"), eee); + t("isisfish.error.equation.openeditor"), eee); } return null; } @@ -354,7 +355,7 @@ if (log.isErrorEnabled()) { log.error("Can't add selectivity", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.addentity", + ErrorHelper.showErrorDialog(t("isisfish.error.input.addentity", "Selectivity"), eee); } return null; @@ -372,7 +373,7 @@ if (log.isErrorEnabled()) { log.error("Can't remove TargetSpecies", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.removeentity", + ErrorHelper.showErrorDialog(t("isisfish.error.input.removeentity", "Selectivity"), eee); } return null; @@ -399,7 +400,7 @@ if (log.isErrorEnabled()) { log.error("Can't create MetierSeasonInfo", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.addentity", "SeasonInfo"), eee); + ErrorHelper.showErrorDialog(t("isisfish.error.input.addentity", "SeasonInfo"), eee); } return null; }*/ @@ -416,7 +417,7 @@ if (log.isErrorEnabled()) { log.error("Can't create MetierSeasonInfo", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.removeentity", "SeasonInfo"), eee); + ErrorHelper.showErrorDialog(t("isisfish.error.input.removeentity", "SeasonInfo"), eee); } return null; }*/ @@ -449,7 +450,7 @@ if (log.isErrorEnabled()) { log.error("Can't add TargetSpecies", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.addentity", + ErrorHelper.showErrorDialog(t("isisfish.error.input.addentity", "TargetSpecies"), eee); } return null; @@ -468,7 +469,7 @@ if (log.isErrorEnabled()) { log.error("Can't remove TargetSpecies", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.removeentity", + ErrorHelper.showErrorDialog(t("isisfish.error.input.removeentity", "TargetSpecies"), eee); } return null; @@ -497,7 +498,7 @@ if (log.isErrorEnabled()) { log.error("Can't create EffortDescription", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.addentity", + ErrorHelper.showErrorDialog(t("isisfish.error.input.addentity", "EffortDescription"), eee); } } @@ -516,7 +517,7 @@ if (log.isErrorEnabled()) { log.error("Can't remove entity: " + effort, eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.removeentity", + ErrorHelper.showErrorDialog(t("isisfish.error.input.removeentity", "EffortDescription"), eee); } return null; @@ -539,7 +540,7 @@ species.update(); pop.update(); } catch (TopiaException eee) { - throw new IsisFishRuntimeException(_("isisfish.error.input.addentity", "Population"), eee); + throw new IsisFishRuntimeException(t("isisfish.error.input.addentity", "Population"), eee); } return pop; } @@ -574,7 +575,7 @@ if (log.isErrorEnabled()) { log.error("Can't create PopulationSeasonInfo", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.removeentity", + ErrorHelper.showErrorDialog(t("isisfish.error.input.removeentity", "PopulationSeasonInfo"), eee); } return seasonInfo; @@ -593,7 +594,7 @@ if (log.isErrorEnabled()) { log.error("Can't remove PopulationSeasonInfo", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.removeentity", + ErrorHelper.showErrorDialog(t("isisfish.error.input.removeentity", "PopulationSeasonInfo"), eee); } } @@ -635,18 +636,18 @@ if (log.isErrorEnabled()) { log.error("Can't remove MetierSeasonInfo", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.addentity", + ErrorHelper.showErrorDialog(t("isisfish.error.input.addentity", "MetierSeasonInfo"), eee); } } - public Object createRecruitmentDistribution(Population pop) { + public void createRecruitmentDistribution(Population pop) { if (log.isTraceEnabled()) { log.trace("createRecruitmentDistributionon called: " + pop); } try { String val = JOptionPane - .showInputDialog(_("isisfish.message.recruitment.number.month")); + .showInputDialog(t("isisfish.message.recruitment.number.month")); int num = -1; if (val != null && !"".equals(val)) { try { @@ -661,7 +662,7 @@ if (num > 0) { List<String> sem = new ArrayList<String>(num); for (int i = 0; i < num; i++) { - sem.add(_("isisfish.common.month", i)); + sem.add(t("isisfish.common.month", i)); } MatrixND newMat = MatrixFactory.getInstance().create( new List[] { sem }); @@ -677,12 +678,47 @@ if (log.isErrorEnabled()) { log.error("Can't remove RecruitmentDistribution", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.removeentity", + ErrorHelper.showErrorDialog(t("isisfish.error.input.removeentity", "RecruitmentDistribution"), eee); } - return null; } + public void createObservationValueMatrix(Observation observation) { + try { + String val = JOptionPane.showInputDialog(t("isisfish.message.observation.value.dimensions")); + + if (StringUtils.isNotBlank(val)) { + String[] values = val.trim().split("(,|;|\\*|x|\\s)"); + + List<Integer> dims = new ArrayList<Integer>(); + for (String value : values) { + if (!value.isEmpty() && StringUtils.isNumeric(value)) { + dims.add(Integer.valueOf(value)); + } + } + + int[] dim = new int[dims.size()]; + for (int i = 0; i < dims.size(); i++) { + dim[i] = dims.get(i).intValue(); + } + MatrixND newMat = MatrixFactory.getInstance().create(dim); + + MatrixND mat = observation.getValue(); + if (mat != null) { + newMat.paste(mat); + } + observation.setValue(newMat); + observation.update(); + } + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't remove RecruitmentDistribution", eee); + } + ErrorHelper.showErrorDialog(t("isisfish.error.input.removeentity", + "RecruitmentDistribution"), eee); + } + } + // Migration public Object addMigration(PopulationSeasonInfo info, @@ -699,7 +735,7 @@ if (log.isErrorEnabled()) { log.error("Can't add migration", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.addentity", + ErrorHelper.showErrorDialog(t("isisfish.error.input.addentity", "Migration"), eee); } return null; @@ -719,7 +755,7 @@ if (log.isErrorEnabled()) { log.error("Can't add emigration", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.addentity", + ErrorHelper.showErrorDialog(t("isisfish.error.input.addentity", "Emigration"), eee); } return null; @@ -739,7 +775,7 @@ if (log.isErrorEnabled()) { log.error("Can't add immigration", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.addentity", + ErrorHelper.showErrorDialog(t("isisfish.error.input.addentity", "Immigration"), eee); } return null; @@ -793,7 +829,7 @@ // copy map file File destMap = new File(destDir, filename); - FileUtil.copy(inputMap, destMap); + FileUtils.copyFile(inputMap, destMap); List<String> maps = fisheryRegion.getMapFileList(); maps.add(filename); @@ -803,7 +839,7 @@ if (log.isErrorEnabled()) { log.error("Can't copy map file for : " + inputMap, eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.region.addmap"), eee); + ErrorHelper.showErrorDialog(t("isisfish.error.region.addmap"), eee); } } @@ -851,7 +887,7 @@ if (log.isErrorEnabled()) { log.error("Can't remove map", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.region.removemap"), + ErrorHelper.showErrorDialog(t("isisfish.error.region.removemap"), eee); } } @@ -877,7 +913,7 @@ try { TopiaContext isisContext = fisheryRegion.getTopiaContext(); - // frame.setInfoText(_("isisfish.message.checking.cell")); + // frame.setInfoText(t("isisfish.message.checking.cell")); int latNumber = (int) Math .round((fisheryRegion.getMaxLatitude() - fisheryRegion .getMinLatitude()) @@ -944,9 +980,9 @@ isisContext.commitTransaction(); } catch (Exception eee) { if (log.isErrorEnabled()) { - log.error(_("isisfish.error.region.save"), eee); + log.error(t("isisfish.error.region.save"), eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.region.save"), eee); + ErrorHelper.showErrorDialog(t("isisfish.error.region.save"), eee); } } @@ -963,9 +999,9 @@ dialog.setVisible(true); } catch (Exception eee) { if (log.isErrorEnabled()) { - log.error(_("isisfish.error.region.check"), eee); + log.error(t("isisfish.error.region.check"), eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.region.check"), eee); + ErrorHelper.showErrorDialog(t("isisfish.error.region.check"), eee); } } } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -64,7 +64,7 @@ javax.swing.JComponent javax.swing.event.ChangeListener fr.ifremer.isisfish.entities.FisheryRegion - fr.ifremer.isisfish.ui.sensitivity.SensitivityUtils + fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils fr.ifremer.isisfish.ui.WelcomePanelUI org.nuiton.topia.persistence.TopiaEntityContextable org.nuiton.topia.TopiaContext Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -3,7 +3,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 @@ -23,8 +23,8 @@ package fr.ifremer.isisfish.ui.input; -import static org.nuiton.i18n.I18n._; -import static org.nuiton.i18n.I18n.n_; +import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; import java.awt.BorderLayout; import java.awt.event.ActionEvent; @@ -66,6 +66,7 @@ import fr.ifremer.isisfish.entities.FisheryRegion; import fr.ifremer.isisfish.entities.Gear; import fr.ifremer.isisfish.entities.Metier; +import fr.ifremer.isisfish.entities.Observation; import fr.ifremer.isisfish.entities.Population; import fr.ifremer.isisfish.entities.Port; import fr.ifremer.isisfish.entities.SetOfVessels; @@ -86,9 +87,9 @@ import fr.ifremer.isisfish.ui.input.tree.FisheryTreeRenderer; import fr.ifremer.isisfish.ui.input.tree.FisheryTreeSelectionModel; import fr.ifremer.isisfish.ui.input.tree.loadors.PopulationsNodeLoador; -import fr.ifremer.isisfish.ui.models.common.StringComboModel; -import fr.ifremer.isisfish.ui.sensitivity.FactorWizardUI; -import fr.ifremer.isisfish.ui.sensitivity.SensitivityInputHandler; +import fr.ifremer.isisfish.ui.models.common.GenericComboModel; +import fr.ifremer.isisfish.ui.sensitivity.wizard.FactorWizardUI; +import fr.ifremer.isisfish.ui.sensitivity.wizard.SensitivityWizardHandler; import fr.ifremer.isisfish.ui.simulator.filter.SimulationFilterUtil; import fr.ifremer.isisfish.vcs.VCSException; @@ -208,11 +209,11 @@ } // long operation, run status bar - setStatusMessage(inputUI, _("isisfish.message.loading.region", name), true); + setStatusMessage(inputUI, t("isisfish.message.loading.region", name), true); SwingUtilities.invokeLater(new Runnable() { public void run() { loadRegion(inputUI, name); - setStatusMessage(inputUI, _("isisfish.message.load.finished")); + setStatusMessage(inputUI, t("isisfish.message.load.finished")); } }); } @@ -225,10 +226,10 @@ */ public void createNewRegion(InputUI inputUI) { String name = inputUI.getFieldNewRegion().getText(); - setStatusMessage(inputUI, _("isisfish.message.creating.region", name), true); + setStatusMessage(inputUI, t("isisfish.message.creating.region", name), true); if (RegionStorage.getRegionNames().contains(name)) { - JOptionPane.showMessageDialog(inputUI, _("isisfish.error.region.already.exists")); + JOptionPane.showMessageDialog(inputUI, t("isisfish.error.region.already.exists")); } else { try { @@ -240,7 +241,7 @@ refreshRegionList(inputUI, name); } - setStatusMessage(inputUI, _("isisfish.message.creation.finished")); + setStatusMessage(inputUI, t("isisfish.message.creation.finished")); } /** @@ -251,7 +252,7 @@ */ protected void refreshRegionList(InputUI inputUI, String selectedItem) { // refresh region list - StringComboModel regionsModel = new StringComboModel(RegionStorage.getRegionNames()); + GenericComboModel regionsModel = new GenericComboModel(RegionStorage.getRegionNames()); inputUI.getFieldCurrentRegion().setModel(regionsModel); // event is fired by setSelectedItem to call #regionChange if (selectedItem != null) { @@ -268,11 +269,11 @@ * @param inputUI inputUI */ public void importRegion(InputUI inputUI) { - setStatusMessage(inputUI, _("isisfish.message.import.zip"), true); + setStatusMessage(inputUI, t("isisfish.message.import.zip"), true); try { File file = FileUtil.getFile(".*.zip$", - _("isisfish.message.import.region.zipped")); + t("isisfish.message.import.region.zipped")); if (file != null) { RegionStorage.importZip(file); @@ -280,10 +281,10 @@ } } catch (Exception eee) { - throw new IsisFishRuntimeException(_("isisfish.error.region.import"), eee); + throw new IsisFishRuntimeException(t("isisfish.error.region.import"), eee); } - setStatusMessage(inputUI, _("isisfish.message.import.finished")); + setStatusMessage(inputUI, t("isisfish.message.import.finished")); } /** @@ -292,24 +293,24 @@ * @param inputUI inputUI */ public void importRegionAndRename(InputUI inputUI) { - setStatusMessage(inputUI, _("isisfish.message.import.zip"), true); + setStatusMessage(inputUI, t("isisfish.message.import.zip"), true); try { File file = FileUtil.getFile(".*.zip$", - _("isisfish.message.import.region.zipped")); + t("isisfish.message.import.region.zipped")); if (file != null) { String newName = JOptionPane - .showInputDialog(_("isisfish.message.name.imported.region")); + .showInputDialog(t("isisfish.message.name.imported.region")); RegionStorage.importAndRenameZip(file, newName); refreshRegionList(inputUI, null); } } catch (Exception eee) { - throw new IsisFishRuntimeException(_("isisfish.error.region.import"), eee); + throw new IsisFishRuntimeException(t("isisfish.error.region.import"), eee); } - setStatusMessage(inputUI, _("isisfish.message.import.finished")); + setStatusMessage(inputUI, t("isisfish.message.import.finished")); } /** @@ -319,20 +320,20 @@ */ public void importV2Region(InputUI inputUI) { - setStatusMessage(inputUI, _("isisfish.message.import.xml.v2.file"), true); + setStatusMessage(inputUI, t("isisfish.message.import.xml.v2.file"), true); try { - File file = FileUtil.getFile(".*.xml$", _("isisfish.message.import.region.xml")); + File file = FileUtil.getFile(".*.xml$", t("isisfish.message.import.region.xml")); if (file != null) { new ImportFromV2(true).importXML(file); refreshRegionList(inputUI, null); } } catch (Exception eee) { - throw new IsisFishRuntimeException(_("isisfish.error.region.import"), eee); + throw new IsisFishRuntimeException(t("isisfish.error.region.import"), eee); } - setStatusMessage(inputUI, _("isisfish.message.import.finished")); + setStatusMessage(inputUI, t("isisfish.message.import.finished")); } /** @@ -343,7 +344,7 @@ */ public void importRegionFromSimulation(InputUI inputUI) { - setStatusMessage(inputUI, _("isisfish.message.import"), true); + setStatusMessage(inputUI, t("isisfish.message.import"), true); // first step select a simulation and new region name try { @@ -358,12 +359,12 @@ // ask new region name String regionName = JOptionPane.showInputDialog( - _("isisfish.message.import.region.name"), "region from " + t("isisfish.message.import.region.name"), "region from " + simulationName); if (StringUtils.isNotBlank(regionName)) { if (RegionStorage.getRegionNames().contains(regionName)) { - JOptionPane.showMessageDialog(inputUI, _("isisfish.error.region.already.exists")); + JOptionPane.showMessageDialog(inputUI, t("isisfish.error.region.already.exists")); } else { SimulationStorage.getSimulation(simulationName).extractRegion(regionName); @@ -372,10 +373,10 @@ } } catch (Exception eee) { - throw new IsisFishRuntimeException(_("isisfish.error.no.select.simulation"), eee); + throw new IsisFishRuntimeException(t("isisfish.error.no.select.simulation"), eee); } - setStatusMessage(inputUI, _("isisfish.message.export.done")); + setStatusMessage(inputUI, t("isisfish.message.export.done")); } /** @@ -388,7 +389,7 @@ public void exportRegion(InputUI inputUI) { try { File file = FileUtil.getFile(".*.zip$", - _("isisfish.message.import.region.zipped")); + t("isisfish.message.import.region.zipped")); if (file != null) { // add .zip extension is not set @@ -399,7 +400,7 @@ int resp = JOptionPane.YES_OPTION; if (file.exists()) { resp = JOptionPane.showConfirmDialog(inputUI, - _("isisfish.message.file.overwrite")); + t("isisfish.message.file.overwrite")); } if (resp == JOptionPane.YES_OPTION) { RegionStorage regionStorage = inputUI.getContextValue(RegionStorage.class); @@ -421,7 +422,7 @@ try { RegionStorage regionStorage = inputUI.getContextValue(RegionStorage.class); int resp = JOptionPane.showConfirmDialog(inputUI, - _("isisfish.message.confirm.remove.region", regionStorage.getName())); + t("isisfish.message.confirm.remove.region", regionStorage.getName())); if (resp == JOptionPane.YES_OPTION) { regionStorage.delete(vcsDelete); refreshRegionList(inputUI, null); @@ -439,7 +440,7 @@ public void copyRegion(InputUI inputUI) { try { String newName = JOptionPane - .showInputDialog(_("isisfish.message.new.region.name")); + .showInputDialog(t("isisfish.message.new.region.name")); if (StringUtils.isNotEmpty(newName)) { RegionStorage regionStorage = inputUI.getContextValue(RegionStorage.class); @@ -462,27 +463,27 @@ public void commitRegionInCVS(InputUI inputUI) { try { RegionStorage regionStorage = inputUI.getContextValue(RegionStorage.class); - setStatusMessage(inputUI, _("isisfish.message.commiting.region", regionStorage.getName()), true); + setStatusMessage(inputUI, t("isisfish.message.commiting.region", regionStorage.getName()), true); String msg = regionStorage.getCommentForNextCommit(); JTextArea text = new JTextArea(msg); int resp = JOptionPane.showOptionDialog(null, - new JScrollPane(text), _("isisfish.commit.message"), + new JScrollPane(text), t("isisfish.commit.message"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, // icon null, null); if (resp == JOptionPane.OK_OPTION) { regionStorage.commit(text.getText()); regionStorage.clearCommentForNextCommit(); - setStatusMessage(inputUI, _("isisfish.message.region.commited")); + setStatusMessage(inputUI, t("isisfish.message.region.commited")); } else { - setStatusMessage(inputUI, _("isisfish.message.commit.region.canceled")); + setStatusMessage(inputUI, t("isisfish.message.commit.region.canceled")); } } catch (VCSException eee) { throw new IsisFishRuntimeException("Can't commit region", eee); } catch (IOException eee) { throw new IsisFishRuntimeException("Can't commit region", eee); } - setStatusMessage(inputUI, _("isisfish.message.export.done")); + setStatusMessage(inputUI, t("isisfish.message.export.done")); } /** @@ -493,8 +494,8 @@ public void exportRegionSensitivityFactors(InputUI inputUI) { try { - File exportFile = FileUtil.getFile(_("isisfish.input.sensitivity.export.title"), - _("isisfish.common.ok"), inputUI, ".*\\.xml", "XML Files"); + File exportFile = FileUtil.getFile(t("isisfish.input.sensitivity.export.title"), + t("isisfish.common.ok"), inputUI, ".*\\.xml", "XML Files"); if (exportFile != null) { // make sur that filename ends with ".xml" @@ -503,14 +504,14 @@ } FisheryRegion fisheryRegion = inputUI.getContextValue(FisheryRegion.class); - setStatusMessage(inputUI, _("isisfish.input.sensitivity.export.running"), true); + setStatusMessage(inputUI, t("isisfish.input.sensitivity.export.running"), true); RegionExplorer explorer = new RegionExplorer(); RegionExport exportXML = new RegionExportFactorXML(exportFile); explorer.explore(fisheryRegion, exportXML); - setStatusMessage(inputUI, _("isisfish.input.sensitivity.export.complete"), true); + setStatusMessage(inputUI, t("isisfish.input.sensitivity.export.complete"), true); } else { - setStatusMessage(inputUI, _("isisfish.input.sensitivity.export.cancel"), true); + setStatusMessage(inputUI, t("isisfish.input.sensitivity.export.cancel"), true); } } catch (TopiaException eee) { throw new IsisFishRuntimeException("Can't export sensitivity factors", eee); @@ -572,7 +573,6 @@ * Get ui that can display internalClass. * * @param internalClass internal class to get ui - * @param topiaEntity topia entity to set into ui * @return ui for class * @throws Exception */ @@ -581,39 +581,30 @@ Class<? extends InputContentUI<?>> uiClass = null; if (FisheryRegion.class.isAssignableFrom(internalClass)) { uiClass = FisheryRegionUI.class; - } - else if (Cell.class.isAssignableFrom(internalClass)) { + } else if (Cell.class.isAssignableFrom(internalClass)) { uiClass = CellUI.class; - } - else if (Gear.class.isAssignableFrom(internalClass)) { + } else if (Gear.class.isAssignableFrom(internalClass)) { uiClass = GearUI.class; - } - else if (Metier.class.isAssignableFrom(internalClass)) { + } else if (Metier.class.isAssignableFrom(internalClass)) { uiClass = MetierUI.class; - } - else if (Population.class.isAssignableFrom(internalClass)) { + } else if (Population.class.isAssignableFrom(internalClass)) { uiClass = PopulationUI.class; - } - else if (Port.class.isAssignableFrom(internalClass)) { + } else if (Port.class.isAssignableFrom(internalClass)) { uiClass = PortUI.class; - } - else if (SetOfVessels.class.isAssignableFrom(internalClass)) { + } else if (SetOfVessels.class.isAssignableFrom(internalClass)) { uiClass = SetOfVesselsUI.class; - } - else if (Species.class.isAssignableFrom(internalClass)) { + } else if (Species.class.isAssignableFrom(internalClass)) { uiClass = SpeciesUI.class; - } - else if (Strategy.class.isAssignableFrom(internalClass)) { + } else if (Strategy.class.isAssignableFrom(internalClass)) { uiClass = StrategyUI.class; - } - else if (TripType.class.isAssignableFrom(internalClass)) { + } else if (TripType.class.isAssignableFrom(internalClass)) { uiClass = TripTypeUI.class; - } - else if (VesselType.class.isAssignableFrom(internalClass)) { + } else if (VesselType.class.isAssignableFrom(internalClass)) { uiClass = VesselTypeUI.class; - } - else if (Zone.class.isAssignableFrom(internalClass)) { + } else if (Zone.class.isAssignableFrom(internalClass)) { uiClass = ZoneUI.class; + } else if (Observation.class.isAssignableFrom(internalClass)) { + uiClass = ObservationUI.class; } // use map to implement UI cache @@ -712,7 +703,7 @@ fisheryTreeHelper.insertNode(selectedNode, newNode); if (nodeClass.equals(Species.class)) { FisheryTreeNode newPopNode = new FisheryTreeNode( - Population.class, n_("isisfish.input.tree.populations"), + Population.class, n("isisfish.input.tree.populations"), null, new PopulationsNodeLoador((Species)topiaEntity)); fisheryTreeHelper.insertNode(newNode, newPopNode); } @@ -771,7 +762,7 @@ if (bean != null) { FactorWizardUI factorWizardUI = new FactorWizardUI(inputContentUI); - SensitivityInputHandler handler = factorWizardUI.getHandler(); + SensitivityWizardHandler handler = factorWizardUI.getHandler(); handler.initNewFactor(factorWizardUI, bean, sensitivityMethod); factorWizardUI.pack(); factorWizardUI.setLocationRelativeTo(inputContentUI); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputOneEquationUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputOneEquationUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputOneEquationUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -43,6 +43,7 @@ <Boolean id="autoSaveModification" javaBean="true" /> <import> + static org.nuiton.i18n.I18n.t java.lang.reflect.Method; java.io.File; fr.ifremer.isisfish.entities.Formule; @@ -154,7 +155,7 @@ // TODO binding don't work if (getText() == null) { - setText(_("isisfish.common.equation")); + setText(t("isisfish.common.equation")); } editor.getCurrentEditor().removeDocumentListener(listener); @@ -199,7 +200,7 @@ protected void saveModel() { getContextValue(InputAction.class).saveAsModel(formuleCategory, "Java", editor.getText()); setComboModel(); - setInfoText(_("isisfish.message.saveModel.finished")); + setInfoText(t("isisfish.message.saveModel.finished")); } /** Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.input; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Component; import java.awt.Dimension; @@ -118,8 +118,8 @@ if (changed) { // ask user to close edition // still in edit mode, must warn user - response = JOptionPane.showConfirmDialog(null, _("isisfish.message.page.modified"), - _("isisfish.input.menu.commit"), JOptionPane.YES_NO_CANCEL_OPTION, + response = JOptionPane.showConfirmDialog(null, t("isisfish.message.page.modified"), + t("isisfish.input.menu.commit"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); if (response == JOptionPane.NO_OPTION) { cancel(); @@ -146,7 +146,7 @@ /** * Delete one entity and commit the change, try to selected intelligently * other node in tree. - * <p/> + * <p> * Refresh all ui component where name match "input<entity type without * package >.*" */ @@ -157,20 +157,20 @@ TopiaEntityContextable topiaEntity = inputContentUI.getBean(); List<TopiaEntity> allWillBeRemoved = topiaEntity.getComposite(); if (allWillBeRemoved.size() > 0) { - String label = _("isisfish.message.delete.object", topiaEntity.toString()); + String label = t("isisfish.message.delete.object", topiaEntity.toString()); String text = ""; for (TopiaEntity e : allWillBeRemoved) { text += ClassUtils.getShortClassName(e.getClass()) + " - " + e.toString() + "\n"; } int resp = showTextAreaConfirmationMessage(null, label, text, - _("isisfish.message.delete.entities"), + t("isisfish.message.delete.entities"), JOptionPane.YES_NO_OPTION); doDelete = resp == JOptionPane.YES_OPTION; } else { - String text = _("isisfish.message.confirm.delete.object", topiaEntity.toString()); + String text = t("isisfish.message.confirm.delete.object", topiaEntity.toString()); int resp = JOptionPane.showConfirmDialog(null, text, - _("isisfish.message.delete.entity"), + t("isisfish.message.delete.entity"), JOptionPane.YES_NO_OPTION); doDelete = resp == JOptionPane.YES_OPTION; } @@ -183,9 +183,9 @@ InputUI inputUI = inputContentUI.getParentContainer(InputUI.class); inputUI.getHandler().deleteTreeNode(inputUI, topiaEntity.getTopiaId()); - msg = _("isisfish.message.remove.finished"); + msg = t("isisfish.message.remove.finished"); } else { - msg = _("isisfish.message.remove.canceled"); + msg = t("isisfish.message.remove.canceled"); } } catch (TopiaException eee) { throw new IsisFishRuntimeException("Can't remove entity: " + currentEntities.get(0), eee); @@ -221,9 +221,9 @@ InputUI inputUI = inputContentUI.getContextValue(InputUI.class, JAXXUtil.PARENT); inputUI.getHandler().insertTreeNode(inputUI, type, topiaEntity); - //rootUI.setStatusMessage(_("isisfish.message.creation.finished")); + //rootUI.setStatusMessage(t("isisfish.message.creation.finished")); } catch (Exception eee) { - throw new IsisFishRuntimeException(_("isisfish.error.input.createentity"), eee); + throw new IsisFishRuntimeException(t("isisfish.error.input.createentity"), eee); } } @@ -255,16 +255,16 @@ noModif(); - //rootUI.setStatusMessage(_("isisfish.message.save.finished")); + //rootUI.setStatusMessage(t("isisfish.message.save.finished")); } catch (TopiaException eee) { // EC-20100401 : ajouté pour avoir un context // correct apres un erreur, sinon, on ne peut plus rien faire // rien sauver d'autre... try { topiaContext.rollbackTransaction(); - throw new IsisFishRuntimeException(_("isisfish.error.input.saveentity"), eee); + throw new IsisFishRuntimeException(t("isisfish.error.input.saveentity"), eee); } catch (TopiaException eee2) { - throw new IsisFishRuntimeException(_("isisfish.error.input.saveentity"), eee2); + throw new IsisFishRuntimeException(t("isisfish.error.input.saveentity"), eee2); } } } @@ -305,9 +305,9 @@ InputContentUI inputContentUI2 = inputContentUI; inputContentUI2.setBean(null); inputContentUI2.setBean(topiaEntity); - //rootUI.setStatusMessage(_("isisfish.message.cancel.finished")); + //rootUI.setStatusMessage(t("isisfish.message.cancel.finished")); } catch (TopiaException eee) { - throw new IsisFishRuntimeException(_("isisfish.error.input.cancelentity"), eee); + throw new IsisFishRuntimeException(t("isisfish.error.input.cancelentity"), eee); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Chatellier Eric + Copyright (C) 2009 - 2014 Ifremer, Code Lutin, 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 @@ -63,8 +63,8 @@ </row> <row> <cell columns='2' fill='horizontal' weightx='1.0'> - <JComboBox id="fieldCurrentRegion" onItemStateChanged='getHandler().regionChange(this, event)' - model='{new fr.ifremer.isisfish.ui.models.common.StringComboModel(fr.ifremer.isisfish.datastore.RegionStorage.getRegionNames())}'/> + <JComboBox id="fieldCurrentRegion" onItemStateChanged='getHandler().regionChange(this, event)' genericType="String" + model='{new fr.ifremer.isisfish.ui.models.common.GenericComboModel<String>(fr.ifremer.isisfish.datastore.RegionStorage.getRegionNames())}'/> </cell> </row> </Table> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/MetierSeasonInfoSpeciesUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/MetierSeasonInfoSpeciesUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/MetierSeasonInfoSpeciesUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -46,7 +46,6 @@ java.util.ArrayList java.util.List java.awt.Dimension - javax.swing.DefaultComboBoxModel </import> <BeanValidator id='validator' context="metier" Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/MetierUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/MetierUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/MetierUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -27,14 +27,14 @@ <fr.ifremer.isisfish.entities.Metier id='bean' javaBean='null'/> <import> - static org.nuiton.i18n.I18n._ - static org.nuiton.i18n.I18n.n_ + static org.nuiton.i18n.I18n.t + static org.nuiton.i18n.I18n.n </import> <script><![CDATA[ protected void $afterCompleteSetup() { - setButtonTitle(_("isisfish.input.continueTripTypes")); - setNextPath(n_("isisfish.input.tree.triptypes")); + setButtonTitle(t("isisfish.input.continueTripTypes")); + setNextPath(n("isisfish.input.tree.triptypes")); // install change listener // (depends on sensitivity can't be done on constructor) Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/input/ObservationUI.jaxx (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/input/ObservationUI.jaxx) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/ObservationUI.jaxx (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/ObservationUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,178 @@ +<!-- + #%L + IsisFish + + $Id$ + $HeadURL$ + %% + Copyright (C) 2014 Ifremer, Code Lutin, 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 + 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 Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<fr.ifremer.isisfish.ui.input.InputContentUI + superGenericType='fr.ifremer.isisfish.entities.Observation'> + + <!-- bean property --> + <fr.ifremer.isisfish.entities.Observation + id='bean' javaBean='null' /> + + <import> + static org.nuiton.i18n.I18n.t + static org.nuiton.i18n.I18n.n + org.nuiton.math.matrix.gui.MatrixPanelEvent + org.nuiton.math.matrix.MatrixND + java.beans.PropertyChangeEvent + java.beans.PropertyChangeListener + </import> + + <BeanValidator id='validator' + bean='{getBean()}' beanClass='fr.ifremer.isisfish.entities.Observation' + uiClass="jaxx.runtime.validator.swing.ui.ImageValidationUI"> + <field name="name" component="fieldObservationName" /> + </BeanValidator> + + <script><![CDATA[ + +protected void $afterCompleteSetup() { + addPropertyChangeListener(PROPERTY_BEAN, new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { + if (evt.getNewValue() == null) { + fieldObservationValue.setMatrix(null); + } + if (evt.getNewValue() != null) { + setObservationValueMatrix(); + } + } + }); +} + +protected void setObservationValueMatrix() { + MatrixND prop = getBean().getValue(); + if (prop != null) { + fieldObservationValue.setMatrix(prop.copy()); + } else { + fieldObservationValue.setMatrix(null); + } +} + +protected void createObservationValueMatrix() { + getAction().createObservationValueMatrix(getBean()); + setObservationValueMatrix(); +} + +protected void observationValueMatrixChanged(MatrixPanelEvent event) { + MatrixND mat = fieldObservationValue.getMatrix(); + if (getBean() != null && mat != null) { + getBean().setValue(mat.copy()); + } +} + + ]]></script> + <JPanel id="body"> + <Table> + <row> + <cell fill='both' weightx='1.0' weighty='1.0'> + <Table> + <row> + <cell columns='2' fill='horizontal' weightx='1.0'> + <JLabel text="isisfish.observation.name" enabled='{isActive()}' /> + </cell> + </row> + <row> + <cell columns='2' fill='horizontal' weightx='1.0'> + <JTextField id="fieldObservationName" + text='{SwingUtil.getStringValue(getBean().getName())}' + onKeyReleased='getBean().setName(fieldObservationName.getText())' + enabled='{isActive()}' decorator='boxed' /> + </cell> + </row> + <row> + <cell columns='2' fill='horizontal' weightx='1.0'> + <JLabel text="isisfish.observation.comment" + enabled='{isActive()}' /> + </cell> + </row> + <row> + <cell columns='2' fill='both' weighty='0.2' weightx='1.0'> + <JScrollPane> + <JTextArea id="fieldObservationComment" + text='{SwingUtil.getStringValue(getBean().getComment())}' + onKeyReleased='getBean().setComment(fieldObservationComment.getText())' + enabled='{isActive()}' decorator='boxed' /> + </JScrollPane> + </cell> + </row> + <row> + <cell columns='2' fill='horizontal' weightx='1.0'> + <JLabel text="isisfish.observation.value" + enabled='{isActive()}' /> + </cell> + </row> + <row> + <cell columns='2' fill='both' weighty='1' weightx='1.0'> + <org.nuiton.math.matrix.gui.MatrixPanelEditor + id="fieldObservationValue" onMatrixChanged="observationValueMatrixChanged(event)" + enabled='{isActive()}' decorator='boxed' + _sensitivityBean='{fr.ifremer.isisfish.entities.Observation.class}' + _sensitivityMethod='"Value"' /> + </cell> + </row> + <row> + <cell> + <JPanel/> + </cell> + <cell fill='horizontal' weightx='1.0'> + <JButton text="isisfish.common.newMatrix" onActionPerformed='createObservationValueMatrix()' enabled='{isActive()}' decorator='boxed'/> + </cell> + </row> + </Table> + </cell> + </row> + <row> + <cell fill='horizontal' weightx='1.0'> + <Table> + <row> + <cell fill='horizontal' weightx='0.5'> + <JButton id='save' decorator='boxed' + text="isisfish.common.save" + enabled="{validator.isValid() && validator.isChanged()}" + onActionPerformed="getSaveVerifier().save();validator.setChanged(false);" /> + </cell> + <cell fill='horizontal' weightx='0.5'> + <JButton id='cancel' decorator='boxed' + text="isisfish.common.cancel" enabled="{validator.isChanged()}" + onActionPerformed="getSaveVerifier().cancel()" /> + </cell> + </row> + <row> + <cell fill='horizontal' weightx='0.5'> + <JButton id='create' decorator='boxed' + text="isisfish.common.new" enabled="{!validator.isChanged()}" + onActionPerformed="getSaveVerifier().create(Observation.class)" /> + </cell> + <cell fill='horizontal' weightx='0.5'> + <JButton id='delete' decorator='boxed' + text="isisfish.common.remove" + enabled="{!validator.isChanged() && getBean() != null}" + onActionPerformed="getSaveVerifier().delete()" /> + </cell> + </row> + </Table> + </cell> + </row> + </Table> + </JPanel> +</fr.ifremer.isisfish.ui.input.InputContentUI> Deleted: trunk/src/main/java/fr/ifremer/isisfish/ui/input/OpenMapEvents.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/OpenMapEvents.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/OpenMapEvents.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,131 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2005 - 2010 Ifremer, Code Lutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package fr.ifremer.isisfish.ui.input; - -import java.awt.event.MouseEvent; - -import com.bbn.openmap.Layer; -import com.bbn.openmap.event.MapMouseListener; -import com.bbn.openmap.event.MapMouseMode; -import com.bbn.openmap.event.ProjectionEvent; -import com.bbn.openmap.event.SelectMouseMode; - -import fr.ifremer.isisfish.map.CellSelectionLayer; -import fr.ifremer.isisfish.map.IsisMapBean; - -/** - * OpenMapEvents.java - * - * Created: 5 septembre 2005 03:21:41 CEST - * - * @author Benjamin POUSSIN <poussin@codelutin.com> - * @version $Revision: 202 $ - * - * Last update: $Date: 2006-06-30 18:39:09 +0200 (ven, 30 jun 2006) $ - * by : $Author: bpoussin $ - */ -public abstract class OpenMapEvents extends Layer implements MapMouseListener { // OpenMapEvents - - /** serialVersionUID. */ - private static final long serialVersionUID = -8365120112075269288L; - - /** - * SelectMouseMode property: Null, Distance, Nav, Select - */ - protected MapMouseMode mouseMode; - protected IsisMapBean map; - - protected int selectMode = CellSelectionLayer.SINGLE_SELECTION; - - /** - * Constructor. - * - * Register himself to {@code map} mapMouseListener. - * Also set mouseMode and selectMode on map. - * - * @param map map bean - * @param mouseMode mouse mode - * @param selectMode select mode - */ - public OpenMapEvents(IsisMapBean map, MapMouseMode mouseMode, int selectMode) { - super(); - this.mouseMode = mouseMode; - this.map = map; - this.selectMode = selectMode; - map.setSelectionMode(selectMode); - map.setActiveMouseMode(mouseMode); - map.addMapMouseListener(this); - - } - - @Override - public void projectionChanged(ProjectionEvent e) { - // do nothing, it's not reel layer - } - - @Override - public String[] getMouseModeServiceList() { - return new String[] { SelectMouseMode.modeID }; - } - - @Override - public boolean mouseClicked(MouseEvent e) { - return true; - } - - @Override - public boolean mouseDragged(MouseEvent e) { - return false; - } - - @Override - public void mouseEntered(MouseEvent e) { - } - - @Override - public void mouseExited(MouseEvent e) { - } - - @Override - public void mouseMoved() { - } - - @Override - public boolean mouseMoved(MouseEvent e) { - return false; - } - - @Override - public boolean mousePressed(MouseEvent e) { - return false; - } - - @Override - public boolean mouseReleased(MouseEvent e) { - return false; - } - -} // OpenMapEvents Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationBasicsUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationBasicsUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationBasicsUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -28,6 +28,7 @@ <fr.ifremer.isisfish.entities.Population id='bean' javaBean='null'/> <import> + static org.nuiton.i18n.I18n.t fr.ifremer.isisfish.entities.Species; fr.ifremer.isisfish.entities.PopulationGroup; fr.ifremer.isisfish.entities.Population; @@ -82,8 +83,8 @@ */ protected void createGroups() { - int response = JOptionPane.showConfirmDialog(this, _("isisfish.populationBasics.confirmCreateGroups"), - _("isisfish.common.confirm"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); + int response = JOptionPane.showConfirmDialog(this, t("isisfish.populationBasics.confirmCreateGroups"), + t("isisfish.common.confirm"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); if (response == JOptionPane.YES_OPTION) { JFrame wizardFrame = new JFrame(); @@ -91,7 +92,7 @@ WizardGroupCreationUI wizard = new WizardGroupCreationUI(this); wizard.init(this); wizardFrame.add(wizard, BorderLayout.CENTER); - wizardFrame.setTitle(_("isisfish.wizardGroupCreation.title")); + wizardFrame.setTitle(t("isisfish.wizardGroupCreation.title")); Species species = getBean().getSpecies(); wizard.setAgeType(species.getAgeGroupType()); if (wizard.isAgeType()) { @@ -129,7 +130,7 @@ // create node and select it Population population = getContextValue(InputAction.class).createPopulation(getTopiaContext(), species); inputUI.getHandler().insertTreeNode(inputUI, Population.class, population); - setInfoText(_("isisfish.message.creation.finished")); + setInfoText(t("isisfish.message.creation.finished")); } ]]> </script> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationMigrationUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationMigrationUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationMigrationUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -30,6 +30,7 @@ <fr.ifremer.isisfish.entities.PopulationSeasonInfo id='popInfo' javaBean='null'/> <import> + static org.nuiton.i18n.I18n.t fr.ifremer.isisfish.entities.PopulationSeasonInfo; fr.ifremer.isisfish.entities.Population; fr.ifremer.isisfish.ui.input.model.PopulationSeasonInfoComboModel; @@ -163,17 +164,17 @@ <cell columns='2' fill='both' weightx='1.0' weighty='0.7'> <JPanel id="hidablePanel" layout='{new CardLayout()}'> <JTabbedPane id="fieldUseMatrix" constraints='"fieldUseMatrix"' enabled='{getPopInfo() != null}'> - <tab title='{_("isisfish.populationMigrationMigration.title")}'> + <tab title='{t("isisfish.populationMigrationMigration.title")}'> <PopulationMigrationMigrationUI id="populationMigrationMigrationUI" constructorParams='this' decorator='boxed' bean="{getBean()}" popInfo="{getPopInfo()}" active="{isActive() && getPopInfo() != null}" _sensitivityBean='{PopulationSeasonInfo.class}' _sensitivityMethod='"MigrationMatrix"' /> </tab> - <tab title='{_("isisfish.populationMigrationImmigration.title")}'> + <tab title='{t("isisfish.populationMigrationImmigration.title")}'> <PopulationMigrationImmigrationUI id="populationMigrationImmigrationUI" constructorParams='this' decorator='boxed' bean="{getBean()}" popInfo="{getPopInfo()}" active="{isActive() && getPopInfo() != null}" _sensitivityBean='{PopulationSeasonInfo.class}' _sensitivityMethod='"ImmigrationMatrix"' /> </tab> - <tab title='{_("isisfish.populationMigrationEmigration.title")}'> + <tab title='{t("isisfish.populationMigrationEmigration.title")}'> <PopulationMigrationEmigrationUI id="populationMigrationEmigrationUI" constructorParams='this' decorator='boxed' bean="{getBean()}" popInfo="{getPopInfo()}" active="{isActive() && getPopInfo() != null}" _sensitivityBean='{PopulationSeasonInfo.class}' _sensitivityMethod='"EmigrationMatrix"' /> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationSeasonSpacializedUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationSeasonSpacializedUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationSeasonSpacializedUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -32,6 +32,7 @@ <Boolean id='ageGroupType' javaBean='false'/> <import> + static org.nuiton.i18n.I18n.t fr.ifremer.isisfish.entities.PopulationSeasonInfo; fr.ifremer.isisfish.ui.util.ErrorHelper; org.nuiton.math.matrix.MatrixND; @@ -77,7 +78,7 @@ if (log.isErrorEnabled()) { log.error("Can't (un)spacialize Matrix Change Of Group", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.input.spacializematrix"), eee); + ErrorHelper.showErrorDialog(t("isisfish.error.input.spacializematrix"), eee); } } @@ -98,7 +99,7 @@ } MatrixPanelEditor panel = new MatrixPanelEditor(false, 800, 300); panel.setMatrix(lengthChangeMatrix); - JOptionPane.showMessageDialog(this, panel, _("isisfish.populationSeasons.spacialized.visualisation"), JOptionPane.INFORMATION_MESSAGE); + JOptionPane.showMessageDialog(this, panel, t("isisfish.populationSeasons.spacialized.visualisation"), JOptionPane.INFORMATION_MESSAGE); } ]]></script> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -28,13 +28,14 @@ <fr.ifremer.isisfish.entities.Population id='bean' javaBean='null'/> <import> - static org.nuiton.i18n.I18n.n_ + static org.nuiton.i18n.I18n.t + static org.nuiton.i18n.I18n.n </import> <script><![CDATA[ protected void $afterCompleteSetup() { - setButtonTitle(_("isisfish.input.continueGears")); - setNextPath(n_("isisfish.input.tree.gears")); + setButtonTitle(t("isisfish.input.continueGears")); + setNextPath(n("isisfish.input.tree.gears")); // install change listener // (depends on sensitivity can't be done on constructor) Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/PortUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/PortUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/PortUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -28,13 +28,13 @@ <fr.ifremer.isisfish.entities.Port id='bean' javaBean='null'/> <import> - static org.nuiton.i18n.I18n.n_ + static org.nuiton.i18n.I18n.t + static org.nuiton.i18n.I18n.n fr.ifremer.isisfish.entities.Port fr.ifremer.isisfish.entities.Cell - com.bbn.openmap.gui.Tool - com.bbn.openmap.gui.OMToolSet fr.ifremer.isisfish.map.CellSelectionLayer fr.ifremer.isisfish.map.CopyMapToClipboardListener + fr.ifremer.isisfish.map.OpenMapEvents com.bbn.openmap.event.SelectMouseMode java.beans.PropertyChangeEvent java.beans.PropertyChangeListener @@ -49,16 +49,11 @@ </BeanValidator> <script><![CDATA[ -protected OMToolSet toolSet = new OMToolSet(); - boolean portChanged = true; protected void $afterCompleteSetup() { - toolSet.setupListeners(portMap); - toolMap.add((Tool)toolSet); - - // add copy to clipboard support - portMap.addMapMouseListener(new CopyMapToClipboardListener(portMap)); + + //portMap.init(portMapInfo); new OpenMapEvents(portMap, new SelectMouseMode(false), CellSelectionLayer.SINGLE_SELECTION) { @Override public boolean mouseClicked(MouseEvent e) { @@ -80,8 +75,8 @@ } }; - setButtonTitle(_("isisfish.input.continueSpecies")); - setNextPath(n_("isisfish.input.tree.species")); + setButtonTitle(t("isisfish.input.continueSpecies")); + setNextPath(n("isisfish.input.tree.species")); addPropertyChangeListener(PROPERTY_BEAN, new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { @@ -191,12 +186,11 @@ </row> </Table> <JPanel id='map' layout='{new BorderLayout()}'> - <com.bbn.openmap.gui.ToolPanel id='toolMap' javaBean='new com.bbn.openmap.gui.ToolPanel()' - constraints='BorderLayout.NORTH' decorator='boxed' enabled='{getBean() != null}' /> <fr.ifremer.isisfish.map.IsisMapBean id='portMap' javaBean='new fr.ifremer.isisfish.map.IsisMapBean()' constraints='BorderLayout.CENTER' selectionMode="{fr.ifremer.isisfish.map.CellSelectionLayer.SINGLE_SELECTION}" decorator='boxed' enabled='{getBean() != null}' fisheryRegion='{getFisheryRegion()}' selectedCells='{getBean() == null ? null : bean.getCell()}' /> + <com.bbn.openmap.InformationDelegator id="portMapInfo" constraints='BorderLayout.SOUTH' /> </JPanel> </JSplitPane> </JPanel> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/SetOfVesselsBasicsUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/SetOfVesselsBasicsUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/SetOfVesselsBasicsUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -33,7 +33,6 @@ fr.ifremer.isisfish.entities.SetOfVessels fr.ifremer.isisfish.ui.input.model.PortComboModel fr.ifremer.isisfish.ui.input.model.VesselTypeComboModel - jaxx.runtime.swing.editor.NumberEditor java.beans.PropertyChangeEvent java.beans.PropertyChangeListener </import> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/SetOfVesselsUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/SetOfVesselsUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/SetOfVesselsUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -27,13 +27,14 @@ <fr.ifremer.isisfish.entities.SetOfVessels id='bean' javaBean='null'/> <import> - static org.nuiton.i18n.I18n.n_ + static org.nuiton.i18n.I18n.t + static org.nuiton.i18n.I18n.n </import> <script><![CDATA[ protected void $afterCompleteSetup() { - setButtonTitle(_("isisfish.input.continueStrategies")); - setNextPath(n_("isisfish.input.tree.strategies")); + setButtonTitle(t("isisfish.input.continueStrategies")); + setNextPath(n("isisfish.input.tree.strategies")); // install change listener // (depends on sensitivity can't be done on constructor) Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/SpeciesUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/SpeciesUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/SpeciesUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -28,9 +28,9 @@ <fr.ifremer.isisfish.entities.Species id='bean' javaBean='null'/> <import> - static org.nuiton.i18n.I18n.n_ + static org.nuiton.i18n.I18n.t + static org.nuiton.i18n.I18n.n fr.ifremer.isisfish.entities.Species; - jaxx.runtime.swing.editor.NumberEditor; java.beans.PropertyChangeEvent; java.beans.PropertyChangeListener; </import> @@ -43,7 +43,7 @@ <script><![CDATA[ protected void $afterCompleteSetup() { - setButtonTitle(_("isisfish.input.continuePopulations")); + setButtonTitle(t("isisfish.input.continuePopulations")); addPropertyChangeListener(PROPERTY_BEAN, new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { @@ -68,10 +68,10 @@ InputUI inputUI = getParentContainer(InputUI.class); if (inputUI != null) { if (getBean() == null) { - inputUI.getHandler().setTreeSelection(this, n_("isisfish.input.tree.species"), n_("isisfish.input.tree.populations")); + inputUI.getHandler().setTreeSelection(this, n("isisfish.input.tree.species"), n("isisfish.input.tree.populations")); } else { - inputUI.getHandler().setTreeSelection(this, getBean().getTopiaId(), n_("isisfish.input.tree.populations")); + inputUI.getHandler().setTreeSelection(this, getBean().getTopiaId(), n("isisfish.input.tree.populations")); } } } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/StrategyMonthInfoUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/StrategyMonthInfoUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/StrategyMonthInfoUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -40,10 +40,11 @@ <fr.ifremer.isisfish.entities.StrategyMonthInfo id='strategyMonthInfo11' javaBean='null'/> <import> + static org.nuiton.i18n.I18n.t org.apache.commons.lang3.StringUtils java.beans.PropertyChangeEvent java.beans.PropertyChangeListener - static org.nuiton.i18n.I18n._ + static org.nuiton.i18n.I18n.t org.nuiton.math.matrix.gui.MatrixPanelEvent org.nuiton.math.matrix.MatrixND </import> @@ -193,55 +194,55 @@ <row> <cell fill='horizontal' weightx='1' insets='0'> <StrategyOneMonthInfoUI id='strategyJanuary' bean="{getBean()}" active="{isActive()}" constructorParams='this' - strategyMonthInfo="{getStrategyMonthInfo0()}" strategieMonthText='{StringUtils.capitalize(_("isisfish.month.january"))}' /> + strategyMonthInfo="{getStrategyMonthInfo0()}" strategieMonthText='{StringUtils.capitalize(t("isisfish.month.january"))}' /> </cell> <cell fill='horizontal' weightx='1' insets='0'> <StrategyOneMonthInfoUI id='strategyFebuary' bean="{getBean()}" active="{isActive()}" constructorParams='this' - strategyMonthInfo="{getStrategyMonthInfo1()}" strategieMonthText='{StringUtils.capitalize(_("isisfish.month.february"))}' /> + strategyMonthInfo="{getStrategyMonthInfo1()}" strategieMonthText='{StringUtils.capitalize(t("isisfish.month.february"))}' /> </cell> <cell fill='horizontal' weightx='1' insets='0'> <StrategyOneMonthInfoUI id='strategyMarch' bean="{getBean()}" active="{isActive()}" constructorParams='this' - strategyMonthInfo="{getStrategyMonthInfo2()}" strategieMonthText='{StringUtils.capitalize(_("isisfish.month.march"))}' /> + strategyMonthInfo="{getStrategyMonthInfo2()}" strategieMonthText='{StringUtils.capitalize(t("isisfish.month.march"))}' /> </cell> <cell fill='horizontal' weightx='1' insets='0'> <StrategyOneMonthInfoUI id='strategyApril' bean="{getBean()}" active="{isActive()}" constructorParams='this' - strategyMonthInfo="{getStrategyMonthInfo3()}" strategieMonthText='{StringUtils.capitalize(_("isisfish.month.april"))}' /> + strategyMonthInfo="{getStrategyMonthInfo3()}" strategieMonthText='{StringUtils.capitalize(t("isisfish.month.april"))}' /> </cell> </row> <row> <cell fill='horizontal' weightx='1' insets='0'> <StrategyOneMonthInfoUI id='strategyMay' bean="{getBean()}" active="{isActive()}" constructorParams='this' - strategyMonthInfo="{getStrategyMonthInfo4()}" strategieMonthText='{StringUtils.capitalize(_("isisfish.month.may"))}' /> + strategyMonthInfo="{getStrategyMonthInfo4()}" strategieMonthText='{StringUtils.capitalize(t("isisfish.month.may"))}' /> </cell> <cell fill='horizontal' weightx='1' insets='0'> <StrategyOneMonthInfoUI id='strategyJune' bean="{getBean()}" active="{isActive()}" constructorParams='this' - strategyMonthInfo="{getStrategyMonthInfo5()}" strategieMonthText='{StringUtils.capitalize(_("isisfish.month.june"))}' /> + strategyMonthInfo="{getStrategyMonthInfo5()}" strategieMonthText='{StringUtils.capitalize(t("isisfish.month.june"))}' /> </cell> <cell fill='horizontal' weightx='1' insets='0'> <StrategyOneMonthInfoUI id='strategyJuly' bean="{getBean()}" active="{isActive()}" constructorParams='this' - strategyMonthInfo="{getStrategyMonthInfo6()}" strategieMonthText='{StringUtils.capitalize(_("isisfish.month.july"))}' /> + strategyMonthInfo="{getStrategyMonthInfo6()}" strategieMonthText='{StringUtils.capitalize(t("isisfish.month.july"))}' /> </cell> <cell fill='horizontal' weightx='1' insets='0'> <StrategyOneMonthInfoUI id='strategyAugust' bean="{getBean()}" active="{isActive()}" constructorParams='this' - strategyMonthInfo="{getStrategyMonthInfo7()}" strategieMonthText='{StringUtils.capitalize(_("isisfish.month.august"))}' /> + strategyMonthInfo="{getStrategyMonthInfo7()}" strategieMonthText='{StringUtils.capitalize(t("isisfish.month.august"))}' /> </cell> </row> <row> <cell fill='horizontal' weightx='1' insets='0'> <StrategyOneMonthInfoUI id='strategySeptember' bean="{getBean()}" active="{isActive()}" constructorParams='this' - strategyMonthInfo="{getStrategyMonthInfo8()}" strategieMonthText='{StringUtils.capitalize(_("isisfish.month.september"))}' /> + strategyMonthInfo="{getStrategyMonthInfo8()}" strategieMonthText='{StringUtils.capitalize(t("isisfish.month.september"))}' /> </cell> <cell fill='horizontal' weightx='1' insets='0'> <StrategyOneMonthInfoUI id='strategyOctober' bean="{getBean()}" active="{isActive()}" constructorParams='this' - strategyMonthInfo="{getStrategyMonthInfo9()}" strategieMonthText='{StringUtils.capitalize(_("isisfish.month.october"))}' /> + strategyMonthInfo="{getStrategyMonthInfo9()}" strategieMonthText='{StringUtils.capitalize(t("isisfish.month.october"))}' /> </cell> <cell fill='horizontal' weightx='1' insets='0'> <StrategyOneMonthInfoUI id='strategyNovember' bean="{getBean()}" active="{isActive()}" constructorParams='this' - strategyMonthInfo="{getStrategyMonthInfo10()}" strategieMonthText='{StringUtils.capitalize(_("isisfish.month.november"))}' /> + strategyMonthInfo="{getStrategyMonthInfo10()}" strategieMonthText='{StringUtils.capitalize(t("isisfish.month.november"))}' /> </cell> <cell fill='horizontal' weightx='1' insets='0'> <StrategyOneMonthInfoUI id='strategyDecember' bean="{getBean()}" active="{isActive()}" constructorParams='this' - strategyMonthInfo="{getStrategyMonthInfo11()}" strategieMonthText='{StringUtils.capitalize(_("isisfish.month.december"))}' /> + strategyMonthInfo="{getStrategyMonthInfo11()}" strategieMonthText='{StringUtils.capitalize(t("isisfish.month.december"))}' /> </cell> </row> <row> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/StrategyOneMonthInfoUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/StrategyOneMonthInfoUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/StrategyOneMonthInfoUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -34,7 +34,6 @@ <import> fr.ifremer.isisfish.entities.Strategy fr.ifremer.isisfish.entities.StrategyMonthInfo - jaxx.runtime.swing.editor.NumberEditor fr.ifremer.isisfish.entities.TripType java.beans.PropertyChangeEvent java.beans.PropertyChangeListener Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/TripTypeUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/TripTypeUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/TripTypeUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -28,7 +28,8 @@ <fr.ifremer.isisfish.entities.TripType id='bean' javaBean='null'/> <import> - static org.nuiton.i18n.I18n.n_ + static org.nuiton.i18n.I18n.t + static org.nuiton.i18n.I18n.n fr.ifremer.isisfish.entities.TripType fr.ifremer.isisfish.types.TimeUnit java.beans.PropertyChangeEvent @@ -43,8 +44,8 @@ <script><![CDATA[ protected void $afterCompleteSetup() { - setButtonTitle(_("isisfish.input.continueVesselTypes")); - setNextPath(n_("isisfish.input.tree.vesseltypes")); + setButtonTitle(t("isisfish.input.continueVesselTypes")); + setNextPath(n("isisfish.input.tree.vesseltypes")); addPropertyChangeListener(PROPERTY_BEAN, new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/VesselTypeUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/VesselTypeUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/VesselTypeUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -28,12 +28,12 @@ <fr.ifremer.isisfish.entities.VesselType id='bean' javaBean='null'/> <import> - static org.nuiton.i18n.I18n.n_ + static org.nuiton.i18n.I18n.t + static org.nuiton.i18n.I18n.n fr.ifremer.isisfish.entities.VesselType fr.ifremer.isisfish.entities.TripType fr.ifremer.isisfish.types.TimeUnit fr.ifremer.isisfish.ui.input.model.TripTypeListModel - jaxx.runtime.swing.editor.NumberEditor java.beans.PropertyChangeEvent java.beans.PropertyChangeListener </import> @@ -48,8 +48,8 @@ protected boolean init; protected void $afterCompleteSetup() { - setButtonTitle(_("isisfish.input.continueSetOfVessels")); - setNextPath(n_("isisfish.input.tree.setofvessels")); + setButtonTitle(t("isisfish.input.continueSetOfVessels")); + setNextPath(n("isisfish.input.tree.setofvessels")); addPropertyChangeListener(PROPERTY_BEAN, new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/WizardGroupCreationUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/WizardGroupCreationUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/WizardGroupCreationUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -270,10 +270,10 @@ int numberOfGroup = getNumberOfGroup(); double step = getGroupSize(); if (numberOfGroup < 0){ -// return new OutputView("Error.xml", "error", _("isisfish.error.number.classes.upper.zero")); +// return new OutputView("Error.xml", "error", t("isisfish.error.number.classes.upper.zero")); } if (step == 0){ -// return new OutputView("Error.xml", "error", _("isisfish.error.no.null.time.step")); +// return new OutputView("Error.xml", "error", t"isisfish.error.no.null.time.step")); } double maxLength = minLength; @@ -295,7 +295,7 @@ Equation equation = pop.getGrowth(); if(equation == null){ -// return new OutputView("Error.xml", "error", _("isisfish.error.growth.equation.before.create.group.population")); +// return new OutputView("Error.xml", "error", t("isisfish.error.growth.equation.before.create.group.population")); } double deltat = -1; double Lmin = minLength; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/ZoneBasicsUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/ZoneBasicsUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/ZoneBasicsUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -28,16 +28,14 @@ <fr.ifremer.isisfish.entities.Zone id='bean' javaBean='null'/> <import> - static org.nuiton.i18n.I18n.n_ javax.swing.event.ListSelectionEvent fr.ifremer.isisfish.entities.Cell fr.ifremer.isisfish.entities.Zone fr.ifremer.isisfish.map.CellSelectionLayer fr.ifremer.isisfish.map.CopyMapToClipboardListener + fr.ifremer.isisfish.map.OpenMapEvents fr.ifremer.isisfish.ui.input.model.TopiaEntityListModel com.bbn.openmap.event.SelectMouseMode - com.bbn.openmap.gui.Tool - com.bbn.openmap.gui.OMToolSet java.beans.PropertyChangeEvent java.beans.PropertyChangeListener java.awt.event.MouseEvent @@ -52,15 +50,9 @@ </BeanValidator> <script><![CDATA[ -protected OMToolSet toolSet = new OMToolSet(); - protected void $afterCompleteSetup() { - toolSet.setupListeners(zoneMap); - toolMap.add((Tool)toolSet); - - // add copy to clipboard support - zoneMap.addMapMouseListener(new CopyMapToClipboardListener(zoneMap)); + //zoneMap.init(zoneMapInfo); new OpenMapEvents(zoneMap, new SelectMouseMode(false), CellSelectionLayer.MULT_SELECTION) { @Override public boolean mouseClicked(MouseEvent e) { @@ -191,15 +183,12 @@ </row> </Table> <JPanel id='map' layout='{new BorderLayout()}'> - <com.bbn.openmap.gui.ToolPanel id='toolMap' - javaBean='new com.bbn.openmap.gui.ToolPanel()' - decorator='boxed' constraints='BorderLayout.NORTH'/> <fr.ifremer.isisfish.map.IsisMapBean id='zoneMap' javaBean='new fr.ifremer.isisfish.map.IsisMapBean()' selectionMode="{fr.ifremer.isisfish.map.CellSelectionLayer.MULT_SELECTION}" fisheryRegion='{getFisheryRegion()}' selectedCells='{getBean()==null?null:bean.getCell()}' decorator='boxed' constraints='BorderLayout.CENTER'/> - <!-- FIXME echatellier 20110429 : binding --> + <com.bbn.openmap.InformationDelegator id="zoneMapInfo" constraints='BorderLayout.SOUTH' /> </JPanel> </JSplitPane> </JPanel> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/ZoneUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/ZoneUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/ZoneUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -27,15 +27,14 @@ <fr.ifremer.isisfish.entities.Zone id='bean' javaBean='null'/> <import> - static org.nuiton.i18n.I18n.n_ - java.beans.PropertyChangeEvent; - java.beans.PropertyChangeListener; + static org.nuiton.i18n.I18n.t + static org.nuiton.i18n.I18n.n </import> <script><![CDATA[ protected void $afterCompleteSetup() { - setButtonTitle(_("isisfish.input.continuePorts")); - setNextPath(n_("isisfish.input.tree.ports")); + setButtonTitle(t("isisfish.input.continuePorts")); + setNextPath(n("isisfish.input.tree.ports")); // install change listener // (depends on sensitivity can't be done on constructor) Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckRegion.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckRegion.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckRegion.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.input.check; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.util.Collection; import java.util.Collections; @@ -33,7 +33,7 @@ import java.util.List; import java.util.Set; -import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.nuiton.math.matrix.MatrixIterator; import org.nuiton.math.matrix.MatrixND; @@ -66,7 +66,7 @@ * * Created: 9 janv. 2004 * - * @author Benjamin Poussin <poussin@codelutin.com> + * @author Benjamin Poussin <poussin@codelutin.com> * @version $Revision$ * * Mise a jour: $Date$ @@ -95,10 +95,10 @@ static public void check(Object parent, String name, Equation eq, CheckResult result) { if (eq == null) { - result.addError(parent, _("isisfish.error.invalid.nullequation", name)); + result.addError(parent, t("isisfish.error.invalid.nullequation", name)); } else if (0 != EvaluatorHelper.check(eq.getJavaInterface(), eq.getContent(), null)) { - result.addError(eq, _("isisfish.error.invalid.equation")); + result.addError(eq, t("isisfish.error.invalid.equation")); } } @@ -109,47 +109,47 @@ static public void check(PopulationGroup classPop, CheckResult result){ // error if (classPop.getMeanWeight() < 0) { - result.addError(classPop, _("isisfish.error.invalid.mean.weight")); + result.addError(classPop, t("isisfish.error.invalid.mean.weight")); } // warning if (classPop.getMeanWeight() == 0) { - result.addWarning(classPop, _("isisfish.error.not.null.mean.weight")); + result.addWarning(classPop, t("isisfish.error.not.null.mean.weight")); } } static public void check(Gear engin, CheckResult result) { if (StringUtils.isBlank(engin.getName())) { - result.addWarning(engin, _("isisfish.error.empty.name")); + result.addWarning(engin, t("isisfish.error.empty.name")); } if (StringUtils.isBlank(engin.getEffortUnit())) { - result.addWarning(engin, _("isisfish.error.empty.unit")); + result.addWarning(engin, t("isisfish.error.empty.unit")); } Collection<Selectivity> selectivites = engin.getPopulationSelectivity(); if (CollectionUtils.isEmpty(selectivites)) { - result.addWarning(engin, _("isisfish.error.empty.selectivity")); + result.addWarning(engin, t("isisfish.error.empty.selectivity")); } else { for (Selectivity selectivity : selectivites) { check(selectivity, result); } } if (engin.getPossibleValue() == null) { - result.addWarning(engin, _("isisfish.error.invalid.range")); + result.addWarning(engin, t("isisfish.error.invalid.range")); } if (StringUtils.isBlank(engin.getParameterName())) { - result.addInfo(engin, _("isisfish.error.empty.params.name")); + result.addInfo(engin, t("isisfish.error.empty.params.name")); } } static public void check(MetierSeasonInfo infoSaisonMetier, CheckResult result){ if (CollectionUtils.isEmpty(infoSaisonMetier.getZone())) { - result.addWarning(infoSaisonMetier, _("isisfish.error.no.sector")); + result.addWarning(infoSaisonMetier, t("isisfish.error.no.sector")); } Collection<TargetSpecies> especeCaptus = infoSaisonMetier.getSpeciesTargetSpecies(); if (CollectionUtils.isEmpty(especeCaptus)) { - result.addInfo(infoSaisonMetier, _("isisfish.error.empty.species")); + result.addInfo(infoSaisonMetier, t("isisfish.error.empty.species")); } else { for (TargetSpecies i : especeCaptus) { check(i, result); @@ -200,111 +200,111 @@ try { if (isEmptyMatrix(infoSaisonPop, infoSaisonPop.getMigrationMatrix())) { - result.addInfo(infoSaisonPop, _("isisfish.error.empty.migration")); + result.addInfo(infoSaisonPop, t("isisfish.error.empty.migration")); } else if(isNullMatrix(infoSaisonPop.getMigrationMatrix())) { - result.addInfo(infoSaisonPop, _("isisfish.error.empty.migration")); + result.addInfo(infoSaisonPop, t("isisfish.error.empty.migration")); } else if(isNegativeMatrix(infoSaisonPop.getMigrationMatrix())) { - result.addError(infoSaisonPop, _("isisfish.error.migration.negative")); + result.addError(infoSaisonPop, t("isisfish.error.migration.negative")); } } catch (NullPointerException e) { - result.addError(infoSaisonPop, _("isisfish.error.null.semantics", "MigrationEquation")); + result.addError(infoSaisonPop, t("isisfish.error.null.semantics", "MigrationEquation")); } try { if (isEmptyMatrix(infoSaisonPop, infoSaisonPop.getEmigrationMatrix())) { - result.addInfo(infoSaisonPop, _("isisfish.error.empty.emigration")); + result.addInfo(infoSaisonPop, t("isisfish.error.empty.emigration")); } else if(isNullMatrix(infoSaisonPop.getEmigrationMatrix())) { - result.addInfo(infoSaisonPop, _("isisfish.error.empty.emigration")); + result.addInfo(infoSaisonPop, t("isisfish.error.empty.emigration")); } else if(isNegativeMatrix(infoSaisonPop.getEmigrationMatrix())) { - result.addError(infoSaisonPop, _("isisfish.error.emigration.negative")); + result.addError(infoSaisonPop, t("isisfish.error.emigration.negative")); } } catch (NullPointerException e) { - result.addError(infoSaisonPop, _("isisfish.error.null.semantics", "EmigrationEquation")); + result.addError(infoSaisonPop, t("isisfish.error.null.semantics", "EmigrationEquation")); } try { if (isEmptyMatrix(infoSaisonPop, infoSaisonPop.getImmigrationMatrix())) { - result.addInfo(infoSaisonPop, _("isisfish.error.empty.immigration")); + result.addInfo(infoSaisonPop, t("isisfish.error.empty.immigration")); } else if(isNullMatrix(infoSaisonPop.getImmigrationMatrix())) { - result.addInfo(infoSaisonPop, _("isisfish.error.empty.immigration")); + result.addInfo(infoSaisonPop, t("isisfish.error.empty.immigration")); } else if(isNegativeMatrix(infoSaisonPop.getImmigrationMatrix())) { - result.addError(infoSaisonPop, _("isisfish.error.immigration.negative")); + result.addError(infoSaisonPop, t("isisfish.error.immigration.negative")); } } catch (NullPointerException e) { - result.addError(infoSaisonPop, _("isisfish.error.null.semantics", "ImmigrationEquation")); + result.addError(infoSaisonPop, t("isisfish.error.null.semantics", "ImmigrationEquation")); } } } static public void check(Cell maille, CheckResult result) { if (StringUtils.isBlank(maille.getName())) { - result.addWarning(maille, _("isisfish.error.empty.name")); + result.addWarning(maille, t("isisfish.error.empty.name")); } } static public void check(Species metaPop, CheckResult result){ Collection<Population> pops = metaPop.getPopulation(); if (CollectionUtils.isEmpty(pops)) { - result.addWarning(metaPop, _("isisfish.error.empty.population")); + result.addWarning(metaPop, t("isisfish.error.empty.population")); } else { for (Population pop : pops) { check(pop, result); } } if (StringUtils.isBlank(metaPop.getName())) { - result.addInfo(metaPop, _("isisfish.error.empty.species.name")); + result.addInfo(metaPop, t("isisfish.error.empty.species.name")); } if (StringUtils.isBlank(metaPop.getScientificName())) { - result.addInfo(metaPop, _("isisfish.error.empty.scientific.name")); + result.addInfo(metaPop, t("isisfish.error.empty.scientific.name")); } if (StringUtils.isBlank(metaPop.getCodeRubbin())) { - result.addInfo(metaPop, _("isisfish.error.empty.code.rubbin")); + result.addInfo(metaPop, t("isisfish.error.empty.code.rubbin")); } } static public void check(Metier metier, CheckResult result){ if (StringUtils.isBlank(metier.getName())) { - result.addWarning(metier, _("isisfish.error.empty.name")); + result.addWarning(metier, t("isisfish.error.empty.name")); } List<MetierSeasonInfo> infoSaisons = metier.getMetierSeasonInfo(); if (CollectionUtils.isEmpty(infoSaisons)) { - result.addWarning(metier, _("isisfish.error.empty.season")); + result.addWarning(metier, t("isisfish.error.empty.season")); } else { Set<Month> months = new HashSet<Month>(); for (MetierSeasonInfo info : infoSaisons) { if (!Collections.disjoint(months, info.getMonths())) { - result.addError(info, _("isisfish.error.overlap.season")); + result.addError(info, t("isisfish.error.overlap.season")); } months.addAll(info.getMonths()); check(info, result); } } if (metier.getGear() == null) { - result.addError(metier, _("isisfish.error.undefined.gear")); + result.addError(metier, t("isisfish.error.undefined.gear")); } else { check(metier.getGear(), result); try { if (!metier.getGear().getPossibleValue().contains(metier.getGearParameterValue())) { - result.addWarning(metier, _("isisfish.error.invalid.values.params")); + result.addWarning(metier, t("isisfish.error.invalid.values.params")); } } catch(Exception e) { // can't happen StringIndexOutOfBoundsException // if gear.PossibleValue if not valid - result.addWarning(metier, _("isisfish.error.invalid.values.params")); + result.addWarning(metier, t("isisfish.error.invalid.values.params")); } } } static public void check(Population pop, CheckResult result){ if (StringUtils.isBlank(pop.getName())) { - result.addWarning(pop, _("isisfish.error.empty.name")); + result.addWarning(pop, t("isisfish.error.empty.name")); } if (StringUtils.isBlank(pop.getGeographicId())) { - result.addInfo(pop, _("isisfish.error.empty.id.geographic")); + result.addInfo(pop, t("isisfish.error.empty.id.geographic")); } check(pop, "MaturityOgiveEquation", pop.getMaturityOgiveEquation(), result); check(pop, "ReproductionRateEquation", pop.getReproductionRateEquation(), result); @@ -312,35 +312,35 @@ check(pop, "GrowthReverse", pop.getGrowthReverse(), result); List<PopulationGroup> classes = pop.getPopulationGroup(); if (CollectionUtils.isEmpty(classes)) { - result.addWarning(pop, _("isisfish.error.undefined.classes")); + result.addWarning(pop, t("isisfish.error.undefined.classes")); } else { for (PopulationGroup group : classes) { check(group, result); } } if (pop.getMonthGapBetweenReproRecrutement() < 0) { - result.addWarning(pop, _("isisfish.error.invalid.interval.reproduction.recruitment")); + result.addWarning(pop, t("isisfish.error.invalid.interval.reproduction.recruitment")); } if (isNullMatrix(pop.getMappingZoneReproZoneRecru())) { - result.addWarning(pop, _("isisfish.error.undefined.correspondence.zones.reproduction.recruitment")); + result.addWarning(pop, t("isisfish.error.undefined.correspondence.zones.reproduction.recruitment")); } if (CollectionUtils.isEmpty(pop.getPopulationZone())) { - result.addWarning(pop, _("isisfish.error.undefined.zone.population")); + result.addWarning(pop, t("isisfish.error.undefined.zone.population")); } if (CollectionUtils.isEmpty(pop.getRecruitmentZone())) { - result.addWarning(pop, _("isisfish.error.undefined.zone.recruitment")); + result.addWarning(pop, t("isisfish.error.undefined.zone.recruitment")); } if (CollectionUtils.isEmpty(pop.getReproductionZone())) { - result.addWarning(pop, _("isisfish.error.undefined.zone.reproduction")); + result.addWarning(pop, t("isisfish.error.undefined.zone.reproduction")); } List<PopulationSeasonInfo> infoSaisons = pop.getPopulationSeasonInfo(); if (CollectionUtils.isEmpty(infoSaisons)) { - result.addWarning(pop, _("isisfish.error.empty.season")); + result.addWarning(pop, t("isisfish.error.empty.season")); } else { Set<Month> months = new HashSet<Month>(); for (PopulationSeasonInfo info : infoSaisons) { if (!Collections.disjoint(months, info.getMonths())) { - result.addError(info, _("isisfish.error.overlap.season")); + result.addError(info, t("isisfish.error.overlap.season")); } months.addAll(info.getMonths()); check(info, result); @@ -352,18 +352,18 @@ check(pop, "NaturalDeathRate", pop.getNaturalDeathRate(), result); if (pop.getRecruitmentDistribution() == null || sumMatrix(pop.getRecruitmentDistribution()) != 1) { - result.addWarning(pop, _("isisfish.error.invalid.distribution.recruitment")); + result.addWarning(pop, t("isisfish.error.invalid.distribution.recruitment")); } } static public void check(FisheryRegion region, CheckResult result){ if (StringUtils.isBlank(region.getName())) { - result.addWarning(region, _("isisfish.error.empty.name")); + result.addWarning(region, t("isisfish.error.empty.name")); } List<Zone> secteurs = region.getZone(); if (CollectionUtils.isEmpty(secteurs)) { - result.addWarning(region, _("isisfish.error.undefined.sector")); + result.addWarning(region, t("isisfish.error.undefined.sector")); } else { for(Zone zone : secteurs) { check(zone, result); @@ -371,7 +371,7 @@ } List<Cell> mailles = region.getCell(); if (CollectionUtils.isEmpty(mailles)) { - result.addWarning(region, _("isisfish.error.undefined.mesh")); + result.addWarning(region, t("isisfish.error.undefined.mesh")); } else { for (Cell cell : mailles) { check(cell, result); @@ -379,7 +379,7 @@ } List<Species> metaPops = region.getSpecies(); if (CollectionUtils.isEmpty(metaPops)) { - result.addWarning(region, _("isisfish.error.undefined.meta.population")); + result.addWarning(region, t("isisfish.error.undefined.meta.population")); } else { for (Species species : metaPops) { check(species, result); @@ -387,7 +387,7 @@ } List<Metier> metiers = region.getMetier(); if (CollectionUtils.isEmpty(metiers)) { - result.addWarning(region, _("isisfish.error.undefined.meta.population")); + result.addWarning(region, t("isisfish.error.undefined.meta.population")); } else { for (Metier metier : metiers) { check(metier, result); @@ -395,7 +395,7 @@ } List<Strategy> strategies = region.getStrategy(); if (CollectionUtils.isEmpty(strategies)){ - result.addWarning(region, _("isisfish.error.undefined.stategy")); + result.addWarning(region, t("isisfish.error.undefined.stategy")); } else { for (Strategy strategy : strategies) { check(strategy, result); @@ -405,10 +405,10 @@ static public void check(Zone secteur, CheckResult result){ if (StringUtils.isBlank(secteur.getName())) { - result.addWarning(secteur, _("isisfish.error.empty.name")); + result.addWarning(secteur, t("isisfish.error.empty.name")); } if (CollectionUtils.isEmpty(secteur.getCell())) { - result.addWarning(secteur, _("isisfish.error.undefined.mesh.sector")); + result.addWarning(secteur, t("isisfish.error.undefined.mesh.sector")); } } @@ -419,13 +419,13 @@ static public void check(Strategy strategy, CheckResult result) { if (StringUtils.isBlank(strategy.getName())) { - result.addWarning(strategy, _("isisfish.error.empty.name")); + result.addWarning(strategy, t("isisfish.error.empty.name")); } check(strategy.getSetOfVessels(), result); List<StrategyMonthInfo> smi = strategy.getStrategyMonthInfo(); if (smi == null || smi.size() != 12) { - result.addWarning(strategy, _("isisfish.error.undefined.stategy.months")); + result.addWarning(strategy, t("isisfish.error.undefined.stategy.months")); } else { for (StrategyMonthInfo info : smi) { check(info, result); @@ -437,14 +437,14 @@ static public void check(SetOfVessels sov, CheckResult result){ check(sov.getPort(), result); if (sov.getNumberOfVessels() < 0) { - result.addWarning(sov, _("isisfish.error.invalid.number")); + result.addWarning(sov, t("isisfish.error.invalid.number")); } if (sov.getFixedCosts() < 0) { - result.addWarning(sov, _("isisfish.error.invalid.costs.fix")); + result.addWarning(sov, t("isisfish.error.invalid.costs.fix")); } Collection<EffortDescription> efforts = sov.getPossibleMetiers(); if (CollectionUtils.isEmpty(efforts)) { - result.addWarning(sov, _("isisfish.error.not.possible.metier")); + result.addWarning(sov, t("isisfish.error.not.possible.metier")); } else { for (EffortDescription effort : efforts) { check(effort, result); @@ -467,10 +467,10 @@ } static public void check(Port port, CheckResult result){ if (StringUtils.isBlank(port.getName())) { - result.addWarning(port, _("isisfish.error.empty.name")); + result.addWarning(port, t("isisfish.error.empty.name")); } if (port.getCell() == null) { - result.addWarning(port, _("isisfish.error.undefined.mesh.sector")); + result.addWarning(port, t("isisfish.error.undefined.mesh.sector")); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckResult.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckResult.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckResult.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -38,7 +38,7 @@ * * Created: 9 janv. 2004 * - * @author Benjamin Poussin <poussin@codelutin.com> + * @author Benjamin Poussin <poussin@codelutin.com> * @version $Revision$ * * Mise a jour: $Date$ @@ -54,7 +54,7 @@ public StringBuffer getInfo() { StringBuffer result = new StringBuffer(); - for (Iterator i = order.iterator(); i.hasNext();) { + for (Iterator<Object> i = order.iterator(); i.hasNext();) { Object o = i.next(); StringBuffer tmp = getInfo(o); if (tmp.length() != 0) { @@ -73,7 +73,7 @@ public StringBuffer getWarning() { StringBuffer result = new StringBuffer(); - for (Iterator i = order.iterator(); i.hasNext();) { + for (Iterator<Object> i = order.iterator(); i.hasNext();) { Object o = i.next(); StringBuffer tmp = getWarning(o); if (tmp.length() != 0) { @@ -92,7 +92,7 @@ public StringBuffer getError() { StringBuffer result = new StringBuffer(); - for (Iterator i = order.iterator(); i.hasNext();) { + for (Iterator<Object> i = order.iterator(); i.hasNext();) { Object o = i.next(); StringBuffer tmp = getError(o); if (tmp.length() != 0) { @@ -111,11 +111,11 @@ public StringBuffer getInfo(Object o) { StringBuffer result = new StringBuffer(); - List list = info.get(o); + List<String> list = info.get(o); if (list != null && list.size() != 0) { result.append("Info\n"); result.append("----\n"); - for (Iterator i = list.iterator(); i.hasNext();) { + for (Iterator<String> i = list.iterator(); i.hasNext();) { result.append(i.next().toString()); result.append("\n"); } @@ -125,11 +125,11 @@ public StringBuffer getWarning(Object o) { StringBuffer result = new StringBuffer(); - List list = warning.get(o); + List<String> list = warning.get(o); if (list != null && list.size() != 0) { result.append("Problème\n"); result.append("--------\n"); - for (Iterator i = list.iterator(); i.hasNext();) { + for (Iterator<String> i = list.iterator(); i.hasNext();) { result.append(i.next().toString()); result.append("\n"); } @@ -139,11 +139,11 @@ public StringBuffer getError(Object o) { StringBuffer result = new StringBuffer(); - List list = error.get(o); + List<String> list = error.get(o); if (list != null && list.size() != 0) { result.append("Erreur\n"); result.append("------\n"); - for (Iterator i = list.iterator(); i.hasNext();) { + for (Iterator<String> i = list.iterator(); i.hasNext();) { result.append(i.next().toString()); result.append("\n"); } @@ -171,7 +171,7 @@ public StringBuffer getAll() { StringBuffer result = new StringBuffer(); - for (Iterator i = order.iterator(); i.hasNext();) { + for (Iterator<Object> i = order.iterator(); i.hasNext();) { result.append(getAll(i.next())); } return result; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckResultFrame.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckResultFrame.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckResultFrame.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.input.check; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import javax.swing.JFrame; import javax.swing.WindowConstants; @@ -37,7 +37,7 @@ * * Created: 10 janv. 2004 * - * @author Benjamin Poussin <poussin@codelutin.com> + * @author Benjamin Poussin <poussin@codelutin.com> * @version $Revision$ * * Mise a jour: $Date$ @@ -56,7 +56,7 @@ } public CheckResultFrame() { - super(_("isisfish.message.result.verif.region")); + super(t("isisfish.message.result.verif.region")); model = new CheckResultTableModel(new CheckResult()); JTable table = new JTable(model); model.addMouseListenerToHeaderInTable(table); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckResultTableModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckResultTableModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckResultTableModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -47,20 +47,20 @@ * * Created: 10 janv. 2004 * - * @author Benjamin Poussin <poussin@codelutin.com> + * @author Benjamin Poussin <poussin@codelutin.com> * @version $Revision$ * * Mise a jour: $Date$ * par : $Author$ */ public class CheckResultTableModel extends AbstractTableModel implements - Comparator { // CheckResultTableModel + Comparator<Object[]> { // CheckResultTableModel /** serialVersionUID. */ private static final long serialVersionUID = 328398134761266970L; protected CheckResult checkResult; - protected ArrayList data; + protected List<Object[]> data; protected int sortedBy = -1; protected boolean ascending = true; @@ -74,23 +74,23 @@ } protected void computeData() { - data = new ArrayList(); - for (Iterator i = checkResult.order.iterator(); i.hasNext();) { + data = new ArrayList<>(); + for (Iterator<Object> i = checkResult.order.iterator(); i.hasNext();) { TopiaEntity o = (TopiaEntity) i.next(); String type = TopiaId.getClassNameAsString(o.getTopiaId()); - addOneData(o, type, "error", (List) checkResult.error.get(o), data); - addOneData(o, type, "warning", (List) checkResult.warning.get(o), + addOneData(o, type, "error", checkResult.error.get(o), data); + addOneData(o, type, "warning", checkResult.warning.get(o), data); - addOneData(o, type, "info", (List) checkResult.info.get(o), data); + addOneData(o, type, "info", checkResult.info.get(o), data); } fireTableDataChanged(); } - protected void addOneData(Object o, String type, String level, List list, - Collection result) { + protected void addOneData(Object o, String type, String level, List<String> list, + Collection<Object[]> result) { if (list != null && list.size() != 0) { - for (Iterator m = list.iterator(); m.hasNext();) { + for (Iterator<String> m = list.iterator(); m.hasNext();) { Object message = m.next(); result.add(new Object[] { type, o, level, message }); } @@ -127,10 +127,7 @@ fireTableDataChanged(); } - public int compare(Object o1, Object o2) { - Object[] data1 = (Object[]) o1; - Object[] data2 = (Object[]) o2; - + public int compare(Object[] data1, Object[] data2) { int result = data1[sortedBy].toString().compareTo( data2[sortedBy].toString()); return ascending ? result : -result; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckResultTableRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckResultTableRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckResultTableRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -35,7 +35,7 @@ * * Created: 10 janv. 2004 * - * @author Benjamin Poussin <poussin@codelutin.com> + * @author Benjamin Poussin <poussin@codelutin.com> * @version $Revision$ * * Mise a jour: $Date$ Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/formule/FormuleComboModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/formule/FormuleComboModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/formule/FormuleComboModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -42,7 +42,7 @@ * Last update : $Date$ * By : $Author: chatellier $ */ -public class FormuleComboModel extends DefaultComboBoxModel { +public class FormuleComboModel extends DefaultComboBoxModel<Formule> { /** serialVersionUID. */ private static final long serialVersionUID = 6171850179969290032L; @@ -63,7 +63,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public Formule getElementAt(int index) { return formules.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/formule/FormuleComboRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/formule/FormuleComboRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/formule/FormuleComboRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -51,7 +51,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alterned highlight rows and default Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/EffortDescriptionListModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/EffortDescriptionListModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/EffortDescriptionListModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -40,7 +40,7 @@ * Last update : $Date$ * By : $Author$ */ -public class EffortDescriptionListModel extends DefaultListModel { +public class EffortDescriptionListModel extends DefaultListModel<EffortDescription> { /** serialVersionUID. */ private static final long serialVersionUID = -2715181950778932871L; @@ -87,7 +87,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public EffortDescription getElementAt(int index) { return effortDescriptions.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/GearComboModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/GearComboModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/GearComboModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -42,7 +42,7 @@ * Last update : $Date$ * By : $Author$ */ -public class GearComboModel extends DefaultComboBoxModel { +public class GearComboModel extends DefaultComboBoxModel<Gear> { /** serialVersionUID. */ private static final long serialVersionUID = 6171850179969290032L; @@ -63,7 +63,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public Gear getElementAt(int index) { return gearList.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/GearPopulationSelectivityModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/GearPopulationSelectivityModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/GearPopulationSelectivityModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.input.model; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Component; import java.util.List; @@ -48,8 +48,10 @@ * Table model for {@link Gear}#{@link Selectivity}. * * Columns : + * <ul> * <li>selectivity population name</li> * <li>selectivity equation</li> + * </ul> * * @author chatellier * @version $Revision$ @@ -67,8 +69,8 @@ /** Columns names. */ public final static String[] COLUMN_NAMES = { - _("isisfish.common.population"), - _("isisfish.common.equation") + t("isisfish.common.population"), + t("isisfish.common.equation") }; protected List<Selectivity> selectivities; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/MetierListModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/MetierListModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/MetierListModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -40,7 +40,7 @@ * Last update : $Date$ * By : $Author$ */ -public class MetierListModel extends DefaultListModel { +public class MetierListModel extends DefaultListModel<Metier> { /** serialVersionUID. */ private static final long serialVersionUID = -2715181950778932871L; @@ -87,7 +87,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public Metier getElementAt(int index) { return metiers.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/MetierSeasonInfoComboModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/MetierSeasonInfoComboModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/MetierSeasonInfoComboModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -42,7 +42,7 @@ * Last update : $Date$ * By : $Author: chatellier $ */ -public class MetierSeasonInfoComboModel extends DefaultComboBoxModel { +public class MetierSeasonInfoComboModel extends DefaultComboBoxModel<MetierSeasonInfo> { /** serialVersionUID. */ private static final long serialVersionUID = 6171850179969290032L; @@ -63,7 +63,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public MetierSeasonInfo getElementAt(int index) { return metierSeasonInfo.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/MetierSeasonInfoTargetSpeciesTableModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/MetierSeasonInfoTargetSpeciesTableModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/MetierSeasonInfoTargetSpeciesTableModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.input.model; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Component; import java.util.List; @@ -49,9 +49,11 @@ * Table model for {@link MetierSeasonInfo}#{@link TargetSpecies}. * * Columns : + * <ul> * <li>target species name</li> * <li>target species equation</li> * <li>target species primaryCatch</li> + * </ul> * * @author chatellier * @version $Revision$ @@ -69,9 +71,9 @@ /** Columns names. */ public final static String[] COLUMN_NAMES = { - _("isisfish.metierSeasonInfoSpecies.species"), - _("isisfish.metierSeasonInfoSpecies.targetFactor"), - _("isisfish.metierSeasonInfoSpecies.mainSpecies") }; + t("isisfish.metierSeasonInfoSpecies.species"), + t("isisfish.metierSeasonInfoSpecies.targetFactor"), + t("isisfish.metierSeasonInfoSpecies.mainSpecies") }; protected List<TargetSpecies> targetSpeciesList; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/PopulationComboModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/PopulationComboModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/PopulationComboModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -42,7 +42,7 @@ * Last update : $Date$ * By : $Author: chatellier $ */ -public class PopulationComboModel extends DefaultComboBoxModel { +public class PopulationComboModel extends DefaultComboBoxModel<Population> { /** serialVersionUID. */ private static final long serialVersionUID = 6171850179969290032L; @@ -63,7 +63,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public Population getElementAt(int index) { return populations.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/PopulationSeasonInfoComboModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/PopulationSeasonInfoComboModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/PopulationSeasonInfoComboModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -40,7 +40,7 @@ * Last update : $Date: 2009-06-09 13:52:58 +0200 (mar. 09 juin 2009) $ * By : $Author: chatellier $ */ -public class PopulationSeasonInfoComboModel extends DefaultComboBoxModel { +public class PopulationSeasonInfoComboModel extends DefaultComboBoxModel<PopulationSeasonInfo> { /** serialVersionUID. */ private static final long serialVersionUID = 6171850179969290032L; @@ -89,7 +89,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public PopulationSeasonInfo getElementAt(int index) { return populationSeasonInfos.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/PortComboModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/PortComboModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/PortComboModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -42,7 +42,7 @@ * Last update : $Date$ * By : $Author$ */ -public class PortComboModel extends DefaultComboBoxModel { +public class PortComboModel extends DefaultComboBoxModel<Port> { /** serialVersionUID. */ private static final long serialVersionUID = 6171850179969290032L; @@ -63,7 +63,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public Port getElementAt(int index) { return portsList.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/SetOfVesselsComboModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/SetOfVesselsComboModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/SetOfVesselsComboModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -42,7 +42,7 @@ * Last update : $Date$ * By : $Author$ */ -public class SetOfVesselsComboModel extends DefaultComboBoxModel { +public class SetOfVesselsComboModel extends DefaultComboBoxModel<SetOfVessels> { /** serialVersionUID. */ private static final long serialVersionUID = 6171850179969290032L; @@ -63,7 +63,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public SetOfVessels getElementAt(int index) { return setOfVesselsList.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/SpeciesComboModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/SpeciesComboModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/SpeciesComboModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -42,7 +42,7 @@ * Last update : $Date$ * By : $Author: chatellier $ */ -public class SpeciesComboModel extends DefaultComboBoxModel { +public class SpeciesComboModel extends DefaultComboBoxModel<Species> { /** serialVersionUID. */ private static final long serialVersionUID = 6171850179969290032L; @@ -63,7 +63,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public Species getElementAt(int index) { return speciesList.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/TopiaEntityListModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/TopiaEntityListModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/TopiaEntityListModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -42,7 +42,7 @@ * Last update : $Date$ * By : $Author$ */ -public class TopiaEntityListModel extends DefaultListModel { +public class TopiaEntityListModel extends DefaultListModel<TopiaEntity> { /** serialVersionUID. */ private static final long serialVersionUID = 6171850179969290032L; @@ -78,7 +78,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public TopiaEntity getElementAt(int index) { return entities.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/TripTypeComboModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/TripTypeComboModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/TripTypeComboModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -42,7 +42,7 @@ * Last update : $Date$ * By : $Author$ */ -public class TripTypeComboModel extends DefaultComboBoxModel { +public class TripTypeComboModel extends DefaultComboBoxModel<TripType> { /** serialVersionUID. */ private static final long serialVersionUID = 6171850179969290032L; @@ -63,7 +63,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public TripType getElementAt(int index) { return tripTypes.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/TripTypeListModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/TripTypeListModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/TripTypeListModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -42,7 +42,7 @@ * Last update : $Date$ * By : $Author: chatellier $ */ -public class TripTypeListModel extends DefaultListModel { +public class TripTypeListModel extends DefaultListModel<TripType> { /** serialVersionUID. */ private static final long serialVersionUID = 6171850179969290032L; @@ -63,7 +63,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public TripType getElementAt(int index) { return tripTypes.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/VesselTypeComboModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/VesselTypeComboModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/VesselTypeComboModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -42,7 +42,7 @@ * Last update : $Date$ * By : $Author$ */ -public class VesselTypeComboModel extends DefaultComboBoxModel { +public class VesselTypeComboModel extends DefaultComboBoxModel<VesselType> { /** serialVersionUID. */ private static final long serialVersionUID = 6171850179969290032L; @@ -63,7 +63,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public VesselType getElementAt(int index) { return vesselTypeList.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/ZoneListModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/ZoneListModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/model/ZoneListModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -42,7 +42,7 @@ * Last update : $Date$ * By : $Author: chatellier $ */ -public class ZoneListModel extends DefaultListModel { +public class ZoneListModel extends DefaultListModel<Zone> { /** serialVersionUID. */ private static final long serialVersionUID = 6171850179969290032L; @@ -63,7 +63,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public Zone getElementAt(int index) { return zones.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/EffortDescriptionListRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/EffortDescriptionListRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/EffortDescriptionListRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -51,7 +51,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alterned highlight rows and default Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/MetierListRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/MetierListRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/MetierListRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -51,7 +51,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alterned highlight rows and default Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/MetierSeasonInfoComboRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/MetierSeasonInfoComboRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/MetierSeasonInfoComboRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -51,7 +51,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alterned highlight rows and default Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/PopulationSeasonInfoComboRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/PopulationSeasonInfoComboRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/PopulationSeasonInfoComboRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -51,7 +51,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alterned highlight rows and default Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/TripTypeListRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/TripTypeListRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/renderer/TripTypeListRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -62,7 +62,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alternated highlight rows and default Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/FisheryTreeHelper.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/FisheryTreeHelper.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/FisheryTreeHelper.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -22,7 +22,7 @@ */ package fr.ifremer.isisfish.ui.input.tree; -import static org.nuiton.i18n.I18n.n_; +import static org.nuiton.i18n.I18n.n; import java.util.HashMap; import java.util.Map; @@ -37,6 +37,7 @@ import fr.ifremer.isisfish.entities.FisheryRegion; import fr.ifremer.isisfish.entities.Gear; import fr.ifremer.isisfish.entities.Metier; +import fr.ifremer.isisfish.entities.Observation; import fr.ifremer.isisfish.entities.Port; import fr.ifremer.isisfish.entities.SetOfVessels; import fr.ifremer.isisfish.entities.Species; @@ -48,6 +49,7 @@ import fr.ifremer.isisfish.ui.input.tree.loadors.FisheryTreeNodeLoador; import fr.ifremer.isisfish.ui.input.tree.loadors.GearsNodeLoador; import fr.ifremer.isisfish.ui.input.tree.loadors.MetiersNodeLoador; +import fr.ifremer.isisfish.ui.input.tree.loadors.ObservationsNodeLoador; import fr.ifremer.isisfish.ui.input.tree.loadors.PortsNodeLoador; import fr.ifremer.isisfish.ui.input.tree.loadors.SetOfVesselsNodeLoador; import fr.ifremer.isisfish.ui.input.tree.loadors.SpeciesNodeLoador; @@ -90,58 +92,64 @@ loadorCache.put(VesselType.class, new VesselTypesNodeLoador()); loadorCache.put(SetOfVessels.class, new SetOfVesselsNodeLoador()); loadorCache.put(Strategy.class, new StrategiesNodeLoador()); - + loadorCache.put(Observation.class, new ObservationsNodeLoador()); + // first level nodes CellsNodeLoador cellsNodeLoador = new CellsNodeLoador(); FisheryTreeNode cellsChild = new FisheryTreeNode(Cell.class, - n_("isisfish.input.tree.cells"), null, cellsNodeLoador); + n("isisfish.input.tree.cells"), null, cellsNodeLoador); loadorCache.put(Cell.class, cellsNodeLoador); ZonesNodeLoador zonesNodeLoador = new ZonesNodeLoador(); FisheryTreeNode zonesChild = new FisheryTreeNode(Zone.class, - n_("isisfish.input.tree.zones"), null, zonesNodeLoador); + n("isisfish.input.tree.zones"), null, zonesNodeLoador); loadorCache.put(Zone.class, zonesNodeLoador); PortsNodeLoador portsNodeLoador = new PortsNodeLoador(); FisheryTreeNode portsChild = new FisheryTreeNode(Port.class, - n_("isisfish.input.tree.ports"), null, portsNodeLoador); + n("isisfish.input.tree.ports"), null, portsNodeLoador); loadorCache.put(Port.class, portsNodeLoador); SpeciesNodeLoador speciesNodeLoador = new SpeciesNodeLoador(); FisheryTreeNode speciesChild = new FisheryTreeNode(Species.class, - n_("isisfish.input.tree.species"), null, speciesNodeLoador); + n("isisfish.input.tree.species"), null, speciesNodeLoador); loadorCache.put(Species.class, speciesNodeLoador); GearsNodeLoador gearsNodeLoador = new GearsNodeLoador(); FisheryTreeNode gearsChild = new FisheryTreeNode(Gear.class, - n_("isisfish.input.tree.gears"), null, gearsNodeLoador); + n("isisfish.input.tree.gears"), null, gearsNodeLoador); loadorCache.put(Gear.class, gearsNodeLoador); MetiersNodeLoador metiersNodeLoador = new MetiersNodeLoador(); FisheryTreeNode metiersChild = new FisheryTreeNode(Metier.class, - n_("isisfish.input.tree.metiers"), null, metiersNodeLoador); + n("isisfish.input.tree.metiers"), null, metiersNodeLoador); loadorCache.put(Metier.class, metiersNodeLoador); TripTypesNodeLoador tripTypesNodeLoador = new TripTypesNodeLoador(); FisheryTreeNode tripTypesChild = new FisheryTreeNode(TripType.class, - n_("isisfish.input.tree.triptypes"), null, tripTypesNodeLoador); + n("isisfish.input.tree.triptypes"), null, tripTypesNodeLoador); loadorCache.put(TripType.class, tripTypesNodeLoador); VesselTypesNodeLoador vesselTypesNodeLoador = new VesselTypesNodeLoador(); FisheryTreeNode vesselTypesChild = new FisheryTreeNode(VesselType.class, - n_("isisfish.input.tree.vesseltypes"), null, vesselTypesNodeLoador); + n("isisfish.input.tree.vesseltypes"), null, vesselTypesNodeLoador); loadorCache.put(VesselType.class, vesselTypesNodeLoador); SetOfVesselsNodeLoador setOfVesselsNodeLoador = new SetOfVesselsNodeLoador(); FisheryTreeNode setOfVesselsChild = new FisheryTreeNode(SetOfVessels.class, - n_("isisfish.input.tree.setofvessels"), null, setOfVesselsNodeLoador); + n("isisfish.input.tree.setofvessels"), null, setOfVesselsNodeLoador); loadorCache.put(SetOfVessels.class, setOfVesselsNodeLoador); StrategiesNodeLoador strategiesNodeLoador = new StrategiesNodeLoador(); FisheryTreeNode strategiesChild = new FisheryTreeNode(Strategy.class, - n_("isisfish.input.tree.strategies"), null, strategiesNodeLoador); + n("isisfish.input.tree.strategies"), null, strategiesNodeLoador); loadorCache.put(Strategy.class, strategiesNodeLoador); + ObservationsNodeLoador observationsNodeLoador = new ObservationsNodeLoador(); + FisheryTreeNode observationsChild = new FisheryTreeNode(Observation.class, + n("isisfish.input.tree.observations"), null, observationsNodeLoador); + loadorCache.put(Observation.class, observationsNodeLoador); + root.add(cellsChild); root.add(zonesChild); root.add(portsChild); @@ -152,6 +160,7 @@ root.add(vesselTypesChild); root.add(setOfVesselsChild); root.add(strategiesChild); + root.add(observationsChild); // Create model TreeModel model = createModel(root); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/FisheryTreeRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/FisheryTreeRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/FisheryTreeRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -23,7 +23,7 @@ package fr.ifremer.isisfish.ui.input.tree; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Component; @@ -40,6 +40,7 @@ import fr.ifremer.isisfish.entities.FisheryRegionImpl; import fr.ifremer.isisfish.entities.Gear; import fr.ifremer.isisfish.entities.Metier; +import fr.ifremer.isisfish.entities.Observation; import fr.ifremer.isisfish.entities.Population; import fr.ifremer.isisfish.entities.Port; import fr.ifremer.isisfish.entities.SetOfVessels; @@ -80,7 +81,7 @@ FisheryTreeNode node = (FisheryTreeNode)value; if (!node.isStaticNode() || node.isStringNode()) { - stringValue = _(node.getId()); + stringValue = t(node.getId()); } else { FisheryRegion fisheryRegion = provider.getFisheryRegion(); TopiaContext topiaContext = ((FisheryRegionImpl)fisheryRegion).getTopiaContext(); @@ -94,39 +95,30 @@ if (entity != null) { if (FisheryRegion.class.isAssignableFrom(entity.getClass())) { stringValue = ((FisheryRegion)entity).getName(); - } - else if (Cell.class.isAssignableFrom(entity.getClass())) { + } else if (Cell.class.isAssignableFrom(entity.getClass())) { stringValue = ((Cell)entity).getName(); - } - else if (Gear.class.isAssignableFrom(entity.getClass())) { + } else if (Gear.class.isAssignableFrom(entity.getClass())) { stringValue = ((Gear)entity).getName(); - } - else if (Metier.class.isAssignableFrom(entity.getClass())) { + } else if (Metier.class.isAssignableFrom(entity.getClass())) { stringValue = ((Metier)entity).getName(); - } - else if (Population.class.isAssignableFrom(entity.getClass())) { + } else if (Population.class.isAssignableFrom(entity.getClass())) { stringValue = ((Population)entity).getName(); - } - else if (Port.class.isAssignableFrom(entity.getClass())) { + } else if (Port.class.isAssignableFrom(entity.getClass())) { stringValue = ((Port)entity).getName(); - } - else if (SetOfVessels.class.isAssignableFrom(entity.getClass())) { + } else if (SetOfVessels.class.isAssignableFrom(entity.getClass())) { stringValue = ((SetOfVessels)entity).getName(); - } - else if (Species.class.isAssignableFrom(entity.getClass())) { + } else if (Species.class.isAssignableFrom(entity.getClass())) { stringValue = ((Species)entity).getName(); - } - else if (Strategy.class.isAssignableFrom(entity.getClass())) { + } else if (Strategy.class.isAssignableFrom(entity.getClass())) { stringValue = ((Strategy)entity).getName(); - } - else if (TripType.class.isAssignableFrom(entity.getClass())) { + } else if (TripType.class.isAssignableFrom(entity.getClass())) { stringValue = ((TripType)entity).getName(); - } - else if (VesselType.class.isAssignableFrom(entity.getClass())) { + } else if (VesselType.class.isAssignableFrom(entity.getClass())) { stringValue = ((VesselType)entity).getName(); - } - else if (Zone.class.isAssignableFrom(entity.getClass())) { + } else if (Zone.class.isAssignableFrom(entity.getClass())) { stringValue = ((Zone)entity).getName(); + } else if (Observation.class.isAssignableFrom(entity.getClass())) { + stringValue = ((Observation)entity).getName(); } } } catch (TopiaException eee) { Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/loadors/ObservationsNodeLoador.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/input/tree/loadors/ObservationsNodeLoador.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/loadors/ObservationsNodeLoador.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/loadors/ObservationsNodeLoador.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,67 @@ +/* + * #%L + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ +package fr.ifremer.isisfish.ui.input.tree.loadors; + +import java.util.List; + +import jaxx.runtime.swing.nav.NavDataProvider; +import fr.ifremer.isisfish.entities.FisheryRegion; +import fr.ifremer.isisfish.entities.Gear; +import fr.ifremer.isisfish.entities.Observation; +import fr.ifremer.isisfish.ui.input.tree.FisheryDataProvider; +import fr.ifremer.isisfish.ui.input.tree.FisheryTreeNode; + +/** + * Observation tree path node loader. + * + * @author chatellier + * @since 3.4.0.0 + */ +public class ObservationsNodeLoador extends FisheryTreeNodeLoador<Observation> { + + /** serialVersionUID. */ + private static final long serialVersionUID = 6540304326033236054L; + + public ObservationsNodeLoador() { + super(Observation.class); + } + + @Override + public List<Observation> getData(Class<?> parentClass, String parentId, NavDataProvider dataProvider) throws Exception { + FisheryDataProvider ficheryRegionDataProvider = (FisheryDataProvider)dataProvider; + FisheryRegion fisheryRegion = ficheryRegionDataProvider.getFisheryRegion(); + List<Observation> observations = fisheryRegion.getObservations(); + return observations; + } + + @Override + public FisheryTreeNode createNode(Observation observation, NavDataProvider dataProvider) { + + // Create clients static nodes + FisheryTreeNode observationNode = new FisheryTreeNode( + Observation.class, observation.getTopiaId(), + null, null); + + return observationNode; + } +} Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/loadors/PopulationsNodeLoador.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/loadors/PopulationsNodeLoador.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/loadors/PopulationsNodeLoador.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -56,7 +56,7 @@ populations = new ArrayList<Population>(species.getPopulation()); } else { - populations = Collections.EMPTY_LIST; + populations = Collections.emptyList(); } return populations; } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/loadors/SpeciesNodeLoador.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/loadors/SpeciesNodeLoador.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/tree/loadors/SpeciesNodeLoador.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -22,7 +22,7 @@ */ package fr.ifremer.isisfish.ui.input.tree.loadors; -import static org.nuiton.i18n.I18n.n_; +import static org.nuiton.i18n.I18n.n; import java.util.List; @@ -66,7 +66,7 @@ // Create clients static nodes FisheryTreeNode speciesPopulationStaticNode = new FisheryTreeNode( - Population.class, n_("isisfish.input.tree.populations"), + Population.class, n("isisfish.input.tree.populations"), null, new PopulationsNodeLoador(species)); speciesNode.add(speciesPopulationStaticNode); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/variable/EntityVariableHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/variable/EntityVariableHandler.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/variable/EntityVariableHandler.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -23,7 +23,7 @@ package fr.ifremer.isisfish.ui.input.variable; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.CardLayout; import java.util.List; @@ -109,7 +109,7 @@ Variable variable = dao.create( Variable.PROPERTY_ENTITY_ID, view.getBean().getTopiaId(), - Variable.PROPERTY_NAME, _("isisfish.variables.defaultname")); + Variable.PROPERTY_NAME, t("isisfish.variables.defaultname")); TopiaEntityListModel model = (TopiaEntityListModel)view.getVariablesList().getModel(); List<Variable> variables = (List<Variable>)model.getElements(); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/variable/EntityVariableUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/variable/EntityVariableUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/variable/EntityVariableUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -23,7 +23,9 @@ #L% --> <fr.ifremer.isisfish.ui.input.InputContentUI superGenericType='org.nuiton.topia.persistence.TopiaEntityContextable'> - + <import> + static org.nuiton.i18n.I18n.t + </import> <EntityVariableHandler id="varHandler" /> <!-- bean property --> @@ -52,7 +54,7 @@ <Table> <row> <cell fill="both" weightx='1.0' weighty='1.0'> - <Table border='{BorderFactory.createTitledBorder(_("isisfish.variables.variableslist"))}'> + <Table border='{BorderFactory.createTitledBorder(t("isisfish.variables.variableslist"))}'> <row> <cell fill="both" weightx='1.0' weighty='1.0'> <JScrollPane> @@ -73,7 +75,7 @@ </Table> </cell> <cell fill="both" weightx='3.0' weighty='1.0' rows="2"> - <Table border='{BorderFactory.createTitledBorder(_("isisfish.variables.variabledetail"))}'> + <Table border='{BorderFactory.createTitledBorder(t("isisfish.variables.variabledetail"))}'> <row> <cell fill="horizontal"> <JLabel text="isisfish.variables.entityname" Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/variable/VariableListRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/variable/VariableListRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/variable/VariableListRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -51,7 +51,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alternated highlight rows and default Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/variable/VariableTypeComboModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/variable/VariableTypeComboModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/variable/VariableTypeComboModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,9 +25,6 @@ package fr.ifremer.isisfish.ui.input.variable; -import java.util.ArrayList; -import java.util.List; - import javax.swing.DefaultComboBoxModel; import fr.ifremer.isisfish.entities.VariableType; @@ -41,7 +38,7 @@ * Last update : $Date$ * By : $Author$ */ -public class VariableTypeComboModel extends DefaultComboBoxModel { +public class VariableTypeComboModel extends DefaultComboBoxModel<VariableType> { /** serialVersionUID. */ private static final long serialVersionUID = 6171850179969290032L; @@ -60,7 +57,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public VariableType getElementAt(int index) { return variableTypes[index]; } Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/GenericComboModel.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/models/common/GenericComboModel.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/GenericComboModel.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/GenericComboModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,117 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.ui.models.common; + +import java.util.List; + +import javax.swing.DefaultComboBoxModel; +import javax.swing.JComboBox; + +/** + * Model pour pour la representation d'une liste de type generic. + * Utilisation dans les {@link JComboBox}. + * + * @param <E> generic type + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class GenericComboModel<E> extends DefaultComboBoxModel<E> { + + /** serialVersionUID. */ + private static final long serialVersionUID = -4070846632975105788L; + + /** E list. */ + protected List<E> genericList; + + /** + * Empty constructor. + */ + public GenericComboModel() { + this(null); + } + + /** + * Constructor with export list. + * + * @param genericList E list + */ + public GenericComboModel(List<E> genericList) { + setGenericList(genericList); + } + + /** + * Get E list. + * + * @return E list + */ + public List<E> getGenericList() { + return genericList; + } + + /** + * Set E list. + * + * @param genericList E list to set + */ + public void setGenericList(List<E> genericList) { + this.genericList = genericList; + // reset selected + setSelectedItem(null); + } + + public void addElement(E elt) { + genericList.add(elt); + fireIntervalAdded(this, genericList.size() - 1, genericList.size()); + } + + public boolean containsElement(E elt) { + return genericList.contains(elt); + } + + /* + * @see javax.swing.ListModel#getElementAt(int) + */ + @Override + public E getElementAt(int index) { + return genericList.get(index); + } + + /* + * @see javax.swing.ListModel#getSize() + */ + @Override + public int getSize() { + int size = 0; + + if (genericList != null) { + size = genericList.size(); + } + return size; + } +} Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/GenericListModel.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/models/common/GenericListModel.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/GenericListModel.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/GenericListModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,106 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 2011 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.ui.models.common; + +import java.util.List; + +import javax.swing.AbstractListModel; +import javax.swing.JList; + +/** + * Model pour pour la representation d'une liste de generic type. + * Utilisation dans les {@link JList}. + * + * @param <E> generic type + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author: chatellier $ + */ +public class GenericListModel<E> extends AbstractListModel<E> { + + /** serialVersionUID. */ + private static final long serialVersionUID = -4070846632975105788L; + + /** E list. */ + protected List<E> elementList; + + /** + * Empty constructor. + */ + public GenericListModel() { + this(null); + } + + /** + * Constructor with export list. + * + * @param elementList E list + */ + public GenericListModel(List<E> elementList) { + setElementList(elementList); + } + + /** + * Get E list. + * + * @return E list + */ + public List<E> getElementList() { + return elementList; + } + + /** + * Set E list. + * + * @param elementList E list to set + */ + public void setElementList(List<E> elementList) { + this.elementList = elementList; + } + + /* + * @see javax.swing.ListModel#getElementAt(int) + */ + @Override + public E getElementAt(int index) { + return elementList.get(index); + } + + /* + * @see javax.swing.ListModel#getSize() + */ + @Override + public int getSize() { + int size = 0; + + if (elementList != null) { + size = elementList.size(); + } + return size; + } +} Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/ScriptParametersTableModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/ScriptParametersTableModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/ScriptParametersTableModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.models.common; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.util.ArrayList; import java.util.List; @@ -43,9 +43,11 @@ * Model de la table de definition de parametre d'un script. * * Columns : + * <ul> * <li>Parameter name</li> * <li>Parameter value</li> * <li>Parameter factor (if enabled)</li> + * </ul> * * @author chatellier * @version $Revision$ @@ -63,9 +65,9 @@ /** Columns names. */ public final static String[] COLUMN_NAMES = { - _("isisfish.common.name"), - _("isisfish.common.value"), - _("isisfish.common.ellipsis")}; + t("isisfish.common.name"), + t("isisfish.common.value"), + t("isisfish.common.ellipsis")}; protected Object script; Deleted: trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/StringComboModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/StringComboModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/StringComboModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,116 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * 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 - * 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package fr.ifremer.isisfish.ui.models.common; - -import java.util.List; - -import javax.swing.DefaultComboBoxModel; -import javax.swing.JComboBox; - -/** - * Model pour pour la representation d'une liste de {@link String}. - * Utilisation dans les {@link JComboBox}. - * - * @author chatellier - * @version $Revision$ - * - * Last update : $Date$ - * By : $Author$ - */ -public class StringComboModel extends DefaultComboBoxModel { - - /** serialVersionUID. */ - private static final long serialVersionUID = -4070846632975105788L; - - /** {@link String} list. */ - protected List<String> stringList; - - /** - * Empty constructor. - */ - public StringComboModel() { - this(null); - } - - /** - * Constructor with export list. - * - * @param stringList {@link String} list - */ - public StringComboModel(List<String> stringList) { - setStringList(stringList); - } - - /** - * Get {@link String} list. - * - * @return {@link String} list - */ - public List<String> getStringList() { - return stringList; - } - - /** - * Set {@link String} list. - * - * @param stringList {@link String} list to set - */ - public void setStringList(List<String> stringList) { - this.stringList = stringList; - // reset selected - setSelectedItem(null); - } - - public void addString(String string) { - stringList.add(string); - fireIntervalAdded(this, stringList.size() - 1, stringList.size()); - } - - public boolean containsString(String string) { - return stringList.contains(string); - } - - /* - * @see javax.swing.ListModel#getElementAt(int) - */ - @Override - public Object getElementAt(int index) { - return stringList.get(index); - } - - /* - * @see javax.swing.ListModel#getSize() - */ - @Override - public int getSize() { - int size = 0; - - if (stringList != null) { - size = stringList.size(); - } - return size; - } -} Deleted: trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/StringListModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/StringListModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/common/StringListModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,105 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2011 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 - * 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package fr.ifremer.isisfish.ui.models.common; - -import java.util.List; - -import javax.swing.AbstractListModel; -import javax.swing.JList; - -/** - * Model pour pour la representation d'une liste de {@link String}. - * Utilisation dans les {@link JList}. - * - * @author chatellier - * @version $Revision$ - * - * Last update : $Date$ - * By : $Author: chatellier $ - */ -public class StringListModel extends AbstractListModel { - - /** serialVersionUID. */ - private static final long serialVersionUID = -4070846632975105788L; - - /** {@link String} list. */ - protected List<String> stringList; - - /** - * Empty constructor. - */ - public StringListModel() { - this(null); - } - - /** - * Constructor with export list. - * - * @param stringList {@link String} list - */ - public StringListModel(List<String> stringList) { - setStringList(stringList); - } - - /** - * Get {@link String} list. - * - * @return {@link String} list - */ - public List<String> getStringList() { - return stringList; - } - - /** - * Set {@link String} list. - * - * @param stringList {@link String} list to set - */ - public void setStringList(List<String> stringList) { - this.stringList = stringList; - } - - /* - * @see javax.swing.ListModel#getElementAt(int) - */ - @Override - public Object getElementAt(int index) { - return stringList.get(index); - } - - /* - * @see javax.swing.ListModel#getSize() - */ - @Override - public int getSize() { - int size = 0; - - if (stringList != null) { - size = stringList.size(); - } - return size; - } -} Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportListModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportListModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportListModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -40,7 +40,7 @@ * Last update : $Date$ * By : $Author$ */ -public class ExportListModel extends AbstractListModel { +public class ExportListModel extends AbstractListModel<Export> { /** serialVersionUID. */ private static final long serialVersionUID = -4070846632975105788L; @@ -60,7 +60,6 @@ * @param exports exports */ public ExportListModel(List<Export> exports) { - super(); setExport(exports); } @@ -86,7 +85,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public Export getElementAt(int index) { return exports.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportListRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportListRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportListRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -52,7 +52,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alterned highlight rows and default Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportNameListRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportNameListRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/export/ExportNameListRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.models.export; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Component; import java.util.HashMap; @@ -67,7 +67,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alterned highlight rows and default @@ -84,13 +84,13 @@ Export export = exportCache.get(exportName); if (export == null) { ExportStorage storage = ExportStorage.getExport(exportName); - export = storage.getNewExportInstance(); + export = storage.getNewInstance(); exportCache.put(exportName, export); } c.setToolTipText(export.getDescription()); } catch (Exception e) { - String errorTooltip = TooltipHelper.getErrorTooltip(_("isisfish.error.compile.fileerror", exportName)); + String errorTooltip = TooltipHelper.getErrorTooltip(t("isisfish.error.compile.fileerror", exportName)); c.setToolTipText(errorTooltip); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/result/ResultListRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/result/ResultListRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/result/ResultListRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.models.result; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Component; import java.lang.reflect.Field; @@ -67,7 +67,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alterned highlight rows and default @@ -93,7 +93,7 @@ } } } catch (Exception e) { - String errorTooltip = TooltipHelper.getErrorTooltip(_("isisfish.error.compile.fileerror", "ResultName.java")); + String errorTooltip = TooltipHelper.getErrorTooltip(t("isisfish.error.compile.fileerror", "ResultName.java")); c.setToolTipText(errorTooltip); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleComboModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleComboModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleComboModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -38,7 +38,7 @@ * Last update : $Date$ * By : $Author$ */ -public class RuleComboModel extends DefaultComboBoxModel { +public class RuleComboModel extends DefaultComboBoxModel<String> { /** serialVersionUID. */ private static final long serialVersionUID = -4070846632975105788L; @@ -90,7 +90,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public String getElementAt(int index) { return rulesNames.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleListCellRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleListCellRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleListCellRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -52,7 +52,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alterned highlight rows and default Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleListModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleListModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleListModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -40,7 +40,7 @@ * Last update : $Date$ * By : $Author$ */ -public class RuleListModel extends AbstractListModel { +public class RuleListModel extends AbstractListModel<Rule> { /** serialVersionUID. */ private static final long serialVersionUID = -4070846632975105788L; @@ -86,7 +86,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public Rule getElementAt(int index) { return rules.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleNamesListRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleNamesListRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleNamesListRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.models.rule; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Component; import java.util.HashMap; @@ -67,7 +67,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alterned highlight rows and default @@ -83,13 +83,13 @@ Rule rule = ruleCache.get(ruleName); if (rule == null) { RuleStorage storage = RuleStorage.getRule(ruleName); - rule = storage.getNewRuleInstance(); + rule = storage.getNewInstance(); ruleCache.put(ruleName, rule); } c.setToolTipText(rule.getDescription()); } catch (Exception e) { - String errorTooltip = TooltipHelper.getErrorTooltip(_("isisfish.error.compile.fileerror", ruleName)); + String errorTooltip = TooltipHelper.getErrorTooltip(t("isisfish.error.compile.fileerror", ruleName)); c.setToolTipText(errorTooltip); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityanalysis/SensitivityAnalysisComboModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityanalysis/SensitivityAnalysisComboModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityanalysis/SensitivityAnalysisComboModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -38,7 +38,7 @@ * Last update : $Date$ * By : $Author$ */ -public class SensitivityAnalysisComboModel extends DefaultComboBoxModel { +public class SensitivityAnalysisComboModel extends DefaultComboBoxModel<String> { /** serialVersionUID. */ private static final long serialVersionUID = -4070846632975105788L; @@ -90,7 +90,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public String getElementAt(int index) { return sensitivityAnalysisNames.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityanalysis/SensitivityAnalysisComboRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityanalysis/SensitivityAnalysisComboRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityanalysis/SensitivityAnalysisComboRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.models.sensitivityanalysis; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Component; import java.util.HashMap; @@ -67,7 +67,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alterned highlight rows and default @@ -85,13 +85,13 @@ if (plan == null) { SensitivityAnalysisStorage storage = SensitivityAnalysisStorage .getSensitivityAnalysis(sensitivityName); - plan = storage.getNewSensitivityAnalysisInstance(); + plan = storage.getNewInstance(); sensitivityAnalysisCache.put(sensitivityName, plan); } c.setToolTipText(plan.getDescription()); } catch (Exception e) { - String errorTooltip = TooltipHelper.getErrorTooltip(_("isisfish.error.compile.fileerror", sensitivityName)); + String errorTooltip = TooltipHelper.getErrorTooltip(t("isisfish.error.compile.fileerror", sensitivityName)); c.setToolTipText(errorTooltip); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityanalysis/SensitivityAnalysisListModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityanalysis/SensitivityAnalysisListModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityanalysis/SensitivityAnalysisListModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -40,7 +40,7 @@ * Last update : $Date$ * By : $Author$ */ -public class SensitivityAnalysisListModel extends AbstractListModel { +public class SensitivityAnalysisListModel extends AbstractListModel<SensitivityAnalysis> { /** serialVersionUID. */ private static final long serialVersionUID = -4070846632975105788L; @@ -85,7 +85,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public SensitivityAnalysis getElementAt(int index) { return sensitivityAnalysis.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityanalysis/SensitivityAnalysisListRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityanalysis/SensitivityAnalysisListRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityanalysis/SensitivityAnalysisListRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -52,7 +52,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alterned highlight rows and default Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityexport/SensitivityExportListModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityexport/SensitivityExportListModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityexport/SensitivityExportListModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -40,7 +40,7 @@ * Last update : $Date$ * By : $Author: chatellier $ */ -public class SensitivityExportListModel extends AbstractListModel { +public class SensitivityExportListModel extends AbstractListModel<SensitivityExport> { /** serialVersionUID. */ private static final long serialVersionUID = -4070846632975105788L; @@ -86,7 +86,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public SensitivityExport getElementAt(int index) { return exports.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityexport/SensitivityExportListRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityexport/SensitivityExportListRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityexport/SensitivityExportListRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -52,7 +52,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alterned highlight rows and default Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityexport/SensitivityExportNameListRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityexport/SensitivityExportNameListRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/sensitivityexport/SensitivityExportNameListRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.models.sensitivityexport; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Component; import java.util.HashMap; @@ -67,7 +67,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alterned highlight rows and default @@ -84,13 +84,13 @@ SensitivityExport export = sensitivityExportCache.get(exportName); if (export == null) { SensitivityExportStorage storage = SensitivityExportStorage.getSensitivityExport(exportName); - export = storage.getNewSensitivityExportInstance(); + export = storage.getNewInstance(); sensitivityExportCache.put(exportName, export); } c.setToolTipText(export.getDescription()); } catch (Exception e) { - String errorTooltip = TooltipHelper.getErrorTooltip(_("isisfish.error.compile.fileerror", exportName)); + String errorTooltip = TooltipHelper.getErrorTooltip(t("isisfish.error.compile.fileerror", exportName)); c.setToolTipText(errorTooltip); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/simulationplan/SimulationPlanComboModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/simulationplan/SimulationPlanComboModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/simulationplan/SimulationPlanComboModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -38,7 +38,7 @@ * Last update : $Date$ * By : $Author$ */ -public class SimulationPlanComboModel extends DefaultComboBoxModel { +public class SimulationPlanComboModel extends DefaultComboBoxModel<String> { /** serialVersionUID. */ private static final long serialVersionUID = -4070846632975105788L; @@ -89,7 +89,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public String getElementAt(int index) { return simulationPlanNames.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/simulationplan/SimulationPlanComboRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/simulationplan/SimulationPlanComboRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/simulationplan/SimulationPlanComboRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.models.simulationplan; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Component; import java.util.HashMap; @@ -67,7 +67,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alterned highlight rows and default @@ -85,13 +85,13 @@ if (plan == null) { SimulationPlanStorage storage = SimulationPlanStorage .getSimulationPlan(simulationPlanName); - plan = storage.getNewSimulationPlanInstance(); + plan = storage.getNewInstance(); simulationPlanCache.put(simulationPlanName, plan); } c.setToolTipText(plan.getDescription()); } catch (Exception e) { - String errorTooltip = TooltipHelper.getErrorTooltip(_("isisfish.error.compile.fileerror", simulationPlanName)); + String errorTooltip = TooltipHelper.getErrorTooltip(t("isisfish.error.compile.fileerror", simulationPlanName)); c.setToolTipText(errorTooltip); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/simulationplan/SimulationPlanListModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/simulationplan/SimulationPlanListModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/simulationplan/SimulationPlanListModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -40,7 +40,7 @@ * Last update : $Date$ * By : $Author$ */ -public class SimulationPlanListModel extends AbstractListModel { +public class SimulationPlanListModel extends AbstractListModel<SimulationPlan> { /** serialVersionUID. */ private static final long serialVersionUID = -4070846632975105788L; @@ -85,7 +85,7 @@ * @see javax.swing.ListModel#getElementAt(int) */ @Override - public Object getElementAt(int index) { + public SimulationPlan getElementAt(int index) { return plans.get(index); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/simulationplan/SimulationPlanListRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/simulationplan/SimulationPlanListRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/simulationplan/SimulationPlanListRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -52,7 +52,7 @@ * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */ @Override - public Component getListCellRendererComponent(JList list, Object value, + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { // this must be used to have alterned highlight rows and default Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/queue/QueueAction.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/queue/QueueAction.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/queue/QueueAction.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.queue; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -87,7 +87,7 @@ for (SimulationJob jobToStop : jobsToStop) { jobToStop.stop(); if (log.isInfoEnabled()) { - log.info(_("User stop simulation %s", jobToStop.getItem().getControl() + log.info(t("User stop simulation %s", jobToStop.getItem().getControl() .getId())); } } @@ -109,9 +109,9 @@ for (SimulationJob jobToRestart : jobsToRestart) { jobToRestart.restart(); - jobToRestart.getItem().getControl().setText(_("isisfish.simulation.restarting")); + jobToRestart.getItem().getControl().setText(t("isisfish.simulation.restarting")); if (log.isInfoEnabled()) { - log.info(_("User restart simulation %s", jobToRestart.getItem().getControl() + log.info(t("User restart simulation %s", jobToRestart.getItem().getControl() .getId())); } } @@ -129,9 +129,9 @@ SimulationLoggerUtil.showSimulationLogConsole(id); } catch (Exception eee) { if (log.isErrorEnabled()) { - log.error(_("Can't open log for %s", id), eee); + log.error(t("Can't open log for %s", id), eee); } - ErrorHelper.showErrorDialog(_("Can't open log for %s", id), eee); + ErrorHelper.showErrorDialog(t("Can't open log for %s", id), eee); } } } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/result/MapRendererUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/result/MapRendererUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/result/MapRendererUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -24,26 +24,30 @@ --> <Table> <import> - static org.nuiton.i18n.I18n._ + static org.nuiton.i18n.I18n.t </import> - <row> + <script><![CDATA[ + protected void $afterCompleteSetup() { + //isisMapBean.init(informationDelegator); + } + ]]></script> + <!-- <row> <cell fill="horizontal"> <com.bbn.openmap.gui.ToolPanel id="toolPanel" /> </cell> - </row> + </row> --> <row> <cell fill="both" weightx="1" weighty="1"> <fr.ifremer.isisfish.map.IsisMapBean id="isisMapBean" selectionMode="{fr.ifremer.isisfish.map.CellSelectionLayer.NO_SELECTION}"/> </cell> </row> - <!-- <row> + <row> <cell fill="horizontal"> <com.bbn.openmap.InformationDelegator id="informationDelegator" - label='{_("isisfish.simpleResult.more.information")}' - map="{getIsisMapBean()}" showLights="false" /> + showLights="false" /> </cell> - </row> --> + </row> <row> <cell fill="horizontal"> <LegendPanel id="legendPanel" /> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/result/MatrixMapRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/result/MatrixMapRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/result/MatrixMapRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -23,7 +23,7 @@ package fr.ifremer.isisfish.ui.result; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Component; @@ -55,15 +55,15 @@ mapRendererUI = new MapRendererUI(); // Create the directional and zoom control tool - OMToolSet resultatMapOMTS = new OMToolSet(); + //OMToolSet resultatMapOMTS = new OMToolSet(); // Associate the tool with the map - resultatMapOMTS.setupListeners(mapRendererUI.getIsisMapBean()); + //resultatMapOMTS.setupListeners(mapRendererUI.getIsisMapBean()); // Add the tool to the map toolbar - mapRendererUI.getToolPanel().add((Tool)resultatMapOMTS); + //mapRendererUI.getToolPanel().add((Tool)resultatMapOMTS); //mapRendererUI.getInformationDelegator().setMap(getIsisMapBean()); //mapRendererUI.getInformationDelegator().setShowLights(false); - //mapRendererUI.getInformationDelegator().setLabel(_("isisfish.simpleResult.more.information")); + //mapRendererUI.getInformationDelegator().setLabel(t("isisfish.simpleResult.more.information")); // set fishery region mapRendererUI.getIsisMapBean().setFisheryRegion(fisheryRegion); @@ -100,7 +100,7 @@ */ @Override public String getName() { - return _("isisfish.result.map"); + return t("isisfish.result.map"); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/result/MatrixSummaryRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/result/MatrixSummaryRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/result/MatrixSummaryRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -23,8 +23,8 @@ package fr.ifremer.isisfish.ui.result; -import static org.nuiton.i18n.I18n._; -import static org.nuiton.i18n.I18n.n_; +import static org.nuiton.i18n.I18n.t; +import static org.nuiton.i18n.I18n.n; import java.awt.Component; import java.util.Iterator; @@ -53,9 +53,9 @@ */ public class MatrixSummaryRenderer implements MatrixRenderer { - protected static final String ABONDANCE_STRING = n_("matrixAbundance"); - protected static final String CAPTUREPARMETIER_STRING = _("matrixCatchPerStrategyMetPerZoneMet"); - protected static final String REJETPARMETIER_STRING = _("matrixDiscardsPerStrMetPerZonePop"); + protected static final String ABONDANCE_STRING = n("matrixAbundance"); + protected static final String CAPTUREPARMETIER_STRING = t("matrixCatchPerStrategyMetPerZoneMet"); + protected static final String REJETPARMETIER_STRING = t("matrixDiscardsPerStrMetPerZonePop"); protected SimulationStorage simulationStorage; @@ -92,13 +92,13 @@ mat1 = mat1.sumOverDim(0); mat1 = mat1.sumOverDim(1); mat1 = mat1.reduce(); - resume.append(_("isisfish.result.begin.simulation")).append(mat1.getName()).append(": ").append(mat1.getValue(0)).append("\n"); + resume.append(t("isisfish.result.begin.simulation")).append(mat1.getName()).append(": ").append(mat1.getValue(0)).append("\n"); mat1 = resultStorage.getMatrix(resultStorage.getLastStep(), name, topiaContext); mat1 = mat1.sumOverDim(0); mat1 = mat1.sumOverDim(1); mat1 = mat1.reduce(); - resume.append(_("isisfish.result.end.simulation")).append(mat1.getName()).append(": ").append(mat1.getValue(0)).append("\n"); + resume.append(t("isisfish.result.end.simulation")).append(mat1.getName()).append(": ").append(mat1.getValue(0)).append("\n"); } /* un peu long @@ -110,7 +110,7 @@ mat1 = mat1.sumOverDim(3); mat1 = mat1.reduce(); - resume.append(_("isisfish.common.sum")).append(mat1.getName()).append(": ").append(mat1.getValue(0)).append("\n"); + resume.append(t("isisfish.common.sum")).append(mat1.getName()).append(": ").append(mat1.getValue(0)).append("\n"); } else if (!name.startsWith(CAPTUREPARMETIER_STRING)){ MatrixND mat1 = resultStorage.getMatrix(name, topiaContext); @@ -119,10 +119,10 @@ mat1 = mat1.sumOverDim(2); mat1 = mat1.reduce(); - resume.append(_("isisfish.common.sum")).append(mat1.getName()).append(": ").append(mat1.getValue(0)).append("\n"); + resume.append(t("isisfish.common.sum")).append(mat1.getName()).append(": ").append(mat1.getValue(0)).append("\n"); }*/ } catch (Exception eee) { - resume.append(_("isisfish.error.no.matrix", name)); + resume.append(t("isisfish.error.no.matrix", name)); } } @@ -148,6 +148,6 @@ */ @Override public String getName() { - return _("isisfish.result.summary"); + return t("isisfish.result.summary"); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultHandler.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultHandler.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -23,7 +23,7 @@ package fr.ifremer.isisfish.ui.result; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.BorderLayout; import java.awt.event.ActionEvent; @@ -60,7 +60,7 @@ import fr.ifremer.isisfish.simulator.launcher.SimulationService; import fr.ifremer.isisfish.simulator.launcher.SimulationServiceListener; import fr.ifremer.isisfish.ui.CommonHandler; -import fr.ifremer.isisfish.ui.models.common.StringComboModel; +import fr.ifremer.isisfish.ui.models.common.GenericComboModel; /** * Handler for result UIs. @@ -92,8 +92,8 @@ } @Override public void simulationStop(SimulationService simService, SimulationJob job) { - StringComboModel model = (StringComboModel)resultUI.getSimulationComboBox().getModel(); - model.addString(job.getId()); + GenericComboModel<String> model = (GenericComboModel)resultUI.getSimulationComboBox().getModel(); + model.addElement(job.getId()); } @Override public void clearJobDone(SimulationService simService) { @@ -111,7 +111,7 @@ java.util.List<String> value = SimulationStorage.getSimulationNames(); //resultUI.getSimulationComboBox().setEditable(false); - StringComboModel model = new StringComboModel(value); + GenericComboModel model = new GenericComboModel(value); resultUI.getSimulationComboBox().setModel(model); resultUI.getSimulationComboBox().setSelectedItem(null); } @@ -180,7 +180,7 @@ try { // init menu for (String exportName : ExportStorage.getExportNames()) { - JMenuItem item = new JMenuItem(_(exportName)); + JMenuItem item = new JMenuItem(t(exportName)); item.addActionListener(new ExportActionListener(simulation, exportName)); resultSimulationFrame.getExportMenu().add(item); } @@ -200,7 +200,7 @@ matrixViewerPanel.addMatrixFilter(new SumByYearMatrixFilter()); // init available results list - StringComboModel model = new StringComboModel(resultStorage.getResultName()); + GenericComboModel model = new GenericComboModel(resultStorage.getResultName()); resultSimulationFrame.getResultsComboBox().setModel(model); resultSimulationFrame.getResultsComboBox().addItemListener(new ItemListener() { @Override @@ -240,7 +240,7 @@ public void actionPerformed(ActionEvent e) { try { - File file = FileUtil.getFile(".+\\.csv", _("isisfish.result.export.file")); + File file = FileUtil.getFile(".+\\.csv", t("isisfish.result.export.file")); // add csv extension if not set if (!file.getName().endsWith(".csv")) { file = new File(file.getAbsolutePath() + ".csv"); @@ -250,7 +250,7 @@ try { out = new BufferedWriter(new FileWriter(file)); ExportStorage storage = ExportStorage.getExport(exportName); - Export export = storage.getNewExportInstance(); + Export export = storage.getNewInstance(); export.export(simulationStorage, out); } finally { Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultMatrixFilter.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultMatrixFilter.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultMatrixFilter.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -23,7 +23,7 @@ package fr.ifremer.isisfish.ui.result; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.util.ArrayList; import java.util.List; @@ -67,7 +67,7 @@ if (dim == 0 && sumStep == 12) { // si c une somme pour les annees, on change l'intitule - matrix.setDimensionName(0, _("isisfish.common.year")); + matrix.setDimensionName(0, t("isisfish.common.year")); } // #1905 : modifie les semantiques de type Date pour que lorsque Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/result/SumByYearMatrixFilter.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/result/SumByYearMatrixFilter.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/result/SumByYearMatrixFilter.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -23,7 +23,7 @@ package fr.ifremer.isisfish.ui.result; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.util.ArrayList; import java.util.List; @@ -61,7 +61,7 @@ int semCount = matrix.getSemantic(0).size(); List<String> newSems = new ArrayList<String>(semCount); for (int i = 0; i < semCount ; i++) { - newSems.add(_("isisfish.result.matrix.sumbyyearlabel", i)); + newSems.add(t("isisfish.result.matrix.sumbyyearlabel", i)); } matrix.setSemantic(0, newSems); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/script/FileSelectionTableModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/script/FileSelectionTableModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/FileSelectionTableModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.script; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.util.ArrayList; import java.util.List; @@ -48,8 +48,8 @@ private static final long serialVersionUID = 6327223042377741126L; /** Column names. */ - public final static String[] COLUMN_NAMES = { _("isisfish.common.ellipsis"), - _("isisfish.common.module"), _("isisfish.common.file") }; + public final static String[] COLUMN_NAMES = { t("isisfish.common.ellipsis"), + t("isisfish.common.module"), t("isisfish.common.file") }; /** All files displayed in table. */ protected List<String> availableFiles; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,10 +25,13 @@ package fr.ifremer.isisfish.ui.script; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Color; +import java.awt.Component; import java.awt.Desktop; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileFilter; @@ -46,7 +49,10 @@ import java.util.List; import java.util.Map; +import javax.swing.JMenu; +import javax.swing.JMenuItem; import javax.swing.JOptionPane; +import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; @@ -62,6 +68,7 @@ import org.nuiton.util.FileUtil; import org.nuiton.util.ZipUtil; import org.nuiton.widget.SwingUtil; +import org.nuiton.widget.editor.RSyntaxEditor; import fr.ifremer.isisfish.IsisFish; import fr.ifremer.isisfish.IsisFishRuntimeException; @@ -70,6 +77,8 @@ import fr.ifremer.isisfish.datastore.ExportStorage; import fr.ifremer.isisfish.datastore.FormuleStorage; import fr.ifremer.isisfish.datastore.JavaSourceStorage; +import fr.ifremer.isisfish.datastore.ObjectiveStorage; +import fr.ifremer.isisfish.datastore.OptimizationStorage; import fr.ifremer.isisfish.datastore.RuleStorage; import fr.ifremer.isisfish.datastore.ScriptStorage; import fr.ifremer.isisfish.datastore.SensitivityAnalysisStorage; @@ -183,13 +192,27 @@ WelcomePanelUI parentUI = scriptUI.getParentContainer(WelcomePanelUI.class); parentUI.setStatusMessage(msg, running); } - + /** * Make new script, and select it on tree. */ - public void newScript() { - ScriptMapping selectedType = (ScriptMapping) scriptUI.getScriptTypeChoice().getSelectedItem(); - newScript(selectedType); + public void newScript(ScriptUI view, MouseEvent event) { + JPopupMenu menu = new JPopupMenu(); + + // make a basic copy of already existing menu + JMenu oldMenu = view.getScriptNewMenu(); + for (int i = 0; i < oldMenu.getItemCount(); i++) { + JMenuItem oldMenuItem = (JMenuItem)oldMenu.getMenuComponent(i); + JMenuItem miCopy = new JMenuItem(); + miCopy.setText(oldMenuItem.getText()); + miCopy.setIcon(oldMenuItem.getIcon()); + for (ActionListener l : oldMenuItem.getActionListeners()) { + miCopy.addActionListener(l); + } + menu.add(miCopy); + } + + menu.show((Component)event.getSource(), event.getX(), event.getY()); } /** @@ -206,15 +229,15 @@ if (scriptType.equals(ScriptMapping.Formule)) { List<String> values = FormuleStorage.getCategories(); equationModelType = (String) JOptionPane.showInputDialog(scriptUI, - _("isisfish.message.new.formule.category"), - _("isisfish.message.new.formule.title"), + t("isisfish.message.new.formule.category"), + t("isisfish.message.new.formule.title"), JOptionPane.PLAIN_MESSAGE, null, values.toArray(), values.get(0)); equationModelTypePath = equationModelType + File.separator; } // if user has not choose "cancel" if (equationModelType != null) { - String fileName = JOptionPane.showInputDialog(_("isisfish.message.new.filename")); + String fileName = JOptionPane.showInputDialog(t("isisfish.message.new.filename")); // user cancel if (!StringUtils.isEmpty(fileName)) { File scriptFile = newScript(equationModelTypePath + fileName, scriptType); @@ -257,18 +280,18 @@ if (pos != -1) { if (scriptType != ScriptMapping.Formule) { // interdit pour le moment ? - String message = _("isisfish.error.invalid.file.name", + String message = t("isisfish.error.invalid.file.name", fileName); Exception e = new RuntimeException(message); - returnError(_("isisfish.error.script.create", fileName, e.getMessage()), e); + returnError(t("isisfish.error.script.create", fileName, e.getMessage()), e); return null; } // il y a un sous type à traiter if (pos == fileName.length() - 1) { - String message = _("isisfish.error.invalid.file.name", + String message = t("isisfish.error.invalid.file.name", fileName); Exception e = new RuntimeException(message); - returnError(_("isisfish.error.script.create", fileName, e.getMessage()), e); + returnError(t("isisfish.error.script.create", fileName, e.getMessage()), e); return null; } realFilename = fileName @@ -279,9 +302,9 @@ category = ""; } if (!realFilename.matches("[A-Z0-9_][a-zA-Z0-9_]*")) { - String message = _("isisfish.error.invalid.file.name", fileName); + String message = t("isisfish.error.invalid.file.name", fileName); Exception e = new RuntimeException(message); - returnError(_("isisfish.error.script.create", fileName, e.getMessage()), e); + returnError(t("isisfish.error.script.create", fileName, e.getMessage()), e); return null; } //TODO do test on category @@ -297,6 +320,12 @@ case CommunityExport: script = ExportStorage.createExport(fileName, Location.COMMUNITY); break; + case CommunityObjective: + script = ObjectiveStorage.createObjective(fileName, Location.COMMUNITY); + break; + case CommunityOptimization: + script = OptimizationStorage.createOptimization(fileName, Location.COMMUNITY); + break; case CommunityRule: script = RuleStorage.createRule(fileName, Location.COMMUNITY); break; @@ -321,9 +350,9 @@ if (script.exists()) { // Message d'erreur si le fichier existe en local. - String message = _("isisfish.error.file.already.exists", fileName); + String message = t("isisfish.error.file.already.exists", fileName); Exception e = new RuntimeException(message); - returnError(_("isisfish.error.script.create", fileName, e + returnError(t("isisfish.error.script.create", fileName, e .getMessage()), e); } @@ -359,7 +388,7 @@ codeStorage = script; scriptFile = script.getFile(); } catch (Exception eee) { - returnError(_("isisfish.error.script.create", fileName, eee + returnError(t("isisfish.error.script.create", fileName, eee .getMessage()), eee); } @@ -438,6 +467,12 @@ case Rule: script = RuleStorage.getRule(file.getName(), Location.OFFICIAL); break; + case Objective: + script = ObjectiveStorage.getObjective(file.getName(), Location.OFFICIAL); + break; + case Optimization: + script = OptimizationStorage.getOptimization(file.getName(), Location.OFFICIAL); + break; case SimulationPlan: script = SimulationPlanStorage.getSimulationPlan(file.getName(), Location.OFFICIAL); break; @@ -456,6 +491,12 @@ case SensitivityExport: script = SensitivityExportStorage.getSensitivityExport(file.getName(), Location.OFFICIAL); break; + case CommunityObjective: + script = ObjectiveStorage.getObjective(file.getName(), Location.COMMUNITY); + break; + case CommunityOptimization: + script = OptimizationStorage.getOptimization(file.getName(), Location.COMMUNITY); + break; case CommunityRule: script = RuleStorage.getRule(file.getName(), Location.COMMUNITY); break; @@ -481,9 +522,9 @@ log.fatal("ScriptType unknown: " + file.getName()); } - //frame.setInfoText(_("isisfish.message.load.finished")); + //frame.setInfoText(t("isisfish.message.load.finished")); } catch (Exception eee) { - returnError(_("isisfish.error.script.load", file.getAbsolutePath(), + returnError(t("isisfish.error.script.load", file.getAbsolutePath(), eee.getMessage()), eee); } finally { @@ -518,10 +559,10 @@ ScriptTreeModel model = scriptUI.getScriptTreeModel(); model.fileModified(codeStorage.getFile()); } catch (Exception eee) { - returnError(_("isisfish.error.script.save", codeStorage.getFile(), + returnError(t("isisfish.error.script.save", codeStorage.getFile(), eee.getMessage()), eee); } - setStatusMessage(_("isisfish.message.save.finished")); + setStatusMessage(t("isisfish.message.save.finished")); } /** @@ -537,13 +578,13 @@ // save script before commit saveScript(); - String msg = JOptionPane.showInputDialog(_("isisfish.message.script.commit", codeStorage.getName())); + String msg = JOptionPane.showInputDialog(t("isisfish.message.script.commit", codeStorage.getName())); if (msg == null) { - setStatusMessage(_("isisfish.message.commit.cancelled")); + setStatusMessage(t("isisfish.message.commit.cancelled")); } else { codeStorage.commit(msg); codeStorage.reload(); - setStatusMessage(_("isisfish.message.commit.finished")); + setStatusMessage(t("isisfish.message.commit.finished")); } } catch (Exception ex) { if (log.isErrorEnabled()) { @@ -713,16 +754,16 @@ if (check) { scriptUI.getActionLogArea().setText( - _("isisfish.script.compilation.ok", result.toString())); + t("isisfish.script.compilation.ok", result.toString())); scriptUI.getActionLogArea().setBackground(COLOR_SUCCESS); } else { scriptUI.getActionLogArea().setText( - _("isisfish.script.compilation.failed", result + t("isisfish.script.compilation.failed", result .toString())); scriptUI.getActionLogArea().setBackground(COLOR_FAILURE); } - setStatusMessage(_("isisfish.message.check.finished")); + setStatusMessage(t("isisfish.message.check.finished")); return check; } @@ -731,7 +772,7 @@ */ public void checkAllScripts() { - setStatusMessage(_("isisfish.message.check.inprogress"), true); + setStatusMessage(t("isisfish.message.check.inprogress"), true); boolean allSuccess = true; @@ -745,7 +786,7 @@ // le fichier java ne sont pas compilable sans la formule associée List<File> javaFiles = FileUtil.find(scriptMapping.getModule(), ".+\\.java$", false); for (File javaFile : javaFiles) { - scriptUI.getActionLogArea().append(_("isisfish.script.compilingfile", javaFile)); + scriptUI.getActionLogArea().append(t("isisfish.script.compilingfile", javaFile)); StringWriter result = new StringWriter(); PrintWriter out = new PrintWriter(result); @@ -753,10 +794,10 @@ out.flush(); if (compileResult == 0) { - scriptUI.getActionLogArea().append(_("isisfish.common.ok") + "\n"); + scriptUI.getActionLogArea().append(t("isisfish.common.ok") + "\n"); } else { - scriptUI.getActionLogArea().append(_("isisfish.common.error") + ":\n"); + scriptUI.getActionLogArea().append(t("isisfish.common.error") + ":\n"); scriptUI.getActionLogArea().append(result.toString() + "\n"); scriptUI.getActionLogArea().setBackground(COLOR_FAILURE); allSuccess = false; @@ -772,7 +813,7 @@ scriptUI.getActionLogArea().setBackground(COLOR_SUCCESS); } - setStatusMessage(_("isisfish.message.check.finished")); + setStatusMessage(t("isisfish.message.check.finished")); } /** @@ -815,7 +856,7 @@ ex.printStackTrace(out); scriptUI.getActionLogArea().setText(result.toString()); } - setStatusMessage(_("isisfish.message.evaluation.finished")); + setStatusMessage(t("isisfish.message.evaluation.finished")); } /** @@ -831,10 +872,10 @@ try { // ask user form a .zip file File file = FileUtil.getFile(".*.zip$", - _("isisfish.message.import.scripts.zipped")); + t("isisfish.message.import.scripts.zipped")); if (file != null) { - //frame.setInfoText(_("isisfish.message.import.scripts.file", file)); + //frame.setInfoText(t("isisfish.message.import.scripts.file", file)); // get two list of relative path (one for new files, // one for exisiting files) @@ -873,12 +914,12 @@ dialog.pack(); SwingUtil.center(dialog); dialog.setVisible(true); - setStatusMessage(_("isisfish.message.import.scripts.file.done", file)); + setStatusMessage(t("isisfish.message.import.scripts.file.done", file)); } else { - setStatusMessage(_("isisfish.message.import.scripts.file.cancelled")); + setStatusMessage(t("isisfish.message.import.scripts.file.cancelled")); } } catch (Exception eee) { - returnError(_("isisfish.error.script.import", eee.getMessage()), + returnError(t("isisfish.error.script.import", eee.getMessage()), eee); } } @@ -971,7 +1012,7 @@ log.info("Copying " + sourceFile.getName() + " to " + dst); } - FileUtil.copy(sourceFile, dst); + FileUtils.copyFile(sourceFile, dst); } } } catch (Exception ex) { @@ -1028,7 +1069,7 @@ } String name = codeStorage.getName(); - int resp = JOptionPane.showConfirmDialog(scriptUI, _("isisfish.message.confirm.remove.script", name), + int resp = JOptionPane.showConfirmDialog(scriptUI, t("isisfish.message.confirm.remove.script", name), null, JOptionPane.YES_NO_OPTION); if (resp == JOptionPane.YES_OPTION) { // stay in UI even if deleted @@ -1045,17 +1086,17 @@ //TODO again the file in panel but not in tree panel ? codeStorage.delete(deleteRemote); if (codeStorage.getFile().exists()) { - ErrorHelper.showErrorDialog(_("isisfish.error.script.delete", codeStorage + ErrorHelper.showErrorDialog(t("isisfish.error.script.delete", codeStorage .getFile())); } } catch (Exception eee) { - returnError(_("isisfish.error.script.delete", + returnError(t("isisfish.error.script.delete", codeStorage == null ? null : codeStorage.getFile(), eee .getMessage()), eee); } - setStatusMessage(_("isisfish.message.delete.finished")); + setStatusMessage(t("isisfish.message.delete.finished")); } else { - setStatusMessage(_("isisfish.message.delete.canceled")); + setStatusMessage(t("isisfish.message.delete.canceled")); } } @@ -1080,7 +1121,7 @@ if (log.isErrorEnabled()) { log.error("Can't get diff", e); } - ErrorHelper.showErrorDialog(_("isisfish.vcs.vcssvn.diff.error"), e); + ErrorHelper.showErrorDialog(t("isisfish.vcs.vcssvn.diff.error"), e); } } @@ -1093,6 +1134,12 @@ Rule( RuleStorage.getRuleDirectory(), RuleStorage.RULE_TEMPLATE, true), + Objective( + ObjectiveStorage.getObjectiveDirectory(), + ObjectiveStorage.OBJECTIVE_TEMPLATE, true), + Optimization( + OptimizationStorage.getOptimizationDirectory(), + OptimizationStorage.OPTIMIZATION_TEMPLATE, true), Script( ScriptStorage.getScriptDirectory(), ScriptStorage.SCRIPT_TEMPLATE, true), @@ -1115,6 +1162,12 @@ CommunityExport( ExportStorage.getCommunityExportDirectory(), ExportStorage.EXPORT_TEMPLATE), + CommunityObjective( + ObjectiveStorage.getCommunityObjectiveDirectory(), + ObjectiveStorage.OBJECTIVE_TEMPLATE, true), + CommunityOptimization( + OptimizationStorage.getCommunityOptimizationDirectory(), + OptimizationStorage.OPTIMIZATION_TEMPLATE, true), CommunityRule( RuleStorage.getCommunityRuleDirectory(), RuleStorage.RULE_TEMPLATE), @@ -1191,7 +1244,7 @@ * Generate javadoc and display output in UI. */ public void generateScriptJavadoc() { - setStatusMessage(_("isisfish.script.menu.javadocgenerating", + setStatusMessage(t("isisfish.script.menu.javadocgenerating", IsisFish.config.getJavadocDirectory()), true); SwingUtilities.invokeLater(new Runnable() { @@ -1206,18 +1259,18 @@ if (ok == 0) { scriptUI.getActionLogArea().setText( - _("isisfish.script.javadoc.ok", output.toString())); + t("isisfish.script.javadoc.ok", output.toString())); // vert leger scriptUI.getActionLogArea().setBackground(COLOR_SUCCESS); } else { scriptUI.getActionLogArea().setText( - _("isisfish.script.compilation.failed", output + t("isisfish.script.compilation.failed", output .toString())); // rouge leger scriptUI.getActionLogArea().setBackground(COLOR_FAILURE); } - setStatusMessage(_("isisfish.script.menu.javadocgenerated", + setStatusMessage(t("isisfish.script.menu.javadocgenerated", IsisFish.config.getJavadocDirectory())); } }); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2009 - 2014 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 @@ -59,6 +59,10 @@ onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunitySensitivity)' icon="script.png" /> <JMenuItem id="miNewSensitivityExport" text="isisfish.script.menu.txtNewSensitivityExport" onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunitySensitivityExport)' icon="script.png" /> + <JMenuItem text="isisfish.script.menu.txtNewObjective" + onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunityObjective)' icon="script.png" /> + <JMenuItem text="isisfish.script.menu.txtNewOptimization" + onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunityOptimization)' icon="script.png" /> <JMenuItem id="miNewEquationModel" text="isisfish.script.menu.txtNewEquationModel" onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunityFormule)' icon="script.png" /> </JMenu> @@ -110,9 +114,8 @@ <!-- Toolbar --> <JPanel layout='{new BorderLayout()}' constraints='BorderLayout.CENTER'> <JPanel id="buttonBar" layout='{new GridLayout()}' constraints='BorderLayout.NORTH'> - <JComboBox id="scriptTypeChoice" model='{new ScriptTypesComboModel()}'/> - <JButton id="buttonScriptNew" text="isisfish.script.new" toolTipText='isisfish.script.new.tooltip' - onActionPerformed='getScriptAction().newScript()' icon="script.png" /> + <JButton id="buttonScriptNew" text="isisfish.script.newplus" toolTipText='isisfish.script.new.tooltip' + onMousePressed='getScriptAction().newScript(this, event)' icon="script.png" /> <JButton id="buttonScriptSave" text="isisfish.script.save" toolTipText="isisfish.script.save.tooltip" enabled='{isSingleFileSelected()}' onActionPerformed='getScriptAction().saveScript()' icon="script_save.png" /> <JButton id="buttonScriptExport" text="isisfish.script.export" toolTipText="isisfish.script.export.tooltip" enabled='false' Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/script/action/BackupAction.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/script/action/BackupAction.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/action/BackupAction.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2005 - 2010 Ifremer, Code Lutin, Cedric Pineau, Benjamin Poussin + * Copyright (C) 2005 - 2012 Ifremer, Code Lutin, Cedric Pineau, Benjamin Poussin, 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 @@ -30,9 +30,9 @@ import java.io.IOException; import java.util.List; +import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.util.FileUtil; import fr.ifremer.isisfish.IsisFish; import fr.ifremer.isisfish.IsisFishRuntimeException; @@ -133,7 +133,7 @@ if (log.isInfoEnabled()) { log.info("Copying " + src.getName() + " to " + dst); } - FileUtil.copy(src, dst); + FileUtils.copyFile(src, dst); } } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/script/action/ChooseFileAction.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/script/action/ChooseFileAction.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/action/ChooseFileAction.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.script.action; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import javax.swing.AbstractAction; import javax.swing.JDialog; @@ -74,7 +74,7 @@ JFileChooser chooser = new JFileChooser(dir); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int ret = chooser.showDialog(dialog, - _("isisfish.message.choose.archive")); + t("isisfish.message.choose.archive")); if (ret == JFileChooser.APPROVE_OPTION) { File newFile = chooser.getSelectedFile(); String path; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/script/action/ExportAction.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/script/action/ExportAction.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/action/ExportAction.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.script.action; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.event.ActionEvent; import java.io.File; @@ -100,7 +100,7 @@ if (dst.exists()) { int resp = JOptionPane.showConfirmDialog(dialog, - _("isisfish.message.file.already.exists", dst)); + t("isisfish.message.file.already.exists", dst)); if (resp == JOptionPane.CANCEL_OPTION) { dialog.dispose(); @@ -113,7 +113,7 @@ } } else if (!dst.getParentFile().exists()) { int resp = JOptionPane.showConfirmDialog(dialog, - _("isisfish.message.directory.not.exists", dst)); + t("isisfish.message.directory.not.exists", dst)); if (resp == JOptionPane.CANCEL_OPTION) { dialog.dispose(); return false; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/script/model/ScriptTransferHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/script/model/ScriptTransferHandler.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/model/ScriptTransferHandler.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -36,7 +36,7 @@ import javax.swing.JComponent; import javax.swing.TransferHandler; -import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/script/model/ScriptTreeCellRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/script/model/ScriptTreeCellRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/model/ScriptTreeCellRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.script.model; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Color; import java.awt.Component; @@ -77,11 +77,11 @@ JLabel c = (JLabel)super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); if (value == IsisFish.vcs) { - c.setText(_("isisfish.ui.script.officialvcs")); + c.setText(t("isisfish.ui.script.officialvcs")); c.setIcon(VCS_ICON); c.setFont(c.getFont().deriveFont(Font.BOLD)); } else if (value == IsisFish.communityVcs) { - c.setText(_("isisfish.ui.script.communityvcs")); + c.setText(t("isisfish.ui.script.communityvcs")); c.setIcon(VCS_ICON); c.setFont(c.getFont().deriveFont(Font.BOLD)); } else if (value instanceof File) { Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/script/model/ScriptTreeModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/script/model/ScriptTreeModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/model/ScriptTreeModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -41,6 +41,8 @@ import org.jdesktop.swingx.tree.TreeModelSupport; import fr.ifremer.isisfish.IsisFish; +import fr.ifremer.isisfish.datastore.ObjectiveStorage; +import fr.ifremer.isisfish.datastore.OptimizationStorage; import fr.ifremer.isisfish.datastore.SimulationPlanStorage; import fr.ifremer.isisfish.datastore.ExportStorage; import fr.ifremer.isisfish.datastore.FormuleStorage; @@ -93,23 +95,27 @@ rootFiles = new HashMap<VCS, List<File>>(); List<File> offFiles = new ArrayList<File>(); - offFiles.add(SimulationPlanStorage.getSimulationPlanDirectory()); offFiles.add(ExportStorage.getExportDirectory()); offFiles.add(FormuleStorage.getFormuleDirectory()); + offFiles.add(ObjectiveStorage.getObjectiveDirectory()); + offFiles.add(OptimizationStorage.getOptimizationDirectory()); offFiles.add(RuleStorage.getRuleDirectory()); offFiles.add(ScriptStorage.getScriptDirectory()); offFiles.add(SensitivityExportStorage.getSensitivityExportDirectory()); offFiles.add(SensitivityAnalysisStorage.getSensitivityAnalysisDirectory()); + offFiles.add(SimulationPlanStorage.getSimulationPlanDirectory()); offFiles.add(SimulatorStorage.getSimulatorDirectory()); List<File> comFiles = new ArrayList<File>(); - comFiles.add(SimulationPlanStorage.getCommunitySimulationPlanDirectory()); comFiles.add(ExportStorage.getCommunityExportDirectory()); comFiles.add(FormuleStorage.getCommunityFormuleDirectory()); + comFiles.add(ObjectiveStorage.getCommunityObjectiveDirectory()); + comFiles.add(OptimizationStorage.getCommunityOptimizationDirectory()); comFiles.add(RuleStorage.getCommunityRuleDirectory()); comFiles.add(ScriptStorage.getCommunityScriptDirectory()); comFiles.add(SensitivityExportStorage.getCommunitySensitivityExportDirectory()); comFiles.add(SensitivityAnalysisStorage.getCommunitySensitivityAnalysisDirectory()); + comFiles.add(SimulationPlanStorage.getCommunitySimulationPlanDirectory()); comFiles.add(SimulatorStorage.getCommunitySimulatorDirectory()); rootFiles.put(IsisFish.vcs, offFiles); Deleted: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/ContinuousPanelContainerUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/ContinuousPanelContainerUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/ContinuousPanelContainerUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,41 +0,0 @@ -<!-- - #%L - IsisFish - - $Id$ - $HeadURL$ - %% - Copyright (C) 2009 - 2011 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 - 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 Public License for more details. - - You should have received a copy of the GNU General Public - License along with this program. If not, see - <http://www.gnu.org/licenses/gpl-3.0.html>. - #L% - --> -<JPanel layout='{new BorderLayout()}' abstract="true"> - - <Boolean id='continuePossible' javaBean='true'/> - - <Boolean id='continueSelected' javaBean='false'/> - - <script><![CDATA[ -/** - * Return true only if UI component are all filled and value are correct - * to define new factor. - */ -public abstract boolean isFactorValid(); - ]]></script> - - <JPanel id='content' layout='{new BorderLayout()}' constraints='BorderLayout.CENTER'/> - -</JPanel> Deleted: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/DefaultContinuousPanelUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/DefaultContinuousPanelUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/DefaultContinuousPanelUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,158 +0,0 @@ -<!-- - #%L - IsisFish - - $Id$ - $HeadURL$ - %% - Copyright (C) 2009 - 2011 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 - 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 Public License for more details. - - You should have received a copy of the GNU General Public - License along with this program. If not, see - <http://www.gnu.org/licenses/gpl-3.0.html>. - #L% - --> -<ContinuousPanelContainerUI> - - <Boolean id="percentageTypeFactor" javaBean="true" /> - - <import> - org.apache.commons.lang3.StringUtils - java.beans.PropertyChangeEvent - java.beans.PropertyChangeListener - java.awt.CardLayout - </import> - - <script><![CDATA[ -public void init(String min, String max, String referenceValue, String coefficient) { - continueMin.setText(min); - continueMax.setText(max); - referenceValueField.setText(referenceValue); - coefficientField.setText(coefficient); -} - -public void initExisting(String min, String max, String referenceValue, String coefficient) { - init(min, max, referenceValue, coefficient); - setPercentageTypeFactor(StringUtils.isNotBlank(coefficient)); -} - -@Override -public boolean isFactorValid() { - boolean valid = false; - - try { - if (continueSelected) { - if (percentageTypeFactor) { - Double coefficient = Double.parseDouble(coefficientField.getText().trim()); - Double referenceValue = Double.parseDouble(referenceValueField.getText().trim()); - valid = coefficient != null && referenceValue != null; - } - else { - Double minValue = Double.parseDouble(continueMin.getText().trim()); - Double maxValue = Double.parseDouble(continueMax.getText().trim()); - valid = minValue != null && maxValue != null; - } - } - else { - valid = true; - } - } - catch (NumberFormatException eee) { - if (log.isWarnEnabled()) { - log.warn("Double parse error", eee); - } - } - - return valid; -} - -protected void $afterCompleteSetup() { - addPropertyChangeListener(PROPERTY_PERCENTAGE_TYPE_FACTOR, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if ((Boolean)evt.getNewValue()) { - ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "percentageType"); - } else { - ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "minMaxType"); - } - } - }); -} - ]]></script> - <JPanel id="content"> - <Table constraints='BorderLayout.CENTER'> - <row> - <cell fill='horizontal' weightx='1'> - <JRadioButton text="isisfish.sensitivity.continuouspercentagetype" - onActionPerformed="setPercentageTypeFactor(true)" - selected="{isPercentageTypeFactor()}"/> - </cell> - <cell fill='horizontal' weightx='1'> - <JRadioButton text="isisfish.sensitivity.continuousminmaxtype" - onActionPerformed="setPercentageTypeFactor(false)" - selected="{!isPercentageTypeFactor()}"/> - </cell> - </row> - <row> - <cell fill='both' columns="2" weightx='1' weighty='1'> - <JPanel layout="{new CardLayout()}" id="hidablePanel"> - <Table constraints='"percentageType"' border='{BorderFactory.createTitledBorder("")}'> - <row> - <cell fill='horizontal'> - <JLabel text='isisfish.sensitivity.referencevalue' - enabled='{isPercentageTypeFactor()}'/> - </cell> - <cell fill='horizontal' weightx='0.5'> - <JTextField id='referenceValueField' - enabled='{isPercentageTypeFactor()}'/> - </cell> - </row> - <row> - <cell fill='horizontal'> - <JLabel text='isisfish.sensitivity.coefficient' - enabled='{isPercentageTypeFactor()}'/> - </cell> - <cell fill='horizontal' weightx='0.5'> - <JTextField id='coefficientField' - enabled='{isPercentageTypeFactor()}'/> - </cell> - </row> - </Table> - <Table constraints='"minMaxType"' border='{BorderFactory.createTitledBorder("")}'> - <row> - <cell fill='horizontal'> - <JLabel text='isisfish.sensitivity.firstValue' - enabled='{!isPercentageTypeFactor()}'/> - </cell> - <cell fill='horizontal' weightx='0.5'> - <JTextField id='continueMin' - enabled='{!isPercentageTypeFactor()}'/> - </cell> - </row> - <row> - <cell fill='horizontal'> - <JLabel text='isisfish.sensitivity.lastValue' - enabled='{!isPercentageTypeFactor()}'/> - </cell> - <cell fill='horizontal' weightx='0.5'> - <JTextField id='continueMax' - enabled='{!isPercentageTypeFactor()}'/> - </cell> - </row> - </Table> - </JPanel> - </cell> - </row> - </Table> - </JPanel> -</ContinuousPanelContainerUI> Deleted: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,328 +0,0 @@ -<!-- - #%L - IsisFish - - $Id$ - $HeadURL$ - %% - Copyright (C) 2009 - 2011 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 - 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 Public License for more details. - - You should have received a copy of the GNU General Public - License along with this program. If not, see - <http://www.gnu.org/licenses/gpl-3.0.html>. - #L% - --> -<ContinuousPanelContainerUI> - - <import> - java.awt.Component - java.awt.Dimension - java.util.ArrayList - java.util.EventObject - java.util.List - java.util.regex.Matcher - java.util.regex.Pattern - javax.swing.table.AbstractTableModel - javax.swing.table.DefaultTableModel - javax.swing.table.TableCellEditor - javax.swing.table.TableModel - javax.swing.JComboBox - javax.swing.DefaultCellEditor - javax.swing.event.CellEditorListener - fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain - org.apache.commons.lang3.StringUtils - java.beans.PropertyChangeEvent - java.beans.PropertyChangeListener - java.awt.CardLayout - </import> - - <String id='text' javaBean='null'/> - <org.nuiton.topia.persistence.TopiaEntityContextable id='bean' javaBean='null'/> - <String id='beanProperty' javaBean='null'/> - <!-- For editor doc purpose --> - <Class id='clazz' javaBean='null'/> - <String id='formuleCategory' javaBean='null'/> - <fr.ifremer.isisfish.entities.Equation id='selectedEquation' javaBean='null'/> - <!-- bean property --> - <fr.ifremer.isisfish.entities.Formule id='formule' javaBean='null'/> - - <Boolean id="selectedDomain" javaBean="false" /> - <Boolean id="percentageTypeDomain" javaBean="false" /> - - <script><![CDATA[ - -protected List<EquationContinuousDomain> domains = new ArrayList<EquationContinuousDomain>(); - -public List<EquationContinuousDomain> getDomains() { - return domains; -} - -protected void addDomain(EquationContinuousDomain domain) { - domains.add(domain); - // fire data change - variablesListModel.setDomains(domains); -} - -/** - * Valid selected domain. - */ -protected void validSelectedDomain() { - // fill selected - EquationContinuousDomain selectedDomain = (EquationContinuousDomain)variablesList.getSelectedValue(); - selectedDomain.setVariableName(variableNameField.getText().trim()); - if (isPercentageTypeDomain()) { - selectedDomain.setPercentageType(true); - selectedDomain.setReferenceValue(Double.parseDouble(referenceValueField.getText())); - selectedDomain.setCoefficient(Double.parseDouble(coefficientField.getText()) / 100); - } else { - selectedDomain.setPercentageType(false); - selectedDomain.setMinBound(Double.parseDouble(minBoundField.getText())); - selectedDomain.setMaxBound(Double.parseDouble(maxBoundField.getText())); - } - - - // parse equation content to replace - // double xxx = 4.0; - // by - // double xxx = context.getValueAndCompute("myfactorname.xxx", 4.0) - // if xxx is the variable name to replace - String variableName = selectedDomain.getVariableName(); - String[] lines = editor.getEditor().getText().split("\n"); - String result = ""; - for (String line : lines) { - Pattern p = Pattern.compile("(^.*\\s+" + variableName + "\\s*\\=\\s*)([\\d\\.]+).*\\;$"); - Matcher matcher = p.matcher(line); - if (matcher.find()) { - String fullVariableName = bean.toString() + "." + StringUtils.uncapitalize(beanProperty) + "." + variableName; - line = matcher.group(1) + "context.getValueAndCompute(\"" + fullVariableName + "\", " + matcher.group(2) + ");"; - } - result += line + "\n"; - } - editor.getEditor().setText(result); - - // fire data change - variablesListModel.setDomains(domains); -} - -protected void addNewVariable() { - EquationContinuousDomain domain = new EquationContinuousDomain(); - domain.setVariableName("X"); - addDomain(domain); - - // auto select - variablesList.setSelectedValue(domain, true); -} - -protected void displaySelectedDomain() { - EquationContinuousDomain selectedDomain = (EquationContinuousDomain)variablesList.getSelectedValue(); - if (selectedDomain != null) { - setSelectedDomain(true); - variableNameField.setText(selectedDomain.getVariableName()); - setPercentageTypeDomain(selectedDomain.getCoefficient() != null); - if (selectedDomain.getCoefficient() != null) { - coefficientField.setText(String.valueOf(selectedDomain.getCoefficient() * 100)); - } else { - coefficientField.setText(""); - } - if (selectedDomain.getReferenceValue() != null) { - referenceValueField.setText(selectedDomain.getReferenceValue().toString()); - } else { - referenceValueField.setText(""); - } - if (selectedDomain.getMinBound() != null) { - minBoundField.setText(selectedDomain.getMinBound().toString()); - } else { - minBoundField.setText(""); - } - if (selectedDomain.getMaxBound() != null) { - maxBoundField.setText(selectedDomain.getMaxBound().toString()); - } else { - maxBoundField.setText(""); - } - } else { - setSelectedDomain(false); - } -} - -protected void removeSelectedVariable() { - int selectedIndex = variablesList.getSelectedIndex(); - domains.remove(selectedIndex); - - // fire data change - variablesList.clearSelection(); - variablesListModel.setDomains(domains); -} - -@Override -public boolean isFactorValid() { - boolean valid = true; - - try { - for (EquationContinuousDomain domain : domains) { - if (StringUtils.isBlank(domain.getVariableName())) { - valid = false; - } - else if (domain.getCoefficient() == null) { - valid = domain.getMinBound() != null && domain.getMaxBound() != null; - } - else { - valid = domain.getReferenceValue() != null; - } - } - } catch (NumberFormatException ex) { - valid = false; - } - - return valid; -} - -protected void $afterCompleteSetup() { - addPropertyChangeListener(PROPERTY_PERCENTAGE_TYPE_DOMAIN, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if ((Boolean)evt.getNewValue()) { - ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "percentageType"); - } else { - ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "minMaxType"); - } - } - }); -} - ]]></script> - <JPanel id='content'> - <JScrollPane constraints='BorderLayout.CENTER'> - <Table> - <row> - <cell fill='both' weightx='1' weighty='1'> - <JScrollPane preferredSize="{new Dimension(200, 150)}"> - <fr.ifremer.isisfish.ui.sensitivity.equation.EquationDomainListModel - id="variablesListModel" constructorParams="domains" /> - <JList id="variablesList" model="{variablesListModel}" - cellRenderer="{new fr.ifremer.isisfish.ui.sensitivity.equation.EquationDomainRenderer()}"/> - <ListSelectionModel initializer="variablesList.getSelectionModel()" - onValueChanged="displaySelectedDomain();setSelectedDomain(variablesList.getSelectedIndex() != -1)" /> - </JScrollPane> - </cell> - <cell fill='both' weightx='1' weighty='1'> - <Table> - <row> - <cell fill="horizontal" columns="2"> - <Table> - <row> - <cell> - <JLabel text="isisfish.sensitivity.equation.variablename" enabled='{isSelectedDomain()}' /> - </cell> - <cell fill="horizontal" weightx='1'> - <JTextField id="variableNameField" enabled='{isSelectedDomain()}'/> - </cell> - </row> - </Table> - </cell> - </row> - <row> - <cell fill="horizontal" weightx='1'> - <JRadioButton id="minMaxButton" text="isisfish.sensitivity.continuousminmaxtype" - onActionPerformed="setPercentageTypeDomain(!minMaxButton.isSelected())" - selected="{!isPercentageTypeDomain()}" - enabled='{isSelectedDomain()}'/> - </cell> - <cell fill="horizontal" weightx='1'> - <JRadioButton id="percentageTypeButton" text="isisfish.sensitivity.continuouspercentagetype" - onActionPerformed="setPercentageTypeDomain(percentageTypeButton.isSelected())" - selected="{isPercentageTypeDomain()}" - enabled='{isSelectedDomain()}'/> - </cell> - </row> - <row> - <cell fill="both" weighty='1' columns="2"> - <JPanel layout="{new CardLayout()}" id="hidablePanel"> - <Table border='{BorderFactory.createTitledBorder("")}' constraints='"minMaxType"'> - <row> - <cell fill='horizontal'> - <JLabel text='isisfish.sensitivity.firstValue' - enabled='{isSelectedDomain()}'/> - </cell> - <cell fill='horizontal' weightx='0.5'> - <JTextField id='minBoundField' - enabled='{isSelectedDomain()}'/> - </cell> - </row> - <row> - <cell fill='horizontal'> - <JLabel text='isisfish.sensitivity.lastValue' - enabled='{isSelectedDomain()}'/> - </cell> - <cell fill='horizontal' weightx='0.5'> - <JTextField id='maxBoundField' - enabled='{isSelectedDomain()}'/> - </cell> - </row> - </Table> - <Table border='{BorderFactory.createTitledBorder("")}' constraints='"percentageType"'> - <row> - <cell fill='horizontal'> - <JLabel text='isisfish.sensitivity.referencevalue' - enabled='{isSelectedDomain()}'/> - </cell> - <cell fill='horizontal' weightx='0.5'> - <JTextField id='referenceValueField' - enabled='{isSelectedDomain()}'/> - </cell> - </row> - <row> - <cell fill='horizontal'> - <JLabel text='isisfish.sensitivity.coefficient' - enabled='{isSelectedDomain()}'/> - </cell> - <cell fill='horizontal' weightx='0.5'> - <JTextField id='coefficientField' - enabled='{isSelectedDomain()}'/> - </cell> - </row> - </Table> - </JPanel> - </cell> - </row> - <row> - <cell fill="horizontal" columns="2"> - <JButton text="isisfish.sensitivity.equation.valid" - enabled='{isSelectedDomain()}' - onActionPerformed='validSelectedDomain()' /> - </cell> - </row> - </Table> - </cell> - </row> - <row> - <cell fill='horizontal'> - <JButton id='add' text='isisfish.common.add' visible='{isContinuePossible()}' - onActionPerformed='addNewVariable()'/> - </cell> - <cell fill='horizontal'> - <JButton id='remove' text='isisfish.common.remove' visible='{isContinuePossible()}' - enabled='{isSelectedDomain()}' onActionPerformed='removeSelectedVariable()'/> - </cell> - </row> - <row> - <cell fill='both' columns='2' weightx='1' weighty='1'> - <fr.ifremer.isisfish.ui.input.InputOneEquationUI id='editor' constructorParams='this' - autoSaveModification="false" formule='{getFormule()}' text='{getText()}' - bean='{getBean()}' clazz='{getClazz()}' beanProperty='{getBeanProperty()}' - formuleCategory='{getFormuleCategory()}' selectedEquation='{getSelectedEquation()}' - visible='{isContinuePossible()}' active="true" /> - </cell> - </row> - </Table> - </JScrollPane> - </JPanel> -</ContinuousPanelContainerUI> Deleted: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorWizardUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorWizardUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorWizardUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,188 +0,0 @@ -<!-- - #%L - IsisFish - - $Id$ - $HeadURL$ - %% - Copyright (C) 2009 - 2011 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 - 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 Public License for more details. - - You should have received a copy of the GNU General Public - License along with this program. If not, see - <http://www.gnu.org/licenses/gpl-3.0.html>. - #L% - --> -<JDialog title='isisfish.sensitivity.title' modal='{true}' layout='{new BorderLayout()}'> - - <import> - org.apache.commons.lang3.StringUtils - org.nuiton.topia.persistence.TopiaEntityContextable - fr.ifremer.isisfish.ui.SimulationUI - fr.ifremer.isisfish.ui.simulator.SimulAction - fr.ifremer.isisfish.ui.input.InputSaveVerifier - fr.ifremer.isisfish.simulator.sensitivity.Factor - fr.ifremer.isisfish.simulator.sensitivity.Domain - fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain - fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain - fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain - java.beans.PropertyChangeEvent - java.beans.PropertyChangeListener - java.util.SortedMap - javax.swing.JComponent - java.awt.CardLayout - </import> - - <SensitivityInputHandler id="handler" /> - - <Boolean id='continuePossible' javaBean='false'/> - - <Boolean id='continueSelected' javaBean='false'/> - - <Boolean id='existingValue' javaBean='false'/> - - <String id="factorPath" javaBean="null"/> - - <script><![CDATA[ - -protected java.util.List<JComponent> discretComponents = new ArrayList<JComponent>(); -protected ContinuousPanelContainerUI continuousPanel = null; - -/*protected void $afterCompleteSetup() { - addPropertyChangeListener(PROPERTY_CONTINUE_POSSIBLE, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (continuousPanel != null) { - continuousPanel.setContinuePossible((Boolean)evt.getNewValue()); - } - } - }); - - addPropertyChangeListener(PROPERTY_CONTINUE_SELECTED, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (continuousPanel != null) { - continuousPanel.setContinueSelected((Boolean)evt.getNewValue()); - } - } - }); -}*/ - -protected void $afterCompleteSetup() { - addPropertyChangeListener(PROPERTY_CONTINUE_SELECTED, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if ((Boolean)evt.getNewValue()) { - ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "continuousPanelContainer"); - } else { - ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "discretePanelContainer"); - } - - // necessary for validation - if (continuousPanel != null) { - continuousPanel.setContinueSelected((Boolean)evt.getNewValue()); - } - } - }); -} - -protected SimulAction getSimulAction() { - return getContextValue(SimulAction.class); -} - ]]></script> - <Table constraints='BorderLayout.CENTER'> - <row> - <cell columns='4' fill='horizontal'> - <Table> - <row> - <cell fill='horizontal'> - <JLabel text='isisfish.sensitivity.name'/> - </cell> - <cell weightx='1' fill='horizontal'> - <JTextField id='factorNameField'/> - </cell> - </row> - </Table> - </cell> - </row> - <row> - <cell fill='horizontal' weightx='1' columns='2'> - <JRadioButton id='discret' text='isisfish.sensitivity.discret' - selected='{true}' buttonGroup='factorType' - onActionPerformed='setContinueSelected(continueRadio.isSelected())'/> - </cell> - <cell fill='horizontal' weightx='1' columns='2'> - <JRadioButton id='continueRadio' text='isisfish.sensitivity.continue' - buttonGroup='factorType' selected='{false}' visible='{isContinuePossible()}' - onActionPerformed='setContinueSelected(continueRadio.isSelected())'/> - </cell> - </row> - <row> - <cell columns='4' fill='both' weightx='1' weighty='3'> - <JPanel layout="{new CardLayout()}" id="hidablePanel"> - - <!-- discrete --> - <Table id='discretePanelContainer' border='{BorderFactory.createTitledBorder("")}' - constraints='"discretePanelContainer"'> - <row> - <cell fill='horizontal'> - <JLabel text='isisfish.sensitivity.selectDiscretNumber'/> - </cell> - <cell fill='horizontal' weightx='1'> - <JTextField id='discretNumber'/> - </cell> - <cell fill='horizontal'> - <JButton text='isisfish.sensitivity.validDiscretNumber' - onActionPerformed='getHandler().addTabs(this)'/> - </cell> - </row> - <row> - <cell columns='3' fill='both' weightx='1' weighty='2' anchor="north"> - <JTabbedPane id='tabPane'/> - </cell> - </row> - </Table> - - <!-- continous --> - <JPanel id='continuousPanelContainer' layout='{new BorderLayout()}' - border='{BorderFactory.createTitledBorder("")}' - constraints='"continuousPanelContainer"' /> - </JPanel> - </cell> - </row> - <row> - <cell columns='4' fill='horizontal'> - <JLabel text='isisfish.sensitivity.comment'/> - </cell> - </row> - <row> - <cell columns='4' fill='both' weighty='1'> - <JScrollPane> - <JTextArea id='comment'/> - </JScrollPane> - </cell> - </row> - <row> - <cell fill='horizontal'> - <JButton id='cancel' text='isisfish.common.cancel' onActionPerformed='dispose()'/> - </cell> - <cell fill='horizontal' columns='2'> - <JButton id='remove' text='isisfish.common.remove' visible='{isExistingValue()}' - onActionPerformed='getHandler().remove(this)'/> - </cell> - <cell fill='horizontal'> - <JButton id='save' text='isisfish.common.save' enabled='{!getFactorNameField().getText().isEmpty()}' - onActionPerformed='getHandler().save(this)'/> - </cell> - </row> - </Table> -</JDialog> Deleted: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/MatrixContinuousPanelUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/MatrixContinuousPanelUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/MatrixContinuousPanelUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,148 +0,0 @@ -<!-- - #%L - IsisFish - - $Id$ - $HeadURL$ - %% - Copyright (C) 2009 - 2011 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 - 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 Public License for more details. - - You should have received a copy of the GNU General Public - License along with this program. If not, see - <http://www.gnu.org/licenses/gpl-3.0.html>. - #L% - --> -<ContinuousPanelContainerUI> - - <Boolean id="percentageTypeFactor" javaBean="true" /> - - <import> - org.apache.commons.lang3.StringUtils - org.nuiton.math.matrix.gui.MatrixPanelEditor - org.nuiton.math.matrix.MatrixND - java.awt.CardLayout - java.beans.PropertyChangeEvent - java.beans.PropertyChangeListener - </import> - - <script><![CDATA[ -public void init(MatrixND min, MatrixND max, MatrixND referenceValue, String coefficient) { - minValuePanel.setMatrix(min); - maxValuePanel.setMatrix(max); - referenceValuePanel.setMatrix(referenceValue); - coefficientField.setText(coefficient); -} - -public void initExisting(MatrixND min, MatrixND max, MatrixND referenceValue, String coefficient) { - init(min, max, referenceValue, coefficient); - setPercentageTypeFactor(StringUtils.isNotBlank(coefficient)); -} - -@Override -public boolean isFactorValid() { - boolean valid = false; - - try { - if (continueSelected) { - if (percentageTypeFactor) { - Double coefficient = Double.parseDouble(coefficientField.getText().trim()); - valid = coefficient != null; - } - else { - valid = true; - } - } - else { - valid = true; - } - } - catch (NumberFormatException eee) { - if (log.isWarnEnabled()) { - log.warn("Double parse error", eee); - } - } - - return valid; -} - -protected void $afterCompleteSetup() { - addPropertyChangeListener(PROPERTY_PERCENTAGE_TYPE_FACTOR, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if ((Boolean)evt.getNewValue()) { - ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "percentageType"); - } else { - ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "minMaxType"); - } - } - }); -} - ]]></script> - <JPanel id="content"> - <Table constraints='BorderLayout.CENTER'> - <row> - <cell fill='horizontal' weightx='1'> - <JRadioButton text="isisfish.sensitivity.continuouspercentagetype" - onActionPerformed="setPercentageTypeFactor(true)" - selected="{isPercentageTypeFactor()}"/> - </cell> - <cell fill='horizontal' weightx='1'> - <JRadioButton text="isisfish.sensitivity.continuousminmaxtype" - onActionPerformed="setPercentageTypeFactor(false)" - selected="{!isPercentageTypeFactor()}"/> - </cell> - </row> - <row> - <cell fill='both' weightx='1' weighty='1' columns="2"> - <JPanel layout="{new CardLayout()}" id="hidablePanel"> - <Table constraints='"percentageType"' border='{BorderFactory.createTitledBorder("")}'> - <row> - <cell fill='horizontal' columns="2"> - <JLabel text='isisfish.sensitivity.referencevalue'/> - </cell> - </row> - <row> - <cell fill='both' weighty='1' columns="2"> - <MatrixPanelEditor id='referenceValuePanel'/> - </cell> - </row> - <row> - <cell fill='horizontal'> - <JLabel text='isisfish.sensitivity.coefficient'/> - </cell> - <cell fill='horizontal' weightx='1'> - <JTextField id='coefficientField'/> - </cell> - </row> - </Table> - - <Table constraints='"minMaxType"' border='{BorderFactory.createTitledBorder("")}'> - <row> - <cell fill='both' weightx='1' weighty='1'> - <JTabbedPane> - <tab title="isisfish.sensitivity.firstValue"> - <MatrixPanelEditor id='minValuePanel'/> - </tab> - <tab title="isisfish.sensitivity.lastValue"> - <MatrixPanelEditor id='maxValuePanel'/> - </tab> - </JTabbedPane> - </cell> - </row> - </Table> - </JPanel> - </cell> - </row> - </Table> - </JPanel> -</ContinuousPanelContainerUI> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2009 - 2012 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2009 - 2014 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 @@ -37,14 +37,12 @@ fr.ifremer.isisfish.simulator.sensitivity.Factor fr.ifremer.isisfish.simulator.sensitivity.SensitivityAnalysis fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain - fr.ifremer.isisfish.ui.models.common.StringListModel + fr.ifremer.isisfish.ui.models.common.GenericListModel fr.ifremer.isisfish.ui.models.sensitivityexport.SensitivityExportListModel fr.ifremer.isisfish.ui.models.sensitivityexport.SensitivityExportListRenderer fr.ifremer.isisfish.ui.models.sensitivityexport.SensitivityExportNameListRenderer fr.ifremer.isisfish.ui.models.sensitivityanalysis.SensitivityAnalysisComboModel fr.ifremer.isisfish.ui.models.sensitivityanalysis.SensitivityAnalysisComboRenderer - fr.ifremer.isisfish.ui.models.sensitivityanalysis.SensitivityAnalysisListModel - fr.ifremer.isisfish.ui.models.sensitivityanalysis.SensitivityAnalysisListRenderer fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellEditor fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellRenderer fr.ifremer.isisfish.ui.models.common.ScriptParametersTableModel @@ -151,12 +149,12 @@ factorCardinality.setModel(model); } - protected StringListModel getAvailableExportListModel() { + protected GenericListModel<String> getAvailableExportListModel() { List<String> exportNames = getSimulAction().getSensitivityExportNames(); - StringListModel model = new StringListModel(exportNames); + GenericListModel<String> model = new GenericListModel<String>(exportNames); return model; } - + /** * Add multiples export. * Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -3,7 +3,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 @@ -23,72 +23,44 @@ package fr.ifremer.isisfish.ui.sensitivity; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.io.File; -import java.io.IOException; -import java.lang.reflect.Method; -import java.util.ArrayList; import java.util.List; -import java.util.SortedMap; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPopupMenu; -import javax.swing.JScrollPane; -import javax.swing.JTextField; import javax.swing.event.TreeSelectionEvent; import javax.swing.text.JTextComponent; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; -import jaxx.runtime.context.JAXXInitialContext; - -import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.math.matrix.MatrixND; import org.nuiton.math.matrix.gui.MatrixPanelEditor; import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaEntityContextable; import org.nuiton.util.FileUtil; import fr.ifremer.isisfish.IsisFishRuntimeException; -import fr.ifremer.isisfish.datastore.RegionStorage; -import fr.ifremer.isisfish.entities.Equation; import fr.ifremer.isisfish.entities.FisheryRegion; import fr.ifremer.isisfish.mexico.MexicoHelper; -import fr.ifremer.isisfish.rule.Rule; import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; -import fr.ifremer.isisfish.simulator.sensitivity.Domain; import fr.ifremer.isisfish.simulator.sensitivity.Factor; import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup; -import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; import fr.ifremer.isisfish.types.Month; -import fr.ifremer.isisfish.types.RangeOfValues; import fr.ifremer.isisfish.types.TimeStep; -import fr.ifremer.isisfish.types.TimeUnit; -import fr.ifremer.isisfish.ui.SimulationUI; -import fr.ifremer.isisfish.ui.input.InputAction; import fr.ifremer.isisfish.ui.input.InputContentUI; import fr.ifremer.isisfish.ui.input.InputHandler; import fr.ifremer.isisfish.ui.input.InputOneEquationUI; @@ -96,10 +68,10 @@ import fr.ifremer.isisfish.ui.input.tree.FisheryTreeHelper; import fr.ifremer.isisfish.ui.input.tree.FisheryTreeNode; import fr.ifremer.isisfish.ui.input.tree.FisheryTreeRenderer; +import fr.ifremer.isisfish.ui.sensitivity.wizard.FactorWizardUI; +import fr.ifremer.isisfish.ui.sensitivity.wizard.SensitivityWizardHandler; import fr.ifremer.isisfish.ui.simulator.RuleChooser; import fr.ifremer.isisfish.ui.simulator.SimulAction; -import fr.ifremer.isisfish.ui.widget.editor.MonthComponent; -import fr.ifremer.isisfish.ui.widget.editor.StepComponent; /** * Handler for sensitivity tab ui (fishery region factors). @@ -210,8 +182,8 @@ * @param continuous continuous */ public void addNewFactorGroup(SensitivityTabUI sensitivityTabUI, boolean continuous) { - String factorName = JOptionPane.showInputDialog(sensitivityTabUI, _("isisfish.sensitivity.newfactorname"), - _("isisfish.sensitivity.title"), JOptionPane.QUESTION_MESSAGE); + String factorName = JOptionPane.showInputDialog(sensitivityTabUI, t("isisfish.sensitivity.newfactorname"), + t("isisfish.sensitivity.title"), JOptionPane.QUESTION_MESSAGE); if (StringUtils.isNotBlank(factorName)) { FactorGroup rootFactorGroup = sensitivityTabUI.getSimulAction().getFactorGroup(); @@ -250,8 +222,8 @@ } sensitivityTabUI.setFactorModel(); } catch (IllegalArgumentException ex) { - JOptionPane.showMessageDialog(sensitivityTabUI, _("isisfish.sensitivity.moveillegal"), - _("isisfish.sensitivity.title"), JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(sensitivityTabUI, t("isisfish.sensitivity.moveillegal"), + t("isisfish.sensitivity.title"), JOptionPane.ERROR_MESSAGE); } } @@ -270,7 +242,7 @@ // clic droit if (e.getButton() == MouseEvent.BUTTON3) { JPopupMenu menu = new JPopupMenu(); - JMenuItem menuItemDelete = new JMenuItem(_("isisfish.common.delete")); + JMenuItem menuItemDelete = new JMenuItem(t("isisfish.common.delete")); menuItemDelete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -303,7 +275,7 @@ if (!(selectedObject instanceof FactorGroup)) { Factor selectedFactor = (Factor)selectedObject; FactorWizardUI factorWizardUI = new FactorWizardUI(sensitivityTabUI); - SensitivityInputHandler handler = factorWizardUI.getHandler(); + SensitivityWizardHandler handler = factorWizardUI.getHandler(); handler.initExistingFactor(factorWizardUI, selectedFactor); factorWizardUI.pack(); factorWizardUI.setLocationRelativeTo(sensitivityTabUI); @@ -342,246 +314,6 @@ } /** - * Un init new se fait toujours sur une entité. - * - * On recupere des info sur le type correspondant à la proprieté a mettre - * en facteur pour savoir le composant d'edition et s'il peut etre continue - * ou pas. - * - * @param factorWizardUI factorWizardUI - * @param bean bean in current ui - * @param property bean property to edit - */ - public void initNewFactor(FactorWizardUI factorWizardUI, TopiaEntityContextable bean, String property) { - - // path is topiaId#property - // ex : fwn#fsd#0.3425345#name - // for JAXX : cOrigine start with upper case - // for commons beanutils : must be lower case - String beanProperty = StringUtils.uncapitalize(property); - String path = bean.getTopiaId() + "#" + beanProperty; - factorWizardUI.setFactorPath(path); - factorWizardUI.getFactorNameField().setText(bean.toString() + "." + beanProperty); - - // get value for pointed path - //TopiaContext topiaContext = factorWizardUI.getContextValue(TopiaContext.class); - //Class<?> classForPath = getPropertyClass(path, topiaContext); - // peut etre pas une bonne idée que ce soit basé sur les valeurs - // au lieu des types (mais pour RangeOfValues, pas evident) - Object valueForPath = getPropertyValue(bean, beanProperty); - boolean continuePossible = canBeContinue(valueForPath); - boolean continueSelected = isContinue(valueForPath); - - // init panel - if (continuePossible) { - factorWizardUI.continuousPanel = getContinuousPanel(valueForPath, bean, property); - factorWizardUI.getContinuousPanelContainer().add(factorWizardUI.continuousPanel, BorderLayout.CENTER); - } - - // after, for binding on continuePossible, continueSelected to work - factorWizardUI.setContinuePossible(continuePossible); - factorWizardUI.setContinueSelected(continueSelected); - factorWizardUI.getContinueRadio().setSelected(continueSelected); - } - - /** - * Permet d'intialiser le wizard avec une valeur independante de la - * provenance (utile pour les facteurs sur les parametres de regles). - * - * TODO chatellier : ne doit pas fonctionner pour des equations. - * - * @param factorWizardUI factorWizardUI - * @param value value - */ - public void initNewFactorWithValue(FactorWizardUI factorWizardUI, Object value) { - boolean continuePossible = canBeContinue(value); - boolean continueSelected = isContinue(value); - - // init panel - if (continuePossible) { - factorWizardUI.continuousPanel = getContinuousPanel(value, null, null); - factorWizardUI.getContinuousPanelContainer().add(factorWizardUI.continuousPanel, BorderLayout.CENTER); - } - - // after, for binding on continuePossible, continueSelected to work - factorWizardUI.setContinuePossible(continuePossible); - factorWizardUI.setContinueSelected(continueSelected); - factorWizardUI.getContinueRadio().setSelected(continueSelected); - } - - /** - * Reaffiche un facteur existant. - * - * @param factorWizardUI - * @param factor factor - */ - public void initExistingFactor(FactorWizardUI factorWizardUI, Factor factor) { - - factorWizardUI.setExistingValue(true); - String factorPath = factor.getPath(); - Domain domain = factor.getDomain(); - String factorName = factor.getName(); - factorWizardUI.setFactorPath(factorPath); - factorWizardUI.getComment().setText(factor.getComment()); - - // dans le cas d'un facteur equation - // il faut enlever la varible du nom - // sinon, à la sauvegarde elle sera reajoutée - if (domain instanceof EquationContinuousDomain) { - EquationContinuousDomain equationDomain = (EquationContinuousDomain)domain; - String suffix = equationDomain.getVariableName(); - factorName = StringUtils.removeEnd(factorName, "." + suffix); - // can be called _xxx after char remplacement for R - factorName = StringUtils.removeEnd(factorName, "_" + suffix); - } - - if (domain instanceof ContinuousDomain) { - - ContinuousDomain cDomain = (ContinuousDomain) domain; - - TopiaContext topiaContext = factorWizardUI.getContextValue(TopiaContext.class); - factorWizardUI.continuousPanel = getContinuousPanelWithValue(factor, cDomain, topiaContext); - factorWizardUI.getContinuousPanelContainer().add(factorWizardUI.continuousPanel, BorderLayout.CENTER); - - factorWizardUI.getContinueRadio().setSelected(true); - factorWizardUI.setContinueSelected(true); - factorWizardUI.setContinuePossible(true); - } else { - - // restaure discrete domain - DiscreteDomain dDomain = (DiscreteDomain)domain; - - int nb = dDomain.getValues().size(); - factorWizardUI.getDiscretNumber().setText(String.valueOf(nb)); - factorWizardUI.discretComponents.clear(); - factorWizardUI.getTabPane().removeAll(); - - SortedMap<Object, Object> values = dDomain.getValues(); - int i = 0; - for (Object o : values.values()) { - i++; - JComponent c = null; - if (o != null) { - c = getEditorWithValue(factorWizardUI, factor, dDomain, o); - } - else { - if (log.isWarnEnabled()) { - log.warn("Null value in factor"); - } - } - factorWizardUI.discretComponents.add(c); - JScrollPane js = new JScrollPane(c); - String tabName = _("isisfish.sensitivity.discretevaluelabel", i); - factorWizardUI.getTabPane().addTab(tabName, js); - } - - // init non selected continous panel - if (factorPath.indexOf('#') != -1) { - try { - // get initial value in database - String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#')); - String property = factorPath.substring(factorPath.lastIndexOf('#') + 1); - TopiaContext topiaContext = factorWizardUI.getContextValue(TopiaContext.class); - TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId); - String getter = "get" + StringUtils.capitalize(property); - Method m = entity.getClass().getMethod(getter); - Object valueForPath = m.invoke(entity); - - boolean continuePossible = canBeContinue(valueForPath); - factorWizardUI.setContinuePossible(continuePossible); - if (continuePossible) { - factorWizardUI.continuousPanel = getContinuousPanel(valueForPath, entity, property); - factorWizardUI.getContinuousPanelContainer().add(factorWizardUI.continuousPanel, BorderLayout.CENTER); - } - } catch (Exception ex) { - throw new IsisFishRuntimeException("Can't get factor path database value", ex); - } - } - } - - factorWizardUI.getFactorNameField().setText(factorName); - } - - /** - * Refresh tab for discrete factor numbers. - * - * @param factorWizardUI factorWizardUI - */ - public void addTabs(FactorWizardUI factorWizardUI) { - String discreteNumber = factorWizardUI.getDiscretNumber().getText(); - int nbTab = Integer.parseInt(discreteNumber); - factorWizardUI.discretComponents.clear(); - factorWizardUI.getTabPane().removeAll(); - for (int i = 1; i <= nbTab ; i++) { - JComponent c = getNewDiscreteComponent(factorWizardUI); - factorWizardUI.discretComponents.add(c); - String tabName = _("isisfish.sensitivity.discretevaluelabel", i); - factorWizardUI.getTabPane().addTab(tabName, c); - } - factorWizardUI.pack(); - } - - /** - * Retourne le type de valeur pointé par le path du facteur. - * - * Il vaut mieux recuperer le type de la propriété a mettre en facteur - * que la valeur elle meme; elle peut être null et on ne peut pas en - * deduire sont type. - * - * @param factorPath factor path - * @param context context - * @return class - */ - protected Class<?> getPropertyClass(String factorPath, TopiaContext context) { - Class<?> result = null; - if (factorPath.indexOf('#') != -1) { - String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#')); - String property = factorPath.substring(factorPath.lastIndexOf('#') + 1); - - try { - TopiaEntity entity = context.findByTopiaId(topiaId); - - if (log.isDebugEnabled()) { - log.debug("Factor path " + factorPath + " denoted entity " + entity); - } - - String getter = "get" + StringUtils.capitalize(property); - Method method = entity.getClass().getMethod(getter); - result = method.getReturnType(); - - } catch (Exception ex) { - if (log.isErrorEnabled()) { - log.error("Can't find entity for " + topiaId, ex); - } - } - } - return result; - } - - /** - * Get value for fieldName in entity. - * - * @param entity - * @param fieldName - * @return method return value - */ - protected Object getPropertyValue(Object entity, String fieldName) { - Object result = null; - try { - // fieldName maybe be sometime lower case - String getMethod = "get" + StringUtils.capitalize(fieldName); - - Method m = entity.getClass().getMethod(getMethod); - result = m.invoke(entity); - } catch (Exception ex) { - if (log.isErrorEnabled()) { - log.error("Can't get entity value", ex); - } - } - return result; - } - - /** * Return if type can be defined as a factor. * * @param type type @@ -606,639 +338,6 @@ } /** - * Return true if value can be defined in continuous factor. - * - * Il serait plus interessant de le faire sur les types et non sur les - * valeur mais pour {@link RangeOfValues} par exemple, seule la valeur - * a un type Float... donc pas evident. - * - * @param value value - * @return continuous enabled - */ - public boolean canBeContinue(Object value) { - boolean result = false; - - if (value instanceof Double) { - result = true; - } else if (value instanceof Long) { - result = true; - } else if (value instanceof Equation) { - result = true; - } else if (value instanceof MatrixND) { - result = true; - } else if (value instanceof RangeOfValues) { - RangeOfValues rangeOfValues = (RangeOfValues)value; - if (rangeOfValues.getType().equals("Float")) { - result = true; - } - } else if (value instanceof TimeUnit) { - result = true; - } else if (value instanceof String) { - // todo fix string value :( - result = true; - } - - return result; - } - - /** - * Return if value is is continue factor enable. - * - * @param value value to test - * @return {@code true} if value is is continue factor enable - */ - public boolean isContinue(Object value) { - boolean result = false; - if (value instanceof RangeOfValues) { - RangeOfValues range = (RangeOfValues)value; - if (range.getType().equals(RangeOfValues.TYPE_FLOAT)) { - String textValue = range.getValues(); - // TODO need comment !!! - if (textValue.matches("^\\ *[0-9]*\\ *\\-\\ *[0-9]*\\ *$")) { - result = true; - } - } - } - return result; - } - - /** - * Get copy of component with original entity value as default value. - * - * @param value value - * @param bean bean - * @param property property - * @return component copy - */ - public ContinuousPanelContainerUI getContinuousPanel(Object value, TopiaEntityContextable bean, String property) { - ContinuousPanelContainerUI result; - - if (value instanceof RangeOfValues) { - RangeOfValues rangeOfValues = (RangeOfValues)value; - DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI(); - String values = rangeOfValues.getValues(); - String min = "0"; - String max = "0"; - if (values.matches("^\\ *[0-9]*\\ *\\-\\ *[0-9]*\\ *$")) { - int first = values.indexOf("-"); - if (first != -1) { - min = values.substring(0, first); - max = values.substring(first + 1); - } - } - ui.init(min, max, min, null); - result = ui; - } - else if (value instanceof Equation) { - Equation equation = (Equation)value; - EquationContinuousPanelUI ui = new EquationContinuousPanelUI(new JAXXInitialContext().add(new InputAction())); - ui.setSelectedEquation(equation); - ui.setText(_("isisfish.common.equation")); // can't get real name - ui.setFormuleCategory(equation.getCategory()); - ui.setClazz(equation.getClass()); - ui.setBeanProperty(property); - ui.setBean(bean); - result = ui; - } else if (value instanceof MatrixND) { - MatrixND matrix = (MatrixND)value; - MatrixContinuousPanelUI matrixPanel = new MatrixContinuousPanelUI(); - matrixPanel.init(matrix.clone(), matrix.clone(), matrix.clone(), null); - result = matrixPanel; - } else if (value instanceof TimeUnit) { - TimeUnit timeUnit = (TimeUnit)value; - DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI(); - ui.init(String.valueOf(timeUnit.getTime()), String.valueOf(timeUnit.getTime()), - String.valueOf(timeUnit.getTime()), null); - result = ui; - } else { - DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI(); - ui.init(String.valueOf(value), String.valueOf(value), String.valueOf(value), null); - result = ui; - } - - if (log.isDebugEnabled()) { - log.debug("Component for " + value + " (" + bean + ", " + property + ")"); - log.debug(" > " + result); - } - - return result; - } - - /** - * Get continuous editor for component with given value. - * - * @param domain domain - * @param factor factor - * @param topiaContext context used to get database value in case of equation factors - * @return component copy - */ - public ContinuousPanelContainerUI getContinuousPanelWithValue(Factor factor, ContinuousDomain domain, TopiaContext topiaContext) { - ContinuousPanelContainerUI result = null; - - if (domain instanceof EquationContinuousDomain) { - String factorPath = factor.getPath(); - if (factor.getPath().indexOf('#') != -1) { - String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#')); - String property = factorPath.substring(factorPath.lastIndexOf('#') + 1); - - // get bean in database - try { - TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId); - - String getter = "get" + StringUtils.capitalize(property); - Method m = entity.getClass().getMethod(getter); - Equation value = (Equation)m.invoke(entity); - - // fill component - EquationContinuousPanelUI ui = new EquationContinuousPanelUI( - new JAXXInitialContext().add(new InputAction())); - ui.setText(value.getContent()); - ui.setFormuleCategory(value.getCategory()); - ui.setText(_("isisfish.common.equation")); // can't get real name - ui.setClazz(value.getClass()); - ui.setBeanProperty(property); - ui.setBean(entity); - - EquationContinuousDomain equationDomain = (EquationContinuousDomain) domain; - ui.addDomain(equationDomain); - - result = ui; - } catch (Exception ex) { - throw new IsisFishRuntimeException("Can't restore initial factor database property", ex); - } - } - // TODO path with no # (normalement pas possible pour les equations) - } else if (domain instanceof MatrixContinuousDomain) { - MatrixContinuousPanelUI continuousPanel = new MatrixContinuousPanelUI(); - // factor numerique continue (percentage) - if (domain.isPercentageType()) { - MatrixND matrix = (MatrixND)domain.getReferenceValue(); - // il y a bien 3 fois domain.getReferenceValue() pas d'erreur - continuousPanel.initExisting( - matrix.clone(), - matrix.clone(), - matrix.clone(), - String.valueOf(domain.getCoefficient() * 100.0)); - } - else { - // factor numerique continue (min/max) - // pas d'erreur sur 2 fois domain.getMinBound() - MatrixND matrixMin = (MatrixND)domain.getMinBound(); - MatrixND matrixMax = (MatrixND)domain.getMaxBound(); - continuousPanel.initExisting( - matrixMin.clone(), - matrixMax.clone(), - matrixMin.clone(), - ""); - } - result = continuousPanel; - } else { - DefaultContinuousPanelUI continuousPanel = new DefaultContinuousPanelUI(); - - // factor numerique continue (percentage) - if (domain.isPercentageType()) { - // il y a bien 3 fois domain.getReferenceValue() pas d'erreur - continuousPanel.initExisting( - String.valueOf(domain.getReferenceValue()), - String.valueOf(domain.getReferenceValue()), - String.valueOf(domain.getReferenceValue()), - String.valueOf(domain.getCoefficient() * 100.0 )); - } - else { - // factor numerique continue (min/max) - // pas d'erreur sur 2 fois domain.getMinBound() - // on initialise avec minBound comme valeur de référence. - continuousPanel.initExisting( - String.valueOf(domain.getMinBound()), - String.valueOf(domain.getMaxBound()), - String.valueOf(domain.getMinBound()), - ""); - } - result = continuousPanel; - } - - return result; - } - - /** - * Get editor for value (discrete). - * - * @param factorWizardUI context for context value (RegionStorage) - * @param value type to get editor - * @param factor - * @param domain - * @return component - */ - protected JComponent getEditorWithValue(FactorWizardUI factorWizardUI, Factor factor, Domain domain, Object value) { - - JComponent result = null; - - if (Double.class.isAssignableFrom(value.getClass())) { - result = new JTextField(); - ((JTextField)result).setText(String.valueOf(value)); - } - else if (double.class.isAssignableFrom(value.getClass())) { - result = new JTextField(); - ((JTextField)result).setText(String.valueOf(value)); - } - else if (MatrixND.class.isAssignableFrom(value.getClass())) { - result = new MatrixPanelEditor(); - ((MatrixPanelEditor)result).setMatrix((MatrixND)value); - } - else if (domain instanceof RuleDiscreteDomain) { - result = new RuleChooser(factorWizardUI); - ((RuleChooser)result).setRulesList((List<Rule>)value); - } - else if (domain instanceof EquationDiscreteDomain) { - String factorPath = factor.getPath(); - if (factor.getPath().indexOf('#') != -1) { - String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#')); - String property = factorPath.substring(factorPath.lastIndexOf('#') + 1); - - // get bean in database - try { - TopiaContext topiaContext = factorWizardUI.getContextValue(TopiaContext.class); - TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId); - - String getter = "get" + StringUtils.capitalize(property); - Method m = entity.getClass().getMethod(getter); - Equation equation = (Equation)m.invoke(entity); - - // fill component - InputOneEquationUI ui = new InputOneEquationUI(factorWizardUI); - ui.setAutoSaveModification(false); - ui.setFormuleCategory(equation.getCategory()); - ui.setText(_("isisfish.common.equation")); // can't get real name - ui.setClazz(value.getClass()); - ui.setBeanProperty(property); - ui.setBean(entity); // set bean fire content modification event - ui.getEditor().setText((String)value); - ui.setActive(true); - - result = ui; - } catch (Exception ex) { - throw new IsisFishRuntimeException("Can't restore initial factor database property", ex); - } - } - // TODO path with no # (normalement pas possible pour les equations) - } - else if (value instanceof TimeUnit) { - result = new JTextField(); - ((JTextField)result).setText(String.valueOf(((TimeUnit)value).getTime())); - } else if (value instanceof TopiaEntity) { - RegionStorage regionStorage = factorWizardUI.getContextValue(RegionStorage.class); - TopiaContext context = null; - try { - context = regionStorage.getStorage().beginTransaction(); - List list = context.findAll("from " + value.getClass().getName()); - JComboBox c = new JComboBox(list.toArray()); - c.setSelectedItem(value); - result = c; - } catch (TopiaException ex) { - throw new IsisFishRuntimeException("Can't get entity list", ex); - } finally { - if (context != null) { - try { - context.closeContext(); - } catch (TopiaException ex) { - throw new IsisFishRuntimeException("Can't get entity list", ex); - } - } - } - } else if (value instanceof TimeStep) { - TimeStep timeStep = (TimeStep)value; - result = new StepComponent(timeStep.getMonth().getMonthNumber(), timeStep.getYear()); - } else if (value instanceof Month) { - Month month = (Month)value; - result = MonthComponent.createMounthCombo(month.getMonthNumber()); - } else if (value instanceof String) { - // valeur non typées ??? - result = new JTextField(); - ((JTextField)result).setText(String.valueOf(value)); - } - - if (log.isDebugEnabled()) { - log.debug("Editor for value " + value + " is " + result); - } - - return result; - } - - /** - * Get copy of component with original entity value as default value. - * Used to add new tab to a new or existing factor. - * - * Le composant retourné est inclut dans un jscrollpane (sauf pour les - * matrices qui contient deja un jscrollpane) - * - * @param factorWizardUI factorWizardUI - * @return component copy - */ - public JComponent getNewDiscreteComponent(FactorWizardUI factorWizardUI) { - - JComponent result = null; - String factorPath = factorWizardUI.getFactorPath(); - - if (factorPath.indexOf('#') != -1) { - String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#')); - String property = factorPath.substring(factorPath.lastIndexOf('#') + 1); - TopiaContext topiaContext = factorWizardUI.getContextValue(TopiaContext.class); - - try { - // get bean in database - TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId); - String getter = "get" + StringUtils.capitalize(property); - Method m = entity.getClass().getMethod(getter); - Object value = m.invoke(entity); - - // init new jcomponent for value - if (value instanceof Number) { - result = new JTextField(String.valueOf(value)); - } else if (value instanceof MatrixND) { - result = new MatrixPanelEditor(); - MatrixND matrix = ((MatrixND)value).copy(); - ((MatrixPanelEditor)result).setMatrix(matrix); - } else if (value instanceof RangeOfValues) { - RangeOfValues rangeOfValues = (RangeOfValues)value; - result = new JTextField(rangeOfValues.getValues()); - } else if (value instanceof TimeUnit) { - TimeUnit timeUnit = (TimeUnit)value; - result = new JTextField(String.valueOf(timeUnit.getTime())); - } else if (value instanceof Equation) { - Equation equation = (Equation)value; - // fill component - InputOneEquationUI ui = new InputOneEquationUI(factorWizardUI); - ui.setAutoSaveModification(false); - ui.setText(equation.getContent()); - ui.setFormuleCategory(equation.getCategory()); - ui.setText(_("isisfish.common.equation")); // can't get real name - ui.setClazz(value.getClass()); - ui.setBeanProperty(property); - ui.setBean(entity); - ui.setActive(true); - result = ui; - } - - } catch (Exception ex) { - throw new IsisFishRuntimeException("Can't restore intial factor database property", ex); - } - } - else { - // dans ce cas c'est des regles, pop de départ ou parametres de regles - // c'est un peu galere car le code n'a rien a voir avec le reste - // donc, c'est du cas par cas - if (factorPath.equals("parameters.rules")) { - result = new RuleChooser(factorWizardUI); - } else if (factorPath.startsWith("parameters.population.")) { - MatrixContinuousPanelUI currentPanel = (MatrixContinuousPanelUI)factorWizardUI.continuousPanel; - // on copie une des matrices du composant - MatrixND matrix = currentPanel.getReferenceValuePanel().getMatrix().copy(); - result = new MatrixPanelEditor(); // bug in 2.2.x with matrix in constructor - ((MatrixPanelEditor)result).setMatrix(matrix); - } else if (factorPath.startsWith("parameters.rule.")) { - Pattern pattern = Pattern.compile("^parameters\\.rule\\.\\d+\\.parameter\\.\\w+\\.(.+)$"); - Matcher matcher = pattern.matcher(factorPath); - if (matcher.matches()) { - String className = matcher.group(1); - try { - if (log.isDebugEnabled()) { - log.debug("Looking for a component for class : " + className); - } - Class type = Class.forName(className); - result = getRuleDiscreteComponent(factorWizardUI, type); - } catch (ClassNotFoundException ex) { - if (log.isWarnEnabled()) { - log.warn("Can't find class for rule parameter", ex); - } - } - } else { - // double... - result = new JTextField(); - } - } else { - if (log.isWarnEnabled()) { - log.warn("Can't find component for path " + factorPath); - } - } - } - - if (log.isDebugEnabled()) { - log.debug("Component for path " + factorPath + " is " + result); - } - - // hack : si on met 2 fois un jscrollpane, rien ne s'affiche - if (!(result instanceof MatrixPanelEditor)) { - result = new JScrollPane(result); - } - - return result; - } - - /** - * Get new special - * @param clazz - * @return - */ - protected JComponent getRuleDiscreteComponent(FactorWizardUI factorWizardUI, Class type) { - - JComponent result = null; - - if (TopiaEntity.class.isAssignableFrom(type)) { - RegionStorage regionStorage = factorWizardUI.getContextValue(RegionStorage.class); - TopiaContext context = null; - try { - context = regionStorage.getStorage().beginTransaction(); - List list = context.findAll("from " + type.getName()); - JComboBox c = new JComboBox(list.toArray()); - result = c; - } catch (TopiaException ex) { - throw new IsisFishRuntimeException("Can't get entity list", ex); - } finally { - if (context != null) { - try { - context.closeContext(); - } catch (TopiaException ex) { - throw new IsisFishRuntimeException("Can't get entity list", ex); - } - } - } - } else if (TimeStep.class.isAssignableFrom(type)) { - result = new StepComponent(0, 0); - } else if (Month.class.isAssignableFrom(type)) { - result = MonthComponent.createMounthCombo(0); - } else { - result = new JTextField(); - } - - return result; - } - - /** - * Save current factor. - * - * @param factorWizardUI factorWizardUI - */ - public void save(FactorWizardUI factorWizardUI) { - - // first check is factor is valid - boolean factorValid = true; - ContinuousPanelContainerUI continuousPanel = factorWizardUI.continuousPanel; - if (continuousPanel != null) { - factorValid = continuousPanel.isFactorValid(); - } - if (!factorValid) { - JOptionPane.showMessageDialog(factorWizardUI, _("isisfish.sensitivity.factor.notvalid"), - _("isisfish.sensitivity.title"), JOptionPane.ERROR_MESSAGE); - return; - } - - // call specific method depending on continuous/discrete - if (factorWizardUI.getContinueRadio().isSelected()) { - saveContinue(factorWizardUI.getFactorNameField().getText(), - factorWizardUI.getComment().getText(), factorWizardUI.getFactorPath(), factorWizardUI.continuousPanel, - factorWizardUI.getSimulAction(), factorWizardUI.isExistingValue()); - } else { - saveDiscret(factorWizardUI.getFactorNameField().getText(), - factorWizardUI.getComment().getText(), factorWizardUI.getFactorPath(), factorWizardUI.discretComponents, - factorWizardUI.getSimulAction(), factorWizardUI.isExistingValue()); - } - - // refresh factor list - factorWizardUI.getContextValue(SimulationUI.class, "SimulationUI").refreshFactorTree(); - - // close window - factorWizardUI.dispose(); - } - - /** - * Save a continous factor. - * - * @param name factor name - * @param comment comment - * @param path factor path - * @param panel panel - * @param action action - * @param exist exist - */ - protected void saveContinue(String name, - String comment, String path, ContinuousPanelContainerUI panel, - SimulAction action, boolean exist) { - if (panel instanceof MatrixContinuousPanelUI) { - MatrixContinuousPanelUI matrixPanel = (MatrixContinuousPanelUI) panel; - if (matrixPanel.isPercentageTypeFactor()) { - MatrixND referenceValue = matrixPanel.getReferenceValuePanel().getMatrix(); - Double coefficient = Double.valueOf(matrixPanel.getCoefficientField().getText()) / 100; - action.addContinuousMatrixFactor(name, comment, path, - referenceValue, coefficient, exist); - } - else { - MatrixND minBound = matrixPanel.getMinValuePanel().getMatrix(); - MatrixND maxBound = matrixPanel.getMaxValuePanel().getMatrix(); - action.addContinuousMatrixFactor(name, comment, path, - minBound, maxBound, exist); - } - - } else if (panel instanceof EquationContinuousPanelUI) { - try { - EquationContinuousPanelUI equationPanel = (EquationContinuousPanelUI) panel; - - TopiaEntityContextable bean = equationPanel.getBean(); - TopiaContext topiaContext = bean.getTopiaContext(); - - String property = equationPanel.getBeanProperty(); - property = StringUtils.capitalize(property) + "Content"; - Method m = bean.getClass().getMethod("set" + property, String.class); - m.invoke(bean, equationPanel.getEditor().getEditor().getText()); - - // Save equation - bean.update(); - topiaContext.commitTransaction(); - - List<EquationContinuousDomain> domains = equationPanel.getDomains(); - for (EquationContinuousDomain domain : domains) { - action.addContinuousEquationFactor(name, comment, path, domain, exist); - } - } catch (Exception ex) { - if (log.isErrorEnabled()) { - log.error("Can't call method : ", ex); - } - } - } else if (panel instanceof DefaultContinuousPanelUI) { - DefaultContinuousPanelUI defaultPanel = (DefaultContinuousPanelUI) panel; - - if (defaultPanel.isPercentageTypeFactor()) { - Double referenceValue = Double.valueOf(defaultPanel.getReferenceValueField().getText()); - Double coefficient = Double.valueOf(defaultPanel.getCoefficientField().getText()) / 100; - action.addContinuousPercentageFactor(name, comment, path, - referenceValue, coefficient, exist); - } - else { - double minBound = Double.parseDouble(defaultPanel.getContinueMin().getText()); - double maxBound = Double.parseDouble(defaultPanel.getContinueMax().getText()); - action.addContinuousFactor(name, comment, path, - minBound, maxBound, exist); - } - } - } - - /** - * Save a discret factor. - * - * @param name - * @param comment - * @param path - * @param components - * @param action - * @param exist - */ - protected void saveDiscret(String name, - String comment, String path, List<JComponent> components, - SimulAction action, boolean exist) { - List<Object> values = new ArrayList<Object>(); - - boolean ruleFactor = false; - boolean equationFactor = false; - for (JComponent component : components) { - - // component can be imbricated into a scroll pane - if (component instanceof JScrollPane) { - component = (JComponent)((JScrollPane)component).getViewport().getComponent(0); - } - - // get internat component value - Object result = null; - if (component instanceof JTextComponent) { - result = ((JTextComponent) component).getText(); - } else if (component instanceof MatrixPanelEditor) { - result = ((MatrixPanelEditor) component).getMatrix(); - } else if (component instanceof InputOneEquationUI) { - result = ((InputOneEquationUI) component).getEditor().getText(); - equationFactor = true; - } else if (component instanceof RuleChooser) { - result = ((RuleChooser)component).getRulesList(); - ruleFactor = true; - } else if (component instanceof StepComponent) { - result = new TimeStep(((StepComponent)component).getSelectedValue()); - } else if (component instanceof MonthComponent) { - result = new Month(((MonthComponent)component).getSelectedValue()); - } else if (component instanceof JComboBox) { - // on suppose qu'il y a dedans des TopiaEntity - result = ((JComboBox)component).getSelectedItem(); - } - - values.add(result); - } - - if (ruleFactor) { - action.addDiscreteRuleFactor(name, comment, path, values, exist); - } else if (equationFactor) { - action.addDiscreteEquationFactor(name, comment, path, values, exist); - } else { - action.addDiscreteFactor(name, comment, path, values, exist); - } - } - - /** * Return value in swing component that could be next used into factor * for discrete factor values. * @@ -1264,27 +363,16 @@ } /** - * Remove current factor. - * - * @param factorWizardUI factorWizardUI - */ - public void remove(FactorWizardUI factorWizardUI) { - factorWizardUI.getSimulAction().removeFactor(factorWizardUI.getFactorPath()); - factorWizardUI.getContextValue(SimulationUI.class, "SimulationUI").refreshFactorTree(); - factorWizardUI.dispose(); - } - - /** * Export factors list to xml mexico file. * * @since 4.1.1.2 */ public void exportFactorsToMexico(SensitivityTabUI view) { - File xmlFile = FileUtil.getFile(_("isisfish.sensitivity.mexico.exporttoxml.title"), - _("isisfish.sensitivity.mexico.exporttoxml.approve"), view, + File xmlFile = FileUtil.getFile(t("isisfish.sensitivity.mexico.exporttoxml.title"), + t("isisfish.sensitivity.mexico.exporttoxml.approve"), view, new String[]{ ".*\\.xml", - _("isisfish.sensitivity.mexico.exporttoxml.filter") + t("isisfish.sensitivity.mexico.exporttoxml.filter") }); if (xmlFile != null) { Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySaveVerifier.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySaveVerifier.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySaveVerifier.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -3,7 +3,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 @@ -50,5 +50,4 @@ return JOptionPane.YES_OPTION; } - } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2009 - 2014 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 @@ -27,14 +27,13 @@ java.util.ArrayList java.io.File java.io.IOException - javax.swing.ComboBoxModel - org.nuiton.util.FileUtil + org.apache.commons.io.FileUtils fr.ifremer.isisfish.datastore.SimulationStorage fr.ifremer.isisfish.simulator.launcher.SimulationService fr.ifremer.isisfish.simulator.launcher.SimulationJob fr.ifremer.isisfish.simulator.launcher.SimulationServiceListener fr.ifremer.isisfish.ui.simulator.SimulAction - fr.ifremer.isisfish.ui.models.common.StringComboModel + fr.ifremer.isisfish.ui.models.common.GenericComboModel </import> <script><![CDATA[ @@ -54,12 +53,12 @@ if (log.isDebugEnabled()) { log.debug("Refresh second pass UI simulations list"); } - StringComboModel model = (StringComboModel)fieldSensitivitySimulationSelect.getModel(); + GenericComboModel<String> model = (GenericComboModel)fieldSensitivitySimulationSelect.getModel(); String simulationName = job.getId(); if (simulationName.startsWith("as_")) { String masterSensitivityName = simulationName.substring(0, simulationName.lastIndexOf("_")); - if (!model.containsString(masterSensitivityName)) { - model.addString(masterSensitivityName); + if (!model.containsElement(masterSensitivityName)) { + model.addElement(masterSensitivityName); } } } @@ -74,7 +73,7 @@ /** * Model de contenu de la liste des nom de simulations */ - public StringComboModel getSensitivitySimulationModel() { + public GenericComboModel<String> getSensitivitySimulationModel() { List<String> asNames = new ArrayList<String>(); for (String simulationName : SimulationStorage.getSimulationNames()) { if (simulationName.startsWith("as_")) { @@ -85,7 +84,7 @@ } } - StringComboModel model = new StringComboModel(asNames); + GenericComboModel<String> model = new GenericComboModel<String>(asNames); return model; } @@ -111,7 +110,7 @@ for(File file : files) { content += "Fichier " + file.getName() + "\n"; content += "------------------------------\n"; - content += FileUtil.readAsString(file) + "\n"; + content += FileUtils.readFileToString(file) + "\n"; content += "\n"; } textAreaSensitivitySecondpassResult.setText(content); @@ -128,7 +127,7 @@ </script> <row> <cell fill="horizontal" weightx="1.0"> - <JComboBox id="fieldSensitivitySimulationSelect" model='{getSensitivitySimulationModel()}' /> + <JComboBox id="fieldSensitivitySimulationSelect" genericType="String" model='{getSensitivitySimulationModel()}' /> </cell> <cell fill="horizontal"> <JButton id="runSecondPassButton" text='isisfish.sensitivity.secondpass' onActionPerformed='launchSecondPass(event)' Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -24,13 +24,8 @@ --> <fr.ifremer.isisfish.ui.NavigationUI> <import> - javax.swing.JPopupMenu javax.swing.tree.DefaultTreeModel - javax.swing.tree.TreePath - javax.swing.tree.DefaultMutableTreeNode - javax.swing.tree.TreeNode fr.ifremer.isisfish.datastore.RegionStorage - fr.ifremer.isisfish.simulator.sensitivity.Factor fr.ifremer.isisfish.ui.WelcomePanelUI fr.ifremer.isisfish.ui.input.InputAction fr.ifremer.isisfish.ui.input.InputSaveVerifier @@ -39,9 +34,7 @@ fr.ifremer.isisfish.ui.sensitivity.model.FactorTreeModel fr.ifremer.isisfish.ui.sensitivity.model.FactorTreeCellRenderer fr.ifremer.isisfish.ui.sensitivity.model.FactorTree - javax.swing.JComponent java.awt.event.ActionListener - javax.swing.JMenuItem java.awt.event.ActionEvent </import> @@ -69,7 +62,6 @@ public void setTreeModel() { if (getFisheryRegion() != null) { getCardlayoutPrincipal().show(inputPanePrincipal,"normale"); - String regionName = getFisheryRegion().getName(); setContextValue(getFisheryRegion()); getHandler().loadFisheryRegionTree(this); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -64,8 +64,13 @@ public void setEnabledSimulationPlanTab(boolean selected) { // no simulation plan in AS } - + @Override + public void setEnabledOptimizationTab(boolean selected) { + // no optimisation.in AS + } + + @Override public void refreshFactorTree() { sensitivityTabUI.setFactorModel(); } Deleted: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtils.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtils.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtils.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,101 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2010 Ifremer, CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package fr.ifremer.isisfish.ui.sensitivity; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Properties; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * Utility class to parse Sensitivity properties file. - * - * @author letellier - * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ - */ -public class SensitivityUtils { - - /** Log. */ - private static final Log log = LogFactory.getLog(SensitivityUtils.class); - - /** Properties file resource path. */ - protected final static String PROPERTIES_PATH = "/sensitivity.properties"; - - /** Cached properties. */ - protected static Properties sensitivityProperties; - - /** - * Is field sensitivity enabled. - * - * Return true, if field name is present in properties file. - * - * @param sensitivityFactorName name - * @return <tt>true</tt> if factor name is sensitivity enabled - */ - public static boolean isSensitivityFactorEnabled(String sensitivityFactorName) { - Properties data = getProperties(); - return data.getProperty(sensitivityFactorName) != null; - - } - - /** - * Return cached properties file. - * Load it at first call. - * - * @return properties - */ - public static Properties getProperties() { - - if (sensitivityProperties == null) { - sensitivityProperties = new Properties(); - InputStream stream = null; - try { - stream = SensitivityUtils.class.getResourceAsStream(PROPERTIES_PATH); - sensitivityProperties.load(stream); - } catch (IOException ex) { - if (log.isErrorEnabled()) { - log.error("Can't load sensitivity properties file", ex); - } - } finally { - try { - if (stream != null) { - stream.close(); - } - } catch (IOException ex) { - if (log.isErrorEnabled()) { - log.error("Can't load sensitivity properties file", ex); - } - } - } - } - return sensitivityProperties; - } -} Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/TableBlockingLayerUI.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/TableBlockingLayerUI.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/TableBlockingLayerUI.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2010 Ifremer, CodeLutin, Chatellier Eric + * Copyright (C) 2009 - 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 @@ -40,6 +40,7 @@ import org.jdesktop.jxlayer.plaf.LayerUI; import org.nuiton.topia.persistence.TopiaEntityContextable; +import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils; import fr.ifremer.isisfish.ui.input.InputContentUI; /** Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorCardinalityTableModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorCardinalityTableModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorCardinalityTableModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.sensitivity.model; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.util.List; @@ -40,9 +40,11 @@ * Model de la table de definition des cadinalité de facteurs. * * Columns : + * <ul> * <li>Factor name</li> * <li>Cardinality</li> - * + * </ul> + * * @author chatellier * @version $Revision$ * @@ -60,8 +62,8 @@ /** Columns names. */ public final static String[] COLUMN_NAMES = { - _("isisfish.sensitivity.factor"), - _("isisfish.sensitivity.increment") }; + t("isisfish.sensitivity.factor"), + t("isisfish.sensitivity.increment") }; protected List<Factor> factors; Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListModel.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListModel.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListModel.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,92 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.ui.sensitivity.model; + +import java.util.List; + +import javax.swing.DefaultListModel; + +import fr.ifremer.isisfish.simulator.sensitivity.Factor; + +/** + * Model pour la liste des {@link Factor}. + * + * Pas de selection par defaut. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class FactorListModel extends DefaultListModel { + + /** serialVersionUID. */ + private static final long serialVersionUID = 2281927104735245489L; + + /** EquationContinuousDomain list */ + protected List<Factor> factors; + + /** + * Constructor with factors list. + * + * @param factors factors list + */ + public FactorListModel(List<Factor> factors) { + this.factors = factors; + } + + /** + * Change data list and fire data change event. + * + * @param factors new data list + */ + public void setFactors(List<Factor> factors) { + this.factors = factors; + fireContentsChanged(this, 0, factors.size()); + } + + /* + * @see javax.swing.ListModel#getElementAt(int) + */ + @Override + public Object getElementAt(int index) { + return factors.get(index); + } + + /* + * @see javax.swing.ListModel#getSize() + */ + @Override + public int getSize() { + int size = 0; + + if (factors != null) { + size = factors.size(); + } + return size; + } +} Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListRenderer.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListRenderer.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListRenderer.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,57 @@ +/* + * #%L + * $Id$ + * $HeadURL$ + * %% + * 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.ui.sensitivity.model; + +import java.awt.Component; + +import javax.swing.DefaultListCellRenderer; +import javax.swing.JList; + +import fr.ifremer.isisfish.simulator.sensitivity.Factor; + +/** + * Renderer for equation factor variables list. + * Renderer as variable name string. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class FactorListRenderer extends DefaultListCellRenderer { + + /** serialVersionUID. */ + private static final long serialVersionUID = -8210763862382993163L; + + @Override + public Component getListCellRendererComponent(JList<?> list, Object value, + int index, boolean isSelected, boolean cellHasFocus) { + + Factor factor = (Factor)value; + String stringValue = factor.getEquationVariableName(); + return super.getListCellRendererComponent(list, stringValue, index, isSelected, cellHasFocus); + } + +} Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeCellRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeCellRenderer.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeCellRenderer.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.sensitivity.model; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Component; import java.util.HashMap; @@ -36,6 +36,7 @@ import javax.swing.JTree; import javax.swing.tree.DefaultTreeCellRenderer; +import org.apache.commons.lang3.StringUtils; import org.nuiton.util.Resource; import fr.ifremer.isisfish.simulator.sensitivity.Domain; @@ -63,8 +64,6 @@ public FactorTreeCellRenderer() { iconCache = new HashMap<String, Icon>(); iconCache.put("c", Resource.getIcon("/icons/factors/c.png")); // continuous - //iconCache.put("ce", Resource.getIcon("/icons/factors/ce.png")); // continuous equation - //iconCache.put("cm", Resource.getIcon("/icons/factors/cm.png")); // continuous matrix iconCache.put("d", Resource.getIcon("/icons/factors/d.png")); // discrete iconCache.put("dg", Resource.getIcon("/icons/factors/dgroup.png")); // group discrete iconCache.put("cg", Resource.getIcon("/icons/factors/cgroup.png")); // group continuous @@ -88,7 +87,7 @@ FactorGroup factorGroup = (FactorGroup)value; if (factorGroup == tree.getModel().getRoot()) { // root // non du facteur group principal - text = _("isisfish.sensitivity.factors"); + text = t("isisfish.sensitivity.factors"); } else { if (factorGroup.isDiscrete()) { icon = "d"; @@ -110,16 +109,14 @@ else { icon = "d"; } - - // get factor data type - /*if (domain instanceof EquationContinuousDomain) { - icon += "e"; - } - else if (domain instanceof MatrixContinuousDomain) { - icon += "m"; - }*/ + text = factor.getName(); } + + // add equation name if any + if (StringUtils.isNotBlank(factor.getEquationVariableName())) { + text += "." + factor.getEquationVariableName(); + } } c.setIcon(iconCache.get(icon)); c.setText(text); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + * Copyright (C) 2009 - 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 Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/AdvancedParamsUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/AdvancedParamsUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/AdvancedParamsUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -28,6 +28,7 @@ <Boolean id='changed' javaBean='false'/> <import> + static org.nuiton.i18n.I18n.t javax.swing.table.DefaultTableModel; java.util.Map.Entry; javax.swing.event.ListSelectionListener @@ -91,7 +92,7 @@ Map<String, String> tagValues = getContextValue(SimulAction.class).getSimulationParameter().getTagValue(); // TODO make a table model for it - String columnName[] = { _("isisfish.common.tag"), _("isisfish.common.value")}; + String columnName[] = { t("isisfish.common.tag"), t("isisfish.common.value")}; if (tagValues != null) { DefaultTableModel model = new DefaultTableModel(columnName, tagValues.size()) { @Override @@ -131,8 +132,8 @@ onActionPerformed='getContextValue(SimulAction.class).getSimulationParameter().setUseStatistic(fieldSimulationStatistique.isSelected());'/> </cell> <cell columns="2" fill="horizontal"> - <JCheckBox id="fieldSimulationCache" text="isisfish.advancedParams.simulationCache" selected='{getContextValue(SimulAction.class).getSimulationParameter().getUseOptimization()}' - onActionPerformed='getContextValue(SimulAction.class).getSimulationParameter().setUseOptimization(fieldSimulationCache.isSelected());'/> + <JCheckBox id="fieldSimulationCache" text="isisfish.advancedParams.simulationCache" selected='{getContextValue(SimulAction.class).getSimulationParameter().getUseCache()}' + onActionPerformed='getContextValue(SimulAction.class).getSimulationParameter().setUseCache(fieldSimulationCache.isSelected());'/> </cell> </row> <row> @@ -212,7 +213,7 @@ </row> <row> <cell columns="5" fill="both" weighty="1" weightx="1"> - <Table border='{BorderFactory.createTitledBorder(_("isisfish.advancedParams.freeParameters"))}'> + <Table border='{BorderFactory.createTitledBorder(t("isisfish.advancedParams.freeParameters"))}'> <row> <cell fill="horizontal"> <JLabel text="isisfish.common.tag"/> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ExportUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ExportUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ExportUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2005 - 2011 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2005 - 2014 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 @@ -24,8 +24,9 @@ --> <Table> <import> + static org.nuiton.i18n.I18n.t fr.ifremer.isisfish.ui.WelcomePanelUI; - fr.ifremer.isisfish.ui.models.common.StringListModel; + fr.ifremer.isisfish.ui.models.common.GenericListModel; javax.swing.event.ListSelectionEvent; java.util.LinkedList </import> @@ -54,7 +55,7 @@ // userExports = intersection(userExports,availableExports) userExports.retainAll(availableExports); - StringListModel exportModel = new StringListModel(availableExports); + GenericListModel<String> exportModel = new GenericListModel<String>(availableExports); listSimulExportChoose.setModel(exportModel); for (String userExport : userExports) { @@ -87,7 +88,7 @@ getSimulAction().getSimulationParameter().setExportNames(exportNames); getSimulAction().saveExport(); - setInfoText(_("isisfish.export.saved")); + setInfoText(t("isisfish.export.saved")); } protected void setInfoText(String txt) { Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,389 @@ +/* + * #%L + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2013 - 2014 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ +package fr.ifremer.isisfish.ui.simulator; + +import java.awt.event.ActionEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import javax.swing.JDialog; +import javax.swing.JTable; +import javax.swing.ListModel; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaContext; + +import fr.ifremer.isisfish.IsisFishException; +import fr.ifremer.isisfish.IsisFishRuntimeException; +import fr.ifremer.isisfish.datastore.ExportStorage; +import fr.ifremer.isisfish.datastore.ObjectiveStorage; +import fr.ifremer.isisfish.datastore.OptimizationStorage; +import fr.ifremer.isisfish.datastore.RegionStorage; +import fr.ifremer.isisfish.entities.FisheryRegion; +import fr.ifremer.isisfish.entities.Observation; +import fr.ifremer.isisfish.export.Export; +import fr.ifremer.isisfish.simulator.Objective; +import fr.ifremer.isisfish.simulator.Optimization; +import fr.ifremer.isisfish.simulator.SimulationParameter; +import fr.ifremer.isisfish.simulator.sensitivity.Factor; +import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup; +import fr.ifremer.isisfish.ui.SimulationUI; +import fr.ifremer.isisfish.ui.input.InputAction; +import fr.ifremer.isisfish.ui.models.common.GenericComboModel; +import fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellEditor; +import fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellRenderer; +import fr.ifremer.isisfish.ui.models.common.ScriptParametersTableModel; +import fr.ifremer.isisfish.ui.models.optimization.ExportObservationTableModel; +import fr.ifremer.isisfish.ui.models.optimization.ExportTableCellEditor; +import fr.ifremer.isisfish.ui.models.optimization.ExportTableCellRenderer; +import fr.ifremer.isisfish.ui.sensitivity.SensitivitySaveVerifier; +import fr.ifremer.isisfish.ui.sensitivity.SensitivityTabUI; +import fr.ifremer.isisfish.ui.widget.editor.FactorEditorListener; + + +public class OptimizationHandler { + + private static final Log log = LogFactory.getLog(OptimizationHandler.class); + + protected FactorEditorListener factorEditorListener; + + public void init(OptimizationUI view) { + // get info + SimulAction simulAction = view.getContextValue(SimulAction.class); + SimulationParameter param = simulAction.getSimulationParameter(); + RegionStorage regionStorage = view.getContextValue(RegionStorage.class); + + // refresh after simulation storage set + if (param.getObjective() != null) { + view.getFieldObjectiveMethodSelect().setSelectedItem(ObjectiveStorage.getName(param.getObjective())); + } + if (param.getOptimization() != null) { + view.getFieldOptimizationMethodSelect().setSelectedItem(OptimizationStorage.getName(param.getOptimization())); + } + // export/observation + view.getExportObservationTable().setModel(getExportObservationTableModel(view)); + + // order matters + view.getExportObservationTable().getColumnModel().getColumn(0).setCellRenderer(new ExportTableCellRenderer()); + ExportTableCellEditor editor = new ExportTableCellEditor(); + editor.setRegionStorage(regionStorage); + view.getExportObservationTable().getColumnModel().getColumn(1).setCellEditor(editor); + view.getExportObservationTable().getColumnModel().getColumn(1).setCellRenderer(new ExportTableCellRenderer()); + } + + /** + * Get simulation parameter from ui context. + * + * @param view view (ui context) + * @return simulation parameters + */ + protected SimulationParameter getSimulationParameter(OptimizationUI view) { + SimulAction simulAction = view.getContextValue(SimulAction.class); + SimulationParameter param = simulAction.getSimulationParameter(); + return param; + } + + /** + * Optimization model for combo box. + * + * @return model + */ + public GenericComboModel<String> getObjectiveComboModel() { + List<String> result = new ArrayList<String>(); + for (String r : ObjectiveStorage.getObjectiveNames()) { + // there is some non java files in sensitivity directory + if (r.endsWith(".java")) { + // Remove .java extension + // for example SensitivityStorage.getRuleName(String) + result.add(r.substring(0, r.length() - 5)); + } + } + + GenericComboModel<String> model = new GenericComboModel<String>(result); + return model; + } + + /** + * Selection d'une méthode d'optimisation. + * + * @param view view + */ + public void objectiveChanged(OptimizationUI view) { + String objectiveName = (String)view.getFieldObjectiveMethodSelect().getSelectedItem(); + SimulationParameter param = getSimulationParameter(view); + RegionStorage regionStorage = view.getContextValue(RegionStorage.class); + + // creation new instance only when name change to not lose parameters value + Objective objective = param.getObjective(); + if (objective == null || !objective.getClass().getSimpleName().equals(objectiveName)) { + try { + ObjectiveStorage objectiveStorage = ObjectiveStorage.getObjective(objectiveName); + objective = objectiveStorage.getNewInstance(); + } catch (IsisFishException e) { + if (log.isErrorEnabled()) { + log.error("Can't set optimization", e); + } + } + } + + // can be null for example if analysis can't be compiled + if (objective != null) { + param.setObjective(objective); + + // update model + ScriptParametersTableModel parametersTableModel = new ScriptParametersTableModel(objective); + view.getSimulObjectiveMethodParam().setModel(parametersTableModel); + view.getSimulObjectiveMethodParam().getColumnModel().getColumn(0).setCellRenderer(new ScriptParametersTableCellRenderer(objective)); + + ScriptParametersTableCellEditor editor = new ScriptParametersTableCellEditor(objective); + editor.setRegionStorage(regionStorage); + editor.setFactorActionListener(getFactorActionListener(view)); + view.getSimulObjectiveMethodParam().getColumnModel().getColumn(1).setCellEditor(editor); + } + } + + /** + * Retourne une instance de action listener qui affichera l'interface de sélection d'un facteur. + * + * @param view parent view + * @return action listener + */ + protected FactorEditorListener getFactorActionListener(final OptimizationUI view) { + if (factorEditorListener == null) { + factorEditorListener = new FactorEditorListener() { + public void actionPerformed(ActionEvent event) { + + // init new sensitivity tav ui hierarchy + final SensitivityTabUI sensitivityTabUI = new SensitivityTabUI(view); + sensitivityTabUI.setContextValue(new InputAction()); + sensitivityTabUI.setContextValue(new SensitivitySaveVerifier()); // prevent NPE + sensitivityTabUI.setContextValue(view.getParentContainer(SimulationUI.class), "SimulationUI"); // prevent NPE + + // init region + // FIXME this transaction in never closed + // and can't be closed because used in + try { + RegionStorage regionStorage = view.getContextValue(RegionStorage.class); + TopiaContext tx = regionStorage.getStorage().beginTransaction(); + FisheryRegion fisheryRegion = RegionStorage.getFisheryRegion(tx); + sensitivityTabUI.setFisheryRegion(fisheryRegion); + sensitivityTabUI.setTreeModel(); + } catch (Exception ex) { + throw new IsisFishRuntimeException("Can't init dialog tree", ex); + } + + // display dialog + JDialog dialog = new JDialog(); + dialog.setTitle("Sélection d'un facteur"); + dialog.add(sensitivityTabUI); + dialog.setSize(800, 600); + dialog.setLocationRelativeTo(view); + dialog.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + // get first factor + FactorGroup factorGroup = sensitivityTabUI.getContextValue(SimulAction.class).getFactorGroup(); + + if (factorGroup.size() > 0) { + Factor factor = factorGroup.get(factorGroup.size() - 1); + // useless, but clear for next call + sensitivityTabUI.getContextValue(SimulAction.class).removeFactor(factor.getPath()); + setSelectedFactor(factor); + } + } + }); + dialog.setVisible(true); + } + }; + } + return factorEditorListener; + } + + /** + * Optimization model for combo box. + * + * @return model + */ + public GenericComboModel<String> getOptimizationComboModel() { + List<String> result = new ArrayList<String>(); + for (String r : OptimizationStorage.getOptimizationNames()) { + // there is some non java files in sensitivity directory + if (r.endsWith(".java")) { + // Remove .java extension + // for example SensitivityStorage.getRuleName(String) + result.add(r.substring(0, r.length() - 5)); + } + } + + GenericComboModel<String> model = new GenericComboModel<String>(result); + return model; + } + + /** + * Selection d'une méthode d'optimisation. + * + * @param view view + */ + public void optimizationChanged(OptimizationUI view) { + String optimizationName = (String)view.getFieldOptimizationMethodSelect().getSelectedItem(); + SimulationParameter param = getSimulationParameter(view); + RegionStorage regionStorage = view.getContextValue(RegionStorage.class); + + // creation new instance only when name change to not lose parameters value + Optimization optimization = param.getOptimization(); + if (optimization == null || !optimization.getClass().getSimpleName().equals(optimizationName)) { + try { + OptimizationStorage optimizationStorage = OptimizationStorage.getOptimization(optimizationName); + optimization = optimizationStorage.getNewInstance(); + } catch (IsisFishException e) { + if (log.isErrorEnabled()) { + log.error("Can't set optimization", e); + } + } + } + + // can be null for example if analysis can't be compiled + if (optimization != null) { + param.setOptimization(optimization); + + // update model + ScriptParametersTableModel parametersTableModel = new ScriptParametersTableModel(optimization); + view.getSimulOptimizationMethodParam().setModel(parametersTableModel); + view.getSimulOptimizationMethodParam().getColumnModel().getColumn(0).setCellRenderer(new ScriptParametersTableCellRenderer(optimization)); + + ScriptParametersTableCellEditor editor = new ScriptParametersTableCellEditor(optimization); + editor.setRegionStorage(regionStorage); + editor.setFactorActionListener(getFactorActionListener(view)); + view.getSimulOptimizationMethodParam().getColumnModel().getColumn(1).setCellEditor(editor); + } + } + + /** + * Export model for combo box. + * + * @return model + */ + public ListModel<String> getExportListModel() { + List<String> result = new ArrayList<String>(); + for (String r : ExportStorage.getExportNames()) { + // there is some non java files in sensitivity directory + if (r.endsWith(".java")) { + // Remove .java extention + // for example SensitivityStorage.getRuleName(String) + result.add(r.substring(0, r.length() - 5)); + } + } + + GenericComboModel<String> model = new GenericComboModel<String>(result); + return model; + } + + /** + * Export model for combo box. + * + * @param view view + * @return model + */ + public ExportObservationTableModel getExportObservationTableModel(OptimizationUI view) { + SimulationParameter param = getSimulationParameter(view); + Map<Export, Observation> optimizationExportsObservations = param.getOptimizationExportsObservations(); + ExportObservationTableModel model = new ExportObservationTableModel(optimizationExportsObservations); + return model; + } + + /** + * Add selected export. + * + * @param view view + */ + public void addExports(OptimizationUI view) { + // get elements + SimulationParameter param = getSimulationParameter(view); + ExportObservationTableModel tableModel = (ExportObservationTableModel)view.getExportObservationTable().getModel(); + + // add all selected exports + List<String> selectedExports = view.getFieldExportList().getSelectedValuesList(); + for (String selectedExport : selectedExports) { + try { + // create export instance + ExportStorage exportStorage = ExportStorage.getExport(selectedExport); + Export export = exportStorage.getNewInstance(); + + // add export instance into parameters + Map<Export, Observation> optimizationExports = param.getOptimizationExportsObservations(); + optimizationExports.put(export, null); // new entry + tableModel.setOptimizationExportsObservations(optimizationExports); // FIXME add fire + param.setOptimizationExportsObservations(optimizationExports); + } catch (IsisFishException ex) { + throw new IsisFishRuntimeException("Can't create new export", ex); + } + } + } + + /** + * Remove selected exports in table. + * + * @param view view + */ + public void removeExports(OptimizationUI view) { + // get element + SimulationParameter param = getSimulationParameter(view); + Map<Export, Observation> optimizationExports = param.getOptimizationExportsObservations(); + ExportObservationTableModel tableModel = (ExportObservationTableModel)view.getExportObservationTable().getModel(); + + JTable table = view.getExportObservationTable(); + int[] rows = table.getSelectedRows(); + // reverse order + for (int i = rows.length - 1; i >= 0; i--) { + Export export = tableModel.getExportForRow(rows[i]); + optimizationExports.remove(export); + tableModel.deleteExport(export); + } + + // force save + param.setOptimizationExportsObservations(optimizationExports); + } + + /** + * Clear all export in table. + * + * @param view view + */ + public void clearExports(OptimizationUI view) { + // get elements + SimulationParameter param = getSimulationParameter(view); + Map<Export, Observation> optimizationExports = param.getOptimizationExportsObservations(); + ExportObservationTableModel tableModel = (ExportObservationTableModel)view.getExportObservationTable().getModel(); + + // clear + optimizationExports.clear(); + tableModel.setOptimizationExportsObservations(optimizationExports); + + // force save + param.setOptimizationExportsObservations(optimizationExports); + } +} Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationUI.jaxx (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationUI.jaxx) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationUI.jaxx (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,126 @@ +<!-- + #%L + IsisFish + + $Id$ + $HeadURL$ + %% + Copyright (C) 2013 - 2014 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 + 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 Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<Table> + <script><![CDATA[ + /*protected void $afterCompleteSetup() { + handler.init(this); + }*/ + + // application will be refreshed by regionStorage change + protected void regionStorageChanged() { + handler.init(this); + } + + public void refresh() { + //handler.refresh(this); + } + ]]></script> + + <OptimizationHandler id="handler" javaBean='new OptimizationHandler()'/> + + <!-- Objective choice and param --> + <row> + <cell fill="horizontal"> + <JLabel text="isisfish.optimization.objective"/> + </cell> + <cell fill="horizontal" weightx="1.0" columns="2"> + <JComboBox id="fieldObjectiveMethodSelect" genericType="String" model='{handler.getObjectiveComboModel()}' + onActionPerformed='handler.objectiveChanged(this)' + renderer="{new fr.ifremer.isisfish.ui.models.optimization.ObjectiveComboRenderer()}"/> + </cell> + </row> + <row> + <cell columns="3" fill="both" weightx="1.0" weighty="1.0"> + <JScrollPane> + <JTable id="simulObjectiveMethodParam" rowHeight="24" /> + </JScrollPane> + </cell> + </row> + + <!-- Optimisation choice and param --> + <row> + <cell fill="horizontal"> + <JLabel text="isisfish.optimization.method"/> + </cell> + <cell fill="horizontal" weightx="1.0" columns="2"> + <JComboBox id="fieldOptimizationMethodSelect" genericType="String" model='{handler.getOptimizationComboModel()}' + onActionPerformed='handler.optimizationChanged(this)' + renderer="{new fr.ifremer.isisfish.ui.models.optimization.OptimizationComboRenderer()}"/> + </cell> + </row> + <row> + <cell columns="3" fill="both" weightx="1.0" weighty="1.0"> + <JScrollPane> + <JTable id="simulOptimizationMethodParam" rowHeight="24" /> + </JScrollPane> + </cell> + </row> + + <row> + <cell fill="both" columns='3'> + <JLabel text="isisfish.optimization.exports" /> + </cell> + </row> + <row> + <cell fill="both" weightx="0.2" weighty="1.0"> + <JScrollPane> + <JList id="fieldExportList" genericType="String" + model='{handler.getExportListModel()}' + cellRenderer='{new fr.ifremer.isisfish.ui.models.export.ExportNameListRenderer()}' + onValueChanged='addExportsButton.setEnabled(fieldExportList.getSelectedIndex() != -1)' /> + </JScrollPane> + </cell> + <cell fill="horizontal" weighty="1.0"> + <Table> + <row> + <cell fill="horizontal"> + <JButton id="addExportsButton" text="isisfish.common.add" enabled="false" + onActionPerformed="handler.addExports(this)" /> + </cell> + </row> + <row> + <cell fill="horizontal"> + <JButton id="removeExportsButton" text="isisfish.common.remove" enabled="false" + onActionPerformed="handler.removeExports(this)" /> + </cell> + </row> + <row> + <cell fill="horizontal"> + <JButton id="clearExportsButton" text="isisfish.common.clear" enabled="false" + onActionPerformed="handler.clearExports(this)" /> + </cell> + </row> + </Table> + </cell> + <cell fill="both" weightx="1.0" weighty="1.0"> + <JScrollPane> + <JTable id="exportObservationTable" model="{handler.getExportObservationTableModel(this)}" rowHeight='24' /> + <ListSelectionModel id="exportObservationSelectionModel" initializer="exportObservationTable.getSelectionModel()" + onValueChanged='removeExportsButton.setEnabled(!exportObservationSelectionModel.isSelectionEmpty());clearExportsButton.setEnabled(exportObservationTable.getModel().getRowCount() > 0);' /> + </JScrollPane> + </cell> + </row> + +</Table> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2005 - 2012 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2005 - 2014 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 @@ -29,7 +29,7 @@ <Boolean id='sensitivity' javaBean='false' /> <import> - java.util.EventObject; + static org.nuiton.i18n.I18n.t java.text.ParseException; fr.ifremer.isisfish.datastore.RegionStorage fr.ifremer.isisfish.datastore.StorageChangeEvent @@ -41,33 +41,21 @@ fr.ifremer.isisfish.ui.SimulationUI fr.ifremer.isisfish.ui.WelcomePanelUI fr.ifremer.isisfish.ui.WelcomeTabUI - fr.ifremer.isisfish.ui.models.common.StringComboModel - fr.ifremer.isisfish.ui.models.rule.RuleComboModel - fr.ifremer.isisfish.ui.models.rule.RuleNamesListRenderer - fr.ifremer.isisfish.ui.models.rule.RuleListModel - fr.ifremer.isisfish.ui.sensitivity.FactorWizardUI + fr.ifremer.isisfish.ui.models.common.GenericComboModel fr.ifremer.isisfish.ui.sensitivity.SensitivityUI fr.ifremer.isisfish.ui.widget.FilterableComboBox - fr.ifremer.isisfish.rule.Rule fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher fr.ifremer.isisfish.simulator.launcher.SimulationService fr.ifremer.isisfish.simulator.launcher.SimulationJob fr.ifremer.isisfish.simulator.launcher.SimulationServiceListener - fr.ifremer.isisfish.simulator.sensitivity.Factor org.nuiton.topia.TopiaException org.nuiton.topia.TopiaContext - org.nuiton.math.matrix.MatrixND - org.nuiton.math.matrix.gui.MatrixPanelEditor - org.apache.commons.lang3.ArrayUtils javax.swing.SwingUtilities javax.swing.DefaultComboBoxModel java.awt.CardLayout java.awt.Dimension java.io.IOException - java.awt.BorderLayout - javax.swing.AbstractAction javax.swing.DefaultListModel - javax.swing.JComponent javax.swing.ComboBoxModel </import> <script><![CDATA[ @@ -79,7 +67,7 @@ regionStorageListener = new StorageChangeListener() { @Override public void versionDataChanged(StorageChangeEvent e) { - StringComboModel model = new StringComboModel(fr.ifremer.isisfish.datastore.RegionStorage.getRegionNames()); + GenericComboModel<String> model = new GenericComboModel<String>(fr.ifremer.isisfish.datastore.RegionStorage.getRegionNames()); fieldSimulParamsRegion.setModel(model); } }; @@ -93,8 +81,8 @@ @Override public void simulationStop(SimulationService simService, SimulationJob job) { - StringComboModel model = (StringComboModel)fieldSimulParamsSelect.getModel(); - model.addString(job.getId()); + GenericComboModel<String> model = (GenericComboModel)fieldSimulParamsSelect.getModel(); + model.addElement(job.getId()); } @Override @@ -104,6 +92,10 @@ } SimulationService.getService().addSimulationServiceListener(simulationListener); +// la gestion des regles est maintenant independante de SimulAction +// il faut faire la lié aux parametres de simulations +simulAction.getSimulationParameter().setRules(ruleChooser.getRulesList()); + public void refresh() { if (simulAction.getSimulationStorage() != null) { fieldSimulParamsName.setText(simulAction.getSimulationStorage().getName()); @@ -123,18 +115,19 @@ log.debug(" selected " + selected); } if(selected != null && !selected.trim().isEmpty()) { - getParentContainer(WelcomePanelUI.class).setStatusMessage(_("isisfish.message.loading.region")); + getParentContainer(WelcomePanelUI.class).setStatusMessage(t("isisfish.message.loading.region")); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { simulAction.regionChange(ParamsUI.this, selected); refresh(); setSensitivityTabRegion(); - getParentContainer(WelcomePanelUI.class).setStatusMessage(_("isisfish.message.region.loaded")); + getParentContainer(WelcomePanelUI.class).setStatusMessage(t("isisfish.message.region.loaded")); } }); } } + protected void initSimulationParams() { if (!isSensitivity()){ // prescript @@ -145,13 +138,19 @@ // simulation plan fieldSimulUseSimulationPlan.setSelected(simulAction.getSimulationParameter().getUseSimulationPlan()); getParentContainer(SimulUI.class).getSensUI().refresh(); + + // optimization + fieldSimulUseOptimization.setSelected(simulAction.getSimulationParameter().getUseOptimization()); + getParentContainer(SimulUI.class).getOptimizationUI().refresh(); + } } protected void setSensitivityTabRegion() { if (isSensitivity()) { try { - // FIXME this transation in never closed + // FIXME this transaction in never closed + // and can't be closed because used in TopiaContext tx = simulAction.getRegionStorage().getStorage().beginTransaction(); FisheryRegion fisheryRegion = RegionStorage.getFisheryRegion(tx); getParentContainer(SensitivityUI.class).getSensitivityTabUI().setFisheryRegion(fisheryRegion); @@ -184,7 +183,7 @@ final String selected = fieldSimulParamsSelect.getSelectedItem().toString(); // le premier item est " " pour ne pas avoir de selection par defaut if (selected != null && !selected.equals(" ")) { - getParentContainer(WelcomePanelUI.class).setStatusMessage(_("isisfish.message.loading.old.simulation")); + getParentContainer(WelcomePanelUI.class).setStatusMessage(t("isisfish.message.loading.old.simulation")); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { @@ -199,7 +198,7 @@ // regles ruleChooser.setRulesList(simulAction.getSimulationParameter().getRules()); - getParentContainer(WelcomePanelUI.class).setStatusMessage(_("isisfish.message.old.simulation.loaded")); + getParentContainer(WelcomePanelUI.class).setStatusMessage(t("isisfish.message.old.simulation.loaded")); } }); } @@ -210,11 +209,6 @@ */ protected void launchSimulation() { - // la gestion des regles est maintenant independante de SimulAction - // il faut faire le set qui va bien avant le lancement - simulAction.getSimulationParameter().setRules(ruleChooser.getRulesList()); - - if (!isSensitivity()) { simulAction.launchSimulation(fieldSimulParamsName.getText(), (SimulatorLauncher)comboSelLauncher.getSelectedItem()); } @@ -239,6 +233,12 @@ simulationUI.setEnabledSimulationPlanTab(fieldSimulUseSimulationPlan.isSelected()); } +protected void enableOptimization() { + simulAction.getSimulationParameter().setUseOptimization(fieldSimulUseOptimization.isSelected()); + SimulationUI simulationUI = getParentContainer(SimulationUI.class); + simulationUI.setEnabledOptimizationTab(fieldSimulUseOptimization.isSelected()); +} + protected void setListSimulParamsStrategiesItems() { List<Strategy> strategiesSelected = simulAction.getSimulationParameter().getStrategies(); DefaultListModel listSimulParamsStrategiesModel = new DefaultListModel(); @@ -298,9 +298,9 @@ return getSimulParamsSelectModel(false); } -protected ComboBoxModel getSimulParamsSelectModel(boolean force) { +protected ComboBoxModel<String> getSimulParamsSelectModel(boolean force) { List<String> items = simulAction.getFilteredOldSimulatorNames(force); - StringComboModel result = new StringComboModel(items); + GenericComboModel<String> result = new GenericComboModel<String>(items); return result; } @@ -340,7 +340,7 @@ <row> <cell fill="horizontal"> <JLabel id='lblName' - text='{isSensitivity() ? _("isisfish.params.sensitivityName") : _("isisfish.params.simulationName")}' + text='{isSensitivity() ? t("isisfish.params.sensitivityName") : t("isisfish.params.simulationName")}' minimumSize='{new Dimension(195,25)}' preferredSize='{new Dimension(195,25)}' /> </cell> @@ -361,8 +361,8 @@ <JLabel text="isisfish.common.region" /> </cell> <cell fill="horizontal" weightx="1.0"> - <JComboBox id="fieldSimulParamsRegion" - model='{new fr.ifremer.isisfish.ui.models.common.StringComboModel(fr.ifremer.isisfish.datastore.RegionStorage.getRegionNames())}' + <JComboBox id="fieldSimulParamsRegion" genericType="String" + model='{new fr.ifremer.isisfish.ui.models.common.GenericComboModel<String>(fr.ifremer.isisfish.datastore.RegionStorage.getRegionNames())}' selectedItem='{getContextValue(SimulAction.class).getSimulationParameter().getRegionName()}' onActionPerformed='regionChange()' /> </cell> @@ -416,7 +416,7 @@ <row> <cell columns="4" fill="both" weightx="1.0" weighty="0.6"> <JTabbedPane id="parametersTabbedPane" enabled="{getRegionStorage() != null}"> - <tab title='{_("isisfish.params.stategiesAndPopulations")}'> + <tab title='{t("isisfish.params.stategiesAndPopulations")}'> <Table> <row> <cell fill="horizontal"> @@ -466,7 +466,7 @@ </row> </Table> </tab> - <tab title='{_("isisfish.params.rules")}'> + <tab title='{t("isisfish.params.rules")}'> <Table> <row> <cell fill="both" weightx="1" weighty="1"> @@ -510,6 +510,14 @@ enabled="{getRegionStorage() != null}" /> </cell> <cell fill="horizontal" weightx="1"> + <JCheckBox text="isisfish.params.useOptimization" + id="fieldSimulUseOptimization" + selected='{simulAction.getSimulationParameter().getUseOptimization()}' + visible='{!isSensitivity()}' + onItemStateChanged='enableOptimization()' + enabled="{getRegionStorage() != null}" /> + </cell> + <cell fill="horizontal" weightx="1"> <JCheckBox text="isisfish.params.sensitivityOnlyKeepFirstResult" id="sensitivityOnlyKeepFirstResultCheckBox" selected='{simulAction.getSimulationParameter().isSensitivityAnalysisOnlyKeepFirst()}' Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PreScriptsUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PreScriptsUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PreScriptsUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2005 - 2011 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2005 - 2014 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 @@ -41,9 +41,9 @@ simul.selTab(0); }*/ ]]></script> - <JScrollPane constraints='BorderLayout.CENTER'> - <JTextArea id="fieldSimulPreScript" onFocusLost='save()'/> - </JScrollPane> + <org.fife.ui.rtextarea.RTextScrollPane constraints='BorderLayout.CENTER'> + <org.fife.ui.rsyntaxtextarea.RSyntaxTextArea id="fieldSimulPreScript" syntaxEditingStyle="{org.fife.ui.rsyntaxtextarea.SyntaxConstants.SYNTAX_STYLE_JAVA}" /> + </org.fife.ui.rtextarea.RTextScrollPane> <JButton constraints='BorderLayout.SOUTH' text="isisfish.preScript.backParameter" onActionPerformed='getParentContainer(fr.ifremer.isisfish.ui.SimulationUI.class).selectParametersTab()'/> </JPanel> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ResultChoiceUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ResultChoiceUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ResultChoiceUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2005 - 2011 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2005 - 2014 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 @@ -24,8 +24,9 @@ --> <JPanel layout='{new BorderLayout()}'> <import> + static org.nuiton.i18n.I18n.t fr.ifremer.isisfish.ui.WelcomePanelUI - fr.ifremer.isisfish.ui.models.common.StringListModel + fr.ifremer.isisfish.ui.models.common.GenericListModel javax.swing.event.ListSelectionEvent </import> <script><![CDATA[ @@ -53,7 +54,7 @@ // userResults = intersection(userResults,availableResult) userResults.retainAll(availableResults); - StringListModel resultModel = new StringListModel(availableResults); + GenericListModel<String> resultModel = new GenericListModel<String>(availableResults); listResultNames.setModel(resultModel); for (String userResult : userResults) { @@ -68,7 +69,7 @@ protected void saveConfigResultNames() { getContextValue(SimulAction.class).saveConfigurationResultNames(listResultNames.getSelectedValues()); - setStatusMessage(_("isisfish.resultChoice.saved")); + setStatusMessage(t("isisfish.resultChoice.saved")); } protected void setStatusMessage(String txt) { Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooser.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooser.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooser.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2005 - 2011 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2005 - 2014 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 @@ -39,19 +39,9 @@ java.beans.PropertyChangeEvent java.beans.PropertyChangeListener java.util.List - fr.ifremer.isisfish.IsisFishException - fr.ifremer.isisfish.IsisFishRuntimeException - fr.ifremer.isisfish.datastore.RuleStorage fr.ifremer.isisfish.rule.Rule fr.ifremer.isisfish.ui.models.rule.RuleListModel fr.ifremer.isisfish.ui.models.common.ScriptParametersTableModel - fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellEditor - fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellRenderer - fr.ifremer.isisfish.ui.models.rule.RuleParametersFactorTableCellRenderer - fr.ifremer.isisfish.ui.models.rule.RuleParametersFactorTableCellEditor - fr.ifremer.isisfish.ui.util.ErrorHelper - fr.ifremer.isisfish.ui.SimulationUI - fr.ifremer.isisfish.datastore.RegionStorage </import> <script><![CDATA[ @@ -90,7 +80,7 @@ <cell fill="both" rows="3" weightx="1" weighty="1"> <JScrollPane> <JList id="availableRuleList" selectionMode="{javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION}" - model='{new fr.ifremer.isisfish.ui.models.common.StringListModel(fr.ifremer.isisfish.datastore.RuleStorage.getRuleNames())}' + model='{new fr.ifremer.isisfish.ui.models.common.GenericListModel<String>(fr.ifremer.isisfish.datastore.RuleStorage.getRuleNames())}' cellRenderer='{new fr.ifremer.isisfish.ui.models.rule.RuleNamesListRenderer()}' onValueChanged='addRulesButton.setEnabled(availableRuleList.getSelectedIndex() != -1)' enabled="{isActive()}"/> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooserHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooserHandler.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooserHandler.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -47,7 +47,7 @@ public class RuleChooserHandler { /** - * Get new instance for selected rules names and add it to {@link rulesList} list. + * Get new instance for selected rules names and add it to {@code rulesList} list. * * @param ruleChooser rule chooser ui */ @@ -57,7 +57,7 @@ String availableRuleName = (String)availableRuleValue; try { RuleStorage ruleStorage = RuleStorage.getRule(availableRuleName); - Rule ruleTmp = ruleStorage.getNewRuleInstance(); + Rule ruleTmp = ruleStorage.getNewInstance(); // add it after autoconfiguration (if enabled) ruleTmp = (Rule)ScriptParameterDialog.displayConfigurationFrame(ruleChooser, ruleTmp); @@ -118,7 +118,7 @@ } /** - * Display paramters table form single selected list. + * Display parameters table form single selected list. * * @param ruleChooser rule chooser ui */ Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.simulator; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.BorderLayout; import java.awt.CardLayout; @@ -66,7 +66,6 @@ import fr.ifremer.isisfish.IsisFishRuntimeException; import fr.ifremer.isisfish.datastore.ExportStorage; import fr.ifremer.isisfish.datastore.RegionStorage; -import fr.ifremer.isisfish.datastore.RuleStorage; import fr.ifremer.isisfish.datastore.ScriptStorage; import fr.ifremer.isisfish.datastore.SensitivityAnalysisStorage; import fr.ifremer.isisfish.datastore.SensitivityExportStorage; @@ -92,14 +91,12 @@ import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; import fr.ifremer.isisfish.ui.SimulationUI; -import fr.ifremer.isisfish.ui.sensitivity.FactorWizardUI; import fr.ifremer.isisfish.ui.sensitivity.SensitivityChooserUI; -import fr.ifremer.isisfish.ui.sensitivity.SensitivityInputHandler; +import fr.ifremer.isisfish.ui.sensitivity.wizard.FactorWizardUI; +import fr.ifremer.isisfish.ui.sensitivity.wizard.SensitivityWizardHandler; import fr.ifremer.isisfish.ui.util.ErrorHelper; import fr.ifremer.isisfish.ui.widget.editor.ScriptParameterDialog; @@ -108,7 +105,7 @@ * * Created: 1 aout 2005 18:37:25 CEST * - * @author Benjamin POUSSIN <poussin@codelutin.com> + * @author Benjamin POUSSIN <poussin@codelutin.com> * @version $Revision$ * * Last update: $Date$ @@ -121,14 +118,17 @@ private static final SimpleDateFormat DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd-HH-mm"); - /** Les parametres de simulation (commun a tous les onglet de l'interface de simulation). */ + /** + * Les parametres de simulation (commun a tous les onglet de l'interface de simulation). + * Les parametres doivent toujours être liés avec les selections et état de l'ui. + * La mise en facteur des parametres et des regles est basé sur cet objet. + */ protected SimulationParameter param = null; protected RegionStorage regionStorage = null; protected SimulationStorage simulStorage = null; protected List<String> oldSimulNames = null; protected String simulName = null; - protected SensitivityAnalysisStorage sensitivityStorage = null; /** * List de facteur sous forme d'arbre (factor group). @@ -166,7 +166,7 @@ if (log.isErrorEnabled()) { log.error("Can't init SimulationParameter", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.simulation.initsimulaction"), eee); + ErrorHelper.showErrorDialog(t("isisfish.error.simulation.initsimulaction"), eee); } } @@ -192,7 +192,7 @@ if (log.isErrorEnabled()) { log.error("Can't import simulation", e); } - ErrorHelper.showErrorDialog(_("isisfish.error.simulation.importparameter"), e); + ErrorHelper.showErrorDialog(t("isisfish.error.simulation.importparameter"), e); } finally { IOUtils.closeQuietly(fos); } @@ -214,7 +214,7 @@ if (log.isErrorEnabled()) { log.error("Can't save simulation", e); } - ErrorHelper.showErrorDialog(_("isisfish.error.simulation.savesimulation"), e); + ErrorHelper.showErrorDialog(t("isisfish.error.simulation.savesimulation"), e); } finally { IOUtils.closeQuietly(fos); } @@ -240,7 +240,7 @@ if (log.isWarnEnabled()) { log.warn("Can't find result name script", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.simulation.getresultname"), eee); + ErrorHelper.showErrorDialog(t("isisfish.error.simulation.getresultname"), eee); } return result; } @@ -266,7 +266,7 @@ * <li>params</li> * <li>simulation plans</li> * <li>factors list</li> - * <ul> + * </ul> * * Open old simulation: * <ul> @@ -306,13 +306,11 @@ factorGroup = designPlan.getFactorGroup(); } } - else { - if (log.isInfoEnabled()) { - log.info("No xml design plan file found"); - } + else if (log.isInfoEnabled()) { + log.info("No xml design plan file found"); } } catch (Exception eee) { - throw new IsisFishRuntimeException(_("isisfish.error.simulation.loadoldsimulation"), eee); + throw new IsisFishRuntimeException(t("isisfish.error.simulation.loadoldsimulation"), eee); } } @@ -388,7 +386,7 @@ if (log.isErrorEnabled()) { log.error("Can't get strategies", e); } - ErrorHelper.showErrorDialog(_("isisfish.error.simulation.liststrategies"), e); + ErrorHelper.showErrorDialog(t("isisfish.error.simulation.liststrategies"), e); } return result; } @@ -435,7 +433,7 @@ if (log.isErrorEnabled()) { log.error("Can't get population", e); } - ErrorHelper.showErrorDialog(_("isisfish.error.simulation.listpopulation"), e); + ErrorHelper.showErrorDialog(t("isisfish.error.simulation.listpopulation"), e); } return result; } @@ -508,12 +506,12 @@ if (log.isErrorEnabled()) { log.error("Can't get old simulation item", e); } - ErrorHelper.showErrorDialog(_("isisfish.error.simulation.listoldsimulation"), e); + ErrorHelper.showErrorDialog(t("isisfish.error.simulation.listoldsimulation"), e); } catch (IOException e) { if (log.isErrorEnabled()) { log.error("Can't get old simulation item", e); } - ErrorHelper.showErrorDialog(_("isisfish.error.simulation.listoldsimulation"), e); + ErrorHelper.showErrorDialog(t("isisfish.error.simulation.listoldsimulation"), e); } return null;*/ } @@ -636,7 +634,7 @@ public void addSimulationPlan(SensUI sensUI, String name) { try { - SimulationPlan sp = SimulationPlanStorage.getSimulationPlan(name).getNewSimulationPlanInstance(); + SimulationPlan sp = SimulationPlanStorage.getSimulationPlan(name).getNewInstance(); // add it after autoconfiguration (if enabled) sp = (SimulationPlan)ScriptParameterDialog.displayConfigurationFrame(sensUI, sp); @@ -709,7 +707,7 @@ public void addSensitivityExport(SensitivityChooserUI sensitivityChooserUI, String name) { try { SensitivityExportStorage storage = SensitivityExportStorage.getSensitivityExport(name); - SensitivityExport sensitivityExport = storage.getNewSensitivityExportInstance(); + SensitivityExport sensitivityExport = storage.getNewInstance(); // add it after autoconfiguration (if enabled) sensitivityExport = (SensitivityExport)ScriptParameterDialog.displayConfigurationFrame(sensitivityChooserUI, sensitivityExport); @@ -801,9 +799,8 @@ public SensitivityAnalysis getSensitivityAnalysisInstance(String name) { SensitivityAnalysis sensitivityAnalysis = null; try { - sensitivityStorage = SensitivityAnalysisStorage.getSensitivityAnalysis(name); - sensitivityAnalysis = sensitivityStorage - .getNewSensitivityAnalysisInstance(); + SensitivityAnalysisStorage sensitivityStorage = SensitivityAnalysisStorage.getSensitivityAnalysis(name); + sensitivityAnalysis = sensitivityStorage.getNewInstance(); } catch (IsisFishException e) { if (log.isErrorEnabled()) { log.error("Can't set sensitivity analysis", e); @@ -900,16 +897,12 @@ * @param name * @param comment * @param path - * @param min - * @param max + * @param domain * @param exist */ - public void addContinuousFactor(String name, String comment, String path, Double min, - Double max, boolean exist) { + public void addContinuousFactor(String name, String comment, String path, + ContinuousDomain domain, boolean exist) { Factor f = new Factor(name); - ContinuousDomain domain = new ContinuousDomain(); - domain.setMinBound(min); - domain.setMaxBound(max); f.setDomain(domain); f.setComment(comment); f.setPath(path); @@ -919,31 +912,6 @@ addFactor(f); } - /** - * Ajout d'un facteur continue de type pourcentage. - * - * @param name - * @param comment - * @param path - * @param referenceValue - * @param coefficient - * @param exist - */ - public void addContinuousPercentageFactor(String name, String comment, String path, Double referenceValue, - Double coefficient, boolean exist) { - Factor f = new Factor(name); - ContinuousDomain domain = new ContinuousDomain(true); - domain.setReferenceValue(referenceValue); - domain.setCoefficient(coefficient); - f.setDomain(domain); - f.setComment(comment); - f.setPath(path); - if (exist) { - removeFactor(path); - } - addFactor(f); - } - public void addDiscreteFactor(String name, String comment, String path, List<Object> values, boolean exist) { addDiscreteFactor(new DiscreteDomain(), name, comment, path, values, exist); @@ -981,51 +949,18 @@ addFactor(f); } - public void addContinuousEquationFactor(String name, String comment, String path, - EquationContinuousDomain domain, boolean exist) { + public void addContinuousEquationFactor(Factor f, boolean exist) { // factor name need to be composed - Factor f = new Factor(name + "." + domain.getVariableName()); - f.setDomain(domain); - f.setComment(comment); - // don't modify path, need to be valid identifier - //f.setPath(path + domain.getVariableName()); - f.setPath(path); + //Factor f = new Factor(name + "." + domain.getVariableName()); + //f.setDomain(domain); + //f.setComment(comment); + //f.setPath(path); if (exist) { - removeFactor(path); + removeFactor(f.getPath()); } addFactor(f); } - public void addContinuousMatrixFactor(String name, String comment, String path, - MatrixND referenceValue, Double coef, boolean exist) { - Factor f = new Factor(name); - MatrixContinuousDomain domain = new MatrixContinuousDomain(true); - domain.setReferenceValue(referenceValue); - domain.setCoefficient(coef); - f.setComment(comment); - f.setDomain(domain); - f.setPath(path); - if (exist) { - removeFactor(path); - } - addFactor(f); - } - - public void addContinuousMatrixFactor(String name, String comment, String path, - MatrixND minBound, MatrixND maxBound, boolean exist) { - Factor f = new Factor(name); - MatrixContinuousDomain domain = new MatrixContinuousDomain(); - domain.setMinBound(minBound); - domain.setMaxBound(maxBound); - f.setComment(comment); - f.setDomain(domain); - f.setPath(path); - if (exist) { - removeFactor(path); - } - addFactor(f); - } - /* ************ * General @@ -1076,7 +1011,7 @@ if ("".equals(fullSimulationId) || SimulationStorage.localyExists(fullSimulationId) || SimulationService.getService().exists(fullSimulationId)) { - ErrorHelper.showErrorDialog(_("isisfish.simulator.simulaction.badid", + ErrorHelper.showErrorDialog(t("isisfish.simulator.simulaction.badid", fullSimulationId), null); } else { SimulationService.getService().submit(fullSimulationId, param, @@ -1086,7 +1021,7 @@ if (log.isErrorEnabled()) { log.error("Can't start simulation", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.simulation.launchsimulation"), eee); + ErrorHelper.showErrorDialog(t("isisfish.error.simulation.launchsimulation"), eee); } } @@ -1119,7 +1054,7 @@ if ("".equals(fullSimulationId) || SimulationStorage.localyExists(fullSimulationId) || SimulationService.getService().exists(fullSimulationId)) { - ErrorHelper.showErrorDialog(_("isisfish.simulator.simulaction.badid", + ErrorHelper.showErrorDialog(t("isisfish.simulator.simulaction.badid", fullSimulationId), null); } else { DesignPlan designPlan = new DesignPlan(); @@ -1131,7 +1066,7 @@ if (log.isErrorEnabled()) { log.error("Can't start simulation", eee); } - ErrorHelper.showErrorDialog(_("isisfish.error.simulation.launchsimulation"), eee); + ErrorHelper.showErrorDialog(t("isisfish.error.simulation.launchsimulation"), eee); } } @@ -1267,7 +1202,7 @@ } paramsUI.getPopulationEffectivesTabbedPane().add(matrixPanelComponent, - _("isisfish.params.populationEffectives", selectedPopulation.getName())); + t("isisfish.params.populationEffectives", selectedPopulation.getName())); } layout.show(paramsUI.getPopulationEffectivesPanel(), "specific"); @@ -1299,9 +1234,9 @@ String factorPath = "parameters.rules"; selectedFactor = getFactor(factorPath); if (selectedFactor == null) { - selectedFactor = new Factor(_("isisfish.sensitivity.rulesfactorname")); + selectedFactor = new Factor(t("isisfish.sensitivity.rulesfactorname")); selectedFactor.setPath(factorPath); - selectedFactor.setDomain(new RuleDiscreteDomain()); + //selectedFactor.setDomain(new RuleDiscreteDomain()); } } @@ -1311,19 +1246,22 @@ String factorPath = "parameters.population." + population.getName() + ".number"; selectedFactor = getFactor(factorPath); if (selectedFactor == null) { - selectedFactor = new Factor(_("isisfish.sensitivity.populationfactorname", population.getName())); + selectedFactor = new Factor(t("isisfish.sensitivity.populationfactorname", population.getName())); selectedFactor.setPath(factorPath); - MatrixContinuousDomain factorDomain = new MatrixContinuousDomain(); - MatrixND populationEffectives = getSimulationParameter().getNumberOf(population); + //MatrixND populationEffectives = getSimulationParameter().getNumberOf(population); + /*MatrixContinuousDomain factorDomain = new MatrixContinuousDomain(); factorDomain.setReferenceValue(populationEffectives.copy()); factorDomain.setCoefficient(0.0); - selectedFactor.setDomain(factorDomain); + ContinuousDomain domain = new ContinuousDomain(Distribution.QUNIFPC); + domain.addDistributionParam(Distribution.QUNIFPC.getDistibutionParams()[0].getName(), populationEffectives.copy()); + domain.addDistributionParam(Distribution.QUNIFPC.getDistibutionParams()[1].getName(), 0.0d); + selectedFactor.setDomain(domain);*/ } } if (selectedFactor != null) { FactorWizardUI wizard = new FactorWizardUI(paramsUI); - SensitivityInputHandler handler = wizard.getHandler(); + SensitivityWizardHandler handler = wizard.getHandler(); handler.initExistingFactor(wizard, selectedFactor); wizard.pack(); wizard.setLocationRelativeTo(paramsUI); @@ -1342,22 +1280,18 @@ */ public void addRuleParameterFactor(RuleChooser ruleChooser, Rule rule, String paramName) { - // get sensitivity handler (this break package rules) - // but no other choice :( - SensitivityInputHandler handler = ruleChooser.getContextValue(SensitivityInputHandler.class); - // get index of rule in rule list // warning, factor path must always be cohérent // with rule list, if a rule is deleted, factor on it must // be deleted too, et next factor must be renamed int index = ruleChooser.getRulesList().indexOf(rule); String factorPath = "parameters.rule." + index + ".parameter." + paramName; - try { + //try { - // on a besoin de la valeur pour savoir s'il peut être continue + /*// on a besoin de la valeur pour savoir s'il peut être continue Object paramValue = RuleStorage.getParameterValue(rule, paramName); - if (!handler.canBeContinue(paramValue)) { + if (!SensitivityUtils.canBeContinue(paramValue)) { // dans le cas ou il ne peut pas être continue, on le gere // differement et on utilise sont type comme // valeur @@ -1368,15 +1302,27 @@ // init new factor wizard ui FactorWizardUI factorWizardUI = new FactorWizardUI(ruleChooser); - factorWizardUI.getFactorNameField().setText(_("isisfish.sensitivity.ruleparameterfactorname", + factorWizardUI.getFactorNameField().setText(t("isisfish.sensitivity.ruleparameterfactorname", rule.getClass().getSimpleName(), paramName)); factorWizardUI.setFactorPath(factorPath); + SensitivityWizardHandler handler = factorWizardUI.getHandler(); handler.initNewFactorWithValue(factorWizardUI, paramValue); factorWizardUI.pack(); factorWizardUI.setLocationRelativeTo(ruleChooser); + factorWizardUI.setVisible(true);*/ + + Factor factor = new Factor(t("isisfish.sensitivity.ruleparameterfactorname", + rule.getClass().getSimpleName(), paramName)); + factor.setPath(factorPath); + FactorWizardUI factorWizardUI = new FactorWizardUI(ruleChooser); + SensitivityWizardHandler handler = factorWizardUI.getHandler(); + handler.initExistingFactor(factorWizardUI, factor); + factorWizardUI.pack(); + factorWizardUI.setLocationRelativeTo(ruleChooser); factorWizardUI.setVisible(true); - } catch (IsisFishException ex) { + + /*} catch (IsisFishException ex) { throw new IsisFishRuntimeException("Can't add factor on rule", ex); - } + }*/ } } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -30,9 +30,11 @@ paramsUI.refresh(); preScriptUI.refresh(); sensUI.refresh(); + optimizationUI.refresh(); exportUI.refresh(); resultChoiceUI.refresh(); advancedParamsUI.refresh(); + optimizationUI.refresh(); } /** @@ -40,7 +42,7 @@ */ @Override protected void regionStorageChanged() { - + optimizationUI.regionStorageChanged(); } @Override @@ -63,6 +65,14 @@ bodyTabbedPane.setSelectedIndex(2); } } + + @Override + public void setEnabledOptimizationTab(boolean selected) { + bodyTabbedPane.setEnabledAt(3, selected); + if (selected) { + bodyTabbedPane.setSelectedIndex(3); + } + } ]]></script> <JTabbedPane id="bodyTabbedPane"> <tab title='isisfish.params.title'> @@ -74,6 +84,9 @@ <tab title='isisfish.sens.title' enabled='false'> <SensUI id="sensUI" constructorParams='this' /> </tab> + <tab title='isisfish.optimization.title' enabled='false'> + <OptimizationUI id="optimizationUI" constructorParams='this' /> + </tab> <tab title='isisfish.export.title'> <ExportUI id="exportUI" constructorParams='this' /> </tab> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/filter/SimulationFilterDialog.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/filter/SimulationFilterDialog.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/filter/SimulationFilterDialog.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -66,7 +66,6 @@ // ----------------- Add this code since jaxx compilator don't generate // some code for binding, bug ? TODO Fix me - @SuppressWarnings({"unchecked"}) public void applyDataBinding(String $binding) { if ($binding.equals("reset.enabled")) { if (comboResult != null) { @@ -85,7 +84,6 @@ } else super.removeDataBinding($binding); } - @SuppressWarnings({"unchecked"}) public void processDataBinding(String $dest, boolean $force) { if (!$dest.equals("reset.enabled")) { super.processDataBinding($dest, $force); @@ -103,7 +101,6 @@ private java.beans.PropertyChangeListener $DataSource410 = new jaxx.runtime.DataBindingListener(this, "reset.enabled"); - @SuppressWarnings({"UnusedDeclaration"}) public void $pr$u10(java.awt.event.ItemEvent event) { $DataSource410.propertyChange(null); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/filter/SimulationFilterPanelUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/filter/SimulationFilterPanelUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/filter/SimulationFilterPanelUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -38,8 +38,6 @@ } /** * push param's ui value to model - * - * @throws Exception */ public synchronized void uiToModel() { extractTextFieldParam(SimulationMeta.simulationName.name()); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/filter/SimulationFilterUtil.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/filter/SimulationFilterUtil.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/filter/SimulationFilterUtil.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -29,7 +29,7 @@ import fr.ifremer.isisfish.ui.widget.filter.FilterModel; import fr.ifremer.isisfish.ui.widget.filter.FilterParamModel; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -43,7 +43,7 @@ import java.util.TreeMap; /** - * This class offers methods to select or filter simulation name via an ui + * This class offers methods to select or filter simulation name via an ui. * * @see #selectSimulation(List) * @see #selectSimulation(FilterModel) @@ -55,14 +55,14 @@ static private Log log = LogFactory.getLog(SimulationFilterUtil.class); /** - * Open the filter simulation filter dialog using list of simualtion names - * to create FilterModel, and waits for user to select a simualtion in a non + * Open the filter simulation filter dialog using list of simulation names + * to create FilterModel, and waits for user to select a simulation in a non * empty filter result. - * <p/> + * * If user cancels, it returns <code>null</code> * * @param names the list of simulation names to used - * @return name of the simulation choosed by user or null if it cancel + * @return name of the simulation chosen by user or null if it cancel * operation * @throws java.text.ParseException if problem while init dialogModel * @throws java.io.IOException todo @@ -80,11 +80,11 @@ /** * Open the filter simulation filter dialog using directly a given - * FilterModel, and waits for user to select a simualtion in a non + * FilterModel, and waits for user to select a simulation in a non * empty filter result. * * @param model model to used - * @return name of the simulation choosed by user or null if it cancel + * @return name of the simulation chosen by user or null if it cancel * operation * @throws java.text.ParseException if problem while init dialogModel * @throws java.io.IOException todo @@ -97,7 +97,7 @@ return null; } SimulationFilterDialog ui = new SimulationFilterDialog(model, - _("isisfish.filter.select.simulation"), _("isisfish.filter.select")); + t("isisfish.filter.select.simulation"), t("isisfish.filter.select")); log.info("ui used " + ui.getClass()); // obtain exactly one simulation name or null if none taken @@ -110,7 +110,7 @@ * Open the filter simulation dialog and waits for user to accept a * non empty filter result. * It used a list of simulation names to create FilterModel. - * <p/> + * <p> * If user cancels, it returns an empty list. * * @param names the list of simulation names to used @@ -132,7 +132,7 @@ * Open the filter simulation dialog and waits for user to accept a * non empty filter result. * It used directly the given FilterModel. - * <p/> + * <p> * If user cancels, it returns the previous result list. * * @param model filterModel to use @@ -149,7 +149,7 @@ // keep old result list List<SimulationProperties> oldResult = new ArrayList<SimulationProperties>(model.getFiltered()); - SimulationFilterDialog ui = new SimulationFilterDialog(model,_("isisfish.filter.simulation"),_("isisfish.filter.apply")); + SimulationFilterDialog ui = new SimulationFilterDialog(model,t("isisfish.filter.simulation"),t("isisfish.filter.apply")); log.info("ui used " + ui.getClass()); // obtain list of filtered simulation names Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/util/ErrorHelper.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/util/ErrorHelper.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/util/ErrorHelper.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.util; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.Component; import java.io.PrintWriter; @@ -68,8 +68,8 @@ public static void showErrorDialog(Component parent, String message, Throwable cause) { JXErrorPane pane = new JXErrorPane(); - ErrorInfo info = new ErrorInfo(_("isisfish.error.errorpane.title"), - _("isisfish.error.errorpane.htmlmessage", message), null, null, + ErrorInfo info = new ErrorInfo(t("isisfish.error.errorpane.title"), + t("isisfish.error.errorpane.htmlmessage", message), null, null, cause, null, null); pane.setErrorInfo(info); if (cause != null) { Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/util/IsisActionWithBackup.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/util/IsisActionWithBackup.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/util/IsisActionWithBackup.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -66,7 +66,7 @@ /** * obtain the list of relative path to {@link #root} directory needed - * to be backuped in {@link #backupRoot} directory + * to be backuped in {@code #backupRoot} directory * * @return the list of relative path to files to backup */ Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/util/JaxxUtil.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/util/JaxxUtil.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/util/JaxxUtil.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -34,7 +34,6 @@ /** some util generic algorithm for jaxx objects */ public class JaxxUtil { - @SuppressWarnings({"unchecked"}) public static void doReset(Map<String, ?> $objectMap) { if ($objectMap == null) return; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/vcs/VCSConfigUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/vcs/VCSConfigUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/vcs/VCSConfigUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -24,13 +24,10 @@ --> <JDialog> <import> + static org.nuiton.i18n.I18n.t javax.swing.text.html.HTMLEditorKit; - javax.swing.text.html.HTMLDocument; javax.swing.event.HyperlinkListener; - javax.swing.text.html.HTMLFrameHyperlinkEvent; javax.swing.event.HyperlinkEvent; - java.io.PrintWriter; - java.io.StringWriter; java.net.URL; javax.swing.JComponent java.awt.Color @@ -80,9 +77,9 @@ StringBuilder builder = new StringBuilder(); builder.append("<a href='").append(DOC_URL).append("'>"); - builder.append(_("isisfish.vcs.howto.save.key")).append("</a><br/>"); + builder.append(t("isisfish.vcs.howto.save.key")).append("</a><br/>"); builder.append("<a href='").append(REGISTER_KEY_URL).append("'>"); - builder.append(_("isisfish.vcs.save.key")).append("</a>"); + builder.append(t("isisfish.vcs.save.key")).append("</a>"); helpEditor.setEditorKit(new HTMLEditorKit()); helpEditor.setText(builder.toString()); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/vcs/VCSGenerateSshKeyUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/vcs/VCSGenerateSshKeyUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/vcs/VCSGenerateSshKeyUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -26,9 +26,7 @@ <import> com.jcraft.jsch.JSch; com.jcraft.jsch.KeyPair; - org.nuiton.util.FileUtil; java.io.File; - java.io.IOException; java.util.ArrayList; java.util.Arrays; java.util.HashMap; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/vcs/VCSPassPhraseUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/vcs/VCSPassPhraseUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/vcs/VCSPassPhraseUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -24,6 +24,7 @@ --> <JDialog title='isisfish.vcs.ask.passphrase.title' modal='true'> <import> + static org.nuiton.i18n.I18n.t java.io.BufferedReader java.io.InputStreamReader java.io.IOException Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/DummyLayerUI.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/DummyLayerUI.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/DummyLayerUI.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/DummyLayerUI.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,64 @@ +/* + * #%L + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2013 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ +package fr.ifremer.isisfish.ui.widget; + +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics2D; + +import javax.swing.JComponent; + +import org.jdesktop.jxlayer.JXLayer; +import org.jdesktop.jxlayer.plaf.AbstractLayerUI; + +public class DummyLayerUI extends AbstractLayerUI<JComponent> { + + /** serialVersionUID. */ + private static final long serialVersionUID = 309245880711380974L; + + @Override + protected void paintLayer(Graphics2D g2, JXLayer<? extends JComponent> l) { + super.paintLayer(g2, l); + + // position + //g2.translate(-35, 90); // top left + g2.translate(l.getBounds().getMaxX() - 160, l.getBounds().getMaxY()); // bottom right + + // yellow backgroung + g2.rotate(Math.PI * -42 / 180); + g2.setColor(Color.YELLOW); + g2.fillRect(10, 10, 200, 30); + + // text + g2.translate(70, 15); + g2.setFont(new Font("Dialog", Font.BOLD, 16)); + g2.setColor(Color.BLACK); + g2.drawString("Maquette",10,10); + + // for test only + g2.translate(-3, 10); + g2.setFont(new Font("Dialog", Font.ITALIC, 10)); + g2.setColor(Color.BLACK); + g2.drawString("(non fonctionnelle)",10,10); + } +} Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/FilterableComboBox.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/FilterableComboBox.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/FilterableComboBox.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -23,7 +23,7 @@ package fr.ifremer.isisfish.ui.widget; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.BorderLayout; import java.awt.Dimension; @@ -57,14 +57,14 @@ * Last update : $Date$ * By : $Author$ */ -public class FilterableComboBox extends JPanel implements ListDataListener { +public class FilterableComboBox<T> extends JPanel implements ListDataListener { private static Log log = LogFactory.getLog(FilterableComboBox.class); /** serialVersionUID. */ private static final long serialVersionUID = -6669320998140538372L; - protected JComboBox dataBox; + protected JComboBox<T> dataBox; protected JTextField filterField; protected JButton resetButton; @@ -79,28 +79,28 @@ buildLayout(); } - public FilterableComboBox(ComboBoxModel model) { + public FilterableComboBox(ComboBoxModel<T> model) { this(); setModel(model); } - class FilterComboBoxModel extends AbstractListModel implements ComboBoxModel { + class FilterComboBoxModel extends AbstractListModel<T> implements ComboBoxModel<T> { /** serialVersionUID. */ private static final long serialVersionUID = 6256289874593024153L; - protected ComboBoxModel model; + protected ComboBoxModel<T> model; protected List<Integer> realIndexes = new ArrayList<Integer>(); protected Object selectedItem; - public FilterComboBoxModel(ComboBoxModel model) { + public FilterComboBoxModel(ComboBoxModel<T> model) { this.model = model; fireDataChanged(); } - public ComboBoxModel getModel() { + public ComboBoxModel<T> getModel() { return model; } @@ -111,9 +111,9 @@ } @Override - public Object getElementAt(int index) { + public T getElementAt(int index) { int realIndex = realIndexes.get(index); - Object element = model.getElementAt(realIndex); + T element = model.getElementAt(realIndex); return element; } @@ -199,9 +199,9 @@ * Build layout. */ private void buildLayout() { - dataBox = new JComboBox(); + dataBox = new JComboBox<T>(); dataBox.addActionListener(new ComboBoxActionListener()); - filterField = new JXTextField(_("isisfish.common.filter")); + filterField = new JXTextField(t("isisfish.common.filter")); // fix size filterField.setPreferredSize(new Dimension(200, 0)); resetButton = new JButton(Resource.getIcon("/icons/cancel.png")); @@ -224,12 +224,12 @@ * * @param model model to set */ - public void setModel(ComboBoxModel model) { + public void setModel(ComboBoxModel<T> model) { model.addListDataListener(this); dataBox.setModel(new FilterComboBoxModel(model)); } - public ComboBoxModel getModel() { + public ComboBoxModel<T> getModel() { return ((FilterComboBoxModel)dataBox.getModel()).getModel(); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/Interval.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/Interval.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/Interval.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -37,7 +37,7 @@ * * Created: Wed Oct 4 2000 * - * @author POUSSIN Benjamin <bpoussin@free.fr> Copyright COGITEC + * @author POUSSIN Benjamin <bpoussin@free.fr> Copyright COGITEC * @version $Revision$ * * Mise a jour: $Date$ Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/EquationTableEditor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/EquationTableEditor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/EquationTableEditor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -51,7 +51,7 @@ * * Created: 23 mars 2004 * - * @author Benjamin Poussin <poussin@codelutin.com> + * @author Benjamin Poussin <poussin@codelutin.com> * @version $Revision$ * * Mise a jour: $Date$ Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditor.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditor.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditor.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,40 @@ +package fr.ifremer.isisfish.ui.widget.editor; + +import javax.swing.CellEditor; +import javax.swing.JButton; + +import fr.ifremer.isisfish.simulator.sensitivity.Factor; +import fr.ifremer.isisfish.ui.widget.editor.FactorEditorListener.FactorCallback; + +public class FactorEditor extends JButton implements FactorCallback { + + /** Cell editor. */ + protected CellEditor cellEditor; + + /** Component factor value. */ + protected Factor factor; + + /** serialVersionUID. */ + private static final long serialVersionUID = 4070032587998279914L; + + public FactorEditor(CellEditor cellEditor, Factor factor) { + this.cellEditor = cellEditor; + this.factor = factor; + + if (factor != null) { + setText(factor.toString()); + } else { + setText("Edition du facteur"); + } + } + + public Factor getFactor() { + return factor; + } + + @Override + public void setSelectedFactor(Factor factor) { + this.factor = factor; + cellEditor.stopCellEditing(); + } +} Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditorListener.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditorListener.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditorListener.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditorListener.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,27 @@ +package fr.ifremer.isisfish.ui.widget.editor; + +import java.awt.event.ActionListener; + +import fr.ifremer.isisfish.simulator.sensitivity.Factor; + +/** + * Action listener that call factor callback when action is complete. + * + * @author Eric Chatellier + */ +public abstract class FactorEditorListener implements ActionListener { + + public interface FactorCallback { + public void setSelectedFactor(Factor factor); + } + + public FactorCallback callback; + + public void setFactorCallback(FactorCallback callback) { + this.callback = callback; + } + + public void setSelectedFactor(Factor factor) { + callback.setSelectedFactor(factor); + } +} Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/MonthComponent.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/MonthComponent.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/MonthComponent.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -37,7 +37,7 @@ * Last update : $Date$ * By : $Author$ */ -public class MonthComponent extends JComboBox { +public class MonthComponent extends JComboBox<MonthEnum> { /** serialVersionUID. */ private static final long serialVersionUID = 2992441627176713132L; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ParameterTableCellEditor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ParameterTableCellEditor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ParameterTableCellEditor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -34,12 +34,12 @@ import java.util.List; import javax.swing.AbstractCellEditor; +import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.TableCellEditor; - import org.apache.commons.beanutils.ConvertUtilsBean; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -47,8 +47,10 @@ import org.nuiton.topia.persistence.TopiaEntity; import fr.ifremer.isisfish.datastore.RegionStorage; +import fr.ifremer.isisfish.simulator.sensitivity.Factor; +import fr.ifremer.isisfish.types.Month; import fr.ifremer.isisfish.types.TimeStep; -import fr.ifremer.isisfish.types.Month; +import fr.ifremer.isisfish.ui.widget.editor.FactorEditorListener.FactorCallback; import fr.ifremer.isisfish.util.ConverterUtil; /** @@ -77,6 +79,8 @@ protected Class<?> type = null; + protected FactorEditorListener factorActionListener; + private static enum TypeClassMapping { /** for simple int. */ Int(int.class, Integer.class), @@ -90,6 +94,8 @@ Double(double.class, Double.class), /** for a simple boolean. */ Boolean(boolean.class, Boolean.class), + /** for a Factor. */ + Factor(Factor.class), /** for a file location. */ File(java.io.File.class), /** for a simple String. */ @@ -136,6 +142,10 @@ } } + public void setFactorActionListener(FactorEditorListener factorActionListener) { + this.factorActionListener = factorActionListener; + } + public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { @@ -190,14 +200,22 @@ case Mounth: editor = MonthComponent.createMounthCombo(((Month) value).getMonthNumber()); break; + case Factor: + editor = new FactorEditor(this, (Factor)value); + if (factorActionListener == null) { + throw new RuntimeException("Missing factorActionListener call setFactorActionListener()"); + } + factorActionListener.setFactorCallback((FactorCallback)editor); + ((JButton)editor).addActionListener(factorActionListener); + break; case File: // break; default: - editor = new JTextField(value.toString()); + editor = new JTextField(String.valueOf(value)); } if (editor != null) { if (JComboBox.class.isInstance(editor)) { - ((JComboBox) editor).addActionListener(getComboListener()); + ((JComboBox) editor).addActionListener(getStopEditingListener()); } else if (JTextField.class.isInstance(editor)) { ((JTextField) editor).addFocusListener(new FocusAdapter() { @Override @@ -211,10 +229,10 @@ } else if (StepComponent.class.isInstance(editor)) { StepComponent date = ((StepComponent) editor); if (date.getMounthCombo() != null) { - date.getMounthCombo().addActionListener(getComboListener()); + date.getMounthCombo().addActionListener(getStopEditingListener()); } if (date.getYearCombo() != null) { - date.getYearCombo().addActionListener(getComboListener()); + date.getYearCombo().addActionListener(getStopEditingListener()); } } } @@ -241,7 +259,7 @@ return value.getClass(); } - protected ActionListener getComboListener() { + protected ActionListener getStopEditingListener() { return new ActionListener() { @Override @@ -261,11 +279,10 @@ TypeClassMapping mapping = TypeClassMapping.getMapping(type); switch (mapping) { case Topia: - result = getComboBoxValue(editor); + result = ((JComboBox) editor).getSelectedItem(); break; case Boolean: - result = getComboBoxValue(editor); - // TODO test + result = ((JComboBox) editor).getSelectedItem(); break; case Mounth: result = new Month(((MonthComponent)editor).getSelectedValue()); @@ -273,6 +290,9 @@ case TimeStep: result = new TimeStep(((StepComponent) editor).getSelectedValue()); break; + case Factor: + result = ((FactorEditor)editor).getFactor(); + break; case File: //TODO // result = getTextFieldValue(editor);break; @@ -299,16 +319,4 @@ return result; } - - protected Object getTextFieldValue(Component editor) { - return ((JTextField) editor).getText(); - } - - protected Object getComboBoxValue(Component editor) { - return ((JComboBox) editor).getSelectedItem(); - } - - protected int getComboBoxIndex(Component editor) { - return (((JComboBox) editor)).getSelectedIndex(); - } } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ScriptParameterDialog.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ScriptParameterDialog.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ScriptParameterDialog.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2011 Ifremer, Code Lutin, Chatellier Eric + Copyright (C) 2011 - 2012 Ifremer, Code Lutin, 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 @@ -39,7 +39,7 @@ * Test if isis configuration allow auto configuration, and display * configuration frame (with only table model). * - * @param parent parent component + * @param context parent component * @param script script to configure * @return configured script, or {@code null} if user cancel configuration */ @@ -84,10 +84,10 @@ </row> <row> <cell anchor="east" weightx='1.0'> - <JButton text="isisfish.common.ok" onActionPerformed="{okAction = true; dispose();}" /> + <JButton text="isisfish.common.ok" onActionPerformed="okAction = true; dispose();" /> </cell> <cell anchor="west" weightx='1.0'> - <JButton text="isisfish.common.cancel" onActionPerformed="{okAction = false; dispose();}" /> + <JButton text="isisfish.common.cancel" onActionPerformed="okAction = false; dispose();" /> </cell> </row> </Table> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/StepComponent.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/StepComponent.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/StepComponent.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -24,12 +24,12 @@ package fr.ifremer.isisfish.ui.widget.editor; import java.awt.GridLayout; -import java.util.ArrayList; -import java.util.List; import javax.swing.JComboBox; import javax.swing.JPanel; +import org.nuiton.util.MonthEnum; + /** * Component used to edit TimeStep. * @@ -43,9 +43,9 @@ private static final long serialVersionUID = -6694461572642939712L; - protected JComboBox mounth; + protected JComboBox<MonthEnum> mounth; - protected JComboBox year; + protected JComboBox<Integer> year; public StepComponent(int mounth, int year) { super(new GridLayout(0, 2)); @@ -57,11 +57,11 @@ this.add(this.year); } - public JComboBox getYearCombo() { + public JComboBox<Integer> getYearCombo() { return year; } - public JComboBox getMounthCombo() { + public JComboBox<MonthEnum> getMounthCombo() { return mounth; } @@ -84,13 +84,11 @@ return selectedMounth + selectedYear * 12; } - public static JComboBox createYearCombo(int nb, int selectedYear) { - List<Integer> listI = new ArrayList<Integer>(); + public static JComboBox<Integer> createYearCombo(int nb, int selectedYear) { + JComboBox<Integer> year = new JComboBox<Integer>(); for (int i = 0; i < nb; i++) { - listI.add(i); + year.addItem(i); } - JComboBox year = new JComboBox(listI.toArray()); - listI.clear(); year.setSelectedIndex(selectedYear); return year; } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/AcceptorFactory.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/AcceptorFactory.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/AcceptorFactory.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -34,7 +34,7 @@ /** * This class is an Acceptor factory. - * <p/> + * <p> * For simple {@link Acceptor} we use a cache to use an unique instance. * * @author chemit Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/CompositeFilterAcceptor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/CompositeFilterAcceptor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/CompositeFilterAcceptor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,14 +25,11 @@ package fr.ifremer.isisfish.ui.widget.filter; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; /** - * this class is a concrete implementation of {@link FilterAcceptor} + * This class is a concrete implementation of {@link FilterAcceptor} * with an internal {@link Acceptor} (delegate Acceptor operations), - * and an internal {@link ValueGetter} (delegate ValueGetter operations) - * <p/> + * and an internal {@link ValueGetter} (delegate ValueGetter operations). * * @author chemit * @see Acceptor @@ -41,8 +38,6 @@ */ public class CompositeFilterAcceptor<M, T> implements FilterAcceptor<M, T> { - static private Log log = LogFactory.getLog(CompositeFilterAcceptor.class); - /** delegate Acceptor */ protected Acceptor<T> acceptor; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterAcceptor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterAcceptor.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterAcceptor.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -27,8 +27,7 @@ /** * Class representing an Acceptor and ValueGetter for object of - * type <code>M</code> and parameter of type <code>T</code> - * <p/> + * type <code>M</code> and parameter of type <code>T</code>. * * @author chemit * @see Acceptor Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterDialog.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterDialog.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterDialog.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -30,22 +30,22 @@ /** * Contrat à respecter pour qu'un dialogue puisse bénéficier du mécanisme de * filtre. - * <p/> * * Cette méthode est invoquée lors d'un appel à {@link #doFilter()} ou * {@link #doCheck()}. - * <p/> + * <p> * La méthode {@link #doReset()} permet de réinitialiser le dialogModel * (et le dialogue) */ public interface FilterDialog<M, R> { /** - * launch filter proccess. - * <p/> + * launch filter process. + * * This operation acts in three step : - * <ul><li>clean model</li> - * <ul><li>push ui values to model </li> + * <ul> + * <li>clean model</li> + * <li>push ui values to model </li> * <li> for all original items and only for detected as usable params * try to accept item</li> * </ul> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterDialogUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterDialogUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterDialogUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -24,14 +24,13 @@ --> <JDialog> <import> + static org.nuiton.i18n.I18n.t jaxx.runtime.JAXXObject javax.swing.text.html.HTMLEditorKit javax.swing.text.html.HTMLDocument javax.swing.event.HyperlinkListener javax.swing.text.html.HTMLFrameHyperlinkEvent javax.swing.event.HyperlinkEvent - java.io.PrintWriter - java.io.StringWriter fr.ifremer.isisfish.ui.widget.filter.FilterModel fr.ifremer.isisfish.ui.widget.filter.FilterParamModel @@ -50,17 +49,15 @@ public FilterParamModel getParamModel(String paramKey) { return model.getParamModel(paramKey); } - @SuppressWarnings({"unchecked"}) + public java.util.List getOriginal() { return model.getOriginal(); } /** @return list of last filter list obtain */ - @SuppressWarnings({"unchecked"}) protected List getFilterResult() { // obtain list filtered return model.getFiltered(); } - @SuppressWarnings({"unchecked"}) public List obtainFilterResult() { // compact dialog setSize(getMinimumSize()); @@ -89,7 +86,6 @@ * * @see FilterModel#reset() */ - @SuppressWarnings({"unchecked"}) public void doReset() { content.doReset(); model.reset(); @@ -156,7 +152,7 @@ } protected void refreshResult() { if (model == null) return; - labelResult.setText(_("isisfish.filter.result.found", model.getNbResult(), model.getNbOriginal())); + labelResult.setText(t("isisfish.filter.result.found", model.getNbResult(), model.getNbOriginal())); if (getComboResult() != null) { if (modelResult == null) { Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterModel.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterModel.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -34,7 +34,7 @@ /** * This class represents a generic filter model. - * <p/> + * * It contains all data to be used for filter process. * * @author chemit @@ -52,7 +52,7 @@ /** list of param keys to be used */ protected List<String> paramKeys; - /** map -> paramKey to param models */ + /** map -> paramKey to param models */ protected Map<String, FilterParamModel<M, ?>> paramModels; /** * flag to says inclusive mode (need one param accept) Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterPanelUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterPanelUI.jaxx 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/filter/FilterPanelUI.jaxx 2014-04-17 16:48:13 UTC (rev 3969) @@ -43,8 +43,6 @@ /** * push param's ui value to model - * - * @throws Exception */ public void uiToModel() { // implements me... Modified: trunk/src/main/java/fr/ifremer/isisfish/util/ArgTypes.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/util/ArgTypes.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/util/ArgTypes.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -33,7 +33,7 @@ /** * Annotation utilisée pour specifier le type des parametres. * - * Pour etre plus explicit que "List" en renseignant "List<Zone>" par exemple. + * Pour etre plus explicit que "List" en renseignant "List<Zone>" par exemple. * * Doit pouvoir être remplacé par l'introspection java sans problème. * Modified: trunk/src/main/java/fr/ifremer/isisfish/util/CellPointcomparator.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/util/CellPointcomparator.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/util/CellPointcomparator.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -36,7 +36,7 @@ * * Created: 6 septembre 2005 00:57:33 CEST * - * @author Benjamin POUSSIN <poussin@codelutin.com> + * @author Benjamin POUSSIN <poussin@codelutin.com> * * @version $Revision$ * Modified: trunk/src/main/java/fr/ifremer/isisfish/util/CompileHelper.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/util/CompileHelper.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/util/CompileHelper.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2006 - 2012 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin, Chatellier Eric + * Copyright (C) 2006 - 2014 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin, 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 @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.util; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.io.PrintWriter; @@ -41,15 +41,14 @@ import javax.tools.JavaCompiler; import javax.tools.JavaFileObject; import javax.tools.StandardJavaFileManager; -import javax.tools.ToolProvider; +import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.eclipse.jdt.internal.compiler.tool.EclipseCompiler; import org.nuiton.util.FileUtil; -import com.sun.tools.javac.api.JavacTool; - import fr.ifremer.isisfish.IsisFish; import fr.ifremer.isisfish.datastore.CodeSourceStorage.Location; import fr.ifremer.isisfish.datastore.JavaSourceStorage; @@ -72,9 +71,6 @@ /** Logger for this class. */ private static final Log log = LogFactory.getLog(CompileHelper.class); - - /** CP detector proxy. */ - //protected static CodepageDetectorProxy detector; /** * Recherche tous les fichiers qui un source plus recent que la version compilé. @@ -87,7 +83,7 @@ List<File> result = new ArrayList<File>(); for (File src : srcDir.listFiles()) { File dest = new File(FileUtil.basename(src, ".java"), ".class"); - if (src.getName().endsWith(".java") && FileUtil.isNewer(src, dest)) { + if (src.getName().endsWith(".java") && FileUtils.isFileNewer(src, dest)) { result.add(src); } } @@ -106,7 +102,7 @@ ClassLoader cl = IsisFish.config.getScriptClassLoader(); result = cl.loadClass(fqn); } catch (ClassNotFoundException eee) { - log.info(_("isisfish.error.load.class", fqn), eee); + log.info(t("isisfish.error.load.class", fqn), eee); } return result; } @@ -120,7 +116,7 @@ result = clazz.newInstance(); } } catch (Exception eee) { - log.warn(_("isisfish.error.instanciate", fqn), eee); + log.warn(t("isisfish.error.instanciate", fqn), eee); } return result; } @@ -142,7 +138,7 @@ File src = source.getFile(); File dst = new File(destDir, source.getFQN().replace('.', File.separatorChar) + ".class"); - if (force || FileUtil.isNewer(src, dst)) { + if (force || !dst.exists() || FileUtils.isFileNewer(src, dst)) { return compile(source.getRoot(), src, destDir, out); } return 0; @@ -158,10 +154,12 @@ * @param out l'objet sur lequel on ecrit la sortie (erreur) de la * compilation * @return un nombre different de 0 s'il y a une erreur + * <ul> * <li> -1000 si l'exception vient de la recherche du compilateur par - * introspection - * <li> -10000 si une autre exception - * <li> sinon les valeurs retourné par le compilateur java + * introspection</li> + * <li> -10000 si une autre exception</li> + * <li> sinon les valeurs retourné par le compilateur java</li> + * </ul> */ public static int compile(File rootSrc, File src, File dest, PrintWriter out) { int result = compile(rootSrc, Collections.singletonList(src), dest, out); @@ -178,10 +176,12 @@ * @param out l'objet sur lequel on ecrit la sortie (erreur) de la * compilation * @return un nombre different de 0 s'il y a une erreur + * <ul> * <li> -1000 si l'exception vient de la recherche du compilateur par - * introspection - * <li> -10000 si une autre exception - * <li> sinon les valeurs retourné par le compilateur java + * introspection</li> + * <li> -10000 si une autre exception</li> + * <li> sinon les valeurs retourné par le compilateur java</li> + * </ul> */ public static int compile(File rootSrc, Collection<File> src, File dest, PrintWriter out) { @@ -220,14 +220,12 @@ int result = -1000; try { - // look for best available Java compiler (if none, use provided) - JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); - if (compiler == null) { - compiler = JavacTool.create(); - } + List<String> args = new ArrayList<String>(); - // Use system compiler - // JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + // use eclipse ecj compiler + JavaCompiler compiler = new EclipseCompiler(); + + // Get compilation units StandardJavaFileManager fileManager = compiler .getStandardFileManager(null, null, null); Iterable<? extends JavaFileObject> compilationUnits = fileManager @@ -235,10 +233,14 @@ // Options de compilations String classpathAsString = getClassPathAsString(classpath); - List<String> args = new ArrayList<String>(); + args.add("-source"); + args.add("1.7"); + args.add("-target"); + args.add("1.7"); args.add("-g"); // Show a description of each use or override of a deprecated member or class. - args.add("-deprecation"); + args.add("-warn:deprecation"); // non standard option for ecj + //args.add("-deprecation"); // standard option args.add("-encoding"); args.add("utf-8"); args.add("-classpath"); @@ -267,8 +269,8 @@ * * Add : * <ul> - * <li>System.getProperty("java.class.path") - * <li>All first jar dependency (META-INF/MANIFEST.MF) + * <li>System.getProperty("java.class.path")</li> + * <li>All first jar dependency (META-INF/MANIFEST.MF)</li> * </ul> * @param classpath initial classpath * @return classpath as string @@ -333,7 +335,7 @@ String content = "<p>Equation : " + createHREF(javaInterface.getName(), category) + " - " + name + "</p>"; - content += "<h3>" + _("isisfish.editor.parametersnameandtypes") + " :</h3>"; + content += "<h3>" + t("isisfish.editor.parametersnameandtypes") + " :</h3>"; Method[] methods = javaInterface.getDeclaredMethods(); Method interfaceMethod = methods[0]; Modified: trunk/src/main/java/fr/ifremer/isisfish/util/ConverterUtil.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/util/ConverterUtil.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/util/ConverterUtil.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -32,12 +32,10 @@ import org.nuiton.topia.TopiaContext; import org.nuiton.topia.persistence.TopiaEntity; -import fr.ifremer.isisfish.types.TimeStep; import fr.ifremer.isisfish.types.Month; import fr.ifremer.isisfish.types.RangeOfValues; +import fr.ifremer.isisfish.types.TimeStep; import fr.ifremer.isisfish.types.TimeUnit; -import java.util.Map; -import java.util.WeakHashMap; /** * ConverterUtil. Deleted: trunk/src/main/java/fr/ifremer/isisfish/util/Docable.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/util/Docable.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/util/Docable.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,54 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, 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 - * 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package fr.ifremer.isisfish.util; - -/** - * This is the contract to be realize by any class which wanted to have a @Doc support. - * - * @author chemit - * @see Doc - * @version $Revision$ - * - * Last update : $Date$ - * By : $Author$ - */ -public interface Docable { - - /** - * Field documentation (if any). - * - * @param fieldName name of the field to use - * @return the @Doc of the field, or null if none - */ - Doc getFieldDoc(String fieldName); - - /** - * Class documentation (if any). - * - * @return the description of the class, or null if none - */ - String getDescription(); -} Modified: trunk/src/main/java/fr/ifremer/isisfish/util/EvaluatorHelper.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/util/EvaluatorHelper.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/util/EvaluatorHelper.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.util; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.io.IOException; @@ -39,7 +39,6 @@ import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.util.FileUtil; import fr.ifremer.isisfish.IsisFish; import fr.ifremer.isisfish.IsisFishRuntimeException; @@ -47,6 +46,8 @@ import java.util.HashMap; import org.apache.commons.lang3.StringUtils; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Permet d'evaluer les equations ecritent en Java @@ -64,11 +65,19 @@ /** Logger for this class. */ private static Log log = LogFactory.getLog(EvaluatorHelper.class); + /** + * Regex to match import: + * - "^(import ...;)" for import at line beginning + * - ";(import ...;)" for multiple import on same line + */ + static protected Pattern grepImportPattern = Pattern.compile("(?:^\\s*|(?<=;)\\s*)(import[^;]+;)", Pattern.DOTALL + Pattern.MULTILINE); + private static final String HASH_CACHE_KEY = "__hashCache__"; protected static String getHashCache(File fileCheckSum) { String result = ""; + // FIXME echatellier c'est pas possible que cela renvoit null SimulationContext context = SimulationContext.get(); if (context == null) { // on est pas dans une simulation @@ -113,9 +122,8 @@ } } - protected static String normalizeClassName(String name) { - StringBuffer result = new StringBuffer(name); + StringBuilder result = new StringBuilder(name); for (int i=0; i<result.length(); i++) { char c = result.charAt(i); if (!Character.isJavaIdentifierPart(c)) { @@ -126,7 +134,7 @@ } /** - * Verifie si une equation est syntaxiquement correcte. + * Verifie si un script (prescript/equation) est syntaxiquement correct. * * @param javaInterface * @param script @@ -175,7 +183,7 @@ * @return la valeur retourné par la methode */ public static Object evaluate(String packageName, String className, - Class javaInterface, String script, Map<String, Object> args) { + Class javaInterface, String script, Object... args) { className = normalizeClassName(className); Object result = null; @@ -190,57 +198,48 @@ File fileRootSrc = IsisFish.config.getCompileDirectory(); File fileCheckSum = new File(fileRootSrc, packageName + File.separator + className + ".hashCode"); File fileSrc = new File(fileRootSrc, packageName + File.separator + className + ".java"); - File fileDest = new File(fileRootSrc, packageName + File.separator + className + ".class"); + //File fileDest = new File(fileRootSrc, packageName + File.separator + className + ".class"); - boolean checkSumEquals = false; - // if equation's Java file exists, check the checksum - if (fileSrc.exists() && fileCheckSum.exists()) { - String oldCheckSum = getHashCache(fileCheckSum); - String newCheckSum = Integer.toString(script.hashCode()); - checkSumEquals = newCheckSum.equals(oldCheckSum); - } + String oldCheckSum = getHashCache(fileCheckSum); + String newCheckSum = Integer.toString(script.hashCode()); + boolean checkSumEquals = newCheckSum.equals(oldCheckSum); // if Java file's checkSum is not equals to script's checkSum // generate new Java file if (!checkSumEquals) { + String content = generateContent(packageName, className, interfaceMethod, script); - try { // force writing to UTF-8 // fix compilation issue : unmappable characters - FileUtil.writeString(fileSrc, content, "utf-8"); + FileUtils.writeStringToFile(fileSrc, content, "utf-8"); setHashCache(fileCheckSum, Integer.toString(script.hashCode())); + setHashCache(fileCheckSum, Integer.toString(script.hashCode())); } catch (IOException zzz) { - throw new IsisFishRuntimeException(_("isisfish.error.save.script.compilation", fileSrc), zzz); + throw new IsisFishRuntimeException(t("isisfish.error.save.script.compilation", fileSrc), zzz); } - } - // if Java file is newer than class file, compile java file - if (FileUtil.isNewer(fileSrc, fileDest)) { - try { - // does'nt contains isisdatabase-3 directory - //int compileResult = CompileHelper.compile(fileRootSrc, fileSrc, fileRootSrc, null); - - List<File> classpath = new ArrayList<File>(); - classpath.add(fileRootSrc.getAbsoluteFile()); - classpath.add(IsisFish.config.getDatabaseDirectory().getAbsoluteFile()); - int compileResult = CompileHelper.compile(classpath, Collections.singletonList(fileSrc), fileRootSrc, null); - - if (compileResult != 0) { - throw new IsisFishRuntimeException(_("isisfish.error.compile.script", compileResult, fileSrc)); - } - } catch (Exception zzz) { - throw new IsisFishRuntimeException(_("isisfish.error.compile.script", fileSrc), zzz); - } + compile(fileRootSrc, fileSrc); } // try to load class try { ClassLoader cl = IsisFish.config.getScriptClassLoader(); - clazz = cl.loadClass(classname); - } catch (Exception zzz) { - throw new IsisFishRuntimeException(_("isisfish.error.load.class", classname), zzz); + clazz = cl.loadClass(classname); + } catch (Exception ex) { + + // force to compile it again; may happen if hashcode + // is correct, but .class file can't be loaded + compile(fileRootSrc, fileSrc); + + try { + // second load + ClassLoader cl = IsisFish.config.getScriptClassLoader(); + clazz = cl.loadClass(classname); + } catch (Exception ex2) { + throw new IsisFishRuntimeException(t("isisfish.error.compile.script", fileSrc), ex2); + } } result = invoke(clazz, interfaceMethod, args); @@ -248,29 +247,54 @@ return result; } + protected static void compile(File fileRootSrc, File fileSrc) { + try { + List<File> classpath = new ArrayList<File>(); + classpath.add(fileRootSrc.getAbsoluteFile()); + classpath.add(IsisFish.config.getDatabaseDirectory().getAbsoluteFile()); + int compileResult = CompileHelper.compile(classpath, Collections.singletonList(fileSrc), fileRootSrc, null); + + if (compileResult != 0) { + throw new IsisFishRuntimeException(t("isisfish.error.compile.script", compileResult, fileSrc)); + } + } catch (Exception zzz) { + throw new IsisFishRuntimeException(t("isisfish.error.compile.script", fileSrc), zzz); + } + } + /** - * Generate equation content. + * Generate script content. * - * Warning, content are always on a unique single line (without \n) for - * debuging purpose. + * Warning, content are always on a unique single line (without \n) for debugging purpose. * * @param packageName * @param className * @param interfaceMethod * @param script - * @return equation return + * @return script return (or null) */ protected static String generateContent(String packageName, String className, Method interfaceMethod, String script) { + + StringBuilder imports = new StringBuilder(); + StringBuilder code = new StringBuilder(); + + grepImport(script, imports, code); + String content = ""; if (packageName != null && !"".equals(packageName)) { content += "package " + packageName + ";"; } + + // add common used imports + content += "import java.util.*;"; + content += "import java.io.*;"; content += "import fr.ifremer.isisfish.entities.*;"; + content += "import fr.ifremer.isisfish.types.*;"; content += "import org.nuiton.math.matrix.*;"; - content += "import fr.ifremer.isisfish.types.*;"; - content += "import org.apache.commons.logging.Log;"; - content += "import org.apache.commons.logging.LogFactory;"; - content += "import java.util.*;"; + content += "import org.apache.commons.logging.*;"; + content += imports.toString(); + + // generate content (do not add \n here, this help debug) content += "public class " + className + " implements " + interfaceMethod.getDeclaringClass().getName() + " {"; content += "private static Log log = LogFactory.getLog(" + className + ".class);"; content += "public " + interfaceMethod.getReturnType().getName() + " " + interfaceMethod.getName() + "("; @@ -297,30 +321,49 @@ } } content += ") throws Exception {"; - content += script; + content += code.toString(); content += "\n}\n}\n"; return content; } - protected static Object invoke(Class clazz, Method interfaceMethod, Map<String, Object> args) { + /** + * looking for import in code. return all import as found in code in imports args + * all other code are put in others + * + * @param code + * @param imports + * @param others + */ + protected static void grepImport(String code, StringBuilder imports, StringBuilder others) { + Matcher matches = grepImportPattern.matcher(code); + int pos = 0; + while (matches.find()) { + int begin = matches.start(1); + int end = matches.end(1); + + others.append(code.substring(pos, begin)); + imports.append(code.substring(begin, end)); + pos = end; + + } + + others.append(code.substring(pos)); + } + + protected static Object invoke(Class clazz, Method interfaceMethod, Object... args) { + + Object result; try { Method method = clazz.getDeclaredMethod(interfaceMethod.getName(), interfaceMethod.getParameterTypes()); - - List<Object> params = new ArrayList<Object>(); - for (String name : interfaceMethod.getAnnotation(Args.class).value()) { - Object arg = args.get(name); - params.add(arg); - } + Object eq = clazz.newInstance(); - Object result; - result = method.invoke(eq, params.toArray()); - return result; + result = method.invoke(eq, args); + } catch (Exception eee) { - throw new IsisFishRuntimeException(_("isisfish.error.invoke.method", interfaceMethod, clazz.getName()), eee); + throw new IsisFishRuntimeException(t("isisfish.error.invoke.method", interfaceMethod, clazz.getName()), eee); } + return result; } } - - Modified: trunk/src/main/java/fr/ifremer/isisfish/util/IsisCache.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/util/IsisCache.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/util/IsisCache.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -24,14 +24,16 @@ */ package fr.ifremer.isisfish.util; -import fr.ifremer.isisfish.simulator.SimulationContext; -import fr.ifremer.isisfish.types.TimeStep; import java.lang.reflect.Method; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.codehaus.aspectwerkz.joinpoint.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; import org.nuiton.topia.persistence.TopiaEntity; +import fr.ifremer.isisfish.simulator.SimulationContext; +import fr.ifremer.isisfish.types.TimeStep; + /** * IsisCacheOnReferenceMap utilise pour mettre les resultats de methode durant * la simulation pour minimiser les appels @@ -74,7 +76,7 @@ /** * Return trace object from context. - * <p> + * * @return trace object from context */ protected Trace getTrace() { @@ -84,11 +86,8 @@ } /** - * Recupere pour un pas de temps donnes une valeur calcule pour une cle - * <p> - * @param step le pas de temps pour lequel on souhaite ajouter (ou - * null) - * @param key la cle de storage + * Recupere pour un pas de temps donnes une valeur calcule pour une cle. + * * @param defaultValue la valeur par defaut a retourner si elle n'est pas en * cache si defaultValue est une JoinPoint alors un * proceed est appele dessus et le resultat de l'appel @@ -167,16 +166,15 @@ /** * On fait l'appel reel dans une autre methode pour pouvoir le savoir dans - * les traces - * <p> - * @param jp + * les traces. + * * @return ? * @throws Throwable */ protected Object realCall(Object defaultValue) throws Throwable { Object result = defaultValue; - if (defaultValue instanceof JoinPoint) { - result = ((JoinPoint) defaultValue).proceed(); + if (defaultValue instanceof ProceedingJoinPoint) { + result = ((ProceedingJoinPoint)defaultValue).proceed(); } return result; } Modified: trunk/src/main/java/fr/ifremer/isisfish/util/IsisCacheBackendOnReferenceMap.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/util/IsisCacheBackendOnReferenceMap.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/util/IsisCacheBackendOnReferenceMap.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -34,15 +34,15 @@ /** * IsisCacheBackendOnReferenceMap utilise pour mettre les resultats de methode durant la simulation - pour minimiser les appels - - Created: 25 août 06 22:42:47 + * pour minimiser les appels * + * Created: 25 août 06 22:42:47 + * * @author poussin * @version $Revision$ - - Last update: $Date$ - by : $Author$ + * + * Last update: $Date$ + * by : $Author$ */ public class IsisCacheBackendOnReferenceMap implements IsisCacheBackend { @@ -64,7 +64,7 @@ static final private Object NULL = new Object(); /** - * map<TimeStep, Map<Key, Value>> + * map<TimeStep, Map<Key, Value>> * TimeStep peut etre null via l'objet NULL * Key est la cle calcule par computeKey * Value est la valeur du cache @@ -129,7 +129,7 @@ } /** - * remove all values in cache for the specied TimeStep + * remove all values in cache for the specified TimeStep */ @Override public void removeStep(Object o) { Modified: trunk/src/main/java/fr/ifremer/isisfish/util/JavadocHelper.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/util/JavadocHelper.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/util/JavadocHelper.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2010 Ifremer, Code Lutin, Chatellier Eric + * Copyright (C) 2009 - 2014 Ifremer, Code Lutin, 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 @@ -25,21 +25,25 @@ package fr.ifremer.isisfish.util; +import static org.nuiton.i18n.I18n.t; + import java.io.File; import java.io.FileFilter; import java.io.PrintWriter; +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.reflect.MethodUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.FileUtil; -import com.sun.tools.doclets.standard.Standard; -import com.sun.tools.javadoc.Main; - import fr.ifremer.isisfish.IsisFish; import fr.ifremer.isisfish.datastore.FormuleStorage; import fr.ifremer.isisfish.datastore.JavaSourceStorage; @@ -63,9 +67,6 @@ /** Logger for this class. */ private static final Log log = LogFactory.getLog(JavadocHelper.class); - - /** Nom du programme dans les outils JDK. */ - protected static final String JAVADOC_TOOL_NAME = "javadoc"; /** * Generate javadoc of current. @@ -82,7 +83,7 @@ File dst = new File(destDir, source.getFQN().replace('.', File.separatorChar) + ".html"); int result = 0; - if (force || FileUtil.isNewer(src, dst)) { + if (force || !dst.exists() || FileUtils.isFileNewer(src, dst)) { result = generateJavadoc(source.getRoot(), src, destDir, out); } return result; @@ -172,6 +173,7 @@ dest.mkdirs(); try { + // Options de compilations String classpathAsString = CompileHelper.getClassPathAsString(classpath); @@ -182,25 +184,51 @@ args.add(dest.getAbsolutePath()); args.add("-link"); - args.add("http://docs.oracle.com/javase/6/docs/api/"); + args.add("http://docs.oracle.com/javase/7/docs/api/"); args.add("-link"); args.add(IsisFish.config.getJavadocURL()); // also add author and version args.add("-author"); args.add("-version"); - + for (File srcFile : filesSrc) { args.add(srcFile.getAbsolutePath()); } - //result = Main.execute(JAVADOC_TOOL_NAME, args.toArray(new String[0])); - result = Main.execute(JAVADOC_TOOL_NAME, out, out, out, - Standard.class.getName(), args.toArray(new String[0])); - + + // can throw error in not run with JDK + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + try { + // TODO echatellier 20140319 : replace with DocumentationTool from java 8 + + // on est obligé de changer le classloader, sinon il ne trouve pas la class + // com.sun.tools.doclets.standard.Standard + File jreHome = new File(System.getProperty("java.home")); + File jreLib = new File(jreHome.getParent(), "lib"); + File toolsJar = new File(jreLib, "tools.jar"); + URLClassLoader toolsJarLoader = new URLClassLoader(new URL[] { toolsJar.toURI().toURL() }); + Thread.currentThread().setContextClassLoader(toolsJarLoader); + + // invocation dynamique pour ne pas embarqué le jar + Class<?> mainTool = toolsJarLoader.loadClass("com.sun.tools.javadoc.Main"); + Method method = mainTool.getMethod("execute", String.class, PrintWriter.class, PrintWriter.class, + PrintWriter.class, String.class, String[].class); + method.invoke(null, "javadoc", out, out, out, + "com.sun.tools.doclets.standard.Standard", args.toArray(new String[0])); + toolsJarLoader.close(); + } catch (Exception ex) { + out.println(t("This function is only available with JDK (not JRE)")); + ex.printStackTrace(out); + result = -1; + } finally { + Thread.currentThread().setContextClassLoader(cl); + } + } catch (Exception eee) { if (log.isWarnEnabled()) { log.warn("Can't generate javadoc", eee); } + result = -1; } return result; } Copied: trunk/src/main/java/fr/ifremer/isisfish/util/ScriptUtil.java (from rev 3968, branches/4.0.1/src/main/java/fr/ifremer/isisfish/util/ScriptUtil.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/util/ScriptUtil.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/util/ScriptUtil.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,63 @@ +package fr.ifremer.isisfish.util; + +/* + * #%L + * IsisFish + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 1999 - 2013 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import java.io.File; +import java.io.IOException; + +import org.apache.commons.io.FileUtils; + +/** + * Cette class réintroduit les méthodes qui ont été supprimées dans nuiton-utils + * (car des equivalents commons existent). + * + * Pour facilité la vie des utilisateurs, ont les regroupent ici. + * + * @author echatellier + */ +public class ScriptUtil { + + /** + * Reads the contents of a file into a String. The file is always closed. + * + * @param file the file to read, must not be {@code null} + * @return the file contents, never {@code null} + * @since 4.3.0 + */ + public static String readAsString(File file) throws IOException { + return FileUtils.readFileToString(file, "utf-8"); + } + + /** + * Writes a String to a file creating the file if it does not exist. + * + * @param file the file to write + * @param content the content to write to the file + * @since 4.3.0 + */ + public static void writeString(File file, String content) throws IOException { + FileUtils.writeStringToFile(file, content, "utf-8"); + } +} Modified: trunk/src/main/java/fr/ifremer/isisfish/util/TopiaEntityConverter.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/util/TopiaEntityConverter.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/util/TopiaEntityConverter.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2006 - 2011 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin, Chatellier Eric + * Copyright (C) 2006 - 2013 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin, 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 @@ -32,15 +32,14 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; -import org.hibernate.engine.QueryParameters; -import org.hibernate.engine.SessionImplementor; +import org.hibernate.engine.spi.QueryParameters; +import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.type.StandardBasicTypes; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaId; - /** * Classe utilise pour convertir une chaine en un objet TopiaEntity. * @@ -50,15 +49,12 @@ */ public class TopiaEntityConverter implements Converter { - /** - * Logger for this class - */ - private static final Log log = LogFactory - .getLog(TopiaEntityConverter.class); + /** Logger for this class. */ + private static final Log log = LogFactory.getLog(TopiaEntityConverter.class); protected TopiaContext context = null; protected SessionImplementor session = null; - + public TopiaEntityConverter(TopiaContext context) { this.context = context; } @@ -67,15 +63,13 @@ this.session = session; } - /* (non-Javadoc) - * @see org.apache.commons.beanutils.Converter#convert(java.lang.Class, java.lang.Object) - */ + @Override public Object convert(Class type, Object value) { Object result = null; if (value instanceof TopiaEntity) { result = value; - } else if (value instanceof String){ - result = getTopiaEntity((String)value); + } else if (value instanceof String) { + result = getTopiaEntity((String) value); } else { throw new ConversionException("Can't convert '" + value + "' to " + type.getName()); } @@ -88,7 +82,8 @@ try { TopiaContext tx = context.beginTransaction(); result = tx.findByTopiaId(topiaId); - // FIXME when after tx.closeContext we can continu to load object, call it here + // FIXME when after tx.closeContext we can continu to load + // object, call it here tx.commitTransaction(); tx.closeContext(); } catch (TopiaException eee) { @@ -99,19 +94,21 @@ } else if (session != null) { QueryParameters params = new QueryParameters(StandardBasicTypes.STRING, topiaId); String entityClass = TopiaId.getClassNameAsString(topiaId); - + try { + /* Non compilable code since hibernate 4.2, but not a real, not usefull boolean mustCommit = false; if (!session.getJDBCContext().getTransaction().isActive()) { mustCommit = true; session.getJDBCContext().getTransaction().begin(); - } + }*/ String hql = "from " + entityClass + " where topiaId=?"; List results = session.list(hql, params); - if (mustCommit) { + + /*if (mustCommit) { session.getJDBCContext().getTransaction().commit(); - } - result = (TopiaEntity)results.get(0); + }*/ + result = (TopiaEntity) results.get(0); } catch (HibernateException eee) { if (log.isDebugEnabled()) { log.debug("Can't find TopiaEntity: " + topiaId, eee); Modified: trunk/src/main/java/fr/ifremer/isisfish/util/ssh/SSHAgent.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/util/ssh/SSHAgent.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/util/ssh/SSHAgent.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.util.ssh; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.File; import java.util.HashMap; @@ -61,7 +61,7 @@ /** * Passphrase associated to key file path. * - * private key file path => passphrase. + * private key file path =< passphrase. * * Ensure that passphrase are valid before add into. */ @@ -119,7 +119,7 @@ if (kpair.isEncrypted()) { boolean isValid = false; - String message = _("isisfish.ssh.askpassphrase.message", + String message = t("isisfish.ssh.askpassphrase.message", privatekeyFile); do { passphrase = askPassphrase(privatekeyFile, message); @@ -128,7 +128,7 @@ isValid = true; passphraseForKeys.put(privatekeyFile, passphrase); } else { - message = _("isisfish.ssh.askpassphrase.wrongpassphrase", + message = t("isisfish.ssh.askpassphrase.wrongpassphrase", privatekeyFile); } } while (!isValid); @@ -158,7 +158,7 @@ Object[] objs = { labelField, passwordField }; int option = JOptionPane.showConfirmDialog(null, objs, - _("isisfish.ssh.askpassphrase.title"), + t("isisfish.ssh.askpassphrase.title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); if (option == JOptionPane.CANCEL_OPTION) { Modified: trunk/src/main/java/fr/ifremer/isisfish/util/ssh/SSHUtils.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/util/ssh/SSHUtils.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/util/ssh/SSHUtils.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -133,7 +133,7 @@ } /** - * Track progress every 10% if 100kb < filesize < 1mb. For larger + * Track progress every 10% if 100kb < filesize < 1mb. For larger * files track progress for every percent transmitted. * @param filesize the size of the file been transmitted * @param totalLength the total transmission size Modified: trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSException.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSException.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSException.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -38,10 +38,6 @@ private static final long serialVersionUID = -2665066202505740998L; - public VCSException() { - super(); - } - public VCSException(String message) { super(message); } @@ -49,9 +45,4 @@ public VCSException(String message, Throwable cause) { super(message, cause); } - - public VCSException(Throwable cause) { - super(cause); - } - } Modified: trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSFactory.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSFactory.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSFactory.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -27,7 +27,7 @@ import fr.ifremer.isisfish.IsisConfig; import java.io.File; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.util.Properties; import org.apache.commons.beanutils.ConstructorUtils; @@ -130,7 +130,7 @@ new Object[]{dataDir, protocol, host, path, sshKeyFile, login, password}); } catch (Exception eee) { if (log.isErrorEnabled()) { - log.error(_("isisfish.vcs.factory.cantinstanciate", classname), eee); + log.error(t("isisfish.vcs.factory.cantinstanciate", classname), eee); } result = new VCSNone(dataDir, protocol, host, path, sshKeyFile, login, password); } Modified: trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSSVN.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSSVN.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/java/fr/ifremer/isisfish/vcs/VCSSVN.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.vcs; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.io.ByteArrayOutputStream; import java.io.File; @@ -228,12 +228,12 @@ connectionState = ConnectionState.ON_LINE; if (log.isInfoEnabled()) { - log.info(_("isisfish.vcs.vcssvn.isconnected.switchto", + log.info(t("isisfish.vcs.vcssvn.isconnected.switchto", getRemoteRepository())); } } catch (SVNException eee) { if (log.isWarnEnabled()) { - log.warn(_("isisfish.vcs.vcssvn.isconnected.switchoff", + log.warn(t("isisfish.vcs.vcssvn.isconnected.switchoff", getRemoteRepository()), eee); } connectionState = ConnectionState.OFF_LINE; @@ -283,7 +283,7 @@ || !url.getHost().equals(newUrl.getHost())) { if (fireAction(VCSActionEvent.SWITCH_PROTOCOL)) { if (log.isInfoEnabled()) { - log.info(_("isisfish.vcs.vcssvn.checkProtocol.relocate", + log.info(t("isisfish.vcs.vcssvn.checkProtocol.relocate", localRoot, url, newUrl)); } @@ -296,7 +296,7 @@ } } catch (SVNException e) { throw new VCSException( - _("isisfish.vcs.vcssvn.checkProtocol.error"), e); + t("isisfish.vcs.vcssvn.checkProtocol.error"), e); } } @@ -404,7 +404,7 @@ try { wcClient.doCleanup(localFile); } catch (SVNException e) { - throw new VCSException(_("isisfish.vcs.vcssvn.cleanup.error"), e); + throw new VCSException(t("isisfish.vcs.vcssvn.cleanup.error"), e); } } @@ -418,7 +418,7 @@ // if can't commit if (!isWriteable()) { throw new VCSException( - _("isisfish.vcs.vcssvn.commit.errorreadonly")); + t("isisfish.vcs.vcssvn.commit.errorreadonly")); } // list to array @@ -459,14 +459,14 @@ SVNDepth.INFINITY); // depth if (log.isInfoEnabled()) { - log.info(_("isisfish.vcs.vcssvn.global.torevision", commitInfo + log.info(t("isisfish.vcs.vcssvn.global.torevision", commitInfo .getNewRevision())); } // commitInfo.getNewRevision() == -1 if file with no modification // is commited } catch (SVNException e) { - throw new VCSException(_("isisfish.vcs.vcssvn.commit.error"), e); + throw new VCSException(t("isisfish.vcs.vcssvn.commit.error"), e); } } @@ -478,7 +478,7 @@ @Override public void add(List<File> files, String msg) throws VCSException { if (!isWriteable()) { - throw new VCSException(_("isisfish.vcs.vcssvn.add.errorreadonly")); + throw new VCSException(t("isisfish.vcs.vcssvn.add.errorreadonly")); } try { if (fireAction(VCSActionEvent.ADD, files.toArray(new File[files @@ -502,7 +502,7 @@ commitWithoutCheck(files, msg); } } catch (SVNException eee) { - throw new VCSException(_("isisfish.vcs.vcssvn.add.error"), eee); + throw new VCSException(t("isisfish.vcs.vcssvn.add.error"), eee); } } @@ -534,19 +534,19 @@ true); // boolean allowUnversionedObstructions if (log.isInfoEnabled()) { - log.info(_("isisfish.vcs.vcssvn.global.torevision", + log.info(t("isisfish.vcs.vcssvn.global.torevision", newRevision)); } } } catch (SVNException eee) { - throw new VCSException(_("isisfish.vcs.vcssvn.checkout.error"), eee); + throw new VCSException(t("isisfish.vcs.vcssvn.checkout.error"), eee); } } public void delete(List<File> files, String msg) throws VCSException { if (!isWriteable()) { throw new VCSException( - _("isisfish.vcs.vcssvn.delete.errorreadonly")); + t("isisfish.vcs.vcssvn.delete.errorreadonly")); } try { if (fireAction(VCSActionEvent.DELETE, files.toArray(new File[files @@ -560,7 +560,7 @@ commitWithoutCheck(files, msg); } } catch (SVNException eee) { - throw new VCSException(_("isisfish.vcs.vcssvn.delete.error"), eee); + throw new VCSException(t("isisfish.vcs.vcssvn.delete.error"), eee); } } @@ -574,7 +574,7 @@ try { SVNStatusClient statusClient = getSVNManager().getStatusClient(); - SVNStatusType svnStatus = statusClient.doStatus(file, false).getContentsStatus(); + SVNStatusType svnStatus = statusClient.doStatus(file, false).getNodeStatus(); if (svnStatus == SVNStatusType.STATUS_MODIFIED) { resultStatus = Status.STATUS_MODIFIED; @@ -621,13 +621,13 @@ ISVNStatusHandler handler = new ISVNStatusHandler() { public void handleStatus(SVNStatus status) throws SVNException { if ((acceptedStatusType.isEmpty() - && status.getContentsStatus() != SVNStatusType.STATUS_NONE && status - .getContentsStatus() != SVNStatusType.STATUS_NORMAL) - || acceptedStatusType.contains(status.getContentsStatus())) { + && status.getNodeStatus() != SVNStatusType.STATUS_NONE && status + .getNodeStatus() != SVNStatusType.STATUS_NORMAL) + || acceptedStatusType.contains(status.getNodeStatus())) { File statusFile = status.getFile(); if (!statusFile.isDirectory() || - status.getRemoteContentsStatus() == SVNStatusType.STATUS_ADDED || - status.getRemoteContentsStatus() == SVNStatusType.STATUS_DELETED) { + status.getRemoteNodeStatus() == SVNStatusType.STATUS_ADDED || + status.getRemoteNodeStatus() == SVNStatusType.STATUS_DELETED) { // on ne met pas les repertoires pere dans le status // car en fait ca veut dire qu'un fichier/rep dans ce // repertoire a ete ajout/modifier/delete, et on l'aura @@ -651,7 +651,7 @@ return result; } catch (SVNException eee) { - throw new VCSException(_("isisfish.vcs.vcssvn.localstatus.error"), + throw new VCSException(t("isisfish.vcs.vcssvn.localstatus.error"), eee); } } @@ -684,15 +684,15 @@ public void handleStatus(SVNStatus status) throws SVNException { if (log.isDebugEnabled()) { log.debug("Status on file " + status.getFile() + " rstatus:" - + status.getRemoteContentsStatus() + " lstatus:" + status.getContentsStatus()); + + status.getRemoteNodeStatus() + " lstatus:" + status.getNodeStatus()); } - if (!status.getRemoteContentsStatus().equals(SVNStatusType.STATUS_NONE) && - !status.getRemoteContentsStatus().equals(SVNStatusType.STATUS_NORMAL)) { + if (!status.getRemoteNodeStatus().equals(SVNStatusType.STATUS_NONE) && + !status.getRemoteNodeStatus().equals(SVNStatusType.STATUS_NORMAL)) { File statusFile = status.getFile(); if (!statusFile.isDirectory() || - status.getRemoteContentsStatus().equals(SVNStatusType.STATUS_ADDED) || - status.getRemoteContentsStatus().equals(SVNStatusType.STATUS_DELETED)) { + status.getRemoteNodeStatus().equals(SVNStatusType.STATUS_ADDED) || + status.getRemoteNodeStatus().equals(SVNStatusType.STATUS_DELETED)) { // on ne met pas les repertoires pere dans le status // car en fait ca veut dire qu'un fichier/rep dans ce // repertoire a ete ajout/modifier/delete, et on l'aura @@ -716,7 +716,7 @@ return result; } catch (SVNException eee) { - throw new VCSException(_("isisfish.vcs.vcssvn.remotestatus.error"), + throw new VCSException(t("isisfish.vcs.vcssvn.remotestatus.error"), eee); } } @@ -785,7 +785,7 @@ handler); // ISVNLogEntryHandler handler } catch (SVNException e) { - throw new VCSException(_("Can't get changlog"), e); + throw new VCSException(t("Can't get changlog"), e); } return changLog; @@ -809,9 +809,9 @@ SVNDiffClient diffClient = getSVNManager().getDiffClient(); diffClient.doDiff(file, // File path1, - SVNRevision.WORKING, // SVNRevision rN, + SVNRevision.HEAD, // SVNRevision rN, file, // File path2, - SVNRevision.HEAD, // SVNRevision rM, + SVNRevision.WORKING, // SVNRevision rM, SVNDepth.IMMEDIATES, // SVNDepth depth, false, // boolean useAncestry, byte1, // OutputStream result, @@ -821,9 +821,9 @@ byte1.close(); } catch (SVNException e) { - throw new VCSException(_("isisfish.vcs.vcssvn.diff.error"), e); + throw new VCSException(t("isisfish.vcs.vcssvn.diff.error"), e); } catch (IOException e) { - throw new VCSException(_("isisfish.vcs.vcssvn.diff.error"), e); + throw new VCSException(t("isisfish.vcs.vcssvn.diff.error"), e); } return diff; @@ -867,7 +867,7 @@ SVNDirEntry.DIRENT_ALL, // int entryFields, handler); } catch (SVNException e) { - throw new VCSException(_("isisfish.vcs.vcssvn.list.error"), e); + throw new VCSException(t("isisfish.vcs.vcssvn.list.error"), e); } return files; @@ -891,17 +891,17 @@ // log if (log.isDebugEnabled()) { - log.debug(_("isisfish.vcs.vcssvn.global.filestatus", + log.debug(t("isisfish.vcs.vcssvn.global.filestatus", status.getFile().getAbsolutePath(), status - .getRemoteContentsStatus().toString())); + .getRemoteNodeStatus().toString())); } - if (status.getRemoteContentsStatus() == SVNStatusType.STATUS_ADDED - || status.getRemoteContentsStatus() == SVNStatusType.STATUS_MODIFIED) { + if (status.getRemoteNodeStatus() == SVNStatusType.STATUS_ADDED + || status.getRemoteNodeStatus() == SVNStatusType.STATUS_MODIFIED) { // log if (log.isDebugEnabled()) { - log.debug(_("isisfish.vcs.vcssvn.global.foundUpdatedFile", + log.debug(t("isisfish.vcs.vcssvn.global.foundUpdatedFile", status.getFile().getAbsolutePath())); } result.add(status.getFile()); @@ -923,7 +923,7 @@ return result; } catch (SVNException eee) { - throw new VCSException(_("isisfish.vcs.vcssvn.getupdate.error"), + throw new VCSException(t("isisfish.vcs.vcssvn.getupdate.error"), eee); } } @@ -961,17 +961,17 @@ localFile = getLocalRepository(); } - boolean result = false; + boolean isOnRemote = false; try { SVNStatusClient statusClient = getSVNManager().getStatusClient(); + SVNStatus status = statusClient.doStatus(localFile, true /*remote*/); + SVNStatusType localStatus = status.getNodeStatus(); + SVNStatusType remoteStatus = status.getRemoteNodeStatus(); - SVNStatusType localStatus = status.getContentsStatus(); - SVNStatusType remoteStatus = status.getRemoteContentsStatus(); - if (log.isDebugEnabled()) { - log.debug(_("isisfish.vcs.vcssvn.global.filelocalandremotestatus", + log.debug(t("isisfish.vcs.vcssvn.global.filelocalandremotestatus", localFile.getAbsolutePath(), localStatus, remoteStatus)); } @@ -982,7 +982,7 @@ if (!localStatus.equals(SVNStatusType.STATUS_ADDED) && !remoteStatus.equals(SVNStatusType.STATUS_UNVERSIONED) && !remoteStatus.equals(SVNStatusType.STATUS_DELETED)) { - result = true; + isOnRemote = true; } } catch (SVNException e) { @@ -990,12 +990,12 @@ // if exception, file doesn't exists on server // result is still 'false' if (log.isDebugEnabled()) { - log.debug(_("isisfish.vcs.vcssvn.isonremote.error", localFile + log.debug(t("isisfish.vcs.vcssvn.isonremote.error", localFile .getAbsolutePath()), e); } } - return result; + return isOnRemote; } /** @@ -1013,29 +1013,27 @@ localFile = getLocalRepository(); } - boolean result = false; + boolean isUpToDate = false; try { SVNStatusClient statusClient = getSVNManager().getStatusClient(); - SVNStatus status = statusClient - .doStatus(localFile, true /*remote*/); + SVNStatus status = statusClient.doStatus(localFile, true /*remote*/); + SVNStatusType localStatus = status.getNodeStatus(); + SVNStatusType remoteStatus = status.getRemoteNodeStatus(); - SVNStatusType localStatus = status.getContentsStatus(); - SVNStatusType remoteStatus = status.getRemoteContentsStatus(); - // TODO peut on dire que le fichier est à jour // si le status local est normal et le distant est none if (localStatus == SVNStatusType.STATUS_NORMAL && remoteStatus == SVNStatusType.STATUS_NONE) { - result = true; + isUpToDate = true; } } catch (SVNException eee) { - throw new VCSException(_("isisfish.vcs.vcssvn.isuptodate.error"), + throw new VCSException(t("isisfish.vcs.vcssvn.isuptodate.error"), eee); } - return result; + return isUpToDate; } /* @@ -1052,7 +1050,7 @@ } if (!accept(localFile)) { throw new VCSException( - _("isisfish.vcs.vcssvn.update.notinlocal")); + t("isisfish.vcs.vcssvn.update.notinlocal")); } if (fireAction(VCSActionEvent.UPDATE, localFile)) { // si le repertoire pere, n'est pas encore dans le repo local @@ -1070,7 +1068,7 @@ false); // boolean depthIsSticky if (log.isInfoEnabled()) { - log.info(_("isisfish.vcs.vcssvn.global.torevision", + log.info(t("isisfish.vcs.vcssvn.global.torevision", newRevision)); } @@ -1090,7 +1088,7 @@ } } catch (SVNException e) { - throw new VCSException(_("isisfish.vcs.vcssvn.update.error"), e); + throw new VCSException(t("isisfish.vcs.vcssvn.update.error"), e); } return result; } @@ -1138,7 +1136,7 @@ // est leve, et donc result reste a faux result = info != null; } catch (SVNException eee) { - log.debug(_("isisfish.vcs.vcssvn.istag.notexist", version)); + log.debug(t("isisfish.vcs.vcssvn.istag.notexist", version)); } } return result; @@ -1164,7 +1162,7 @@ } return result; } catch (SVNException eee) { - throw new VCSException(_("isisfish.vcs.vcssvn.gettag.error"), eee); + throw new VCSException(t("isisfish.vcs.vcssvn.gettag.error"), eee); } } @@ -1195,7 +1193,7 @@ newUrl = newUrl.appendPath(tag, true); if (log.isInfoEnabled()) { - log.info(_("isisfish.vcs.vcssvn.settag.switchfromto", + log.info(t("isisfish.vcs.vcssvn.settag.switchfromto", currentTag, tag)); } @@ -1214,7 +1212,7 @@ // with org.tmatesoft.svn.core.SVNException: svn: Unable to lock 'xxx' if (log.isInfoEnabled()) { - log.info(_("isisfish.vcs.vcssvn.global.torevision", + log.info(t("isisfish.vcs.vcssvn.global.torevision", newRevision)); } @@ -1237,7 +1235,7 @@ } } catch (SVNException eee) { - throw new VCSException(_("isisfish.vcs.vcssvn.setTag.error"), eee); + throw new VCSException(t("isisfish.vcs.vcssvn.setTag.error"), eee); } return filesInConflict; Copied: trunk/src/main/resources/fr/ifremer/isisfish/entities/Observation-error-validation.xml (from rev 3968, branches/4.0.1/src/main/resources/fr/ifremer/isisfish/entities/Observation-error-validation.xml) =================================================================== --- trunk/src/main/resources/fr/ifremer/isisfish/entities/Observation-error-validation.xml (rev 0) +++ trunk/src/main/resources/fr/ifremer/isisfish/entities/Observation-error-validation.xml 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,33 @@ +<!-- + #%L + $Id$ + $HeadURL$ + %% + Copyright (C) 2014 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 + 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 Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<!DOCTYPE validators PUBLIC + "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + <field name="name"> + <field-validator type="requiredstring"> + <param name="trim">true</param> + <message>Missing name</message> + </field-validator> + </field> +</validators> Modified: trunk/src/main/resources/i18n/isis-fish_en_GB.properties =================================================================== --- trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,4 +1,6 @@ = +%s\ has\ a\ discrete\ domain,\ this\ is\ not\ acceptable\ for\ this\ method.= +%s\ has\ a\ non\ uniform\ distribution,\ this\ is\ not\ acceptable\ for\ this\ method.= Add\ to\ default\ queue= Analyse\ plan\ error,\ too\ many\ simulation\ for\ %s\ \:\ %s= Can't\ add\ result\ '%1$s'\ at\ date\ %2$s=Can't add result '%1$s' at date %2$s @@ -19,8 +21,10 @@ Can't\ read\ ssh\ key\ \:\ %s= Can't\ simulate\ %s= Check\ state\ of\ local\ repository\:\ %s= +Coefficient= Command\ '%s'\ fail\ to\ execute= Could\ not\ found\ formule\ type\ %s\ autorised\ type\ are\ %s= +Dbimom= Empty\ zones= Error\ during\ vcs\ initialisation= Error\ while\ uploading\ public\ key\ to\ remote\ serveur\ authorized_keys= @@ -34,11 +38,18 @@ Launcher\ %s\ will\ be\ stopped\ because\ there\ are\ too\ many\ error\ (%s)= Local\ repository\ don't\ exist= Local\ repository\ exists\ but\ it's\ not\ valide\ for\ current\ vcs\:\ %s= +Maximum\ value= +Minimum\ value= Missing\ name= +Modifier\ le\ code\ R\ envoyé\ si\ vous\ le\ souhaitez= No\ port\ cell= Normal\ stop\ thread,\ this\ is\ not\ an\ error= Not\ start\ simulation\ %s\ because\ user\ ask\ stop= Process\ template\ error= +QUnif\ %= +QUnif\ Min/Max= +R\ modif= +Reference\ value= Region\ %s\ allready\ exist\ in\ repository.\ Can't\ import= Region\ %s\ already\ inited= Remote\ control\ file\ doesn't\ exists\ %s= @@ -51,18 +62,31 @@ Stop\ simulation\ plan,\ because\ can't\ call\ afterSimulation\ correctly\ on\ plan\ %s= SubProcess\ start\:\ %s\ %s= Switch\ repository\ type\ to\ none= +This\ function\ is\ only\ available\ with\ JDK\ (not\ JRE)= Try\ to\ log\ on\ %s@%s\:%d= Use\ branches,\ switch\ not\ needed= User\ restart\ simulation\ %s= User\ stop\ simulation\ %s= +an\ alternative\ way\ to\ specify\ the\ scale.= could\ not\ close\ reader\ %1$s=could not close reader %1$s could\ not\ found\ %s= could\ not\ found\ log\ file\ %1$s=could not found log file %1$s could\ not\ found\ region\ %s= could\ not\ found\ simulation\ %s= could\ not\ read\ at\ offset\ %1$s\ for\ reason\ %2$s=could not read at offset %1$s for reason %2$s +dcauchy= +dchisq= +degrees\ of\ freedom\ (non-negative,\ but\ can\ be\ non-integer)= +degrees\ of\ freedom.\ 'Inf'\ is\ allowed= destination\ already\ exists\ %s\ use\ 'force'\ argument\ to\ force\ overwrite= destination\ already\ exists\ %s\ use\ \\'force\\'\ argument\ to\ force\ overwrite= +dexp= +df= +dgamma= +dgeom= +dhyper= +directory\ %s\ must\ be\ a\ directory= +dlnorm= filter\ loaded\ in\ %1$s\ ms\ \:\ found\ %2$s\ lines.=filter loaded in %1$s ms \: found %2$s lines. isisfish.about.abouthtmltext=<html><b>ISIS-Fish (%s)</b><br /><br />Copyright IFREMER-MAERHA 2000-2013.<br /><br /><a href\="http\://www.isis-fish.org">http\://www.isis-fish.org</a><br /><br />Please, report any bug you can found.<html> isisfish.about.licensetext=You can modify and redistribute the program under the conditions of the GNU General Public License (version 2 or later). A copy of the GPL is in the file "LICENSE.txt" provided with ISIS-Fish. All rights reserved. No guarantees are provided for use of this program. @@ -274,6 +298,7 @@ isisfish.error.errorpane.htmlmessage=<html><b>IsisFish has handled \:</b><br />%s</b></html> isisfish.error.errorpane.title=Error isisfish.error.evaluate.equation=Can't evaluate equation\: %1$s +isisfish.error.evaluate.optimization.script= isisfish.error.evaluate.preplan.script= isisfish.error.evalute.plan.script=Can't evaluate plan script isisfish.error.file.already.exists=The file %1$s already exist @@ -344,6 +369,7 @@ isisfish.error.rename.region=Can't rename region to %1$s isisfish.error.save.checkSum.compilation=Can't save checkSum to compilation\: %1$s isisfish.error.save.script.compilation=Can't save script to compilation\: %1$s +isisfish.error.save.simulation.parameters= isisfish.error.script.create=isisfish.error.script.create isisfish.error.script.delete=Can't delete file %1$s for reason %2$s isisfish.error.script.import=Can't import file for reason %1$s @@ -485,6 +511,7 @@ isisfish.input.tree.cells=Cells isisfish.input.tree.gears=Gears isisfish.input.tree.metiers=Metiers +isisfish.input.tree.observations=Observations isisfish.input.tree.populations=Populations isisfish.input.tree.ports=Ports isisfish.input.tree.setofvessels=Set of vessels @@ -578,6 +605,7 @@ isisfish.message.new.formule.category=Select the equation model's category isisfish.message.new.formule.title=New equation model isisfish.message.new.region.name=Enter new region name +isisfish.message.observation.value.dimensions=Enter matrix dimensions \: isisfish.message.old.simulation.loaded=Old simulation loaded isisfish.message.page.modified=This page has been modified, do you want to save it ? isisfish.message.presimulation.script.execution=Presimulation Script execution @@ -628,6 +656,20 @@ isisfish.month.november=november isisfish.month.october=october isisfish.month.september=september +isisfish.observation.comment= +isisfish.observation.name= +isisfish.observation.value= +isisfish.optimisation.observation= +isisfish.optimization.export= +isisfish.optimization.exports= +isisfish.optimization.method= +isisfish.optimization.methodfactorsupported= +isisfish.optimization.objective= +isisfish.optimization.objectives= +isisfish.optimization.observation= +isisfish.optimization.optimization= +isisfish.optimization.select= +isisfish.optimization.title= isisfish.params.changeLogLev=Change from level '%1$s' to level '%2$s' isisfish.params.description=Description isisfish.params.loadOldSimulation=Load old simulation @@ -646,15 +688,23 @@ isisfish.params.toString.fishery=Fishery\: %1$s\n\n isisfish.params.toString.lib.logger.level=Level of libraries' logger \: %1$s isisfish.params.toString.number.years=Number of years\: %1$s\n\n +isisfish.params.toString.objective= +isisfish.params.toString.optimization= +isisfish.params.toString.optimizationExport= +isisfish.params.toString.optimizationObservation= isisfish.params.toString.plan=Plan\: %1$s isisfish.params.toString.plan.number=Simulation plan sequence number\: %1$s\n\n isisfish.params.toString.populations=Populations \: isisfish.params.toString.rule=Rule\: %1$s +isisfish.params.toString.script.generatedpresimulation= isisfish.params.toString.script.logger.level=Level of scripts' logger \: %1$s isisfish.params.toString.script.presimulation=Script de presimulation isisfish.params.toString.simul.logger.level=Level of simulator's logger \: %1$s isisfish.params.toString.simulation.done=Simulation done with \: %1$s isisfish.params.toString.strategies=Strategies \: +isisfish.params.toString.use.cache=Use simulation cache +isisfish.params.toString.use.optimization=Use optimization method +isisfish.params.useOptimization= isisfish.params.usePreSimulationScript=Use pre simulation script isisfish.params.useSimulationPlan=Use simulation plan isisfish.population.capturability=Capturability @@ -706,14 +756,14 @@ isisfish.populationMigration.selectSeason=Select a season isisfish.populationMigration.title=Migration isisfish.populationMigration.useEquation=Use equation -isisfish.populationMigrationEmigration.coefficient=Coefficient +isisfish.populationMigrationEmigration.coefficient= isisfish.populationMigrationEmigration.departureZone=Departure Zone isisfish.populationMigrationEmigration.title=Population emigration isisfish.populationMigrationImmigration.arrivalZone=Arrival Zone -isisfish.populationMigrationImmigration.coefficient=Coefficient +isisfish.populationMigrationImmigration.coefficient= isisfish.populationMigrationImmigration.title=Population immigration isisfish.populationMigrationMigration.arrivalZone=Arrival zone -isisfish.populationMigrationMigration.coefficient=Coefficient +isisfish.populationMigrationMigration.coefficient= isisfish.populationMigrationMigration.departureZone=Departure zone isisfish.populationMigrationMigration.title=Population migration isisfish.populationPrice.title=Price @@ -831,6 +881,8 @@ isisfish.script.menu.txtImport=Import isisfish.script.menu.txtNewEquationModel=New equation model isisfish.script.menu.txtNewExport=New export +isisfish.script.menu.txtNewObjective=New objective function +isisfish.script.menu.txtNewOptimization=New optimization script isisfish.script.menu.txtNewRule=New rule isisfish.script.menu.txtNewScript=New script isisfish.script.menu.txtNewSensitivity=New sensitivity calculator @@ -841,6 +893,7 @@ isisfish.script.menu.update=Update from server isisfish.script.new=New isisfish.script.new.tooltip=Create new script +isisfish.script.newplus=New ► isisfish.script.paste=Paste isisfish.script.paste.tooltip=Paste current selection (Ctrl-v) isisfish.script.save=Save @@ -852,23 +905,20 @@ isisfish.selectivity.title=Selectivity isisfish.sens.backParameter=Back to parameter tab isisfish.sens.title=Simulation plan -isisfish.sensitivity.coefficient=Coefficient (in %) isisfish.sensitivity.comment=Comment isisfish.sensitivity.continue=Continuous factor -isisfish.sensitivity.continuousminmaxtype=Mix/Max type -isisfish.sensitivity.continuouspercentagetype=Percentage type -isisfish.sensitivity.discret=Discret factor +isisfish.sensitivity.discret=Finite discrete factor isisfish.sensitivity.discretevaluelabel=Value %d isisfish.sensitivity.displaysecondpass=Display results +isisfish.sensitivity.distribution= +isisfish.sensitivity.distribution.parameters= isisfish.sensitivity.equation.valid=Valid variable isisfish.sensitivity.equation.variablename=Varaible name \: isisfish.sensitivity.export=Export isisfish.sensitivity.factor=Factor isisfish.sensitivity.factor.notvalid=Factor not valid \! isisfish.sensitivity.factors=Factors -isisfish.sensitivity.firstValue=First value isisfish.sensitivity.increment=Cardinality -isisfish.sensitivity.lastValue=Last value isisfish.sensitivity.methodfactorsupported=The selected sensitivity method handles factors cardinalities isisfish.sensitivity.mexico.exporttoxml.approve=Export isisfish.sensitivity.mexico.exporttoxml.filter=Xml files @@ -876,17 +926,16 @@ isisfish.sensitivity.mexico.exporttoxml.title=Export factors to mexico xml file isisfish.sensitivity.moveillegal=Can't move discrete factor to continuous group \! isisfish.sensitivity.name=Factor name -isisfish.sensitivity.newfactorcgroup.tip=Add new continuous factor group -isisfish.sensitivity.newfactordgroup.tip=Add new discrete factor group +isisfish.sensitivity.newfactorcgroup.tip=Add new continuous factors group +isisfish.sensitivity.newfactordgroup.tip=Add new finite discrete factors group isisfish.sensitivity.newfactorname=Factor group name isisfish.sensitivity.populationfactorname=Population %s -isisfish.sensitivity.referencevalue=Reference value isisfish.sensitivity.ruleparameterfactorname=Param rule %s.%s isisfish.sensitivity.rulesfactorname=Rule set isisfish.sensitivity.secondpass=Analyze results isisfish.sensitivity.secondpass.title=Analyze results isisfish.sensitivity.select=Method -isisfish.sensitivity.selectDiscretNumber=Number of factors +isisfish.sensitivity.selectDiscretNumber=Number of values \: isisfish.sensitivity.title=Sensitivity analysis isisfish.sensitivity.validDiscretNumber=Ok isisfish.sensitivityChooser.title=Sensitivity method @@ -983,7 +1032,7 @@ isisfish.ui.script.communityvcs=Community VCS isisfish.ui.script.officialvcs=Official VCS isisfish.variables.addvariable=Add -isisfish.variables.comment= +isisfish.variables.comment=Comment \: isisfish.variables.defaultname=VarName isisfish.variables.deletevariable=Delete isisfish.variables.double.value=Real value \: @@ -1124,8 +1173,20 @@ isisfish.zone.comments=Comments isisfish.zone.name=Name isisfish.zone.title=Zone +location\ and\ scale\ parameters.\ (location\ \=\ 0,\ scale\ \=\ 1)= matrixAbundance= matrixCatchPerStrategyMetPerZoneMet= matrixDiscardsPerStrMetPerZonePop= +mean\ and\ standard\ deviation\ of\ the\ distribution\ on\ the\ log\ scale\ with\ default\ values\ of\ '0'\ and\ '1'\ respectively.= +non-centrality\ parameter\ (non-negative).= +non-centrality\ parameter.\ If\ omitted\ the\ central\ F\ is\ assumed= +number\ of\ trials\ (zero\ or\ more)= +probability\ of\ success\ in\ each\ trial.\ '0\ <\ prob\ <\=\ 1'= +probability\ of\ success\ on\ each\ trial= region\ already\ exists\ %s\ use\ 'force'\ argument\ to\ force\ overwrite= +shape\ and\ scale\ parameters.\ Must\ be\ positive,\ 'scale'\ strictly= simulate\ %s\ with\ file\ %s= +the\ number\ of\ balls\ drawn\ from\ the\ urn.= +the\ number\ of\ black\ balls\ in\ the\ urn.= +the\ number\ of\ white\ balls\ in\ the\ urn.= +vector\ of\ rates= Modified: trunk/src/main/resources/i18n/isis-fish_fr_FR.properties =================================================================== --- trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,4 +1,6 @@ = +%s\ has\ a\ discrete\ domain,\ this\ is\ not\ acceptable\ for\ this\ method.= +%s\ has\ a\ non\ uniform\ distribution,\ this\ is\ not\ acceptable\ for\ this\ method.= Add\ to\ default\ queue= Analyse\ plan\ error,\ too\ many\ simulation\ for\ %s\ \:\ %s= Can't\ add\ result\ '%1$s'\ at\ date\ %2$s=Can't add result '%1$s' at date %2$s @@ -19,8 +21,10 @@ Can't\ read\ ssh\ key\ \:\ %s= Can't\ simulate\ %s= Check\ state\ of\ local\ repository\:\ %s= +Coefficient= Command\ '%s'\ fail\ to\ execute= Could\ not\ found\ formule\ type\ %s\ autorised\ type\ are\ %s= +Dbimom= Empty\ zones= Error\ during\ vcs\ initialisation= Error\ while\ uploading\ public\ key\ to\ remote\ serveur\ authorized_keys= @@ -34,11 +38,18 @@ Launcher\ %s\ will\ be\ stopped\ because\ there\ are\ too\ many\ error\ (%s)= Local\ repository\ don't\ exist= Local\ repository\ exists\ but\ it's\ not\ valide\ for\ current\ vcs\:\ %s= +Maximum\ value= +Minimum\ value= Missing\ name= +Modifier\ le\ code\ R\ envoyé\ si\ vous\ le\ souhaitez= No\ port\ cell= Normal\ stop\ thread,\ this\ is\ not\ an\ error= Not\ start\ simulation\ %s\ because\ user\ ask\ stop= Process\ template\ error= +QUnif\ %= +QUnif\ Min/Max= +R\ modif= +Reference\ value= Region\ %s\ allready\ exist\ in\ repository.\ Can't\ import= Region\ %s\ already\ inited=La région %s a déjà été initialisée Remote\ control\ file\ doesn't\ exists\ %s= @@ -51,18 +62,31 @@ Stop\ simulation\ plan,\ because\ can't\ call\ afterSimulation\ correctly\ on\ plan\ %s= SubProcess\ start\:\ %s\ %s= Switch\ repository\ type\ to\ none= +This\ function\ is\ only\ available\ with\ JDK\ (not\ JRE)= Try\ to\ log\ on\ %s@%s\:%d= Use\ branches,\ switch\ not\ needed= User\ restart\ simulation\ %s= User\ stop\ simulation\ %s= +an\ alternative\ way\ to\ specify\ the\ scale.= could\ not\ close\ reader\ %1$s=could not close reader %1$s could\ not\ found\ %s= could\ not\ found\ log\ file\ %1$s=could not found log file %1$s could\ not\ found\ region\ %s= could\ not\ found\ simulation\ %s= could\ not\ read\ at\ offset\ %1$s\ for\ reason\ %2$s=could not read at offset %1$s for reason %2$s +dcauchy= +dchisq= +degrees\ of\ freedom\ (non-negative,\ but\ can\ be\ non-integer)= +degrees\ of\ freedom.\ 'Inf'\ is\ allowed= destination\ already\ exists\ %s\ use\ 'force'\ argument\ to\ force\ overwrite= destination\ already\ exists\ %s\ use\ \\'force\\'\ argument\ to\ force\ overwrite= +dexp= +df= +dgamma= +dgeom= +dhyper= +directory\ %s\ must\ be\ a\ directory= +dlnorm= filter\ loaded\ in\ %1$s\ ms\ \:\ found\ %2$s\ lines.=filter loaded in %1$s ms \: found %2$s lines. isisfish.about.abouthtmltext=<html><b>ISIS-Fish (%s)</b><br /><br />Copyright IFREMER-MAERHA 2000-2013.<br /><br /><a href\="http\://www.isis-fish.org">http\://www.isis-fish.org</a><br /><br />Merci de rapporter les bugs.<html> isisfish.about.licensetext=Vous pouvez modifier et redistribuer ce programme sous les conditions énoncées par la licence GNU GPL (version 2 ou ultérieure). Une copie de la licence GPL est dans le fichier « LICENSE.txt » fourni avec ISIS-Fish. Tous droits réservés. Aucune garantie n'est fournie pour l'utilisation de ce programme. @@ -126,7 +150,7 @@ isisfish.common.saveModel=Sauver comme modèle isisfish.common.saveNextSimulation=Sauver pour la prochaine simulation isisfish.common.season=Saison -isisfish.common.setOfVessels=Flottille +isisfish.common.setOfVessels=Flotille isisfish.common.simulate=Simuler isisfish.common.strategies=Stratégies isisfish.common.sum=somme @@ -274,6 +298,7 @@ isisfish.error.errorpane.htmlmessage=<html><b>IsisFish a détecté une erreur \:</b><br />%s</b></html> isisfish.error.errorpane.title=Erreur isisfish.error.evaluate.equation=Impossible d'évaluer l'équation\: %1$s +isisfish.error.evaluate.optimization.script= isisfish.error.evaluate.preplan.script= isisfish.error.evalute.plan.script=Can't evaluate plan script isisfish.error.file.already.exists=The file %1$s already exist @@ -344,6 +369,7 @@ isisfish.error.rename.region=Can't rename region to %1$s isisfish.error.save.checkSum.compilation=Can't save checkSum to compilation\: %1$s isisfish.error.save.script.compilation=Can't save script to compilation\: %1$s +isisfish.error.save.simulation.parameters= isisfish.error.script.create=isisfish.error.script.create isisfish.error.script.delete=N'a pas pu supprimer le fichier %1$s pour la raison suivante %2$s isisfish.error.script.import=N'a pas pu importer pour la raison suivante %1$s @@ -485,6 +511,7 @@ isisfish.input.tree.cells=Mailles isisfish.input.tree.gears=Engins isisfish.input.tree.metiers=Métiers +isisfish.input.tree.observations=Observations isisfish.input.tree.populations=Populations isisfish.input.tree.ports=Ports isisfish.input.tree.setofvessels=Flottilles @@ -578,6 +605,7 @@ isisfish.message.new.formule.category=Choisissez le catégorie de la formule isisfish.message.new.formule.title=Nouvelle formule isisfish.message.new.region.name=Entrer le nom de la nouvelle région +isisfish.message.observation.value.dimensions=Entrez les dimensions de la matrice \: isisfish.message.old.simulation.loaded=Ancienne simulation chargée isisfish.message.page.modified=Cette page a été modifié, voulez-vous la sauvegarder ? isisfish.message.presimulation.script.execution=Exécution des scripts de Presimulation @@ -628,6 +656,15 @@ isisfish.month.november=novembre isisfish.month.october=octobre isisfish.month.september=septembre +isisfish.observation.comment=Description +isisfish.observation.name=Nom +isisfish.observation.value=Valeur +isisfish.optimization.export=Export +isisfish.optimization.exports=Exports et observations +isisfish.optimization.method=Méthode d'optimisation +isisfish.optimization.objective=Fonction d'objectif +isisfish.optimization.observation=Observations +isisfish.optimization.title=Optimisation isisfish.params.changeLogLev=Passe du niveau '%1$s' au niveau '%2$s' isisfish.params.description=Description isisfish.params.loadOldSimulation=Charger une ancienne simulation @@ -643,18 +680,26 @@ isisfish.params.simulationName=Nom de la simulation isisfish.params.stategiesAndPopulations=Stratégies et populations isisfish.params.title=Paramètres -isisfish.params.toString.fishery=Pêcherie\: %1$s\n\n -isisfish.params.toString.lib.logger.level=niveau du logger de librairies \: %1$s -isisfish.params.toString.number.years=Nombre d'années \: %1$s\n\n -isisfish.params.toString.plan=Plan\: %1$s -isisfish.params.toString.plan.number=Numéro de séquence dans le plan \: %1$s\n\n +isisfish.params.toString.fishery=Pêcherie\: %s\n\n +isisfish.params.toString.lib.logger.level=niveau du logger de librairies \: %s +isisfish.params.toString.number.years=Nombre d'années \: %s\n\n +isisfish.params.toString.objective=Fonction d'objectif \: %s +isisfish.params.toString.optimization=Méthode d'optimisation \: %s +isisfish.params.toString.optimizationExport=Export d'optimisation \: %s +isisfish.params.toString.optimizationObservation=Observation d'optimisation \: %s +isisfish.params.toString.plan=Plan\: %s +isisfish.params.toString.plan.number=Numéro de séquence dans le plan \: %s\n\n isisfish.params.toString.populations=Populations \: -isisfish.params.toString.rule=Règle\: %1$s +isisfish.params.toString.rule=Règle\: %s +isisfish.params.toString.script.generatedpresimulation= isisfish.params.toString.script.logger.level=niveau du logger de scripts \: %1$s isisfish.params.toString.script.presimulation=Script de presimulation isisfish.params.toString.simul.logger.level=niveau du logger de simulateur \: %1$s isisfish.params.toString.simulation.done=Simulation réalisée avec \: %1$s isisfish.params.toString.strategies=Stratégies d'exploitation \: +isisfish.params.toString.use.cache=Utiliser le cache de simulation +isisfish.params.toString.use.optimization=Utiliser une méthode d'optimisation +isisfish.params.useOptimization=Utiliser une méthode d'optimisation isisfish.params.usePreSimulationScript=Utiliser un script de pré-simulation isisfish.params.useSimulationPlan=Utiliser un plan de simulation isisfish.population.capturability=Capturabilité @@ -706,14 +751,14 @@ isisfish.populationMigration.selectSeason=Sélectionnez une saison isisfish.populationMigration.title=Migration isisfish.populationMigration.useEquation=Utiliser l'équation -isisfish.populationMigrationEmigration.coefficient=Coefficient +isisfish.populationMigrationEmigration.coefficient= isisfish.populationMigrationEmigration.departureZone=Zone de départ isisfish.populationMigrationEmigration.title=Emmigration isisfish.populationMigrationImmigration.arrivalZone=Zone d'arrivée -isisfish.populationMigrationImmigration.coefficient=Coefficient +isisfish.populationMigrationImmigration.coefficient= isisfish.populationMigrationImmigration.title=Immigration isisfish.populationMigrationMigration.arrivalZone=Zone d'arrivée -isisfish.populationMigrationMigration.coefficient=Coefficient +isisfish.populationMigrationMigration.coefficient= isisfish.populationMigrationMigration.departureZone=Zone de départ isisfish.populationMigrationMigration.title=Migration de population isisfish.populationPrice.title=Prix @@ -831,6 +876,8 @@ isisfish.script.menu.txtImport=Importer isisfish.script.menu.txtNewEquationModel=Nouvelle formule isisfish.script.menu.txtNewExport=Nouveau script d'export +isisfish.script.menu.txtNewObjective=Nouvelle fonction d'objectif +isisfish.script.menu.txtNewOptimization=Nouveau script d'optimisation isisfish.script.menu.txtNewRule=Nouvelle règle isisfish.script.menu.txtNewScript=Nouveau script isisfish.script.menu.txtNewSensitivity=Nouveau calculateur de sensibilité @@ -841,6 +888,7 @@ isisfish.script.menu.update=Synchronisation isisfish.script.new=Nouveau isisfish.script.new.tooltip=Crée un nouveau script +isisfish.script.newplus=Nouveau ► isisfish.script.paste=Coller isisfish.script.paste.tooltip=Colle la sélection courante (Ctrl-v) isisfish.script.save=Sauver @@ -852,23 +900,20 @@ isisfish.selectivity.title=Sélectivité isisfish.sens.backParameter=Retour aux paramètres isisfish.sens.title=Plan de simulation -isisfish.sensitivity.coefficient=Coefficient (en %) -isisfish.sensitivity.comment=Commentaires +isisfish.sensitivity.comment=Commentaire \: isisfish.sensitivity.continue=Facteur continu -isisfish.sensitivity.continuousminmaxtype=Type min/max -isisfish.sensitivity.continuouspercentagetype=Type pourcentage -isisfish.sensitivity.discret=Facteur discret +isisfish.sensitivity.discret=Facteur discret fini isisfish.sensitivity.discretevaluelabel=Valeur %d isisfish.sensitivity.displaysecondpass=Afficher les résultats +isisfish.sensitivity.distribution=Distribution \: +isisfish.sensitivity.distribution.parameters=Paramètres de la distribution %s \: isisfish.sensitivity.equation.valid=Valider la variable isisfish.sensitivity.equation.variablename=Variable name \: isisfish.sensitivity.export=Export isisfish.sensitivity.factor=Facteur isisfish.sensitivity.factor.notvalid=Facteur non valide \! isisfish.sensitivity.factors=Facteurs -isisfish.sensitivity.firstValue=Première valeur isisfish.sensitivity.increment=Cardinalité -isisfish.sensitivity.lastValue=Dernière valeur isisfish.sensitivity.methodfactorsupported=La méthode de sensibilité choisie gère les cardinalités des facteurs isisfish.sensitivity.mexico.exporttoxml.approve=Exporter isisfish.sensitivity.mexico.exporttoxml.filter=Fichier XML @@ -876,17 +921,16 @@ isisfish.sensitivity.mexico.exporttoxml.title=Exporter les facteurs vers un fichier xml mexico isisfish.sensitivity.moveillegal=Impossible d'ajouter un facteur discret dans un groupe continu \! isisfish.sensitivity.name=Nom du facteur -isisfish.sensitivity.newfactorcgroup.tip=Ajouter un groupe de facteur continu -isisfish.sensitivity.newfactordgroup.tip=Ajouter un groupe de facteur discret +isisfish.sensitivity.newfactorcgroup.tip=Ajouter un groupe de facteurs continus +isisfish.sensitivity.newfactordgroup.tip=Ajouter un groupe de facteurs discrets finis isisfish.sensitivity.newfactorname=Nom du groupe de facteurs isisfish.sensitivity.populationfactorname=Population %s -isisfish.sensitivity.referencevalue=Valeur de référence isisfish.sensitivity.ruleparameterfactorname=Param regle %s.%s isisfish.sensitivity.rulesfactorname=Ensemble de règles isisfish.sensitivity.secondpass=Analyse des résultats isisfish.sensitivity.secondpass.title=Analyse des résultats isisfish.sensitivity.select=Méthode -isisfish.sensitivity.selectDiscretNumber=Nombre de facteurs +isisfish.sensitivity.selectDiscretNumber=Nombre de valeur \: isisfish.sensitivity.title=Analyse de sensibilité isisfish.sensitivity.validDiscretNumber=Valider isisfish.sensitivityChooser.title=Méthode de la sensibilité @@ -1124,8 +1168,20 @@ isisfish.zone.comments=Commentaires isisfish.zone.name=Nom isisfish.zone.title=Zone +location\ and\ scale\ parameters.\ (location\ \=\ 0,\ scale\ \=\ 1)= matrixAbundance= matrixCatchPerStrategyMetPerZoneMet= matrixDiscardsPerStrMetPerZonePop= +mean\ and\ standard\ deviation\ of\ the\ distribution\ on\ the\ log\ scale\ with\ default\ values\ of\ '0'\ and\ '1'\ respectively.= +non-centrality\ parameter\ (non-negative).= +non-centrality\ parameter.\ If\ omitted\ the\ central\ F\ is\ assumed= +number\ of\ trials\ (zero\ or\ more)= +probability\ of\ success\ in\ each\ trial.\ '0\ <\ prob\ <\=\ 1'= +probability\ of\ success\ on\ each\ trial= region\ already\ exists\ %s\ use\ 'force'\ argument\ to\ force\ overwrite= +shape\ and\ scale\ parameters.\ Must\ be\ positive,\ 'scale'\ strictly= simulate\ %s\ with\ file\ %s= +the\ number\ of\ balls\ drawn\ from\ the\ urn.= +the\ number\ of\ black\ balls\ in\ the\ urn.= +the\ number\ of\ white\ balls\ in\ the\ urn.= +vector\ of\ rates= Modified: trunk/src/main/resources/log4j.properties =================================================================== --- trunk/src/main/resources/log4j.properties 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/resources/log4j.properties 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ # $Id$ # $HeadURL$ # %% -# Copyright (C) 2005 - 2011 Ifremer, CodeLutin, Chatellier Eric +# Copyright (C) 2005 - 2013 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 @@ -35,6 +35,8 @@ log4j.logger.org.nuiton=WARN log4j.logger.exports=INFO log4j.logger.formules=INFO +log4j.logger.objectives=INFO +log4j.logger.optimizations=INFO log4j.logger.rules=INFO log4j.logger.scripts=INFO log4j.logger.sensitivityanalysis=INFO Modified: trunk/src/main/resources/templates/script/equation.ftl =================================================================== --- trunk/src/main/resources/templates/script/equation.ftl 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/resources/templates/script/equation.ftl 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2009 - 2014 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 Modified: trunk/src/main/resources/templates/script/export.ftl =================================================================== --- trunk/src/main/resources/templates/script/export.ftl 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/resources/templates/script/export.ftl 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2009 - 2014 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 @@ -47,7 +47,6 @@ import java.io.Writer; -import static org.nuiton.i18n.I18n._; import org.nuiton.math.matrix.*; import scripts.ResultName; @@ -74,7 +73,7 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ private static Log log = LogFactory.getLog(${name}.class); - public String [] necessaryResult = { + protected String[] necessaryResult = { // put here all necessary result for this rule // example: // ResultName.MATRIX_BIOMASS, @@ -94,7 +93,7 @@ } public String getDescription() { - return _("TODO export description"); + return "TODO export description"; } public void export(SimulationStorage simulation, Writer out) throws Exception { Copied: trunk/src/main/resources/templates/script/objective.ftl (from rev 3968, branches/4.0.1/src/main/resources/templates/script/objective.ftl) =================================================================== --- trunk/src/main/resources/templates/script/objective.ftl (rev 0) +++ trunk/src/main/resources/templates/script/objective.ftl 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,110 @@ +<#-- + #%L + IsisFish + + $Id$ + $HeadURL$ + %% + Copyright (C) 2014 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 + 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 Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% +--> +/* + * Copyright (C) ${date?date?string("yyyy")} ${author} + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + */ + +package objectives; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.List; + +import org.nuiton.math.matrix.*; + +import fr.ifremer.isisfish.util.Doc; +import fr.ifremer.isisfish.simulator.SimulationContext; +import fr.ifremer.isisfish.types.TimeStep; +import fr.ifremer.isisfish.entities.*; +import fr.ifremer.isisfish.simulator.Objective; +import fr.ifremer.isisfish.simulator.OptimizationContext; +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.datastore.ResultStorage; + +/** + * ${name}.java + * + * Created: ${date?date?string.long} + * + * @author ${author} <${email}> + * @version $Revision: 1545 $ + * Last update: $Date: ${date?date?string.long} $ + * by : $Author: ${author} $ + */ +public class ${name} implements Objective { + + /** to use log facility, just put in your code: log.info("..."); */ + private static Log log = LogFactory.getLog(${name}.class); + + protected String[] necessaryResult = { + // put here all necessary result for this rule + // example: + // ResultName.MATRIX_BIOMASS, + // ResultName.MATRIX_NET_VALUE_OF_LANDINGS_PER_STRATEGY_MET, + }; + + @Override + public String[] getNecessaryResult() { + return this.necessaryResult; + } + + /** + * Permet d'afficher a l'utilisateur une aide sur le plan. + * @return L''aide ou la description du plan + */ + @Override + public String getDescription() throws Exception { + // TODO change description + return "TODO ${name} description plan"; + } + + /** + * Effectue une evaluation entre les exports et les observations. + * + * @param context optimization context + * @param exports exports + * @param observation observation + * @return double value + */ + public double eval(OptimizationContext context, List<MatrixND> exports, List<MatrixND> observations) { + // TODO put your code here + return 0; + } +} Copied: trunk/src/main/resources/templates/script/optimization.ftl (from rev 3968, branches/4.0.1/src/main/resources/templates/script/optimization.ftl) =================================================================== --- trunk/src/main/resources/templates/script/optimization.ftl (rev 0) +++ trunk/src/main/resources/templates/script/optimization.ftl 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,144 @@ +<#-- + #%L + IsisFish + + $Id$ + $HeadURL$ + %% + Copyright (C) 2014 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 + 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 Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% +--> +/* + * Copyright (C) ${date?date?string("yyyy")} ${author} + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + */ + +package optimizations; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.List; + +import org.nuiton.math.matrix.*; + +import fr.ifremer.isisfish.util.Doc; +import fr.ifremer.isisfish.simulator.SimulationContext; +import fr.ifremer.isisfish.types.TimeStep; +import fr.ifremer.isisfish.entities.*; +import fr.ifremer.isisfish.simulator.Optimization; +import fr.ifremer.isisfish.simulator.OptimizationContext; +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.datastore.ResultStorage; + +/** + * ${name}.java + * + * Created: ${date?date?string.long} + * + * @author ${author} <${email}> + * @version $Revision: 1545 $ + * Last update: $Date: ${date?date?string.long} $ + * by : $Author: ${author} $ + */ +public class ${name} implements Optimization { + + /** to use log facility, just put in your code: log.info("..."); */ + private static final Log log = LogFactory.getLog(${name}.class); + + protected String[] necessaryResult = { + // put here all necessary result for this rule + // example: + // ResultName.MATRIX_BIOMASS, + // ResultName.MATRIX_NET_VALUE_OF_LANDINGS_PER_STRATEGY_MET, + }; + + @Override + public String[] getNecessaryResult() { + return this.necessaryResult; + } + + /** + * Permet d'afficher a l'utilisateur une aide sur le plan. + * @return L''aide ou la description du plan + */ + @Override + public String getDescription() throws Exception { + // TODO change description + return "TODO ${name} description plan"; + } + + /** + * Appele lors de l'initialisation. + * + * @param context + */ + public void init(OptimizationContext context) { + + } + + /** + * La premiere generation doit etre construite dans cette methode + * dans l'init. + * + * @param context + */ + public void firstSimulation(OptimizationContext context) throws Exception { + + } + + /** + * Génère une nouvelle série de simulation suivant le context d'optimisation. + * + * @param context context + */ + public void nextSimulation(OptimizationContext context) { + + } + + /** + * Cette methode est appelee après chaque serie de simulation soit apres firstSimulation et + * nextSimulation. + * + * @param context + */ + public void endSimulation(OptimizationContext context) { + + } + + /** + * Cette methode est appelee lorsqu'il n'y a plus de simulation a faire + * (init ou nextSimulation n'ont pas fait appel a context.addSimulation) + * @param context + */ + public void finish(OptimizationContext context) throws Exception { + + } +} Modified: trunk/src/main/resources/templates/script/rule.ftl =================================================================== --- trunk/src/main/resources/templates/script/rule.ftl 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/resources/templates/script/rule.ftl 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2009 - 2014 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 @@ -42,8 +42,6 @@ package rules; -import static org.nuiton.i18n.I18n._; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -76,7 +74,7 @@ /** to use log facility, just put in your code: log.info("..."); */ private static Log log = LogFactory.getLog(${name}.class); - public String [] necessaryResult = { + protected String[] necessaryResult = { // put here all necessary result for this rule // example: // ResultName.MATRIX_BIOMASS, @@ -93,7 +91,7 @@ */ public String getDescription() throws Exception { // TODO - return _("TODO description rule"); + return "TODO description rule"; } /** Modified: trunk/src/main/resources/templates/script/script.ftl =================================================================== --- trunk/src/main/resources/templates/script/script.ftl 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/resources/templates/script/script.ftl 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2009 - 2014 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 Modified: trunk/src/main/resources/templates/script/sensitivityanalysis.ftl =================================================================== --- trunk/src/main/resources/templates/script/sensitivityanalysis.ftl 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/resources/templates/script/sensitivityanalysis.ftl 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2009 - 2014 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 @@ -42,8 +42,6 @@ package sensitivityanalysis; -import static org.nuiton.i18n.I18n._; - import java.util.List; import org.apache.commons.logging.Log; @@ -82,7 +80,7 @@ */ public String getDescription() { // TODO change descrition - return _("TODO ${name} description plan"); + return "TODO ${name} description plan"; } /** @@ -102,7 +100,7 @@ * scenarios à prendre en compte pour les simulations. * * @param plan plan a analyser - * @param outputdirectory master sensitivity export directory + * @param outputDirectory master sensitivity export directory * * @return un {@link SensitivityScenarios} * @throws SensitivityException if calculator impl fail to execute @@ -111,7 +109,7 @@ * @see Scenario * @see SensitivityScenarios */ - public SensitivityScenarios compute(DesignPlan plan, File outputdirectory) + public SensitivityScenarios compute(DesignPlan plan, File outputDirectory) throws SensitivityException { SensitivityScenarios sensitivityScenarios = new SensitivityScenarios(); @@ -128,14 +126,14 @@ * @param simulationStorages * ensemble des {@link SimulationStorage} qui ont résultés des * simulations - * @param outputdirectory master sensitivity export directory + * @param outputDirectory master sensitivity export directory * @throws SensitivityException * if calculator impl fail to execute * * @see SensitivityScenarios */ public void analyzeResult(List<SimulationStorage> simulationStorages, - File outputdirectory) throws SensitivityException { + File outputDirectory) throws SensitivityException { } } Modified: trunk/src/main/resources/templates/script/sensitivityexport.ftl =================================================================== --- trunk/src/main/resources/templates/script/sensitivityexport.ftl 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/resources/templates/script/sensitivityexport.ftl 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2009 - 2014 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 @@ -47,7 +47,6 @@ import java.io.Writer; -import static org.nuiton.i18n.I18n._; import org.nuiton.math.matrix.*; import scripts.ResultName; @@ -74,7 +73,7 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ private static Log log = LogFactory.getLog(${name}.class); - public String [] necessaryResult = { + protected String[] necessaryResult = { // put here all necessary result for this rule // example: // ResultName.MATRIX_BIOMASS, @@ -94,7 +93,7 @@ } public String getDescription() { - return _("TODO export description"); + return "TODO export description"; } public void export(SimulationStorage simulation, Writer out) throws Exception { Modified: trunk/src/main/resources/templates/script/simulationplan.ftl =================================================================== --- trunk/src/main/resources/templates/script/simulationplan.ftl 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/resources/templates/script/simulationplan.ftl 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2009 - 2014 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 @@ -42,8 +42,6 @@ package simulationplans; -import static org.nuiton.i18n.I18n._; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -80,11 +78,11 @@ /** to use log facility, just put in your code: log.info("..."); */ private static Log log = LogFactory.getLog(${name}.class); - public String [] necessaryResult = { - // put here all necessary result for this rule - // example: - // ResultName.MATRIX_BIOMASS, - // ResultName.MATRIX_NET_VALUE_OF_LANDINGS_PER_STRATEGY_MET, + protected String[] necessaryResult = { + // put here all necessary result for this rule + // example: + // ResultName.MATRIX_BIOMASS, + // ResultName.MATRIX_NET_VALUE_OF_LANDINGS_PER_STRATEGY_MET, }; @Override @@ -99,7 +97,7 @@ @Override public String getDescription() throws Exception { // TODO change description - return _("TODO ${name} description plan"); + return "TODO ${name} description plan"; } /** Modified: trunk/src/main/resources/templates/script/simulator.ftl =================================================================== --- trunk/src/main/resources/templates/script/simulator.ftl 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/resources/templates/script/simulator.ftl 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2009 - 2014 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 Modified: trunk/src/main/xmi/isis-fish.properties =================================================================== --- trunk/src/main/xmi/isis-fish.properties 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/main/xmi/isis-fish.properties 2014-04-17 16:48:13 UTC (rev 3969) @@ -22,7 +22,7 @@ # <http://www.gnu.org/licenses/gpl-3.0.html>. # #L% ### -model.tagvalue.copyright=/* Copyright (C) 1999 - 2012 Ifremer - Code Lutin */ +model.tagvalue.copyright=/* Copyright (C) 1999 - 2014 Ifremer - Code Lutin */ model.tagvalue.org.nuiton.math.matrix.MatrixND=fr.ifremer.isisfish.types.hibernate.MatrixType(name,dim,dimNames,semantics,data) model.tagvalue.fr.ifremer.isisfish.types.Month=fr.ifremer.isisfish.types.hibernate.MonthType model.tagvalue.fr.ifremer.isisfish.types.TimeStep=fr.ifremer.isisfish.types.hibernate.TimeStepType @@ -32,6 +32,8 @@ model.tagvalue.hibernateProxyInterface=none model.tagvalue.constantPrefix=PROPERTY_ model.tagvalue.useEnumerationName=true +model.tagvalue.doNotGenerateBooleanGetMethods=false +model.tagvalue.notGenerateReadListeners=true fr.ifremer.isisfish.entities.ActiveRule.class.tagvalue.contextable=true fr.ifremer.isisfish.entities.Cell.class.tagvalue.contextable=true fr.ifremer.isisfish.entities.EffortDescription.class.tagvalue.contextable=true @@ -57,6 +59,7 @@ fr.ifremer.isisfish.entities.Variable.attribute.entityId.tagvalue.notNull=true fr.ifremer.isisfish.entities.VesselType.class.tagvalue.contextable=true fr.ifremer.isisfish.entities.Zone.class.tagvalue.contextable=true +fr.ifremer.isisfish.entities.Observation.class.tagvalue.contextable=true -#�fix lazy exception on sensitivity export +# fix lazy exception on sensitivity export fr.ifremer.isisfish.entities.Population.attribute.maturityOgiveEquation.tagvalue.lazy=false Modified: trunk/src/main/xmi/isis-fish.zargo =================================================================== (Binary files differ) Copied: trunk/src/site/rst/v3/devel/mexico.rst (from rev 3968, branches/4.0.1/src/site/rst/v3/devel/mexico.rst) =================================================================== --- trunk/src/site/rst/v3/devel/mexico.rst (rev 0) +++ trunk/src/site/rst/v3/devel/mexico.rst 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,32 @@ +.. - +.. * #%L +.. * IsisFish +.. * $Id:$ +.. * $HeadURL:$ +.. * %% +.. * Copyright (C) 1999 - 2013 Ifremer, Codelutin +.. * %% +.. * This program is free software: you can redistribute it and/or modify +.. * it under the terms of the GNU 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 Public License for more details. +.. * +.. * You should have received a copy of the GNU General Public +.. * License along with this program. If not, see +.. * <http://www.gnu.org/licenses/gpl-3.0.html>. +.. * #L% +.. - +Mexico +------ + +Isis essaye de respecter le format mexico pour le stockage des plans d'expérience. + +Le schema xsd est disponible à l'adresse suivante: +https://mulcyber.toulouse.inra.fr/scm/viewvc.php/trunk/XML/schemas/expDesign.xsd?revision=9&root=baomexico&view=markup +ou +http://www.reseau-mexico.fr/sites/reseau-mexico.fr/files/expDesign.xsd Modified: trunk/src/test/java/fr/ifremer/isisfish/AbstractIsisFishTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/AbstractIsisFishTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/AbstractIsisFishTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2010 Ifremer, Code Lutin + * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, 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 @@ -26,21 +26,20 @@ package fr.ifremer.isisfish; import java.io.File; -import java.io.FileFilter; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.filefilter.HiddenFileFilter; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; -import org.nuiton.util.ArgumentsParserException; import org.nuiton.util.FileUtil; +import org.nuiton.config.ArgumentsParserException; import fr.ifremer.isisfish.datastore.AutoMigrationIsisH2Config; import fr.ifremer.isisfish.datastore.CodeSourceStorage.Location; import freemarker.cache.ClassTemplateLoader; import freemarker.ext.beans.BeansWrapper; import freemarker.template.Configuration; -import java.io.IOException; /** * Abstract test case for isis fish. @@ -102,18 +101,8 @@ // to not ask for user for migration during test AutoMigrationIsisH2Config.setTestMigrationCallBack(); - FileUtils.copyDirectory(new File("src/test/resources/test-database"), - IsisFish.config.getDatabaseDirectory(), new FileFilter() { - @Override - public boolean accept(File pathname) { - boolean result = true; - if (pathname.getAbsolutePath().indexOf( - File.separator + ".svn") != -1) { - result = false; - } - return result; - } - }); + FileUtils.copyDirectory(new File("src/test/resources/test-database").getAbsoluteFile(), + IsisFish.config.getDatabaseDirectory(), HiddenFileFilter.VISIBLE); } /** @@ -147,7 +136,7 @@ public static void clean() { System.clearProperty("user.home"); if (dirIsisBase != null) { - FileUtil.deleteRecursively(dirIsisBase); + FileUtils.deleteQuietly(dirIsisBase); dirIsisBase = null; } } Modified: trunk/src/test/java/fr/ifremer/isisfish/IsisConfigTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/IsisConfigTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/IsisConfigTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -26,7 +26,6 @@ package fr.ifremer.isisfish; import org.junit.Test; -import org.nuiton.util.ApplicationConfig; /** * Test for IsisConfig. @@ -41,7 +40,7 @@ /** * Test presence of some setXXX option called only - * in instrospection by {@link ApplicationConfig}. + * in introspection by {@link IsisConfig}. */ @Test public void testSetterExistence() { Modified: trunk/src/test/java/fr/ifremer/isisfish/IsisFishMiscTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/IsisFishMiscTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/IsisFishMiscTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -53,6 +53,7 @@ @Test public void testCRLFOnBat() throws IOException { File batFile = new File("src" + File.separator + "main" + File.separator + "assembly" + File.separator + "isisfish.bat"); + batFile = batFile.getAbsoluteFile(); // for maven String content = FileUtils.readFileToString(batFile); System.out.println(content); Copied: trunk/src/test/java/fr/ifremer/isisfish/datastore/ObjectiveStorageTest.java (from rev 3968, branches/4.0.1/src/test/java/fr/ifremer/isisfish/datastore/ObjectiveStorageTest.java) =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/datastore/ObjectiveStorageTest.java (rev 0) +++ trunk/src/test/java/fr/ifremer/isisfish/datastore/ObjectiveStorageTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,97 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.datastore; + +import java.io.StringWriter; +import java.io.Writer; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import fr.ifremer.isisfish.AbstractIsisFishTest; +import fr.ifremer.isisfish.IsisFish; +import fr.ifremer.isisfish.datastore.CodeSourceStorage.Location; +import freemarker.template.Configuration; +import freemarker.template.Template; + +/** + * RuleStorageTest. + * + * Created: 7 août 2006 11:07:57 + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class ObjectiveStorageTest extends AbstractIsisFishTest { + + protected Configuration freemarkerConfiguration; + + @Before + public void setUp() throws Exception { + freemarkerConfiguration = getFreemarkerConfiguration(); + } + + @Test + public void testNewObjectiveWithCompilation() throws Exception { + + String fileName = "TestObjective1"; + + ObjectiveStorage objectiveStorage = ObjectiveStorage.createObjective(fileName, Location.OFFICIAL); + + // get template + Template template = freemarkerConfiguration + .getTemplate(ObjectiveStorage.OBJECTIVE_TEMPLATE); + + // context values + Map<String, Object> root = new HashMap<String, Object>(); + // FIXME what is category ? + root.put("category", ""); + root.put("name", fileName); + root.put("date", new Date()); + root.put("author", IsisFish.config.getUserName()); + root.put("email", IsisFish.config.getUserMail()); + + // process template + Writer out = new StringWriter(); + template.process(root, out); + out.flush(); + String content = out.toString(); + + objectiveStorage.setContent(content); + + // 0 = compile success + int compileResult = objectiveStorage.compile(false, null); + Assert.assertEquals(0, compileResult); + } + +} Copied: trunk/src/test/java/fr/ifremer/isisfish/datastore/OptimizationStorageTest.java (from rev 3968, branches/4.0.1/src/test/java/fr/ifremer/isisfish/datastore/OptimizationStorageTest.java) =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/datastore/OptimizationStorageTest.java (rev 0) +++ trunk/src/test/java/fr/ifremer/isisfish/datastore/OptimizationStorageTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,97 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.datastore; + +import java.io.StringWriter; +import java.io.Writer; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import fr.ifremer.isisfish.AbstractIsisFishTest; +import fr.ifremer.isisfish.IsisFish; +import fr.ifremer.isisfish.datastore.CodeSourceStorage.Location; +import freemarker.template.Configuration; +import freemarker.template.Template; + +/** + * RuleStorageTest. + * + * Created: 7 août 2006 11:07:57 + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class OptimizationStorageTest extends AbstractIsisFishTest { + + protected Configuration freemarkerConfiguration; + + @Before + public void setUp() throws Exception { + freemarkerConfiguration = getFreemarkerConfiguration(); + } + + @Test + public void testNewOptimizationWithCompilation() throws Exception { + + String fileName = "TestOptimization1"; + + OptimizationStorage optimizationStorage = OptimizationStorage.createOptimization(fileName, Location.OFFICIAL); + + // get template + Template template = freemarkerConfiguration + .getTemplate(OptimizationStorage.OPTIMIZATION_TEMPLATE); + + // context values + Map<String, Object> root = new HashMap<String, Object>(); + // FIXME what is category ? + root.put("category", ""); + root.put("name", fileName); + root.put("date", new Date()); + root.put("author", IsisFish.config.getUserName()); + root.put("email", IsisFish.config.getUserMail()); + + // process template + Writer out = new StringWriter(); + template.process(root, out); + out.flush(); + String content = out.toString(); + + optimizationStorage.setContent(content); + + // 0 = compile success + int compileResult = optimizationStorage.compile(false, null); + Assert.assertEquals(0, compileResult); + } + +} Modified: trunk/src/test/java/fr/ifremer/isisfish/datastore/ScriptStorageTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/datastore/ScriptStorageTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/datastore/ScriptStorageTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -31,7 +31,7 @@ import java.util.HashMap; import java.util.Map; -import org.nuiton.util.FileUtil; +import org.apache.commons.io.FileUtils; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -84,7 +84,7 @@ //System.out.println("Content: '" + script.getContent() + "'"); Assert.assertEquals(content1, script.getContent()); - FileUtil.writeString(script.getFile(), content2); + FileUtils.writeStringToFile(script.getFile(), content2); //System.out.println("Content: '" + script.getContent() + "'"); Assert.assertEquals(content2, script.getContent()); } finally { Modified: trunk/src/test/java/fr/ifremer/isisfish/datastore/SimulatorStorageTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/datastore/SimulatorStorageTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/datastore/SimulatorStorageTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -125,7 +125,7 @@ } SimulatorStorage simulatorStorage = SimulatorStorage.getSimulator("DefaultSimulator"); - Simulator simulator = simulatorStorage.getNewSimulatorInstance(); + Simulator simulator = simulatorStorage.getNewInstance(); Assert.assertNotNull(simulator); Assert.assertTrue(f.exists()); } Modified: trunk/src/test/java/fr/ifremer/isisfish/entity/PersistenceTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/entity/PersistenceTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/entity/PersistenceTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -85,7 +85,7 @@ * * Created: 3 août 2004 * - * @author Benjamin Poussin <poussin@codelutin.com> + * @author Benjamin Poussin <poussin@codelutin.com> * @version $Revision$ * * Mise a jour: $Date$ Modified: trunk/src/test/java/fr/ifremer/isisfish/entity/PopulationSeasonInfoTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/entity/PopulationSeasonInfoTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/entity/PopulationSeasonInfoTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.entity; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.HeadlessException; import java.util.ArrayList; @@ -108,7 +108,7 @@ public void run() { JOptionPane.showMessageDialog(dialog, panel, - _("Spacialized visualisation"), + t("Spacialized visualisation"), JOptionPane.INFORMATION_MESSAGE); } @@ -189,7 +189,7 @@ public void run() { JOptionPane.showMessageDialog(dialog, box, - _("Spacialized visualisation"), + t("Spacialized visualisation"), JOptionPane.INFORMATION_MESSAGE); } Modified: trunk/src/test/java/fr/ifremer/isisfish/entity/TopiaDAOTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/entity/TopiaDAOTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/entity/TopiaDAOTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -26,9 +26,9 @@ import java.io.IOException; import java.util.List; +import org.hamcrest.CoreMatchers; import org.junit.Assert; import org.junit.Test; -import org.junit.matchers.JUnitMatchers; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; @@ -84,7 +84,7 @@ population2.setName("thon"); allPopulation = populationDAO.findAll(); Assert.assertEquals(2, allPopulation.size()); - Assert.assertThat(allPopulation, JUnitMatchers.hasItem(population2)); + Assert.assertThat(allPopulation, CoreMatchers.hasItem(population2)); context.rollbackTransaction(); @@ -93,7 +93,7 @@ population3.setName("requin"); allPopulation = populationDAO.findAll(); Assert.assertEquals(2, allPopulation.size()); - Assert.assertThat(allPopulation, JUnitMatchers.hasItem(population3)); + Assert.assertThat(allPopulation, CoreMatchers.hasItem(population3)); context.commitTransaction(); simulation.closeStorage(); Modified: trunk/src/test/java/fr/ifremer/isisfish/logging/SimulationLoggerUtilTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/logging/SimulationLoggerUtilTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/logging/SimulationLoggerUtilTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -29,13 +29,12 @@ import java.util.ArrayList; import java.util.List; -import junit.framework.Assert; - +import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.log4j.Level; import org.apache.log4j.Logger; -import org.nuiton.util.FileUtil; +import org.junit.Assert; import org.junit.Test; import fr.ifremer.isisfish.AbstractIsisFishTest; @@ -129,7 +128,7 @@ File logFile = new File(loggerFile); - String logFileContent = FileUtil.readAsString(logFile); + String logFileContent = FileUtils.readFileToString(logFile); log.info("++ File content ----------------------------------------------------------"); for (Object o : logFileContent.split("\n")) { @@ -232,7 +231,7 @@ File logFile = new File(loggerFile); - String logFileContent = FileUtil.readAsString(logFile); + String logFileContent = FileUtils.readFileToString(logFile); log.info("++ File content ----------------------------------------------------------"); for (Object o : logFileContent.split("\n")) { Modified: trunk/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -27,12 +27,21 @@ import java.io.File; import java.io.IOException; +import java.io.StringReader; +import java.net.URL; import java.util.Arrays; +import java.util.Date; import java.util.List; import java.util.Properties; import java.util.SortedMap; import java.util.TreeMap; +import javax.xml.XMLConstants; +import javax.xml.transform.stream.StreamSource; +import javax.xml.validation.Schema; +import javax.xml.validation.SchemaFactory; +import javax.xml.validation.Validator; + import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -59,13 +68,12 @@ import fr.ifremer.isisfish.rule.Rule; import fr.ifremer.isisfish.rule.RuleHelper; import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; +import fr.ifremer.isisfish.simulator.sensitivity.Distribution; import fr.ifremer.isisfish.simulator.sensitivity.Factor; import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; import fr.ifremer.isisfish.types.TimeStep; @@ -95,11 +103,12 @@ * Get a test design plan composed with all possibles value types. * * @param use40Features build design plan with sub factor groups + * @param use401Features build plan with distribution definition * @return a test design plan * @throws IsisFishException * @throws TopiaException */ - protected DesignPlan getTestDesignPlan(boolean use40Features) throws IsisFishException, TopiaException { + protected DesignPlan getTestDesignPlan(boolean use40Features, boolean use401Features) throws IsisFishException, TopiaException { DesignPlan designPlan = new DesignPlan(); // matrix 1 @@ -113,13 +122,13 @@ matrix1.setValue(new int[] { 2, 1 }, -1); // rule 1, species = c'est une des especes de la base BaseMotosICA - Rule ruleTacPoids = RuleStorage.getRule("TACpoids").getNewRuleInstance(); + Rule ruleTacPoids = RuleStorage.getRule("TACpoids").getNewInstance(); Properties props = new Properties(); props.setProperty("rule.0.parameter.species", "fr.ifremer.isisfish.entities.Species#1169028645830#0.022262364425031378"); RuleHelper.populateRule(0, regionContext, ruleTacPoids, props); // rule 2, species = c'est une des especes de la base BaseMotosICA - Rule ruleTailleMin = RuleStorage.getRule("TailleMin").getNewRuleInstance(); + Rule ruleTailleMin = RuleStorage.getRule("TailleMin").getNewInstance(); props = new Properties(); props.setProperty("rule.0.parameter.species", "fr.ifremer.isisfish.entities.Species#1169028645830#0.022262364425031378"); props.setProperty("rule.0.parameter.propSurvie", "42"); @@ -127,9 +136,9 @@ // factor 1 Factor factorContinuous = new Factor("factor 1 (double continuous)"); - ContinuousDomain domain1 = new ContinuousDomain(); - domain1.setMinBound(0.0); - domain1.setMaxBound(50.0); + ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFMM); + domain1.addDistributionParam("min", 0.0); + domain1.addDistributionParam("max", 50.0); factorContinuous.setDomain(domain1); factorContinuous.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521013#0.1715620681984218#maxLength"); @@ -156,28 +165,26 @@ // factor 4 Factor factorMatrixContinuous = new Factor("factor 4 (MatrixContinuous)"); - MatrixContinuousDomain domain4 = new MatrixContinuousDomain(); - domain4.setCoefficient(0.799); - domain4.setReferenceValue(matrix1); - domain4.setPercentageType(true); + ContinuousDomain domain4 = new ContinuousDomain(Distribution.QUNIFPC); + domain4.addDistributionParam("reference", matrix1); + domain4.addDistributionParam("coefficient", 0.799); factorMatrixContinuous.setDomain(domain4); factorMatrixContinuous.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521076#0.6526656643346673#minLength"); // factor 5 Factor factorEquationContinuous = new Factor("factor 5 (EquationContinuous)"); - EquationContinuousDomain domain5 = new EquationContinuousDomain(); - domain5.setCoefficient(0.1); - domain5.setReferenceValue(45.0); - domain5.setVariableName("L1"); - domain5.setPercentageType(true); + factorEquationContinuous.setEquationVariableName("Ktemp"); + ContinuousDomain domain5 = new ContinuousDomain(Distribution.QUNIFPC); + domain5.addDistributionParam("reference", 45.0); + domain5.addDistributionParam("coefficient", 0.1); factorEquationContinuous.setDomain(domain5); factorEquationContinuous.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521076#0.6526656643346673#maxLength"); // factor 1 Factor factorContinuousPercentage = new Factor("factor 6 (double continuous percentage)"); - ContinuousDomain domain6 = new ContinuousDomain(true); - domain6.setCoefficient(5.0); - domain6.setReferenceValue(14.0); + ContinuousDomain domain6 = new ContinuousDomain(Distribution.QUNIFPC); + domain6.addDistributionParam("reference", 14.0); + domain6.addDistributionParam("coefficient", 5.0); factorContinuousPercentage.setCardinality(5); factorContinuousPercentage.setDomain(domain6); factorContinuousPercentage.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1142003453434#0.223499349929004#size"); @@ -233,7 +240,7 @@ } /** - * Test method {@link MexicoHelper#getDesignPlanAsXML(DesignPlan)}. + * Test method {@link MexicoHelper#getDesignPlanAsXML(DesignPlan, String...)}. * * Sans groupe de facteur, tel qu'il était en 3.3.0.0. * @@ -244,30 +251,31 @@ @Test public void testGetDesignPlanAsXML() throws IOException, IsisFishException, TopiaException { - DesignPlan testDesignPlan = getTestDesignPlan(false); + DesignPlan testDesignPlan = getTestDesignPlan(false, false); // test xml export String xml = MexicoHelper.getDesignPlanAsXML(testDesignPlan); + if (log.isDebugEnabled()) { + log.debug("testGetDesignPlanAsXML xml = " + xml); + } + // factor 1 - Assert.assertTrue(xml.contains("<min>0.0</min>")); - Assert.assertTrue(xml.contains("<max>50.0</max>")); + Assert.assertTrue(xml.contains("distributionParameter name=\"min\" type=\"decimal\">0.0")); + Assert.assertTrue(xml.contains("distributionParameter name=\"max\" type=\"decimal\">50.0")); // factor 2 - Assert.assertTrue(xml.contains("<factor name=\"factor 2 (double discrete)\"")); - Assert.assertTrue(xml.contains("<value>70.9</value>")); + Assert.assertTrue(xml.contains("name=\"factor 2 (double discrete)\"")); + Assert.assertTrue(xml.contains("<level>70.9</level>")); // factor 3 - Assert.assertTrue(xml.contains("<value>14</value>")); + Assert.assertTrue(xml.contains("<level>14</level>")); // factor 4 Assert.assertTrue(xml.contains("<d>-14.0</d>")); Assert.assertTrue(xml.contains("0.799")); Assert.assertTrue(xml.contains("<mx name=\"test1\">")); // factor 5 - Assert.assertTrue(xml.contains("<fixed variable=\"L1\">")); - Assert.assertTrue(xml.contains("<reference coefficient=\"0.1\">45.0</reference>")); - - if (log.isDebugEnabled()) { - log.debug("testGetDesignPlanAsXML xml = " + xml); - } + Assert.assertTrue(xml.contains("name=\"equationVariableName\">Ktemp")); + Assert.assertTrue(xml.contains("distributionParameter name=\"coefficient\" type=\"decimal\">0.1")); + Assert.assertTrue(xml.contains("distributionParameter name=\"reference\" type=\"decimal\">45.0")); } /** @@ -281,6 +289,8 @@ public void testGetDesignPlanFromXML() throws IOException { File testFile = new File("src/test/resources/mexico/mexicohelper_designplan.xml"); + testFile = testFile.getAbsoluteFile(); // for maven + // topia context can be null in tests DesignPlan plan = MexicoHelper.getDesignPlanFromXML(testFile, null); List<Factor> factors = plan.getFactors(); @@ -294,9 +304,9 @@ // assert on continuous factor (percentage, non percentage) (3.4.0.0) ContinuousDomain domain1 = (ContinuousDomain)factors.get(0).getDomain(); - Assert.assertNull(domain1.getCoefficient()); + Assert.assertNull(domain1.getDistributionParameters().get("coefficient")); ContinuousDomain domain6 = (ContinuousDomain)factors.get(5).getDomain(); - Assert.assertNotNull(domain6.getCoefficient()); + Assert.assertNotNull(domain6.getDistributionParameters().get("coefficient")); } /** @@ -310,7 +320,7 @@ public void testExportImport() throws IOException, IsisFishException, TopiaException { // first export - DesignPlan testDesignPlan = getTestDesignPlan(false); + DesignPlan testDesignPlan = getTestDesignPlan(false, false); String xml1 = MexicoHelper.getDesignPlanAsXML(testDesignPlan); if (log.isDebugEnabled()) { log.debug("xml 1 = " + xml1); @@ -318,6 +328,8 @@ // export File testFile = new File("src/test/resources/mexico/mexicohelper_designplan.xml"); + testFile = testFile.getAbsoluteFile(); // for maven + // topia context can be null in tests DesignPlan plan = MexicoHelper.getDesignPlanFromXML(testFile, regionContext); String xml2 = MexicoHelper.getDesignPlanAsXML(plan); @@ -338,24 +350,26 @@ @Test public void testFactorGroupAndRule() throws IOException, IsisFishException, TopiaException { - DesignPlan testDesignPlan = getTestDesignPlan(true); + DesignPlan testDesignPlan = getTestDesignPlan(true, false); // test xml export String xml = MexicoHelper.getDesignPlanAsXML(testDesignPlan); + if (log.isDebugEnabled()) { + log.debug("testFactorGroupAndRule xml = " + xml); + } + // factor groups - Assert.assertTrue(xml.indexOf("<factors name=\"continuousgrp\" type=\"continuous\">") != -1); - Assert.assertTrue(xml.indexOf("<factors name=\"discretegrp\" type=\"discrete\">") != -1); + Assert.assertTrue(xml.indexOf("<feature name=\"group\">continuousgrp") != -1); + Assert.assertTrue(xml.indexOf("<feature name=\"grouptype\">continuous") != -1); + Assert.assertTrue(xml.indexOf("<feature name=\"group\">discretegrp") != -1); + Assert.assertTrue(xml.indexOf("<feature name=\"group\">discrete") != -1); // factor 6 Assert.assertTrue(xml.indexOf("<rule name=\"TACpoids\">") != -1); Assert.assertTrue(xml.indexOf("<rule name=\"TailleMin\">") != -1); Assert.assertTrue(xml.indexOf("<param key=\"rule.0.parameter.propSurvie\">42.0</param>") != -1); Assert.assertTrue(xml.indexOf("<param key=\"rule.0.parameter.species\">fr.ifremer.isisfish.entities.Species#1169028645830#0.022262364425031378</param>") != -1); - - if (log.isDebugEnabled()) { - log.debug("testFactorGroupAndRule xml = " + xml); - } } /** @@ -368,21 +382,24 @@ @Test public void testExportImportWithGroup() throws IOException, IsisFishException, TopiaException { + Date date = new Date(); + // first export - DesignPlan testDesignPlan = getTestDesignPlan(true); - String xml1 = MexicoHelper.getDesignPlanAsXML(testDesignPlan); + DesignPlan testDesignPlan = getTestDesignPlan(true, false); + String xml1 = MexicoHelper.getDesignPlanAsXML(testDesignPlan, "date", date.toString()); if (log.isDebugEnabled()) { log.debug("xml 1 = " + xml1); } - System.out.println(xml1); // export File testFile = new File("src/test/resources/mexico/mexicohelper_factorgroupdp.xml"); + testFile = testFile.getAbsoluteFile(); // for maven + // topia context can be null in tests TopiaContext context = regionContext.beginTransaction(); DesignPlan plan = MexicoHelper.getDesignPlanFromXML(testFile, context); context.closeContext(); - String xml2 = MexicoHelper.getDesignPlanAsXML(plan); + String xml2 = MexicoHelper.getDesignPlanAsXML(plan, "date", date.toString()); if (log.isDebugEnabled()) { log.debug("xml 2 = " + xml2); } @@ -400,21 +417,21 @@ @Test public void testFactorRuleParams() throws IOException, IsisFishException, TopiaException { - DesignPlan testDesignPlan = getTestDesignPlan(true); + DesignPlan testDesignPlan = getTestDesignPlan(true, false); // test xml export String xml = MexicoHelper.getDesignPlanAsXML(testDesignPlan); + if (log.isDebugEnabled()) { + log.debug("testFactorRuleParams xml = " + xml); + } + // factor groups Assert.assertTrue(xml.indexOf("type=\"string\"") != -1); // factor 8 - Assert.assertTrue(xml.indexOf("<value>Strategy:PelProfil1</value>") != -1); - Assert.assertTrue(xml.indexOf("<value>Strategy:PelProfil2</value>") != -1); - - if (log.isDebugEnabled()) { - log.debug("testFactorRuleParams xml = " + xml); - } + Assert.assertTrue(xml.indexOf("<level>Strategy:PelProfil1</level>") != -1); + Assert.assertTrue(xml.indexOf("<level>Strategy:PelProfil2</level>") != -1); } /** @@ -428,7 +445,7 @@ public void testPercentageMinMaxFactor() throws IOException, IsisFishException, TopiaException { // get test plan and add some STRANGES factors - DesignPlan testDesignPlan = getTestDesignPlan(false); + DesignPlan testDesignPlan = getTestDesignPlan(false, false); // matrix 1 MatrixND matrix1 = MatrixFactory.getInstance().create("test1", @@ -437,26 +454,26 @@ // factor x1 Factor factorContinuous = new Factor("factor x1"); - ContinuousDomain domain1 = new ContinuousDomain(true); - domain1.setReferenceValue(42.0); - domain1.setCoefficient(0.05); + ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFPC); + domain1.addDistributionParam("reference", 42.0); + domain1.addDistributionParam("coefficient", 0.05); factorContinuous.setDomain(domain1); factorContinuous.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521013#0.1715620681984218#maxLength"); // factor x4 Factor factorMatrixContinuous = new Factor("factor x4"); - MatrixContinuousDomain domain4 = new MatrixContinuousDomain(); - domain4.setMinBound(matrix1); - domain4.setMaxBound(matrix1); + ContinuousDomain domain4 = new ContinuousDomain(Distribution.QUNIFMM); + domain4.addDistributionParam("min", matrix1); + domain4.addDistributionParam("max", matrix1); factorMatrixContinuous.setDomain(domain4); factorMatrixContinuous.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521076#0.6526656643346673#minLength"); // factor x5 Factor factorEquationContinuous = new Factor("factor x5"); - EquationContinuousDomain domain5 = new EquationContinuousDomain(); - domain5.setMinBound(40.0); - domain5.setMaxBound(50.0); - domain5.setVariableName("Lx1"); + ContinuousDomain domain5 = new ContinuousDomain(Distribution.QUNIFMM); + domain5.addDistributionParam("min", 40.0); + domain5.addDistributionParam("max", 50.0); + factorEquationContinuous.setEquationVariableName("Lx1"); factorEquationContinuous.setDomain(domain5); factorEquationContinuous.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521076#0.6526656643346673#maxLength"); @@ -488,7 +505,7 @@ public void testDiscreteEquationFactor() throws IOException, IsisFishException, TopiaException { // get test plan and add some STRANGES factors - DesignPlan testDesignPlan = getTestDesignPlan(false); + DesignPlan testDesignPlan = getTestDesignPlan(false, false); // factor x6 Factor factorEquationDiscrete = new Factor("factor x6"); @@ -500,8 +517,9 @@ testDesignPlan.addFactor(factorEquationDiscrete); + Date date = new Date(); // test write - String content = MexicoHelper.getDesignPlanAsXML(testDesignPlan); + String content = MexicoHelper.getDesignPlanAsXML(testDesignPlan, "date", date.toString()); Assert.assertTrue(content.contains("context.getValue() < 1.0")); File tempFile = File.createTempFile("testdesignplan", ".xml"); @@ -510,7 +528,7 @@ // test to read it and get content DesignPlan plan = MexicoHelper.getDesignPlanFromXML(tempFile, null); - String reReadContent = MexicoHelper.getDesignPlanAsXML(plan); + String reReadContent = MexicoHelper.getDesignPlanAsXML(plan, "date", date.toString()); Assert.assertEquals(content, reReadContent); } @@ -526,18 +544,22 @@ @Test public void testExportImportV2() throws IOException, IsisFishException, TopiaException { + Date date = new Date(); + // first export - DesignPlan testDesignPlan = getTestDesignPlan(false); - String xml1 = MexicoHelper.getDesignPlanAsXML(testDesignPlan); + DesignPlan testDesignPlan = getTestDesignPlan(false, false); + String xml1 = MexicoHelper.getDesignPlanAsXML(testDesignPlan, "date", date.toString()); if (log.isDebugEnabled()) { log.debug("xml 1 = " + xml1); } // export File testFile = new File("src/test/resources/mexico/mexicohelper_designplanV2.xml"); + testFile = testFile.getAbsoluteFile(); // for maven + // topia context can be null in tests DesignPlan plan = MexicoHelper.getDesignPlanFromXML(testFile, regionContext); - String xml2 = MexicoHelper.getDesignPlanAsXML(plan); + String xml2 = MexicoHelper.getDesignPlanAsXML(plan, "date", date.toString()); if (log.isDebugEnabled()) { log.debug("xml 2 = " + xml2); } @@ -580,4 +602,61 @@ context.closeContext(); } + + /** + * Test que le xml généré est valide avec la xsd mexico (exp design). + * + * Test is currently disabled, isis fish doesn't respect all mexico + * file format since it's not possible. + * + * @throws Exception + */ + public void validOutputXml() throws Exception { + + DesignPlan testDesignPlan = getTestDesignPlan(true, true); + String xml1 = MexicoHelper.getDesignPlanAsXML(testDesignPlan); + URL schemaUrl = MexicoHelperTest.class.getResource("/mexico/expDesign.xsd"); + + SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); + Schema schema = factory.newSchema(schemaUrl); + Validator validator = schema.newValidator(); + // at last perform validation: + validator.validate(new StreamSource(new StringReader(xml1))); + } + + /** + * Test que l'export XML de l'import XML produise le meme xml. + * Pareil, mais pour une version v3 du schema xml. + * + * @throws IOException + * @throws IsisFishException + * @throws TopiaException + */ + @Test + public void testExportImportV3() throws IOException, IsisFishException, TopiaException { + + TopiaContext context = regionContext.beginTransaction(); + Date date = new Date(); + + // first export + DesignPlan testDesignPlan = getTestDesignPlan(true, true); + String xml1 = MexicoHelper.getDesignPlanAsXML(testDesignPlan, "date", date.toString()); + if (log.isDebugEnabled()) { + log.debug("xml 1 = " + xml1); + } + + // export + File testFile = new File("src/test/resources/mexico/mexicohelper_designplanV3.xml"); + testFile = testFile.getAbsoluteFile(); // for maven + + // topia context can be null in tests + DesignPlan plan = MexicoHelper.getDesignPlanFromXML(testFile, context); + String xml2 = MexicoHelper.getDesignPlanAsXML(plan, "date", date.toString()); + if (log.isDebugEnabled()) { + log.debug("xml 2 = " + xml2); + } + Assert.assertEquals(xml1, xml2); + + context.closeContext(); + } } Modified: trunk/src/test/java/fr/ifremer/isisfish/mexico/export/RegionExplorerTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/mexico/export/RegionExplorerTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/mexico/export/RegionExplorerTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2006 - 2010 Ifremer, Code Lutin, Chatellier Eric + * Copyright (C) 2006 - 2012 Ifremer, Code Lutin, 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 @@ -40,7 +40,7 @@ import fr.ifremer.isisfish.datastore.RegionStorage; import fr.ifremer.isisfish.datastore.StorageException; import fr.ifremer.isisfish.entities.FisheryRegion; -import fr.ifremer.isisfish.ui.sensitivity.SensitivityUtils; +import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils; /** * Test class for {@link RegionExplorer}. @@ -125,7 +125,7 @@ explorer.explore(fisheryRegion, xmlFactorExport); String xmlExport = FileUtils.readFileToString(file); - // test that all sensitity properties appear in xml content + // test that all sensitivity properties appear in xml content // entity part and property part must appear in factors names for (String property : SensitivityUtils.getProperties().stringPropertyNames()) { String entityPart = property.substring(0, property.indexOf('.')); Modified: trunk/src/test/java/fr/ifremer/isisfish/simulator/SimulationParameterTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/simulator/SimulationParameterTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/simulator/SimulationParameterTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -65,8 +65,9 @@ Assert.assertEquals("", params.getRegionName()); Assert.assertEquals(1, params.getNumberOfYear()); Assert.assertEquals("DefaultSimulator.java", params.getSimulatorName()); - Assert.assertTrue(params.getUseOptimization()); + Assert.assertTrue(params.getUseCache()); Assert.assertFalse(params.getUseStatistic()); + Assert.assertFalse(params.getUseOptimization()); Assert.assertTrue(params.getStrategies().isEmpty()); Assert.assertTrue(params.getPopulations().isEmpty()); // Not easy to test it Modified: trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -59,16 +59,16 @@ import fr.ifremer.isisfish.simulator.SimulationParameter; import fr.ifremer.isisfish.simulator.SimulationParameterImpl; import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; +import fr.ifremer.isisfish.simulator.sensitivity.Distribution; import fr.ifremer.isisfish.simulator.sensitivity.Factor; import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup; +import fr.ifremer.isisfish.simulator.sensitivity.FactorHelper; import fr.ifremer.isisfish.simulator.sensitivity.Scenario; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityAnalysis; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityAnalysisRandomMock; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; /** @@ -101,9 +101,9 @@ // factor 1 Factor factor1 = new Factor("factor 1 (double)"); - ContinuousDomain domain1 = new ContinuousDomain(); - domain1.setMinBound(0.0); - domain1.setMaxBound(50.0); + ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFMM); + domain1.addDistributionParam("min", 0.0); + domain1.addDistributionParam("max", 50.0); factor1.setCardinality(4); factor1.setDomain(domain1); factor1.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521013#0.1715620681984218#maxLength"); @@ -121,9 +121,9 @@ // factor 3 Factor factor3 = new Factor("factor 3 (double)"); - ContinuousDomain domain3 = new ContinuousDomain(); - domain3.setMinBound(12.0); - domain3.setMaxBound(99.0); + ContinuousDomain domain3 = new ContinuousDomain(Distribution.QUNIFMM); + domain3.addDistributionParam("min", 12.0); + domain3.addDistributionParam("max", 99.0); factor3.setCardinality(4); factor3.setDomain(domain3); factor3.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521076#0.6526656643346673#minLength"); @@ -238,9 +238,9 @@ // factor Factor factor = new Factor("test"); - ContinuousDomain domain = new ContinuousDomain(); - domain.setMinBound(0.0); - domain.setMaxBound(50.0); + ContinuousDomain domain = new ContinuousDomain(Distribution.QUNIFMM); + domain.addDistributionParam("min", 0.0); + domain.addDistributionParam("max", 50.0); factor.setDomain(domain); factor.setPath("fr.ifremer.entities.Cell#1234567890#length"); factor.setValueForIdentifier(0.5); @@ -252,9 +252,8 @@ List<Factor> factors = new ArrayList<Factor>(); factors.add(factor); scenario.setFactors(factors); - - SimulationService service = SimulationService.getService(); - String scriptContent = service.generatePreScript(scenario); + + String scriptContent = FactorHelper.generatePreScript(scenario); Assert.assertTrue(scriptContent.contains("java.lang.Double")); Assert.assertTrue(scriptContent.contains("db.findByTopiaId(\"fr.ifremer.entities.Cell#1234567890\")")); Assert.assertTrue(scriptContent.contains("BeanUtils.setProperty(entity0, \"length\"")); @@ -313,8 +312,7 @@ factors.add(factor2); scenario.setFactors(factors); - SimulationService service = SimulationService.getService(); - String scriptContent = service.generatePreScript(scenario); + String scriptContent = FactorHelper.generatePreScript(scenario); //log.info("Script = " + scriptContent); Assert.assertTrue(scriptContent.contains("org.nuiton.math.matrix.MatrixNDImpl ")); Assert.assertTrue(scriptContent.contains("db.findByTopiaId(\"org.nuiton.math.matrix.MatrixND#563456293453#2.456347646\");")); @@ -331,12 +329,11 @@ public void testFactorPreScriptEquation() throws StorageException, TopiaException { // factor - Factor factorEquation = new Factor("test.equation.name.K1"); - EquationContinuousDomain domain1 = new EquationContinuousDomain(); - domain1.setReferenceValue(10.0); - domain1.setCoefficient(0.1); - domain1.setVariableName("K1"); - domain1.setPercentageType(true); + Factor factorEquation = new Factor("test.equation.name"); + ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFPC); + domain1.addDistributionParam("reference", 10.0); + domain1.addDistributionParam("coefficient", 0.1); + factorEquation.setEquationVariableName("K1"); factorEquation.setDomain(domain1); factorEquation.setPath("fr.ifremer.equation1#testFactorPreScriptEquation"); factorEquation.setValueForIdentifier(0.4); @@ -347,8 +344,7 @@ factors.add(factorEquation); scenario.setFactors(factors); - SimulationService service = SimulationService.getService(); - String scriptContent = service.generatePreScript(scenario); + String scriptContent = FactorHelper.generatePreScript(scenario); //log.info("Script = " + scriptContent); // le nom de la valeur de la variable n'apparait pas "en elle meme" @@ -375,18 +371,18 @@ // factor pop Factor factorPop = new Factor("myPopulationParams"); - factorPop.setDomain(new MatrixContinuousDomain()); + factorPop.setDomain(new ContinuousDomain()); factorPop.setPath("parameters.population.xxx.number"); MatrixND mat = MatrixFactory.getInstance().create(new int[]{2, 3}); MatrixHelper.convertToId(mat); factorPop.setValue(mat); // factor rule, species = c'est une des especes de la base BaseMotosICA - Rule ruleTacPoids = RuleStorage.getRule("TACpoids").getNewRuleInstance(); + Rule ruleTacPoids = RuleStorage.getRule("TACpoids").getNewInstance(); Properties props = new Properties(); props.setProperty("rule.0.parameter.species", "fr.ifremer.isisfish.entities.Species#1169028645830#0.022262364425031378"); RuleHelper.populateRule(0, regionContext, ruleTacPoids, props); - Rule ruleTailleMin = RuleStorage.getRule("TailleMin").getNewRuleInstance(); + Rule ruleTailleMin = RuleStorage.getRule("TailleMin").getNewInstance(); props = new Properties(); props.setProperty("rule.0.parameter.species", "fr.ifremer.isisfish.entities.Species#1169028645830#0.022262364425031378"); props.setProperty("rule.0.parameter.propSurvie", "42"); @@ -405,8 +401,7 @@ scenario1.setFactors(factors); // generate prescript for that wonderfull scenario - SimulationService service = SimulationService.getService(); - String preScriptContent = service.generatePreScript(scenario1); + String preScriptContent = FactorHelper.generatePreScript(scenario1); //log.info("Script = " + preScriptContent); Assert.assertTrue(preScriptContent.contains("params.setProperty(\"population.xxx.number\"")); @@ -430,7 +425,7 @@ // factor pop Factor factorPop = new Factor("parameters of rule TACpoids"); - factorPop.setDomain(new MatrixContinuousDomain()); + factorPop.setDomain(new ContinuousDomain()); factorPop.setPath("parameters.rule.0.parameter.tacInTons"); factorPop.setValue(42.0); @@ -439,8 +434,7 @@ scenario1.setFactors(factors); // generate prescript for that wonderfull scenario - SimulationService service = SimulationService.getService(); - String preScriptContent = service.generatePreScript(scenario1); + String preScriptContent = FactorHelper.generatePreScript(scenario1); log.info("Script = " + preScriptContent); Assert.assertTrue(preScriptContent.contains("params.setProperty(\"rule.0.parameter.tacInTons\",\"42.0\");")); @@ -462,18 +456,18 @@ // factor 1 Factor factor1 = new Factor("factor 1 (double)"); - ContinuousDomain domain1 = new ContinuousDomain(); - domain1.setMinBound(0.0); - domain1.setMaxBound(50.0); + ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFMM); + domain1.addDistributionParam("min", 0.0); + domain1.addDistributionParam("max", 50.0); factor1.setCardinality(4); factor1.setDomain(domain1); factor1.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521013#0.1715620681984218#maxLength"); // factor 2 Factor factor2 = new Factor("factor 2 (double)"); - ContinuousDomain domain2 = new ContinuousDomain(); - domain2.setMinBound(1.0); - domain2.setMaxBound(9.0); + ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFMM); + domain2.addDistributionParam("min", 1.0); + domain2.addDistributionParam("max", 9.0); factor2.setCardinality(3); factor2.setDomain(domain2); factor2.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521064#0.022976136053553198#minLength"); @@ -517,8 +511,7 @@ scenario1.addFactor(group2); // generate prescript for that wonderfull scenario - SimulationService service = SimulationService.getService(); - String preScriptContent = service.generatePreScript(scenario1); + String preScriptContent = FactorHelper.generatePreScript(scenario1); //log.info("Script = " + preScriptContent); Assert.assertTrue(preScriptContent.contains("/* factor group : myContinuousGroup */")); @@ -557,8 +550,7 @@ scenario1.addFactor(factor1); // generate prescript for that wonderfull scenario - SimulationService service = SimulationService.getService(); - String preScriptContent = service.generatePreScript(scenario1); + String preScriptContent = FactorHelper.generatePreScript(scenario1); log.info("Script = " + preScriptContent); Assert.assertTrue(preScriptContent.contains("beanUtils.convert(\"String myValue=\\\"test2\\\"")); Modified: trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/FactorTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/FactorTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/FactorTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2009 - 2010 Ifremer, Code Lutin + * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, 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 @@ -39,8 +39,6 @@ import fr.ifremer.isisfish.rule.RuleMock; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; /** @@ -63,9 +61,9 @@ public void testIntFactor() { Factor factor = new Factor("testint"); - ContinuousDomain domain = new ContinuousDomain(); - domain.setMinBound(0.0); - domain.setMaxBound(50.0); + ContinuousDomain domain = new ContinuousDomain(Distribution.QUNIFMM); + domain.addDistributionParam("min", 0.0); + domain.addDistributionParam("max", 50.0); factor.setDomain(domain); factor.setPath("org.nuiton.factor#1234567890#0.12242345354#name"); factor.setValueForIdentifier(0.5); @@ -136,191 +134,63 @@ * @see MatrixND */ @Test - public void testMatrixContinuousFactor() { - - // matrix 1 - MatrixND matrix1 = MatrixFactory.getInstance().create("test1", - new int[] { 3, 2 }, new String[] { "col1", "col2" }); - matrix1.setValue(new int[] { 0, 0 }, 1); - matrix1.setValue(new int[] { 0, 1 }, -14); - matrix1.setValue(new int[] { 1, 0 }, 21); - matrix1.setValue(new int[] { 1, 1 }, 2); - matrix1.setValue(new int[] { 2, 0 }, 3); - matrix1.setValue(new int[] { 2, 1 }, -1); - - // matrix minBound - MatrixND minBound = MatrixFactory.getInstance().create("test1", - new int[]{3, 2}, new String[]{"col1", "col2"}); - minBound.setValue(new int[]{0, 0}, 0.9); - minBound.setValue(new int[]{0, 1}, -15.4); - minBound.setValue(new int[]{1, 0}, 18.9); - minBound.setValue(new int[]{1, 1}, 1.8); - minBound.setValue(new int[]{2, 0}, 2.7); - minBound.setValue(new int[]{2, 1}, -1.1); - - // matrix maxBound - MatrixND maxBound = MatrixFactory.getInstance().create("test1", - new int[]{3, 2}, new String[]{"col1", "col2"}); - maxBound.setValue(new int[]{0, 0}, 1.1); - maxBound.setValue(new int[]{0, 1}, -12.6); - maxBound.setValue(new int[]{1, 0}, 23.1); - maxBound.setValue(new int[]{1, 1}, 2.2); - maxBound.setValue(new int[]{2, 0}, 3.3); - maxBound.setValue(new int[]{2, 1}, -0.9); - - // factor - Factor factor = new Factor("testmatrix"); - MatrixContinuousDomain domain = new MatrixContinuousDomain(true); - domain.setReferenceValue(matrix1); - domain.setCoefficient(0.1); - factor.setDomain(domain); - factor.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim"); - factor.setValueForIdentifier(0.1); - - Assert.assertEquals(0.92, ((MatrixND)factor.getValue()).getValue(new int[] { 0, 0 }),0.0000001); - Assert.assertEquals(2.76, ((MatrixND)factor.getValue()).getValue(new int[] { 2, 0 }),0.0000001); - Assert.assertEquals(0.1, (Double)factor.getDisplayedValue(),0); - - // matrix 2 - MatrixND matrix2 = MatrixFactory.getInstance().create("test1", - new int[] { 3, 2 }, new String[] { "col1", "col2" }); - matrix2.setValue(new int[] { 0, 0 }, 1); - matrix2.setValue(new int[] { 0, 1 }, -14); - matrix2.setValue(new int[] { 1, 0 }, 21); - matrix2.setValue(new int[] { 1, 1 }, 2); - matrix2.setValue(new int[] { 2, 0 }, 3); - matrix2.setValue(new int[] { 2, 1 }, -1); - - // factor 2 - Factor factor2 = new Factor("testmatrix"); - MatrixContinuousDomain domain2 = new MatrixContinuousDomain(true); - domain2.setReferenceValue(matrix2); - domain2.setCoefficient(0.1); - factor2.setDomain(domain2); - factor2.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim"); - factor2.setValueForIdentifier(0.2); - - Assert.assertEquals(0.94, ((MatrixND)factor2.getValue()).getValue(new int[] { 0, 0 }),0.0000001); - Assert.assertEquals(2.82, ((MatrixND)factor2.getValue()).getValue(new int[] { 2, 0 }),0.0000001); - //Assert.assertEquals(0,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0); - //Assert.assertEquals(1,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0); - - // matrix 3 - MatrixND matrix3 = MatrixFactory.getInstance().create("test1", - new int[] { 3, 2 }, new String[] { "col1", "col2" }); - matrix3.setValue(new int[] { 0, 0 }, 1); - matrix3.setValue(new int[] { 0, 1 }, -14); - matrix3.setValue(new int[] { 1, 0 }, 21); - matrix3.setValue(new int[] { 1, 1 }, 2); - matrix3.setValue(new int[] { 2, 0 }, 3); - matrix3.setValue(new int[] { 2, 1 }, -1); - - // factor 3 - Factor factor3 = new Factor("testmatrix"); - MatrixContinuousDomain domain3 = new MatrixContinuousDomain(true); - domain3.setReferenceValue(matrix3); - domain3.setCoefficient(0.2); - factor3.setDomain(domain3); - factor3.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim"); - factor3.setValueForIdentifier(0.1); - - Assert.assertEquals(0.84, ((MatrixND)factor3.getValue()).getValue(new int[] { 0, 0 }),0.0000001); - Assert.assertEquals(2.52, ((MatrixND)factor3.getValue()).getValue(new int[] { 2, 0 }),0.0000001); - //Assert.assertEquals(0,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0); - //Assert.assertEquals(1,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0); - - // matrix 3 - MatrixND matrix4 = MatrixFactory.getInstance().create("test1", - new int[] { 3, 2 }, new String[] { "col1", "col2" }); - matrix4.setValue(new int[] { 0, 0 }, 1); - matrix4.setValue(new int[] { 0, 1 }, -14); - matrix4.setValue(new int[] { 1, 0 }, 21); - matrix4.setValue(new int[] { 1, 1 }, 2); - matrix4.setValue(new int[] { 2, 0 }, 3); - matrix4.setValue(new int[] { 2, 1 }, -1); - - // factor 3 - Factor factor4 = new Factor("testmatrix"); - MatrixContinuousDomain domain4 = new MatrixContinuousDomain(true); - domain4.setReferenceValue(matrix4); - domain4.setCoefficient(0.3); - factor4.setDomain(domain4); - factor4.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim"); - factor4.setValueForIdentifier(0.4); - - Assert.assertEquals(0.94, ((MatrixND)factor4.getValue()).getValue(new int[] { 0, 0 }),0.0000001); - Assert.assertEquals(2.82, ((MatrixND)factor4.getValue()).getValue(new int[] { 2, 0 }),0.0000001); - //Assert.assertEquals(0,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0); - //Assert.assertEquals(1,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0); - - if (log.isInfoEnabled()) { - log.info("factor#toString() = " + factor); - } - } - - /** - * Test factor with matrix. - * - * @see MatrixND - */ - @Test public void testEquationContinuousFactor() { // factor Factor factor = new Factor("testequation"); - EquationContinuousDomain domain = new EquationContinuousDomain(true); - domain.setCoefficient(0.1); - domain.setVariableName("Linf"); - domain.setReferenceValue(3.0); + ContinuousDomain domain = new ContinuousDomain(Distribution.QUNIFPC); + domain.addDistributionParam("reference", 3.0); + domain.addDistributionParam("coefficient", 0.1); + factor.setEquationVariableName("Linf"); factor.setDomain(domain); factor.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim"); factor.setValueForIdentifier(0.1); Assert.assertEquals(2.76, (Double)factor.getValue(),0.0000001); - Assert.assertEquals(2.7,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0); - Assert.assertEquals(3.3,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0); + //Assert.assertEquals(2.7,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0); + //Assert.assertEquals(3.3,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0); // factor 2 Factor factor2 = new Factor("testequation"); - EquationContinuousDomain domain2 = new EquationContinuousDomain(true); - domain2.setCoefficient(0.1); - domain2.setVariableName("Linf"); - domain2.setReferenceValue(3.0); + ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFPC); + domain2.addDistributionParam("reference", 3.0); + domain2.addDistributionParam("coefficient", 0.1); + factor2.setEquationVariableName("Linf"); factor2.setDomain(domain2); factor2.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim"); factor2.setValueForIdentifier(0.1); Assert.assertEquals(2.76, (Double)factor2.getValue(),0.0000001); - Assert.assertEquals(2.7,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0); - Assert.assertEquals(3.3,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0); + //Assert.assertEquals(2.7,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0); + //Assert.assertEquals(3.3,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0); // factor 3 Factor factor3 = new Factor("testequation"); - EquationContinuousDomain domain3 = new EquationContinuousDomain(true); - domain3.setCoefficient(0.1); - domain3.setVariableName("Linf"); - domain3.setReferenceValue(3.0); + ContinuousDomain domain3 = new ContinuousDomain(Distribution.QUNIFPC); + domain3.addDistributionParam("reference", 3.0); + domain3.addDistributionParam("coefficient", 0.1); + factor3.setEquationVariableName("Linf"); factor3.setDomain(domain3); factor3.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim"); factor3.setValueForIdentifier(0.2); Assert.assertEquals(2.82, (Double)factor3.getValue(),0.0000001); - Assert.assertEquals(2.7,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0); - Assert.assertEquals(3.3,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0); + //Assert.assertEquals(2.7,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0); + //Assert.assertEquals(3.3,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0); // factor 4 Factor factor4 = new Factor("testequation"); - EquationContinuousDomain domain4 = new EquationContinuousDomain(true); - domain4.setCoefficient(0.05); - domain4.setVariableName("Linf"); - domain4.setReferenceValue(3.0); + ContinuousDomain domain4 = new ContinuousDomain(Distribution.QUNIFPC); + domain4.addDistributionParam("reference", 3.0); + domain4.addDistributionParam("coefficient", 0.05); + factor4.setEquationVariableName("Linf"); factor4.setDomain(domain4); factor4.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim"); factor4.setValueForIdentifier(0.1); Assert.assertEquals(2.88, (Double)factor4.getValue(),0.0000001); - Assert.assertEquals(2.7,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0); - Assert.assertEquals(3.3,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0); + //Assert.assertEquals(2.7,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0); + //Assert.assertEquals(3.3,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0); if (log.isInfoEnabled()) { log.info("factor#toString() = " + factor); @@ -370,9 +240,9 @@ factor.setPath("fr.ifremer.isisfish.entities.Cell#lenght"); factor.setComment("answer to life"); - ContinuousDomain domain = new ContinuousDomain(); - domain.setMinBound(0.0); - domain.setMaxBound(50.0); + ContinuousDomain domain = new ContinuousDomain(Distribution.QUNIFMM); + domain.addDistributionParam("min", 0.0); + domain.addDistributionParam("max", 50.0); factor.setDomain(domain); factor.setCardinality(2); Modified: trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisRandomMock.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisRandomMock.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisRandomMock.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -35,8 +35,6 @@ import fr.ifremer.isisfish.simulator.launcher.SimulationServiceTest; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; /** * Implementation of SensitivityAnalysis that take random value in available @@ -100,28 +98,10 @@ Factor factor = factors.get(pickedFactor); Domain domain = factor.getDomain(); - if (domain instanceof MatrixContinuousDomain) { - MatrixContinuousDomain cDomain = (MatrixContinuousDomain) domain; - Object minValue = cDomain.getMinBound(); - Object maxValue = cDomain.getMaxBound(); - - factor.setValueForIdentifier(minValue.toString()); - scenario.addFactor(factor); - factor.setValueForIdentifier(maxValue.toString()); - scenario.addFactor(factor); - } else if (domain instanceof EquationContinuousDomain) { - EquationContinuousDomain cDomain = (EquationContinuousDomain) domain; - Object minValue = cDomain.getMinBound(); - Object maxValue = cDomain.getMaxBound(); - - factor.setValueForIdentifier(minValue.toString()); - scenario.addFactor(factor); - factor.setValueForIdentifier(maxValue.toString()); - scenario.addFactor(factor); - } else if (domain instanceof ContinuousDomain) { + if (domain instanceof ContinuousDomain) { ContinuousDomain cDomain = (ContinuousDomain) domain; - Object minValue = cDomain.getMinBound(); - Object maxValue = cDomain.getMaxBound(); + Object minValue = 10.5; //cDomain.getMinBound(); + Object maxValue = 15.5; //cDomain.getMaxBound(); factor.setValueForIdentifier(minValue); scenario.addFactor(factor); Copied: trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java (from rev 3968, branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java) =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java (rev 0) +++ trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,498 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2013 Ifremer, Code Lutin, 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 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ +package fr.ifremer.isisfish.simulator.sensitivity; + +import java.io.File; +import java.io.IOException; + +import fr.ifremer.isisfish.IsisFish; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.aspectj.util.FileUtil; +import org.junit.After; +import org.junit.Assert; +import org.junit.Assume; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.nuiton.j2r.RException; +import org.nuiton.j2r.RProxy; + +import fr.ifremer.isisfish.AbstractIsisFishTest; +import fr.ifremer.isisfish.IsisFishException; +import fr.ifremer.isisfish.datastore.SensitivityAnalysisStorage; +import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; +import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; + +/** + * Test les scripts d'AS disponible dans les ressources de tests. + * + * @author Eric Chatellier + */ +public class SensitivityAnalysisTest extends AbstractIsisFishTest { + + private static final Log log = LogFactory.getLog(SensitivityAnalysisTest.class); + + /** Simulation dir used to save Rdata files. */ + protected File simulationsDir; + + /** + * Ces tests utilisent directement le moteur R, s'il n'est pas disponible, + * on va eviter de faire les tests. + */ + @Before + public void setUp() { + + System.setProperty("R.type", "jni"); + try { + new RProxy(); + } catch (RException e) { + if (log.isDebugEnabled()) { + log.debug("R not available. Skipping current test"); + } + Assume.assumeNoException(e); + } + simulationsDir = FileUtil.getTempDir("simulations"); + } + + protected DesignPlan getDesignPlan(Factor... factors) { + DesignPlan result = new DesignPlan(); + int factorIndex = 1; + for (Factor factor : factors) { + factor.setName("f" + factorIndex++); + result.addFactor(factor); + } + return result; + } + + protected FactorGroup getFactorGroup(boolean continuous, Factor... factors) { + FactorGroup result = new FactorGroup("", continuous); + for (Factor factor : factors) { + result.addFactor(factor); + } + return result; + } + + protected Factor getContinuousDoubleUniformMMFactor() { + // factor 1, min/max on int + Factor factor1 = new Factor("test unifmm"); + factor1.setCardinality(2); + ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFMM); + domain1.addDistributionParam("min", 0.0); + domain1.addDistributionParam("max", 2.0); + factor1.setDomain(domain1); + factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name"); + return factor1; + } + + protected Factor getContinuousDoubleUniformPcFactor() { + // factor 1, min/max on int + Factor factor2 = new Factor("test unifpc"); + factor2.setCardinality(2); + ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFPC); + domain2.addDistributionParam("reference", 40.0); + domain2.addDistributionParam("coefficient", 0.05); + factor2.setDomain(domain2); + factor2.setPath("org.nuiton.factor#1234567890#0.12242345354#name"); + return factor2; + } + + /*protected Factor getContinuousMatrixUniformPCFactor() { + // matrix 1 + MatrixND matrix1 = MatrixFactory.getInstance().create("test1", + new int[] { 3, 2 }, new String[] { "col1", "col2" }); + matrix1.setValue(new int[] { 0, 0 }, 1); + matrix1.setValue(new int[] { 0, 1 }, -14); + matrix1.setValue(new int[] { 1, 0 }, 21); + matrix1.setValue(new int[] { 1, 1 }, 2); + matrix1.setValue(new int[] { 2, 0 }, 3); + matrix1.setValue(new int[] { 2, 1 }, -1); + + // factor + Factor factor2 = new Factor("tes tmatrix unifpc"); + factor2.setCardinality(3); + ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFPC); + domain2.addDistributionParam("reference", matrix1); + domain2.addDistributionParam("coefficient", 0.1); + factor2.setDomain(domain2); + factor2.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim"); + return factor2; + }*/ + + protected Factor getContinuousDoubleCauchyFactor() { + // factor 1, min/max on int + Factor factor2 = new Factor("test cauchy"); + factor2.setCardinality(2); + ContinuousDomain domain2 = new ContinuousDomain(Distribution.DCAUCHY); + domain2.addDistributionParam("location", 0.0); + domain2.addDistributionParam("scale", 1.0); + factor2.setDomain(domain2); + factor2.setPath("org.nuiton.factor#1234567890#0.12242345354#name"); + return factor2; + } + + protected Factor getContinuousDoubleChisqFactor() { + // factor 1, min/max on int + Factor factor1 = new Factor("test dchisq"); + factor1.setCardinality(2); + ContinuousDomain domain1 = new ContinuousDomain(Distribution.DCHISQ); + domain1.addDistributionParam("df", 1.0); + factor1.setDomain(domain1); + factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name"); + return factor1; + } + + protected Factor getDiscreteIntFactor() { + // factor 1, min/max on int + Factor factor1 = new Factor("test int"); + DiscreteDomain domain1 = new DiscreteDomain(); + domain1.getValues().put("1", 42.0); + domain1.getValues().put("2", 43.0); + domain1.getValues().put("3", 44.0); + factor1.setDomain(domain1); + factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name"); + return factor1; + } + + protected void displayScenarios(SensitivityScenarios scenarii) { + if (log.isDebugEnabled()) { + int scIndex = 1; + for (Scenario scenario : scenarii.getScenarios()) { + log.debug("Scenario " + scIndex++); + for (Factor factor : scenario.getFactors()) { + log.debug("Factor " + factor.getName() + " = " + factor.getValue()); + } + } + } + } + + /** + * Test tmp files/dir. + * + * @throws IOException + */ + @After + public void clear() throws IOException { + FileUtils.deleteDirectory(simulationsDir); + } + + /** + * Test de génération des scenarios via la methode Morris. + * + * @throws IsisFishException + * @throws SensitivityException + */ + @Test + public void testMorris() throws IsisFishException, SensitivityException { + SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("Morris").getNewInstance(); + Assert.assertNotNull("Morris script not found in test data", script); + + // uniform min/max + DesignPlan designPlan = getDesignPlan(getContinuousDoubleUniformMMFactor(), getContinuousDoubleUniformMMFactor()); + SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir); + Assert.assertTrue(scenarii.getScenarios().size() >= 3); // random, can be 9, 12 + for (Scenario scenario : scenarii.getScenarios()) { + for (Factor factor : scenario.getFactors()) { + double value = (Double)factor.getValue(); + Assert.assertTrue(value >= 0.0 && value <= 2.0); + } + } + + // uniform pc + designPlan = getDesignPlan(getContinuousDoubleUniformPcFactor(), getContinuousDoubleUniformPcFactor()); + scenarii = script.compute(designPlan, simulationsDir); + Assert.assertTrue(scenarii.getScenarios().size() >= 3); // random, can be 9, 12 + for (Scenario scenario : scenarii.getScenarios()) { + for (Factor factor : scenario.getFactors()) { + double value = (Double)factor.getValue(); + Assert.assertTrue(value >= 30.0 && value <= 50.0); + } + } + + /* matrix uniform + designPlan = getDesignPlan(getContinuousMatrixUniformPCFactor(), getContinuousMatrixUniformPCFactor()); + scenarii = script.compute(designPlan, simulationsDir); + Assert.assertTrue(scenarii.getScenarios().size() >= 3); // random, can be 9, 12 + for (Scenario scenario : scenarii.getScenarios()) { + for (Factor factor : scenario.getFactors()) { + MatrixND value = (MatrixND)factor.getValue(); + Assert.assertTrue(value.getValue(0, 0) >= 0.9 && value.getValue(0, 0) <= 1.1); + } + }*/ + + // check fail is discrete + designPlan = getDesignPlan(getDiscreteIntFactor(),getContinuousDoubleUniformMMFactor()); + try { + script.compute(designPlan, simulationsDir); + Assert.fail("Exception should have been thrown at this stage"); + } catch (SensitivityException eee){ + //do nothing + } + + } + + /** + * Test de génération des scenarios via la methode DOptimal. + * + * This method accept discretes factors. + * + * @throws IsisFishException + * @throws SensitivityException + */ + @Test + @Ignore + public void testDOptimal() throws IsisFishException, SensitivityException { + SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("DOptimal").getNewInstance(); + Assert.assertNotNull("DOptimal script not found in test data", script); + + DesignPlan designPlan = getDesignPlan(getContinuousDoubleUniformMMFactor(), getContinuousDoubleUniformMMFactor()); + SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir); + for (Scenario scenario : scenarii.getScenarios()) { + for (Factor factor : scenario.getFactors()) { + double value = (Double)factor.getValue(); + Assert.assertTrue(value >= 0.0 && value <= 2.0); + } + } + + // test discretes + designPlan = getDesignPlan(getDiscreteIntFactor(), getDiscreteIntFactor()); + scenarii = script.compute(designPlan, simulationsDir); + displayScenarios(scenarii); + } + + /** + * Test de génération des scenarios via la methode Fast. + * + * @throws IsisFishException + * @throws SensitivityException + */ + @Test + public void testFast() throws IsisFishException, SensitivityException { + SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("Fast").getNewInstance(); + Assert.assertNotNull("Fast script not found in test data", script); + + // uniform min/max + DesignPlan designPlan = getDesignPlan(getContinuousDoubleUniformMMFactor(), getContinuousDoubleUniformMMFactor()); + SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir); + Assert.assertEquals(40, scenarii.getScenarios().size()); + for (Scenario scenario : scenarii.getScenarios()) { + for (Factor factor : scenario.getFactors()) { + double value = (Double)factor.getValue(); + // TODO: fix NaN values here + //Assert.assertTrue(value >= 0.0 && value <= 2.0); + } + } + + // uniform pc + designPlan = getDesignPlan(getContinuousDoubleUniformPcFactor(), getContinuousDoubleUniformPcFactor()); + scenarii = script.compute(designPlan, simulationsDir); + Assert.assertEquals(40, scenarii.getScenarios().size()); + displayScenarios(scenarii); + + // check fail is discrete + designPlan = getDesignPlan(getDiscreteIntFactor(),getContinuousDoubleUniformMMFactor()); + try { + script.compute(designPlan, simulationsDir); + Assert.fail("Exception should have been thrown at this stage"); + } catch (SensitivityException eee){ + //do nothing + } + + } + + /** + * Test de génération des scenarios via la methode OptimumLHS. + * + * @throws IsisFishException + * @throws SensitivityException + */ + @Test + public void testOptimumLHS() throws IsisFishException, SensitivityException { + SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("OptimumLHS").getNewInstance(); + Assert.assertNotNull("OptimumLHS script not found in test data", script); + + // uniform min/max + DesignPlan designPlan = getDesignPlan(getContinuousDoubleUniformMMFactor(), getContinuousDoubleUniformMMFactor()); + SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir); + Assert.assertEquals(10, scenarii.getScenarios().size()); + for (Scenario scenario : scenarii.getScenarios()) { + for (Factor factor : scenario.getFactors()) { + double value = (Double)factor.getValue(); + Assert.assertTrue(value >= 0.0 && value <= 2.0); + } + } + + // uniform pc + designPlan = getDesignPlan(getContinuousDoubleUniformPcFactor(), getContinuousDoubleUniformPcFactor()); + scenarii = script.compute(designPlan, simulationsDir); + Assert.assertEquals(10, scenarii.getScenarios().size()); + displayScenarios(scenarii); + + // check fail is discrete + designPlan = getDesignPlan(getDiscreteIntFactor(),getContinuousDoubleUniformMMFactor()); + try { + script.compute(designPlan, simulationsDir); + Assert.fail("Exception should have been thrown at this stage"); + } catch (SensitivityException eee){ + //do nothing + } + + } + + /** + * Test de génération des scenarios via la methode RandomLHS. + * + * @throws IsisFishException + * @throws SensitivityException + */ + @Test + public void testRandomLHS() throws IsisFishException, SensitivityException { + SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("RandomLHS").getNewInstance(); + Assert.assertNotNull("RandomLHS script not found in test data", script); + + // uniform min/max + DesignPlan designPlan = getDesignPlan(getContinuousDoubleUniformMMFactor(), getContinuousDoubleUniformMMFactor()); + SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir); + Assert.assertEquals(10, scenarii.getScenarios().size()); + for (Scenario scenario : scenarii.getScenarios()) { + for (Factor factor : scenario.getFactors()) { + double value = (Double)factor.getValue(); + Assert.assertTrue(value >= 0.0 && value <= 2.0); + } + } + + // uniform pc + designPlan = getDesignPlan(getContinuousDoubleUniformPcFactor(), getContinuousDoubleUniformPcFactor()); + scenarii = script.compute(designPlan, simulationsDir); + Assert.assertEquals(10, scenarii.getScenarios().size()); + displayScenarios(scenarii); + + // check fail is discrete + designPlan = getDesignPlan(getDiscreteIntFactor(),getContinuousDoubleUniformMMFactor()); + try { + script.compute(designPlan, simulationsDir); + Assert.fail("Exception should have been thrown at this stage"); + } catch (SensitivityException eee){ + //do nothing + } + + } + + /** + * Test de génération des scenarios via la methode RegularExpandGrid. + * + * This method accept discretes factors. + * + * @throws IsisFishException + * @throws SensitivityException + */ + @Test + @Ignore + public void testRegularExpandGrid() throws IsisFishException, SensitivityException { + SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("RegularExpandGrid").getNewInstance(); + Assert.assertNotNull("RegularExpandGrid script not found in test data", script); + + DesignPlan designPlan = getDesignPlan(getContinuousDoubleUniformMMFactor(), getContinuousDoubleUniformMMFactor()); + SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir); + for (Scenario scenario : scenarii.getScenarios()) { + for (Factor factor : scenario.getFactors()) { + double value = (Double)factor.getValue(); + Assert.assertTrue(value >= 0.0 && value <= 2.0); + } + } + + // test discretes + designPlan = getDesignPlan(getDiscreteIntFactor(), getDiscreteIntFactor()); + scenarii = script.compute(designPlan, simulationsDir); + displayScenarios(scenarii); + } + + /** + * Test de génération des scenarios via la methode RegularFractions. + * + * @throws IsisFishException + * @throws SensitivityException + */ + @Test + public void testRegularFractions() throws IsisFishException, SensitivityException { + SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("RegularFractions").getNewInstance(); + // this script need pathToFunction parameter to find R script in current directory + SensitivityAnalysisStorage.setParameterValue(script,"pathToFunction", + IsisFish.config.getDatabaseDirectory().getAbsolutePath() + File.separator + "sensitivityanalysis"); + Assert.assertNotNull("RegularFractions script not found in test data", script); + + // test continuous + DesignPlan designPlan = getDesignPlan(getContinuousDoubleUniformMMFactor(), getContinuousDoubleUniformMMFactor()); + SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir); + displayScenarios(scenarii); + + } + + /** + * Test de génération des scenarios via la methode Sobol. + * + * @throws IsisFishException + * @throws SensitivityException + */ + @Test + public void testSobol() throws IsisFishException, SensitivityException { + SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("Sobol").getNewInstance(); + Assert.assertNotNull("Sobol script not found in test data", script); + + // sobol avec uniform MM + DesignPlan designPlan = getDesignPlan(getContinuousDoubleUniformMMFactor(), getContinuousDoubleUniformMMFactor()); + SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir); + Assert.assertEquals(80, scenarii.getScenarios().size()); + for (Scenario scenario : scenarii.getScenarios()) { + for (Factor factor : scenario.getFactors()) { + double value = (Double)factor.getValue(); + Assert.assertTrue(value >= 0.0 && value <= 2.0); + } + } + + // sobol avec cauchy/chisq + designPlan = getDesignPlan(getContinuousDoubleCauchyFactor(), getContinuousDoubleChisqFactor()); + scenarii = script.compute(designPlan, simulationsDir); + Assert.assertEquals(80, scenarii.getScenarios().size()); + for (Scenario scenario : scenarii.getScenarios()) { + for (Factor factor : scenario.getFactors()) { + double value = (Double)factor.getValue(); + Assert.assertTrue(value != 0.0); + } + } + + // check fail is discrete + designPlan = getDesignPlan(getDiscreteIntFactor(),getContinuousDoubleUniformMMFactor()); + try { + script.compute(designPlan, simulationsDir); + Assert.fail("Exception should have been thrown at this stage"); + } catch (SensitivityException eee){ + //do nothing + } + + } +} Modified: trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtilsTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtilsTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtilsTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -23,9 +23,25 @@ package fr.ifremer.isisfish.simulator.sensitivity; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Properties; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.junit.Assert; import org.junit.Test; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaContextFactory; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.TopiaNotFoundException; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.TopiaEntity; +import fr.ifremer.isisfish.IsisFishDAOHelper; +import fr.ifremer.isisfish.datastore.IsisH2Config; + /** * Test for SensitivityUtils class. * @@ -37,6 +53,9 @@ */ public class SensitivityUtilsTest { + /** Logger for this class */ + private static final Log log = LogFactory.getLog(SensitivityUtilsTest.class); + /** * Test le résultat attendu de l'echappement des noms de facteurs. */ @@ -45,4 +64,57 @@ Assert.assertEquals("test_factor_pour_R", SensitivityUtils.espaceFactorName("test factor pour R")); Assert.assertEquals("factor2_selectivite", SensitivityUtils.espaceFactorName("factor2.sélectivité")); } + + /** + * Return a basic valid topia context. + * + * @throws TopiaNotFoundException + */ + protected TopiaContext getTopiaContext() throws TopiaNotFoundException { + Properties config = new Properties(); + IsisH2Config.addMemDatabaseConfig(config, "test"); + IsisH2Config.addHibernateMapping(config); + TopiaContext context = TopiaContextFactory.getContext(config); + return context; + } + + /** + * Test (par introspection) que tous les facteurs existent. + * + * @throws ClassNotFoundException + * @throws IllegalAccessException + * @throws InstantiationException + * @throws NoSuchMethodException + * @throws SecurityException + * @throws InvocationTargetException + * @throws IllegalArgumentException + * @throws TopiaException + */ + @Test + public void testFactorExistence() throws InstantiationException, IllegalAccessException, + ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, + InvocationTargetException, TopiaException { + Properties factors = SensitivityUtils.getProperties(); + + TopiaContext testTC = getTopiaContext(); + TopiaContext context = testTC.beginTransaction(); + for (String factorName : factors.stringPropertyNames()) { + String className = factorName.substring(0, factorName.indexOf(".")); + String propertyName = StringUtils.capitalize(factorName.substring(factorName.indexOf(".") + 1)); + + // Harder method + // but topia context is needed by some getXXX() methods + Method mStatic = IsisFishDAOHelper.class.getMethod("get" + className + "DAO", TopiaContext.class); + TopiaDAO<TopiaEntity> dao = (TopiaDAO<TopiaEntity>) mStatic.invoke(null, new Object[] { context }); + Assert.assertNotNull("No DOA found for factor " + factorName, dao); + + // call proper property + if (log.isDebugEnabled()) { + log.debug(" and call get" + propertyName + "() on " + className); + } + Method m = dao.getEntityClass().getMethod("get" + propertyName); + Assert.assertNotNull("getter not found for " + factorName, m); + } + context.closeContext(); + } } Modified: trunk/src/test/java/fr/ifremer/isisfish/types/MonthTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/types/MonthTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/types/MonthTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.types; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.util.LinkedList; import java.util.List; @@ -78,12 +78,12 @@ MatrixND tmp = MatrixFactory.getInstance().create( "test", new List[] { monthList }, - new String[] { _("isisfish.populationSeasonInfo.months") }); + new String[] { t("isisfish.populationSeasonInfo.months") }); MatrixND result = MatrixFactory.getInstance().create( "test", new List[] { monthList2 }, - new String[] { _("isisfish.populationSeasonInfo.months") }); + new String[] { t("isisfish.populationSeasonInfo.months") }); tmp.pasteSemantics(result); } Modified: trunk/src/test/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeModelTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeModelTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeModelTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -25,7 +25,7 @@ package fr.ifremer.isisfish.ui.sensitivity; -import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.t; import java.awt.HeadlessException; import javax.swing.JDialog; @@ -42,6 +42,7 @@ import org.nuiton.math.matrix.MatrixND; import fr.ifremer.isisfish.AbstractIsisFishTest; +import fr.ifremer.isisfish.simulator.sensitivity.Distribution; import fr.ifremer.isisfish.simulator.sensitivity.Factor; import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; @@ -79,9 +80,9 @@ Factor factor1 = new Factor( "testint"); - ContinuousDomain domain1 = new ContinuousDomain(); - domain1.setMinBound(0.0); - domain1.setMaxBound(50.0); + ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFMM); + domain1.addDistributionParam("min", 0.0); + domain1.addDistributionParam("max", 50.0); factor1.setDomain(domain1); factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name"); factor1.setValueForIdentifier(0.5); @@ -141,7 +142,7 @@ @Override public void run() { JOptionPane.showMessageDialog(dialog, tree, - _("Tree factor model"), + t("Tree factor model"), JOptionPane.INFORMATION_MESSAGE); } }); Deleted: trunk/src/test/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtilsTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtilsTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtilsTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,126 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2010 Ifremer, Code Lutin, 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 - * 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package fr.ifremer.isisfish.ui.sensitivity; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Properties; - -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.junit.Assert; -import org.junit.Test; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaContextFactory; -import org.nuiton.topia.TopiaException; -import org.nuiton.topia.TopiaNotFoundException; -import org.nuiton.topia.persistence.TopiaDAO; -import org.nuiton.topia.persistence.TopiaEntity; - -import fr.ifremer.isisfish.AbstractIsisFishTest; -import fr.ifremer.isisfish.IsisFishDAOHelper; -import fr.ifremer.isisfish.datastore.IsisH2Config; -import fr.ifremer.isisfish.entities.VariableDAO; - -/** - * Test for {@link SensitivityUtils} class. - * - * @author chatellier - * @version $Revision$ - * - * Last update : $Date$ - * By : $Author$ - */ -public class SensitivityUtilsTest extends AbstractIsisFishTest { - - /** Logger for this class */ - private static final Log log = LogFactory - .getLog(SensitivityUtilsTest.class); - - /** - * Return a basic valid topia context. - * - * @throws TopiaNotFoundException - */ - protected TopiaContext getTopiaContext() throws TopiaNotFoundException { - Properties config = new Properties(); - IsisH2Config.addMemDatabaseConfig(config, "test"); - IsisH2Config.addHibernateMapping(config); - TopiaContext context = TopiaContextFactory.getContext(config); - return context; - } - - /** - * Test (par introspection) que tous les facteurs existent. - * - * @throws ClassNotFoundException - * @throws IllegalAccessException - * @throws InstantiationException - * @throws NoSuchMethodException - * @throws SecurityException - * @throws InvocationTargetException - * @throws IllegalArgumentException - * @throws TopiaException - */ - @Test - public void testFactorExistence() throws InstantiationException, IllegalAccessException, - ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, - InvocationTargetException, TopiaException { - Properties factors = SensitivityUtils.getProperties(); - - TopiaContext testTC = getTopiaContext(); - TopiaContext context = testTC.beginTransaction(); - for (String factorName : factors.stringPropertyNames()) { - String className = factorName.substring(0, factorName.indexOf(".")); - - if ("Variable".equals(className)) { - // test fails with Variable because of contraints integrity - continue; - } - - String propertyName = StringUtils.capitalize(factorName.substring(factorName.indexOf(".") + 1)); - - // Simple method - // TopiaEntity entity = (TopiaEntity)Class.forName("fr.ifremer.isisfish.entities." + className + "Impl").newInstance(); - - // Harder method - // but topia context is needed by some getXXX() methods - Method mStatic = IsisFishDAOHelper.class.getMethod("get" + className + "DAO", TopiaContext.class); - TopiaDAO<TopiaEntity> dao = (TopiaDAO<TopiaEntity>) mStatic.invoke(null, new Object[] { context }); - Assert.assertNotNull("No DOA found for factor " + factorName, dao); - TopiaEntity entity = dao.create(); - - // call proper property - if (log.isDebugEnabled()) { - log.debug(" and call get" + propertyName + "() on " + className); - } - Method m = entity.getClass().getMethod("get" + propertyName); - m.invoke(entity, (Object[]) null); - } - context.closeContext(); - } -} Modified: trunk/src/test/java/fr/ifremer/isisfish/util/CompileHelperTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/util/CompileHelperTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/util/CompileHelperTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -33,6 +33,7 @@ import java.util.Collections; import java.util.List; +import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; @@ -108,7 +109,7 @@ File f = File.createTempFile("testCompile", ".java", getTestDirectory()); String filename = FileUtil.basename(f, ".java"); String code = getFirstClassContent(filename); - FileUtil.writeString(f, code); + FileUtils.writeStringToFile(f, code); List<File> classpath = new ArrayList<File>(); classpath.add(f.getParentFile()); @@ -118,10 +119,11 @@ // essai de chargement de la classe URL[] cp = new URL[] { f.getParentFile().toURI().toURL() }; - ClassLoader cl = new URLClassLoader(cp); - Class<?> c = cl.loadClass(filename); - log.info("class name: " + c.getName()); - Assert.assertEquals(filename, c.getName()); + try (URLClassLoader cl = new URLClassLoader(cp)) { + Class<?> c = cl.loadClass(filename); + log.info("class name: " + c.getName()); + Assert.assertEquals(filename, c.getName()); + } // delete File fclass = new File(f.getAbsolutePath().replaceAll("java$", "class")); @@ -141,12 +143,12 @@ File fA = File.createTempFile("testCompileA", ".java", getTestDirectory()); String filenameA = FileUtil.basename(fA, ".java"); String codeA = getFirstClassContent(filenameA); - FileUtil.writeString(fA, codeA); + FileUtils.writeStringToFile(fA, codeA); File fB = File.createTempFile("testCompileB", ".java", getTestDirectory()); String filenameB = FileUtil.basename(fB, ".java"); String codeB = getSecondClassContent(filenameB, filenameA); - FileUtil.writeString(fB, codeB); + FileUtils.writeStringToFile(fB, codeB); File dest = new File(fB.getParentFile(), "testCompile"); @@ -157,18 +159,20 @@ // essai de chargement de la classe URL[] cp = new URL[] { dest.toURI().toURL() }; - ClassLoader cl = new URLClassLoader(cp); - Class<?> c = cl.loadClass(filenameB); - log.info("class name: " + c.getName()); - Assert.assertEquals(filenameB, c.getName()); + try (URLClassLoader cl = new URLClassLoader(cp)) { + Class<?> c = cl.loadClass(filenameB); + log.info("class name: " + c.getName()); + Assert.assertEquals(filenameB, c.getName()); + } // essai de chargement de la classe cp = new URL[] { dest.toURI().toURL() }; //URL[] cp = new URL[] { dest.toURL() }; - cl = new URLClassLoader(cp); - c = cl.loadClass(filenameA); - log.info("class name: " + c.getName()); - Assert.assertEquals(filenameA, c.getName()); + try (URLClassLoader cl = new URLClassLoader(cp)) { + Class<?> c = cl.loadClass(filenameA); + log.info("class name: " + c.getName()); + Assert.assertEquals(filenameA, c.getName()); + } // delete File fclassA = new File(fA.getAbsolutePath().replaceAll("java$", @@ -179,7 +183,7 @@ fclassB.delete(); fA.delete(); fB.delete(); - FileUtil.deleteRecursively(dest); + FileUtils.deleteQuietly(dest); } /** Deleted: trunk/src/test/java/fr/ifremer/isisfish/util/EvaluateHelperTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/util/EvaluateHelperTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/util/EvaluateHelperTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,175 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2010 Ifremer, Code Lutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package fr.ifremer.isisfish.util; - -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; - -import org.junit.Assert; -import org.junit.Test; - -import fr.ifremer.isisfish.AbstractIsisFishTest; -import fr.ifremer.isisfish.equation.EmigrationEquation; -import fr.ifremer.isisfish.equation.PopulationGrowth; -import fr.ifremer.isisfish.equation.PopulationGrowthReverse; -import fr.ifremer.isisfish.equation.PopulationReproductionEquation; - -/** - * Test class for {@link EvaluatorHelper}. - * - * @author chatellier - * @version $Revision$ - * - * Last update : $Date$ - * By : $Author$ - */ -public class EvaluateHelperTest extends AbstractIsisFishTest { - - /** - * Test #normalizeClassName(). - */ - @Test - public void testNormalizeClassName() { - Assert.assertEquals("Test", EvaluatorHelper.normalizeClassName("Test")); - Assert.assertEquals("Te_t", EvaluatorHelper.normalizeClassName("Te/t")); - Assert.assertEquals("org_test_Test", EvaluatorHelper - .normalizeClassName("org.test.Test")); - } - - /** - * Test #check(). - */ - @Test - public void testCheck() { - String equationContent = "return 12.0;"; - - int result = EvaluatorHelper.check(EmigrationEquation.class, - equationContent, null); - Assert.assertEquals(0, result); - } - - /** - * Test #evaluate(). - */ - @Test - public void testEvaluate() { - String equationContent = "return age * 2.0;"; - - Map<String, Object> args = new HashMap<String, Object>(); - args.put("context", null); - args.put("age", 2.0); - args.put("group", null); - Object result = EvaluatorHelper.evaluate("fr.isisfish.equation", - "TestEvaluate", PopulationGrowth.class, equationContent, args); - - Assert.assertNotNull(result); - Assert.assertEquals("4.0", result.toString()); - } - - /** - * Test #evaluate() but twice to check that previous - * class don't stay in class loader. - */ - @Test - public void testDoubleContentEvaluate() { - - Map<String, Object> args = new HashMap<String, Object>(); - args.put("context", null); - args.put("length", 2.0); - args.put("group", null); - - String equationContent = "return length * 2.0;"; - Object result = EvaluatorHelper.evaluate("fr.isisfish.equation", - "TestDoubleContentEvaluate", PopulationGrowthReverse.class, - equationContent, args); - Assert.assertNotNull(result); - Assert.assertEquals("4.0", result.toString()); - - equationContent = "return length * 3.0;"; - result = EvaluatorHelper.evaluate("fr.isisfish.equation", - "TestDoubleContentEvaluate", PopulationGrowthReverse.class, - equationContent, args); - Assert.assertNotNull(result); - Assert.assertEquals("6.0", result.toString()); - } - - /** - * Test que le repertoire des scripts en bien présent - * dans le classpath de compilation. - */ - @Test - public void testEquationWithDatabaseContent() { - Map<String, Object> args = new HashMap<String, Object>(); - args.put("context", null); - args.put("length", 2.0); - args.put("group", null); - - String equationContent = "String name = scripts.ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP;"; - equationContent += "return length * 2.0;"; - Object result = EvaluatorHelper.evaluate("fr.isisfish.equation", - "TestEquationWithDatabaseContent", PopulationGrowthReverse.class, - equationContent, args); - Assert.assertNotNull(result); - Assert.assertEquals("4.0", result.toString()); - } - - /** - * Test that commons logging logger in present for use in equation. - */ - @Test - public void testEquationWithLogger() { - Map<String, Object> args = new HashMap<String, Object>(); - args.put("context", null); - args.put("length", 2.0); - args.put("group", null); - - String equationContent = "log.info(\"Test logger\");"; - equationContent += "return 1.0;"; - Object result = EvaluatorHelper.evaluate("fr.isisfish.equation", - "TestEquationWithDatabaseContent", PopulationGrowthReverse.class, - equationContent, args); - Assert.assertNotNull(result); - Assert.assertEquals("1.0", result.toString()); - } - - /** - * Test que le contenu du fichier java correspondant à l'equation est - * corectement généré. - * Notemment suite à l'utilsation de paranamer et aux retrait des - * annotations. - */ - @Test - public void testGenerateContent() { - Class clazz = PopulationReproductionEquation.class; - Method method = clazz.getDeclaredMethods()[0]; - String content = EvaluatorHelper.generateContent("fr.ifremer.isisfish.equation", - "Test", method, "return 42.0;"); - - Assert.assertTrue(content.contains("fr.ifremer.isisfish.simulator.SimulationContext context")); - Assert.assertTrue(content.contains("java.util.List<PopulationGroup> groups")); - } -} Copied: trunk/src/test/java/fr/ifremer/isisfish/util/EvaluatorHelperTest.java (from rev 3968, branches/4.0.1/src/test/java/fr/ifremer/isisfish/util/EvaluatorHelperTest.java) =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/util/EvaluatorHelperTest.java (rev 0) +++ trunk/src/test/java/fr/ifremer/isisfish/util/EvaluatorHelperTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,177 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 2010 Ifremer, Code Lutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.util; + +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +import org.junit.Assert; +import org.junit.Test; + +import fr.ifremer.isisfish.AbstractIsisFishTest; +import fr.ifremer.isisfish.equation.EmigrationEquation; +import fr.ifremer.isisfish.equation.PopulationGrowth; +import fr.ifremer.isisfish.equation.PopulationGrowthReverse; +import fr.ifremer.isisfish.equation.PopulationReproductionEquation; +import fr.ifremer.isisfish.simulator.SimulationContext; +import fr.ifremer.isisfish.simulator.SimulationPreScript; + +/** + * Test class for {@link EvaluatorHelper}. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class EvaluatorHelperTest extends AbstractIsisFishTest { + + /** + * Test #normalizeClassName(). + */ + @Test + public void testNormalizeClassName() { + Assert.assertEquals("Test", EvaluatorHelper.normalizeClassName("Test")); + Assert.assertEquals("Te_t", EvaluatorHelper.normalizeClassName("Te/t")); + Assert.assertEquals("org_test_Test", EvaluatorHelper + .normalizeClassName("org.test.Test")); + } + + /** + * Test #check(). + */ + @Test + public void testCheck() { + String equationContent = "return 12.0;"; + + int result = EvaluatorHelper.check(EmigrationEquation.class, + equationContent, null); + Assert.assertEquals(0, result); + } + + /** + * Test #evaluate(). + */ + @Test + public void testEvaluate() { + String equationContent = "return age * 2.0;"; + + Object result = EvaluatorHelper.evaluate("fr.isisfish.equation", + "TestEvaluate", PopulationGrowth.class, equationContent, /*context*/null, /*length*/2.0, /*group*/null); + + Assert.assertNotNull(result); + Assert.assertEquals("4.0", result.toString()); + } + + /** + * Test #evaluate() but twice to check that previous + * class don't stay in class loader. + */ + @Test + public void testDoubleContentEvaluate() { + + Map<String, Object> args = new HashMap<String, Object>(); + args.put("context", null); + args.put("length", 2.0); + args.put("group", null); + + String equationContent = "return length * 2.0;"; + Object result = EvaluatorHelper.evaluate("fr.isisfish.equation", + "TestDoubleContentEvaluate", PopulationGrowthReverse.class, + equationContent, /*context*/null, /*length*/2.0, /*group*/null); + Assert.assertNotNull(result); + Assert.assertEquals("4.0", result.toString()); + + equationContent = "return length * 3.0;"; + result = EvaluatorHelper.evaluate("fr.isisfish.equation", + "TestDoubleContentEvaluate", PopulationGrowthReverse.class, + equationContent, /*context*/null, /*length*/2.0, /*group*/null); + Assert.assertNotNull(result); + Assert.assertEquals("6.0", result.toString()); + } + + /** + * Test que le repertoire des scripts en bien présent + * dans le classpath de compilation. + */ + @Test + public void testEquationWithDatabaseContent() { + + String equationContent = "String name = scripts.ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP;"; + equationContent += "return length * 2.0;"; + Object result = EvaluatorHelper.evaluate("fr.isisfish.equation", + "TestEquationWithDatabaseContent", PopulationGrowthReverse.class, + equationContent, /*context*/null, /*length*/2.0, /*group*/null); + Assert.assertNotNull(result); + Assert.assertEquals("4.0", result.toString()); + } + + /** + * Test that commons logging logger in present for use in equation. + */ + @Test + public void testEquationWithLogger() { + + String equationContent = "log.info(\"Test logger\");"; + equationContent += "return 1.0;"; + Object result = EvaluatorHelper.evaluate("fr.isisfish.equation", + "TestEquationWithDatabaseContent", PopulationGrowthReverse.class, + equationContent, /*context*/null, /*length*/2.0, /*group*/null); + Assert.assertNotNull(result); + Assert.assertEquals("1.0", result.toString()); + } + + /** + * Test que le contenu du fichier java correspondant à l'equation est + * corectement généré. + * Notemment suite à l'utilsation de paranamer et aux retrait des + * annotations. + */ + @Test + public void testGenerateContent() { + Class clazz = PopulationReproductionEquation.class; + Method method = clazz.getDeclaredMethods()[0]; + String content = EvaluatorHelper.generateContent("fr.ifremer.isisfish.equation", + "Test", method, "return 42.0;"); + + Assert.assertTrue(content.contains("fr.ifremer.isisfish.simulator.SimulationContext context")); + Assert.assertTrue(content.contains("java.util.List<PopulationGroup> groups")); + } + + /** + * Test d'execution d'un prescript. + */ + @Test + public void testPrescriptContent() { + String content = "if (context != null) {\n" + + " // test\n" + + "}\n"; + EvaluatorHelper.evaluate("fr.isisfish.prescript", + "TestPrescript", SimulationPreScript.class, content, /*context*/SimulationContext.get(), /*db*/null); + } +} Modified: trunk/src/test/java/fr/ifremer/isisfish/vcs/VCSSVNTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/vcs/VCSSVNTest.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/java/fr/ifremer/isisfish/vcs/VCSSVNTest.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2008 - 2010 Ifremer, Code Lutin + * Copyright (C) 2008 - 2013 Ifremer, Code Lutin, 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 @@ -34,9 +34,9 @@ import java.util.List; import java.util.Map; +import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.util.FileUtil; import org.nuiton.util.Version; import org.junit.After; import org.junit.Assert; @@ -74,7 +74,12 @@ /** Class logger */ private static Log log = LogFactory.getLog(VCSSVNTest.class); - public static final File TMPDIR = getTestDirectory(); + /** + * Run test out of target directory for SVN to not find parent .svn with not supported svn format. + * + * FIXME echatellier 20131127 : try to relocate into target and chroot svnkit tests + */ + public static final File TMPDIR = new File("/tmp"); public static final String FILECONTENTTAG = "Version 3.1.0"; public static final String FILECONTENTTRUNK = "Version 3.2.0"; @@ -126,14 +131,14 @@ + File.separator + "data").mkdirs(); new File(template, "scripts").mkdirs(); - FileUtil.writeString(new File(template, "scripts" + File.separator + FileUtils.writeStringToFile(new File(template, "scripts" + File.separator + "version.txt"), FILECONTENTTAG); // creation du repo pour les tests SVNRepositoryFactory.createLocalRepository(remoteRepo, false, true); // ajout de source dans le repo - SVNURL svnURL = SVNURL.parseURIDecoded("file://" + SVNURL svnURL = SVNURL.parseURIEncoded("file://" + remoteRepo.getAbsolutePath()); SVNURL svnRoot = svnURL.appendPath("isis-fish-data", false); SVNURL svnTrunk = svnRoot.appendPath("trunk", false); @@ -166,16 +171,16 @@ public void tearDown() { // un peu de nettoyage if (template.exists()) { - FileUtil.deleteRecursively(template); + FileUtils.deleteQuietly(template); } if (remoteRepo.exists()) { - FileUtil.deleteRecursively(remoteRepo); + FileUtils.deleteQuietly(remoteRepo); } if (localRepo.exists()) { - FileUtil.deleteRecursively(localRepo); + FileUtils.deleteQuietly(localRepo); } if (localRepoTrunk.exists()) { - FileUtil.deleteRecursively(localRepoTrunk); + FileUtils.deleteQuietly(localRepoTrunk); } } @@ -297,12 +302,12 @@ File version = new File(vcs.getLocalRepository(), "scripts" + File.separator + "version.txt"); Assert.assertTrue(version.exists()); - Assert.assertEquals(FILECONTENTTAG, FileUtil.readAsString(version)); + Assert.assertEquals(FILECONTENTTAG, FileUtils.readFileToString(version)); // modification du fichier version.txt - FileUtil.writeString(version, FILECONTENTTRUNK); + FileUtils.writeStringToFile(version, FILECONTENTTRUNK); vcs.commit(null, "modif du fichier version"); - Assert.assertEquals(FILECONTENTTRUNK, FileUtil.readAsString(version)); + Assert.assertEquals(FILECONTENTTRUNK, FileUtils.readFileToString(version)); // recuperation de DemoRegion File demo = new File(vcs.getLocalRepository(), "regions" @@ -317,13 +322,13 @@ // ajout d'un fichier sur le trunk avant passage sur le tag File fileToAdd = new File(vcs.getLocalRepository(), "newfile.txt"); String lecontent = "Le nouveau fichier"; - FileUtil.writeString(fileToAdd, lecontent); + FileUtils.writeStringToFile(fileToAdd, lecontent); vcs.add(Arrays.asList(fileToAdd), "ajout d'un fichier"); // test switchTag vcs.setTag(new Version(3, 1, 0)); Assert.assertTrue(vcs.getTag().startsWith("/tags/3.1.0")); - Assert.assertEquals(FILECONTENTTAG, FileUtil.readAsString(version)); + Assert.assertEquals(FILECONTENTTAG, FileUtils.readFileToString(version)); Assert.assertTrue(demo.exists()); // recherche du status des fichiers @@ -340,7 +345,7 @@ Assert.assertTrue(map.containsKey(newfileAdded)); // modif dans repo trunk de version pour qu'il y ait un conflit - FileUtil.writeString(fileVersion, "Le nouveau content de version"); + FileUtils.writeStringToFile(fileVersion, "Le nouveau content de version"); // update global du repo trunk List<File> conflictFile = trunk.update(null, true); @@ -351,7 +356,7 @@ Assert.assertTrue(conflictFile.contains(fileVersion)); File fileAdded = new File(trunk.getLocalRepository(), "newfile.txt"); - Assert.assertEquals(lecontent, FileUtil.readAsString(fileAdded)); + Assert.assertEquals(lecontent, FileUtils.readFileToString(fileAdded)); Assert.assertFalse(fileDeleted.exists()); // recherche du status des fichiers en remote, il ne doit plus y avoir de diff @@ -379,23 +384,28 @@ /** * Test of add method, of class VCSSVN. - * @throws VCSException + * + * @throws Exception */ @Test - public void testAdd() throws VCSException { + public void testAdd() throws Exception { // log if (log.isInfoEnabled()) { log.info("testAdd()"); } - List<File> files = new ArrayList<File>(); - String msg = ""; - // checkout a TAG - vcs.checkout(new Version(3, 1, 0), false); + vcs.checkout(null, true); - vcs.add(files, msg); + // now, make a modification, on LOCAL repo + File firstFile = new File(vcs.getLocalRepository() + File.separator + + "scripts" + File.separator + "version.txt"); + FileUtils.writeStringToFile(firstFile, "Version 3.2.1"); + + List<File> files = Collections.singletonList(firstFile); + + vcs.add(files, "test commit"); } /** @@ -429,10 +439,10 @@ /** * Return all changelog between local file version and remote repository * file version. + * * @throws VCSException * @throws IOException * @throws SVNException - * */ @Test public void testGetChanglog() throws VCSException, IOException, @@ -456,8 +466,8 @@ vcs.checkout(null, true); // now, make a modification, on LOCAL repo - FileUtil.writeString(firstFile, "version 3.2.1"); - FileUtil.writeString(secondFile, "name = test1"); + FileUtils.writeStringToFile(firstFile, "version 3.2.1"); + FileUtils.writeStringToFile(secondFile, "name = test1"); SVNClientManager svnManager = SVNClientManager.newInstance(); svnManager.getWCClient().doAdd(secondFile, // File path true, // boolean force @@ -498,12 +508,11 @@ vcs.checkout(null, true); // now, make a modification, on LOCAL repo - FileUtil.writeString(firstFile, "Version 3.2.1"); + FileUtils.writeStringToFile(firstFile, "Version 3.2.1"); String result = vcs.getDiff(firstFile); - // quelques tests sur la sortie, pas - // d'égalité parfaite + // quelques tests sur la sortie, pas d'égalité parfaite Assert.assertTrue(result.indexOf("version.txt") > 0); Assert.assertTrue(result.indexOf("-Version 3.1.0") > 0); Assert.assertTrue(result.indexOf("+Version 3.2.1") > 0); @@ -591,7 +600,7 @@ vcs.checkout(null, true); // now, make a modification, on REMOTE repo - SVNURL svnURL = SVNURL.parseURIDecoded("file://" + SVNURL svnURL = SVNURL.parseURIEncoded("file://" + remoteRepo.getAbsolutePath()); SVNURL svnURLNewDir = svnURL.appendPath("isis-fish-data", false) .appendPath("trunk", false).appendPath("test", false); @@ -634,7 +643,7 @@ vcs.checkout(null, true); // now, make a modification, on REMOTE repo - SVNURL svnURL = SVNURL.parseURIDecoded("file://" + SVNURL svnURL = SVNURL.parseURIEncoded("file://" + remoteRepo.getAbsolutePath()); SVNURL svnURLNewDir = svnURL.appendPath("isis-fish-data", false) .appendPath("trunk", false).appendPath("test", false); @@ -689,7 +698,7 @@ vcs.checkout(null, true); // now, make a modification, on REMOTE repo - SVNURL svnURL = SVNURL.parseURIDecoded("file://" + SVNURL svnURL = SVNURL.parseURIEncoded("file://" + remoteRepo.getAbsolutePath()); SVNURL svnURLNewDir = svnURL.appendPath("isis-fish-data", false) .appendPath("trunk", false).appendPath("test", false); @@ -792,7 +801,7 @@ vcs.checkout(null, false); // now, make a modification, on REMOTE repo - SVNURL svnURL = SVNURL.parseURIDecoded("file://" + SVNURL svnURL = SVNURL.parseURIEncoded("file://" + remoteRepo.getAbsolutePath()); SVNURL svnURLNewDir = svnURL.appendPath("isis-fish-data", false) .appendPath("trunk", false).appendPath("test", false); @@ -821,7 +830,7 @@ vcs.checkout(null, false); // now, make a modification, on REMOTE repo - SVNURL svnURL = SVNURL.parseURIDecoded("file://" + SVNURL svnURL = SVNURL.parseURIEncoded("file://" + remoteRepo.getAbsolutePath()); SVNURL svnURLNewDir = svnURL.appendPath("isis-fish-data", false) .appendPath("trunk", false).appendPath("scripts", false); @@ -855,7 +864,7 @@ // modif on local repo File file = new File(vcs.getLocalRepository() + File.separator + "test.txt"); - FileUtil.writeString(file, "name = test1"); + FileUtils.writeStringToFile(file, "name = test1"); SVNClientManager svnManager = SVNClientManager.newInstance(); svnManager.getWCClient().doAdd(file, // File path true, // boolean force @@ -929,7 +938,7 @@ // modif on local repo File file = new File(vcs.getLocalRepository() + File.separator + "test.txt"); - FileUtil.writeString(file, "name = test1"); + FileUtils.writeStringToFile(file, "name = test1"); SVNClientManager svnManager = SVNClientManager.newInstance(); svnManager.getWCClient().doAdd(file, // File path true, // boolean force @@ -963,7 +972,7 @@ vcs.checkout(null, false); // now, make a modification, on REMOTE repo - SVNURL svnURL = SVNURL.parseURIDecoded("file://" + remoteRepo.getAbsolutePath()); + SVNURL svnURL = SVNURL.parseURIEncoded("file://" + remoteRepo.getAbsolutePath()); SVNURL svnURLNewDir = svnURL.appendPath("isis-fish-data", false) .appendPath("trunk", false).appendPath("test", false); SVNClientManager svnManager = SVNClientManager.newInstance(); @@ -1004,7 +1013,7 @@ // modif on remote repo File file = new File(vcs.getLocalRepository(), "scripts" + File.separator + "version.txt"); - FileUtil.writeString(file, "aaaaaz"); + FileUtils.writeStringToFile(file, "aaaaaz"); SVNClientManager svnManager = SVNClientManager.newInstance(); SVNCommitInfo rev = svnManager.getCommitClient().doCommit( new File[] { file },// File[] paths, @@ -1074,7 +1083,7 @@ // modif on remote repo File file = new File(vcs.getLocalRepository(), "scripts" + File.separator + "version.txt"); - FileUtil.writeString(file, "aaaaaz"); + FileUtils.writeStringToFile(file, "aaaaaz"); SVNClientManager svnManager = SVNClientManager.newInstance(); SVNCommitInfo rev = svnManager.getCommitClient().doCommit( new File[] { file },// File[] paths, @@ -1103,7 +1112,7 @@ // modify one file File file2 = new File(vcs.getLocalRepository(), "scripts" + File.separator + "version.txt"); - FileUtil.writeString(file2, "oooooo"); + FileUtils.writeStringToFile(file2, "oooooo"); // try to update... List<File> filesInConflict = vcs.update(null, true); @@ -1140,7 +1149,7 @@ // modif on remote repo on tag :) File file = new File(vcs.getLocalRepository(), "scripts" + File.separator + "version.txt"); - FileUtil.writeString(file, "aaaaaz"); + FileUtils.writeStringToFile(file, "aaaaaz"); SVNClientManager svnManager = SVNClientManager.newInstance(); SVNCommitInfo rev = svnManager.getCommitClient().doCommit( new File[] { file },// File[] paths, @@ -1161,7 +1170,7 @@ // modify one file File file2 = new File(vcs.getLocalRepository(), "scripts" + File.separator + "version.txt"); - FileUtil.writeString(file2, "oooooo"); + FileUtils.writeStringToFile(file2, "oooooo"); // try to update... List<File> filesInConflict = vcs.setTag(new Version(3, 1, 0)); @@ -1169,7 +1178,7 @@ Assert.assertEquals(1, filesInConflict.size()); log.debug("Conflicts are : " + filesInConflict); } - + /** * Test a checkFileStatus (witch is doing an update) * @@ -1198,7 +1207,7 @@ // modif on remote repo File file = new File(vcs.getLocalRepository(), "scripts" + File.separator + "version.txt"); - FileUtil.writeString(file, "aaaaaz"); + FileUtils.writeStringToFile(file, "aaaaaz"); SVNClientManager svnManager = SVNClientManager.newInstance(); SVNCommitInfo rev = svnManager.getCommitClient().doCommit( new File[] { file },// File[] paths, @@ -1227,7 +1236,7 @@ // modify one file File file2 = new File(vcs.getLocalRepository(), "scripts" + File.separator + "version.txt"); - FileUtil.writeString(file2, "oooooo"); + FileUtils.writeStringToFile(file2, "oooooo"); // try to update... List<File> filesInConflict = vcs.checkFileStatus(); @@ -1240,7 +1249,7 @@ filesInConflict = vcs.checkFileStatus(); Assert.assertNull(filesInConflict); } - + /** * Test file local status. * @@ -1258,7 +1267,7 @@ // log if (log.isInfoEnabled()) { - log.info("testGetLocalStatus()"); + log.info("testGetLocalStatusModified()"); } // chechout @@ -1267,11 +1276,11 @@ // modif on remote repo File file = new File(vcs.getLocalRepository(), "scripts" + File.separator + "version.txt"); - FileUtil.writeString(file, "modified content"); + FileUtils.writeStringToFile(file, "modified content"); Assert.assertEquals(Status.STATUS_MODIFIED, vcs.getLocalStatus(file)); } - + /** * Test file local status. * @@ -1289,7 +1298,7 @@ // log if (log.isInfoEnabled()) { - log.info("testGetLocalStatus()"); + log.info("testGetLocalStatusMissing()"); } // chechout @@ -1298,7 +1307,7 @@ // modif on remote repo File file = new File(vcs.getLocalRepository(), "scripts" + File.separator + "version.txt"); - file.delete(); + Assert.assertTrue(file.delete()); Map<File, SVNStatus> statusFiles = vcs.getLocalStatus(file, true, SVNStatusType.STATUS_MISSING); Assert.assertEquals(1, statusFiles.size()); Modified: trunk/src/test/resources/fr/ifremer/isisfish/simulator/parameters_basic.properties =================================================================== --- trunk/src/test/resources/fr/ifremer/isisfish/simulator/parameters_basic.properties 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/resources/fr/ifremer/isisfish/simulator/parameters_basic.properties 2014-04-17 16:48:13 UTC (rev 3969) @@ -38,7 +38,7 @@ rules=GraviteVPUE1,Cantonnement, useOptimization=true useStatistic=false -exportDirectory=/home/chatellier/isis-export +exportDirectory=/home/user/isis-export useSimulationPlan=false isisFishVersion=3.2.0.6 rule.1.parameter.endMonth=10 Modified: trunk/src/test/resources/fr/ifremer/isisfish/simulator/parameters_plan.properties =================================================================== --- trunk/src/test/resources/fr/ifremer/isisfish/simulator/parameters_plan.properties 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/resources/fr/ifremer/isisfish/simulator/parameters_plan.properties 2014-04-17 16:48:13 UTC (rev 3969) @@ -38,7 +38,7 @@ rules=GraviteVPUE1,Cantonnement, useOptimization=true useStatistic=false -exportDirectory=/home/chatellier/isis-export +exportDirectory=/home/user/isis-export useSimulationPlan=true isisFishVersion=3.2.0.6 rule.1.parameter.endMonth=11 Copied: trunk/src/test/resources/mexico/expDesign.xsd (from rev 3968, branches/4.0.1/src/test/resources/mexico/expDesign.xsd) =================================================================== (Binary files differ) Modified: trunk/src/test/resources/mexico/mexicohelper_designplan.xml =================================================================== --- trunk/src/test/resources/mexico/mexicohelper_designplan.xml 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/resources/mexico/mexicohelper_designplan.xml 2014-04-17 16:48:13 UTC (rev 3969) @@ -93,7 +93,7 @@ <fixed cardinality="0"> <range max="1.0" min="0.0"/> <coefficient operator="-" value="0.1"/> - <equation reference="45.0" variable="L1"/> + <equation reference="45.0" variable="Ktemp"/> </fixed> </domain> </factor> Modified: trunk/src/test/resources/mexico/mexicohelper_designplanV2.xml =================================================================== --- trunk/src/test/resources/mexico/mexicohelper_designplanV2.xml 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/resources/mexico/mexicohelper_designplanV2.xml 2014-04-17 16:48:13 UTC (rev 3969) @@ -92,7 +92,7 @@ <factor name="factor 5 (EquationContinuous)" property="equationcontinuous" type="real" cardinality="0"> <target>fr.ifremer.isisfish.entities.PopulationGroup#1156461521076#0.6526656643346673#maxLength</target> <domain> - <fixed variable="L1"> + <fixed variable="Ktemp"> <reference coefficient="0.1">45.0</reference> </fixed> </domain> Copied: trunk/src/test/resources/mexico/mexicohelper_designplanV3.xml (from rev 3968, branches/4.0.1/src/test/resources/mexico/mexicohelper_designplanV3.xml) =================================================================== (Binary files differ) Modified: trunk/src/test/resources/mexico/mexicohelper_factorgroupdp.xml =================================================================== --- trunk/src/test/resources/mexico/mexicohelper_factorgroupdp.xml 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/resources/mexico/mexicohelper_factorgroupdp.xml 2014-04-17 16:48:13 UTC (rev 3969) @@ -67,7 +67,7 @@ <factor name="factor 5 (EquationContinuous)" property="equationcontinuous" type="real" cardinality="0"> <target>fr.ifremer.isisfish.entities.PopulationGroup#1156461521076#0.6526656643346673#maxLength</target> <domain> - <fixed variable="L1"> + <fixed variable="Ktemp"> <reference coefficient="0.1">45.0</reference> </fixed> </domain> Deleted: trunk/src/test/resources/test-database/regions/BaseMotosICA/data/data.1.log.db =================================================================== (Binary files differ) Deleted: trunk/src/test/resources/test-database/regions/BaseMotosICA/data/data.data.db =================================================================== (Binary files differ) Copied: trunk/src/test/resources/test-database/regions/BaseMotosICA/data/data.h2.db (from rev 3968, branches/4.0.1/src/test/resources/test-database/regions/BaseMotosICA/data/data.h2.db) =================================================================== (Binary files differ) Deleted: trunk/src/test/resources/test-database/regions/BaseMotosICA/data/data.index.db =================================================================== (Binary files differ) Deleted: trunk/src/test/resources/test-database/regions/DemoRegion/data/data.2.log.db =================================================================== (Binary files differ) Deleted: trunk/src/test/resources/test-database/regions/DemoRegion/data/data.data.db =================================================================== (Binary files differ) Copied: trunk/src/test/resources/test-database/regions/DemoRegion/data/data.h2.db (from rev 3968, branches/4.0.1/src/test/resources/test-database/regions/DemoRegion/data/data.h2.db) =================================================================== (Binary files differ) Deleted: trunk/src/test/resources/test-database/regions/DemoRegion/data/data.index.db =================================================================== (Binary files differ) Modified: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.h2.db =================================================================== (Binary files differ) Copied: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/1.t42.lob.db (from rev 3968, branches/4.0.1/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/1.t42.lob.db) =================================================================== (Binary files differ) Copied: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/2.t42.lob.db (from rev 3968, branches/4.0.1/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/2.t42.lob.db) =================================================================== (Binary files differ) Copied: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/3.t42.lob.db (from rev 3968, branches/4.0.1/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/3.t42.lob.db) =================================================================== (Binary files differ) Copied: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/4.t42.lob.db (from rev 3968, branches/4.0.1/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/4.t42.lob.db) =================================================================== (Binary files differ) Deleted: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/46.t43.lob.db =================================================================== (Binary files differ) Deleted: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/47.t43.lob.db =================================================================== (Binary files differ) Deleted: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/48.t43.lob.db =================================================================== (Binary files differ) Deleted: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/49.t43.lob.db =================================================================== (Binary files differ) Copied: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/5.t42.lob.db (from rev 3968, branches/4.0.1/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/5.t42.lob.db) =================================================================== (Binary files differ) Deleted: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/50.t43.lob.db =================================================================== (Binary files differ) Deleted: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/51.t43.lob.db =================================================================== (Binary files differ) Deleted: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/52.t43.lob.db =================================================================== (Binary files differ) Deleted: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/53.t43.lob.db =================================================================== (Binary files differ) Deleted: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/54.t43.lob.db =================================================================== (Binary files differ) Copied: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/6.t42.lob.db (from rev 3968, branches/4.0.1/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/6.t42.lob.db) =================================================================== (Binary files differ) Copied: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/7.t42.lob.db (from rev 3968, branches/4.0.1/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/7.t42.lob.db) =================================================================== (Binary files differ) Copied: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/8.t42.lob.db (from rev 3968, branches/4.0.1/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/8.t42.lob.db) =================================================================== (Binary files differ) Copied: trunk/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/9.t42.lob.db (from rev 3968, branches/4.0.1/src/test/resources/test-database/regions/Golfe de Gascogne/data/data.lobs.db/9.t42.lob.db) =================================================================== (Binary files differ) Copied: trunk/src/test/resources/test-database/sensitivityanalysis/DOptimal.java (from rev 3968, branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/DOptimal.java) =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/DOptimal.java (rev 0) +++ trunk/src/test/resources/test-database/sensitivityanalysis/DOptimal.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,369 @@ +/* + * #%L + * IsisFish data + * %% + * Copyright (C) 2009 - 2014 Ifremer, Code Lutin, Jean Couteau + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package sensitivityanalysis; + +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.export.SensitivityExport; +import fr.ifremer.isisfish.simulator.SimulationParameter; +import fr.ifremer.isisfish.simulator.sensitivity.*; +import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; +import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; +import fr.ifremer.isisfish.util.Doc; +import org.apache.commons.lang.StringUtils; +import org.nuiton.j2r.REngine; +import org.nuiton.j2r.RException; +import org.nuiton.j2r.types.RDataFrame; + +import java.io.File; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * User: couteau + * Date: 14 janv. 2010 + * Time: 11:58:09 + */ +public class DOptimal extends AbstractSensitivityAnalysis { + + @Doc("True to be able to modify the code sent to R") + public boolean param_modifR = false; + + @Doc("Order") + public int param_order=1; + + /** + * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs + * continue. + * + * @return <tt>true</tt> s'il sait la gerer + */ + @Override + public boolean canManageCardinality() { + return false; + } + + @Override + public SensitivityScenarios compute(DesignPlan plan, File outputDirectory) + throws SensitivityException { + + SensitivityScenarios thisExperiment = new SensitivityScenarios(); + + setIsisFactorsR(plan, outputDirectory); + + //extract the factors from the design plan + List<Factor> factors = plan.getFactors(); + int factorsNb = factors.size(); + + try { + REngine engine = openEngine(outputDirectory); + + engine.voidEval("library(AlgDesign)"); + + //Create a list of the factors under the form factor1=factor1,... + String factorsNames = ""; + + //Create a list of the factors under the form factor1,factor2,... + String factorNames = ""; + + //Create a list of the factors under the form factor1+factor2+... + String factorPlus=""; + + //create the factors vectors + for (Factor factor : factors) { + //The factor values vector + String factorName = factor.getName().replaceAll(" ", ""); + factorsNames += factorName + "=" + factorName + ","; + factorNames += factorName + ","; + factorPlus += factorName + "+"; + + String vector = factorName + "<-c("; + + Domain domain = factor.getDomain(); + + if (domain instanceof ContinuousDomain) { + //ContinuousDomain contDomain = (ContinuousDomain) domain; + int card = factor.getCardinality(); + Double min = 0.0; + Double max = 1.0; + + for (int i = 0; i < card; i++) { + //add the ith value + vector += (min + (i * (max - min) / (card - 1))) + ","; + } + } else { + int nbValues = ((DiscreteDomain) domain).getValuesCount(); + for (int i = 0; i < nbValues; i++) { + vector += "as.integer(" + i + "),"; + } + } + + vector = vector.substring(0, vector.length() - 1); + + vector += ")"; + + engine.voidEval(vector); + + + } + + factorsNames = factorsNames.substring(0,factorsNames.length()-1); + factorNames = factorNames.substring(0,factorNames.length()-1); + factorPlus = factorPlus.substring(0,factorPlus.length()-1); + + + //X<-expand.grid(vector=???,weight=???) + String expandGrid = "expandgrid<-expand.grid(%s)"; + + + + String rCall = String.format(expandGrid,factorsNames); + + engine.voidEval(rCall); + + if (param_order ==1 ){ + rCall = "isis.methodAnalyse<-optFederov(~(%s),data=expandgrid, " + + "approximate =FALSE, center=F, criterion = \"D\"," + + "nRepeats=10)"; + } else { + rCall = "isis.methodAnalyse<-optFederov(~(%s)^"+param_order+",data=expandgrid, " + + "approximate =FALSE, center=F, criterion = \"D\"," + + "nRepeats=10)"; + } + + rCall = String.format(rCall,factorPlus); + + if (param_modifR) { + rCall = editRInstruction(rCall); + } + + engine.voidEval("runif(1)"); + + engine.voidEval(rCall); + + engine.eval("expPlan<-as.data.frame(isis.methodAnalyse$design)"); + RDataFrame dataFrame = (RDataFrame)engine.eval("expPlan"); + dataFrame.setVariable("expPlan"); + int nbExperiments = (Integer)engine.eval("dim(isis.methodAnalyse$design)[1]"); + + List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); + for (int j = 0; j < nbExperiments; j++) { + Scenario experimentScenario = new Scenario(); + for (int i = 0; i < factorsNb; i++) { + Factor factor = factors.get(i); + factor.setValueForIdentifier(dataFrame.get(i, j)); + experimentScenario.addFactor(factor); + } + thisExperimentScenarios.add(experimentScenario); + thisExperiment.setScenarios(thisExperimentScenarios); + } + + + String factorDistribution = "isis.factor.distribution<-data.frame(" + + "NomFacteur=c(%s)," + + "NomDistribution=c(%s)," + + "ParametreDistribution=c(%s))"; + + String distribution = ""; + String parameters = ""; + + for (int i = 0; i < factorsNb; i++) { + Domain domain = factors.get(i).getDomain(); + if (i != 0) { + distribution += ","; + parameters += ","; + } + if (domain instanceof ContinuousDomain){ + //ContinuousDomain contDomain = (ContinuousDomain)domain; + distribution += "\"qunif\""; + parameters += "\"[0.0;1.0]\""; + } else { + DiscreteDomain discDomain = (DiscreteDomain)domain; + distribution += "\"discrete\""; + parameters+="\"["; + Map<Object, Object> values = discDomain.getValues(); + int count=0; + Collection<Object> collecValues = values.values(); + for (Object value:collecValues) { + if (count!=0){ + parameters += ","; + } + parameters += StringUtils.replace(value.toString(), "\"", "\\\"") ; + count++; + } + parameters+="]\""; + } + } + engine.voidEval(String.format(factorDistribution, factorNames, + distribution, parameters)); + + engine.voidEval("call<-\"" + rCall + "\""); + engine.voidEval("isis.methodExp<-list(" + + "\"isis.factors\"=isis.factors," + + "\"isis.factor.distribution\"=isis.factor.distribution," + + "\"call\"=call)"); + engine.voidEval("attr(isis.methodExp," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + engine.voidEval("isis.simule<-isis.methodAnalyse$design"); + engine.voidEval("attr(isis.simule," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); + + closeEngine(engine, outputDirectory); + + } catch (RException eee) { + throw new SensitivityException("Can't generate scenarios", eee); + } + + return thisExperiment; + } + + @Override + public void analyzeResult(List<SimulationStorage> simulationStorages, + File outputDirectory) throws SensitivityException { + + try { + + REngine engine = openEngine(outputDirectory); + + //Get back the factors number + int factorNumber = (Integer)engine.eval("dim(isis.methodAnalyse$design)[2]"); + + SimulationParameter param = simulationStorages.get(0).getParameter(); + int sensitivityNumber = param.getSensitivityExport().size(); + + String firstStorageName = outputDirectory.getName().replaceAll("-", ""); + + for (int k = 0; k < sensitivityNumber; k++) { + + SensitivityExport sensitivityExport = + param.getSensitivityExport().get(k); + + String name = sensitivityExport.getExportFilename(); + + String rInstruction = createImportInstruction(sensitivityExport, + simulationStorages); + + // Send the simulation results + engine.voidEval(rInstruction); + + //Put results in isis.simule + engine.voidEval("isis.simule<-data.frame(isis.simule," + + name + ")"); + + //Create the dataforaov data.frame + String dataFrame = "dataforaov<-data.frame(isis.methodAnalyse$design," + + name + "=" + name + ")"; + engine.voidEval(dataFrame); + + //Call aov() + String aovCall = "aovresult<-aov(" + name + "~("; + for (int j = 0; j < factorNumber; j++) { + if (j < (factorNumber - 1)) { + aovCall = aovCall + + engine.eval("names(isis.methodAnalyse$design)[" + (j + 1) + "]") + + "+"; + } else { + aovCall = aovCall + + engine.eval("names(isis.methodAnalyse$design)[" + (j + 1) + "]") + + ")"; + if(param_order>1){ + aovCall+="^" + param_order + ",data=dataforaov)"; + }else{ + aovCall+=",data=dataforaov)"; + } + } + } + engine.voidEval(aovCall); + + /*Export the results + *Export format is csv, data separated by ',' + *Results Export name is sensitivityExportName_Results.csv + *Sensitivity Indices export name is sensitivityExportName_SensitivityIndices.csv + */ + + //Compute Sum of Squares and Sensitivity indices + engine.voidEval("SoS<-summary(aovresult)[[1]][1:dim(summary(aovresult)[[1]])[1],2]"); + engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]"); + engine.voidEval("IndSensibilite<-SoS/sum(SoS)"); + + //Create a data.frame to export sensitivity important results in one file. + engine.voidEval("exportsensitivity<-data.frame(" + + "SoS[1:dim(summary(aovresult)[[1]])[1]]," + + "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])"); + engine.voidEval("names(exportsensitivity)<-c(" + + "\"Sum Of Squares\"," + + "\"Sensitivity indices\")"); + engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]"); + + + //Set dataforaov names + engine.voidEval("resultsnames<-c(names(x$design),\"Result\")"); + engine.voidEval("names(dataforaov)<-resultsnames"); + + + /*Set the export directory + *Export directory is the first simulation export directory. + */ + engine.setwd(outputDirectory); + + //Save the results with the scenarios. + engine.voidEval("write.csv(dataforaov,\"" + + param.getSensitivityExport().get(k) + + .getExportFilename() + "_Results.csv\")"); + + //Save the sensitivity indices + engine.voidEval("write.csv(exportsensitivity,\"" + + param.getSensitivityExport().get(k) + .getExportFilename() + + "_SensitivityIndices.csv\")"); + //FIXME export through java to enable export when using Rserve (when distant Rserve). + + //creating isis.methodAnalyse + String exportMethodAnalyse = String.format("%s.isis.methodAnalyse", firstStorageName + "." + name); + engine.voidEval(exportMethodAnalyse + "<-list(" + + "\"isis.factors\"=isis.factors," + + "\"isis.factor.distribution\"=isis.factor.distribution," + + "\"isis.simule\"=isis.simule," + + "\"call_method\"=\"" + aovCall + "\"," + + "\"analysis_result\"=list(aovresult,IndSensibilite))"); + + engine.voidEval("attr(" + exportMethodAnalyse + "," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + } + + closeEngine(engine, outputDirectory); + + } catch (Exception e) { + throw new SensitivityException("Can't evaluate results", e); + } + + } + + @Override + public String getDescription() { + return "Implementation of D optimal method method using R, needs" + + "AlgDesign package to work"; + } +} Copied: trunk/src/test/resources/test-database/sensitivityanalysis/Fast.java (from rev 3968, branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Fast.java) =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/Fast.java (rev 0) +++ trunk/src/test/resources/test-database/sensitivityanalysis/Fast.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,283 @@ +/* + * #%L + * IsisFish data + * %% + * Copyright (C) 2009 - 2014 Ifremer, Code Lutin, Jean Couteau + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package sensitivityanalysis; + +import java.io.File; +import java.util.List; + +import fr.ifremer.isisfish.simulator.sensitivity.*; + +import org.nuiton.j2r.REngine; +import org.nuiton.j2r.RException; + +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.export.SensitivityExport; +import fr.ifremer.isisfish.simulator.SimulationParameter; +import fr.ifremer.isisfish.util.Doc; + +import org.nuiton.j2r.types.RDataFrame; + +/** + * Implementation of Fast method using R. + * + * @author jcouteau + * @version $Revision$ + * + * Last update : $Date$ By : + * $Author$ + */ +public class Fast extends AbstractSensitivityAnalysis { + + @Doc("an integer giving the sample size, i.e. the length of the " + + "discretization of the s-space (see Cukier et al.). (default=20)") + public int param_n = 20; + + @Doc("an integer specifying the interference parameter, i.e. the number " + + "of harmonics to sum in the Fourier series decomposition (see Cukier et " + + "al.). (default=6)") + public int param_M = 6; + + @Doc("True to be able to modify the code sent to R") + public boolean param_modifR = false; + + /** + * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs + * continue. + * + * @return <tt>true</tt> s'il sait la gerer + */ + @Override + public boolean canManageCardinality() { + return true; + } + + @Override + public SensitivityScenarios compute(DesignPlan plan, File outputDirectory) + throws SensitivityException { + + setIsisFactorsR(plan, outputDirectory); + + RDataFrame dataFrame; + int nbExperiments; + int factorNumber = plan.getFactors().size(); + List<Factor> factors = plan.getFactors(); + SensitivityScenarios thisExperiment = new SensitivityScenarios(); + List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); + + // only run with continuous + checkAllFactorContinuous(factors); + + String rInstruction = "isis.methodAnalyse<-fast99(" + + "model=NULL," + + "factors=%s, " + + "n=%s, " + + "M=%s, " + + "q = \"qunif\", " + + "q.arg=list(min=0,max=1))"; + String rCall = String.format(rInstruction, factors.size(), param_n, + param_M); + + if (param_modifR) { + rCall = editRInstruction(rCall); + } + + try { + + REngine engine = openEngine(outputDirectory); + + // Load sensitivity package into R (if package already loaded, + // nothing happens. + engine.voidEval("library(sensitivity)"); + + // Run sensitivity analysis + engine.voidEval(rCall); + + // Creating the factors vector. + rInstruction = "factornames<-c("; + for (int i = 0; i < factorNumber; i++) { + String factorName = factors.get(i).getName(); + if (i != (factorNumber - 1)) { + rInstruction += "\"" + factorName + "\","; + } else { + rInstruction += "\"" + factorName + "\""; + } + } + + rInstruction += ")"; + + engine.voidEval(rInstruction); + + // Get back experiment plan + dataFrame = (RDataFrame) engine.eval("isis.methodAnalyse$X"); + dataFrame.setVariable("isis.methodAnalyse$X"); + + nbExperiments = (Integer)engine.eval("dim(isis.methodAnalyse$X)[1]"); + + engine.voidEval(getIsisFactorDistribution(factors)); + + engine.voidEval("call<-isis.methodAnalyse$call"); + + + engine.voidEval("isis.methodExp<-list(" + + "\"isis.factors\"=isis.factors," + + "\"isis.factor.distribution\"=isis.factor.distribution," + + "\"call\"=call)"); + + engine.voidEval("attr(isis.methodExp,\"nomModel\")<-" + + "\"isis-fish-externe-R\""); + + engine.voidEval("isis.simule<-data.frame(isis.methodAnalyse$X)"); + + engine.voidEval("attr(isis.simule,\"nomModel\")<-" + + "\"isis-fish-externe-R\""); + + engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); + + // Setting up the scenarios. + for (int j = 0; j < nbExperiments; j++) { + Scenario experimentScenario = new Scenario(); + for (int i = 0; i < factorNumber; i++) { + Factor factor = plan.getFactors().get(i); + factor.setValueForIdentifier(dataFrame.get(i,j)); + experimentScenario.addFactor(factor); + } + thisExperimentScenarios.add(experimentScenario); + thisExperiment.setScenarios(thisExperimentScenarios); + } + + closeEngine(engine, outputDirectory); + } catch (RException eee) { + throw new SensitivityException("Can't generate scenarios", eee); + } + return thisExperiment; + + } + + @Override + public void analyzeResult(List<SimulationStorage> simulationStorages, + File outputDirectory) throws SensitivityException { + + String simulationName = outputDirectory.getName().replaceAll("-", ""); + + try { + + REngine engine = openEngine(outputDirectory); + + // for export + engine.setwd(outputDirectory); + + // Call R + // Load sensitivity package into R (if package already loaded, + // nothing happens. + engine.voidEval("library(sensitivity)"); + + SimulationParameter param = simulationStorages.get(0).getParameter(); + + int sensitivityNumber = param.getSensitivityExport().size(); + + for (int k = 0; k < sensitivityNumber; k++) { + + SensitivityExport sensitivityExport = + param.getSensitivityExport().get(k); + + String rInstruction = createImportInstruction(sensitivityExport, + simulationStorages); + + // Send the simulation results + engine.voidEval(rInstruction); + + //Put results in isis.simule + engine.voidEval("isis.simule<-data.frame(isis.simule," + + sensitivityExport.getExportFilename() + ")"); + } + + //adding attribute to isis.Simule + engine.voidEval("attr(isis.simule,\"nomModel\")<-" + + "\"isis-fish-externe-R\""); + engine.voidEval("attr(isis.simule,\"call\")<-isis.methodExp$call"); + + for (int k = 0; k < sensitivityNumber; k++) { + + // Creates the R expression to import results in R + String name = param.getSensitivityExport().get(k) + .getExportFilename(); + + //Compute results + engine.voidEval("tell(isis.methodAnalyse,y=" + name + ")"); + + engine.voidEval("names(isis.methodAnalyse$V)<-isis.factor.distribution$NomFacteur"); + engine.voidEval("names(isis.methodAnalyse$X)<-isis.factor.distribution$NomFacteur"); + engine.voidEval("names(isis.methodAnalyse$D1)<-isis.factor.distribution$NomFacteur"); + engine.voidEval("names(isis.methodAnalyse$Dt)<-isis.factor.distribution$NomFacteur"); + + //creating isis.methodAnalyse + String exportMethodAnalyse = String.format("%s.isis.methodAnalyse", simulationName + "." + name); + engine.voidEval(exportMethodAnalyse + "<-list(" + + "\"isis.factors\"=isis.factors," + + "\"isis.factor.distribution\"=isis.factor.distribution," + + "\"isis.simule\"=isis.simule," + + "call_method=\"tell(isis.methodAnalyse,y=" + name + ")" + "\"," + + "\"analysis_result\"=isis.methodAnalyse)"); + + //setting isis.methodAnalyse attributes + engine.voidEval("attr(" + exportMethodAnalyse + ",\"nomModel\")<-" + + "\"isis-fish-externe-R\")"); + + //Create the data.frame of scenarios and results for export purpose + engine.voidEval("dfresults<-data.frame(isis.methodAnalyse$X,isis.methodAnalyse$y)"); + + //Set working directory + engine.setwd(outputDirectory); + + //Export V + engine.voidEval("write.csv(isis.methodAnalyse$V,\"" + name + "_V.csv\")"); + + //Export D1 + engine.voidEval("write.csv(isis.methodAnalyse$D1,\"" + name + "_D1.csv\")"); + + //Export Dt + engine.voidEval("write.csv(isis.methodAnalyse$Dt,\"" + name + "_Dt.csv\")"); + //Set dfresults names + engine.voidEval("resultsnames<-c(isis.factor.distribution$NomFacteur,\"Result\")"); + engine.voidEval("names(dfresults)<-isis.factor.distribution$NomFacteur"); + + //Export results + engine.voidEval("write.csv(dfresults,\"" + name + + "_Results.csv\")"); + //FIXME export through java to enable export when using Rserve + } + + closeEngine(engine, outputDirectory); + + } catch (Exception e) { + throw new SensitivityException("Can't evaluate results", e); + } + } + + @Override + public String getDescription() { + return "Implementation of FAST method using R (needs the sensitivity " + + "package to work)"; + } + +} Copied: trunk/src/test/resources/test-database/sensitivityanalysis/Morris.java (from rev 3968, branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Morris.java) =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/Morris.java (rev 0) +++ trunk/src/test/resources/test-database/sensitivityanalysis/Morris.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,324 @@ +/* + * #%L + * IsisFish data + * %% + * Copyright (C) 2009 - 2014 Ifremer, Code Lutin, Jean Couteau + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package sensitivityanalysis; + +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.export.SensitivityExport; +import fr.ifremer.isisfish.simulator.SimulationParameter; +import fr.ifremer.isisfish.simulator.sensitivity.*; +import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; +import fr.ifremer.isisfish.util.Doc; + +import org.apache.commons.lang3.StringUtils; +import org.nuiton.j2r.REngine; +import org.nuiton.j2r.RException; +import org.nuiton.j2r.types.RDataFrame; + +import java.io.File; +import java.util.List; +import java.util.Map; + +/** + * Implementation of Morris method using R. + * + * @author jcouteau + * @version $Revision$ + * + * Last update : $Date$ By : + * $Author$ + */ +public class Morris extends AbstractSensitivityAnalysis { + + @Doc("Integer giving the number of repetitions of the design, i.e. the number of elementary effect computed per factor. (Default value : 4)") + public int param_r = 4; + + @Doc("True to be able to modify the code sent to R") + public boolean param_modifR = false; + + /** + * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs + * continus. + * + * @return {@code true} s'il sait la gerer + */ + @Override + public boolean canManageCardinality() { + return false; + } + + @Override + public SensitivityScenarios compute(DesignPlan plan, File outputDirectory) + throws SensitivityException { + + setIsisFactorsR(plan, outputDirectory); + + RDataFrame dataFrame; + int nbExperiments; + int factorNumber = plan.getFactors().size(); + + SensitivityScenarios thisExperiment = new SensitivityScenarios(); + + List<Factor> factors = plan.getFactors(); + + if (param_r == 0) { + param_r = 4; + } + + checkAllUniformDistribution(factors); + + // Creating the vectors. + String factorNames = ""; + String levels = ""; + String gridJump = ""; + String binf = ""; + String bsup = ""; + for (int i = 0; i < factorNumber; i++) { + Factor factor = factors.get(i); + if (i != 0) { + factorNames += ","; + levels += ","; + gridJump += ","; + binf += ","; + bsup += ","; + } + + factorNames += "\"" + factor.getName() + "\""; + + levels += factor.getCardinality(); + + gridJump += factor.getCardinality() / 2; + + binf += 0; + bsup += 1; + } + + String rInstruction = "isis.methodAnalyse<-morris(model=NULL,factors=c(%s),r=%s," + + "design=list(type=\"oat\",levels=c(%s),grid.jump=c(%s))," + + "binf=c(%s),bsup=c(%s))"; + + String rCall = String.format(rInstruction, factorNames, param_r, + levels, gridJump, binf, bsup); + + if (param_modifR) { + rCall = editRInstruction(rCall); + } + + try { + REngine engine = openEngine(outputDirectory); + + // Load sensitivity package into R (if package already loaded, + // nothing happens. + engine.voidEval("library(sensitivity)"); + + // Run sensitivity analysis + engine.voidEval(rCall); + + // Creating the factors vector. + rInstruction = "factornames<-c(%s)"; + rCall = String.format(rInstruction, factorNames); + + engine.voidEval(rCall); + + // Set output directory + engine.setwd(outputDirectory); + + // Get back experiment plan + engine.eval("expPlan<-as.data.frame(isis.methodAnalyse$X)"); + dataFrame = (RDataFrame) engine.eval("expPlan"); + dataFrame.setVariable("expPlan"); + + nbExperiments = (Integer)engine.eval("dim(expPlan)[1]"); + + String factorDistribution = "isis.factor.distribution<-data.frame(" + + "NomFacteur=c(%s)," + + "NomDistribution=c(%s)," + + "ParametreDistribution=c(%s))"; + + String distribution = ""; + String parameters = ""; + + for (int i = 0; i < factorNumber; i++) { + Factor factor = factors.get(i); + ContinuousDomain domain = (ContinuousDomain) factor.getDomain(); + if (i != 0) { + distribution += ","; + parameters += ","; + } + + Distribution r_distribution = domain.getDistribution(); + + distribution += "\""+ r_distribution.getInstruction() +"\""; + parameters += "\"["; + + for (Map.Entry<String,Object> param:domain.getDistributionParameters().entrySet()){ + parameters += param.getKey() + "=" + param.getValue() + ";"; + } + + parameters = StringUtils.removeEnd(parameters,";"); + parameters += "]\""; + } + engine.voidEval(String.format(factorDistribution, factorNames, + distribution, parameters)); + + engine.voidEval("call<-isis.methodAnalyse$call"); + engine.voidEval("isis.methodExp<-list(" + + "\"isis.factors\"=isis.factors," + + "\"isis.factor.distribution\"=isis.factor.distribution," + + "\"call\"=call)"); + engine.voidEval("attr(isis.methodExp,\"nomModel\")<-" + + "\"isis-fish-externe-R\""); + engine.voidEval("isis.simule<-data.frame(expPlan)"); + engine.voidEval("attr(isis.simule,\"nomModel\")<-" + + "\"isis-fish-externe-R\""); + engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); + + // Setting up the scenarios. + List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); + for (int j = 0; j < nbExperiments; j++) { + Scenario experimentScenario = new Scenario(); + for (int i = 0; i < factorNumber; i++) { + Factor factor = factors.get(i); + factor.setValueForIdentifier(dataFrame.get(i, j)); + experimentScenario.addFactor(factor); + } + thisExperimentScenarios.add(experimentScenario); + thisExperiment.setScenarios(thisExperimentScenarios); + } + + closeEngine(engine, outputDirectory); + + } catch (RException eee) { + throw new SensitivityException("Can't generate scenarios", eee); + } + + return thisExperiment; + + } + + @Override + public void analyzeResult(List<SimulationStorage> simulationStorages, + File outputDirectory) throws SensitivityException { + + String simulationName = outputDirectory.getName().replaceAll("-", ""); + + try { + REngine engine = openEngine(outputDirectory); + + // Call R + // Load sensitivity package into R (if package already loaded, + // nothing happens. + engine.voidEval("library(sensitivity)"); + + //Set the working directory (for exports) + engine.setwd(outputDirectory); + + SimulationParameter param = simulationStorages.get(0) + .getParameter(); + int sensitivityNumber = param.getSensitivityExport().size(); + + for (int k = 0; k < sensitivityNumber; k++) { + + SensitivityExport sensitivityExport = + param.getSensitivityExport().get(k); + + String rInstruction = createImportInstruction(sensitivityExport, + simulationStorages); + + // Send the simulation results + engine.voidEval(rInstruction); + + //Put results in isis.simule + engine.voidEval("isis.simule<-data.frame(isis.simule," + + sensitivityExport.getExportFilename() + ")"); + } + + //adding attribute to isis.Simule + engine.voidEval("attr(isis.simule,\"nomModel\")<-" + + "\"isis-fish-externe-R\""); + + engine.voidEval("attr(isis.simule,\"call\")<-isis.methodExp$call"); + + for (int k = 0; k < sensitivityNumber; k++) { + + // Creates the R expression to import results in R + String name = param.getSensitivityExport().get(k) + .getExportFilename(); + + //Compute results + engine.voidEval("tell(isis.methodAnalyse,y=" + name + ")"); + + //creating isis.methodAnalyse + String exportMethodAnalyse = String.format("%s.isis.methodAnalyse", simulationName + "." + name); + engine.voidEval(exportMethodAnalyse + "<-list(" + + //"\"isis.factors\"=isis.factors," + + //"\"isis.factor.distribution\"=isis.factor.distribution," + + "\"isis.simule\"=isis.simule," + + "\"call_method\"=\"tell(isis.methodAnalyse,y=" + name + ")" + "\"," + + "\"analysis_result\"=isis.methodAnalyse)"); + + //setting isis.methodAnalyse attributes + engine.voidEval("attr(" + exportMethodAnalyse + ",\"nomModel\")<-" + + "\"isis-fish-externe-R\""); + + // Get back the sensitivity results, mu, mu star and sigma. + engine.voidEval("mu<-apply(isis.methodAnalyse$ee, 2, mean)"); + engine.voidEval("mu.star <- apply(isis.methodAnalyse$ee, 2, function(a) mean(abs(a)))"); + engine.voidEval("sigma <- apply(isis.methodAnalyse$ee, 2, sd)"); + + //Create the data.frame of sensitivity indices for export purpose + engine.voidEval("df<-data.frame(mu,mu.star,sigma)"); + engine.voidEval("row.names(df)<-isis.factor.distribution$NomFacteur"); + + //Create the data.frame of scenarios and results for export purpose + engine.voidEval("dfresults<-data.frame(isis.methodAnalyse$X," + name + ")"); + + //Set dfresults names + engine.voidEval("resultsnames<-c(isis.factor.distribution$NomFacteur,\"Result\")"); + engine.voidEval("names(dfresults)<-resultsnames"); + + //Export sensitivity indices + engine.voidEval("write.csv(df," + + "\"" + name + "_SensitivityIndices.csv\")"); + + //Export results + engine.voidEval("write.csv(dfresults," + + "\"" + name + "_Results.csv\")"); + //FIXME export through java to enable export when using Rserve + + } + + closeEngine(engine, outputDirectory); + + } catch (Exception e) { + throw new SensitivityException("Can't evaluate results", e); + } + + } + + @Override + public String getDescription() { + return "Implementation of Morris method using R (needs the sensitivity" + + " package to work)"; + } + +} Copied: trunk/src/test/resources/test-database/sensitivityanalysis/OptimumLHS.java (from rev 3968, branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/OptimumLHS.java) =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/OptimumLHS.java (rev 0) +++ trunk/src/test/resources/test-database/sensitivityanalysis/OptimumLHS.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,337 @@ +/* + * #%L + * IsisFish data + * %% + * Copyright (C) 2009 - 2014 Ifremer, Code Lutin, Jean Couteau + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package sensitivityanalysis; + +import java.io.File; +import java.util.List; + +import org.nuiton.j2r.REngine; + +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.export.SensitivityExport; +import fr.ifremer.isisfish.simulator.SimulationParameter; +import fr.ifremer.isisfish.simulator.sensitivity.*; +import fr.ifremer.isisfish.util.Doc; + +import org.nuiton.j2r.types.RDataFrame; + +/** + * Implementation of Optimum Latin Hypercube method using R. + * + * @author jcouteau + * @version $Revision$ + */ +public class OptimumLHS extends AbstractSensitivityAnalysis { + + @Doc("Number of simulations (default=10)") + public int param_simulationNumber = 10; + @Doc("The maximum number of times the Columnwise Pairwise algorithm is applied to all the columns(default=2).") + public int param_MaxSweeps = 2; + @Doc("The optimal stopping criterion (between 0 and 1) (default=0.1).") + public double param_eps = 0.1; + @Doc("True to be able to modify the code sent to R") + public boolean param_modifR = false; + + /** + * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs + * continue. + * + * @return <tt>true</tt> s'il sait la gerer + */ + @Override + public boolean canManageCardinality() { + return true; + } + + @Override + public SensitivityScenarios compute(DesignPlan plan, File outputDirectory) + throws SensitivityException { + + setIsisFactorsR(plan, outputDirectory); + + int factorNumber = plan.getFactors().size(); + List<Factor> factors = plan.getFactors(); + RDataFrame dataFrame; + SensitivityScenarios thisExperiment = new SensitivityScenarios(); + List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); + + //Test all factors, if one is discrete, return null + checkAllFactorContinuous(factors); + + try { + REngine engine = openEngine(outputDirectory); + + //Load the lhs library + engine.voidEval("library(lhs)"); + + String rInstruction = "isis.methodAnalyse<-optimumLHS(n=%s,k=%s,maxSweeps=%s,eps=%s)"; + + String rCall = String.format(rInstruction, param_simulationNumber, + factorNumber, param_MaxSweeps, param_eps); + + if (param_modifR) { + rCall = editRInstruction(rCall); + } + + //Create the scenarios + engine.voidEval(rCall); + + // Get back experiment plan + engine.eval("expPlan<-as.data.frame(isis.methodAnalyse)"); + dataFrame = (RDataFrame)engine.eval("expPlan"); + dataFrame.setVariable("expPlan"); + + // Setting up the scenarios. + for (int j = 0; j < param_simulationNumber; j++) { + Scenario experimentScenario = new Scenario(); + for (int i = 0; i < factorNumber; i++) { + Factor factor = plan.getFactors().get(i); + factor.setValueForIdentifier(dataFrame.get(i, j)); + experimentScenario.addFactor(factor); + } + thisExperimentScenarios.add(experimentScenario); + thisExperiment.setScenarios(thisExperimentScenarios); + } + + engine.voidEval(getIsisFactorDistribution(factors)); + + engine.voidEval("call<-" + "\"isis.methodAnalyse<-optimumLHS(" + + "n=" + param_simulationNumber + + ",k=" + factorNumber + + ",maxSweeps=" + param_MaxSweeps + + ",eps=" + param_eps + ")\""); + + engine.voidEval("isis.methodExp<-list(" + + "\"isis.factors\"=isis.factors," + + "\"isis.factor.distribution\"=isis.factor.distribution," + + "\"call\"=call)"); + + engine.voidEval("attr(isis.methodExp," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + + engine.voidEval("isis.simule<-data.frame(isis.methodAnalyse)"); + + engine.voidEval("attr(isis.simule," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + + engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); + + String data = "data<-data.frame("; + + //Create the factors vectors and the dataFrame instruction + for (int j = 0; j < factors.size(); j++) { + //The factor values vector + String vector; + //Get back the factor + Scenario scenario = thisExperimentScenarios.get(0); + Factor factor = scenario.getFactors().get(j); + String factorName = factor.getName().replaceAll(" ", ""); + + vector = factorName + "<-c("; + for (int i = 0; i < param_simulationNumber; i++) { + //Get back the displayed value the factor + Scenario tempScenario = thisExperimentScenarios.get(i); + Factor tempFactor = tempScenario.getFactors().get(j); + Object value = tempFactor.getDisplayedValue(); + + if (i < (param_simulationNumber - 1)) { + vector = vector + value + ","; + } else { + vector += value; + } + + } + vector += ")"; + engine.voidEval(vector); + + if (j < factors.size() - 1) { + data += factorName + "=factor(" + factorName + "),"; + } else { + data += factorName + "=factor(" + factorName + "))"; + } + } + engine.voidEval(data); + + // Creating the factors vector. + rInstruction = "factornames<-c("; + for (int i = 0; i < factorNumber; i++) { + if (i != (factorNumber - 1)) { + rInstruction = rInstruction + "\"" + + factors.get(i).getName() + "\","; + } else { + rInstruction = rInstruction + "\"" + + factors.get(i).getName() + "\""; + } + } + + rInstruction += ")"; + + engine.voidEval(rInstruction); + + closeEngine(engine, outputDirectory); + + } catch (Exception e) { + throw new SensitivityException("Can't generate scenarios", e); + } + + return thisExperiment; + } + + @Override + public void analyzeResult(List<SimulationStorage> simulationStorages, + File outputDirectory) throws SensitivityException { + + //The first storage to get the name and parameters all along the method + SimulationStorage storage = simulationStorages.get(0); + String simulationName = outputDirectory.getName().replaceAll("-", ""); + + try { + + REngine engine = openEngine(outputDirectory); + + engine.voidEval("factors<-data.frame(isis.methodAnalyse)"); + engine.voidEval("names(factors)<-isis.factor.distribution$NomFacteur"); + + //Get back the factors number + int factorNumber = (Integer) engine.eval("length(factors[1,])"); + //Get back the simulation number + param_simulationNumber = (Integer) (engine.eval("length(factors[,1])")); + + SimulationParameter param = storage.getParameter(); + int sensitivityNumber = param.getSensitivityExport().size(); + + for (int k = 0; k < sensitivityNumber; k++) { + + SensitivityExport sensitivityExport = + param.getSensitivityExport().get(k); + + String rInstruction = createImportInstruction(sensitivityExport, + simulationStorages); + + // Send the simulation results + engine.voidEval(rInstruction); + + //Put results in isis.simule + engine.voidEval("isis.simule<-data.frame(isis.simule," + + sensitivityExport.getExportFilename() + ")"); + } + + //adding attribute to isis.Simule + engine.voidEval("attr(isis.simule," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + engine.voidEval("attr(isis.simule,\"call\")<-isis.methodExp$call"); + + for (int k = 0; k < sensitivityNumber; k++) { + + // Creates the R expression to import results in R + SensitivityExport export = param.getSensitivityExport().get(k); + String name = export.getExportFilename(); + + //Create the dataforaov data.frame + String dataframe = "dataforaov<-data.frame(factors," + + name + "=" + name + ")"; + engine.voidEval(dataframe); + + //Call aov() + String aovCall = "aovresult<-aov(" + name + "~"; + for (int j = 0; j < factorNumber; j++) { + + String factorName = (String) engine.eval("names(factors)[" + (j + 1) + "]"); + factorName = factorName.replaceAll(" ", "."); + + if (j < (factorNumber - 1)) { + aovCall += factorName + + "+"; + } else { + aovCall += factorName + ",data=dataforaov)"; + } + } + engine.voidEval(aovCall); + + /*Export the results + *Export format is csv, data separated by ',' + *Results Export name is sensitivityExportName_Results.csv + *Sensitivity Indices export name is sensitivityExportName_SensitivityIndices.csv + */ + + //Compute Sum of Squares and Sensitivity indices + engine.voidEval("SoS<-summary(aovresult)[[1]][1:dim(summary(aovresult)[[1]])[1],2]"); + engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]"); + engine.voidEval("IndSensibilite<-SoS/sum(SoS)"); + + //Create a data.frame to export sensitivity important results in one file. + engine.voidEval("exportsensitivity<-data.frame(" + + "SoS[1:dim(summary(aovresult)[[1]])[1]]," + + "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])"); + engine.voidEval("names(exportsensitivity)<-c(" + + "\"Sum Of Squares\"," + + "\"Sensitivity indices\")"); + engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]"); + + + //Set dataforaov names + engine.voidEval("names(dataforaov)<-c(isis.factor.distribution$NomFacteur,\"Result\")"); + + /*Set the export directory + *Export directory is the first simulation export directory. + */ + engine.setwd(outputDirectory); + + //Save the results with the scenarios. + engine.voidEval("write.csv(dataforaov,\"" + + name + "_Results.csv\")"); + + //Save the sensitivity indices + engine.voidEval("write.csv(exportsensitivity,\"" + + name + "_SensitivityIndices.csv\")"); + //FIXME export through java to enable export when using Rserve (when distant Rserve). + + //creating isis.methodAnalyse + String exportMethodAnalyse = String.format("%s.isis.methodAnalyse", simulationName + "." + name); + engine.voidEval(exportMethodAnalyse + "<-list(" + + "\"isis.factors\"=isis.factors," + + "\"isis.factor.distribution\"=isis.factor.distribution," + + "\"isis.simule\"=isis.simule," + + "call_method=\"" + aovCall + "\""+ + ",\"analysis_result\"=list(aovresult,IndSensibilite))"); + + engine.voidEval("attr(" + exportMethodAnalyse + "," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + + } + + closeEngine(engine, outputDirectory); + + } catch (Exception e) { + throw new SensitivityException("Can't evaluate results", e); + } + + } + + @Override + public String getDescription() { + return "Implementation of Random Latin Hypercube method method " + + "using R (needs 'lhs' package to work)"; + } + +} Copied: trunk/src/test/resources/test-database/sensitivityanalysis/RandomLHS.java (from rev 3968, branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RandomLHS.java) =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/RandomLHS.java (rev 0) +++ trunk/src/test/resources/test-database/sensitivityanalysis/RandomLHS.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,330 @@ +/* + * #%L + * IsisFish data + * %% + * Copyright (C) 2009 - 2014 Ifremer, Code Lutin, Jean Couteau + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package sensitivityanalysis; + +import java.io.File; +import java.lang.String; +import java.util.List; + +import fr.ifremer.isisfish.export.SensitivityExport; +import org.nuiton.j2r.REngine; +import org.nuiton.j2r.types.RDataFrame; + +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.simulator.SimulationParameter; +import fr.ifremer.isisfish.simulator.sensitivity.*; +import fr.ifremer.isisfish.util.Doc; + +/** + * Implementation of Random Latin Hypercube method using R. + * + * @author jcouteau + * @version $Revision$ + */ +public class RandomLHS extends AbstractSensitivityAnalysis { + + @Doc("Simulation number (default=10)") + public int param_simulationNumber = 10; + @Doc("True to be able to modify the code sent to R") + public boolean param_modifR = false; + + /** + * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs + * continue. + * + * @return <tt>true</tt> s'il sait la gerer + */ + @Override + public boolean canManageCardinality() { + return true; + } + + @Override + public SensitivityScenarios compute(DesignPlan plan, File outputDirectory) + throws SensitivityException { + + setIsisFactorsR(plan, outputDirectory); + + int factorNumber = plan.getFactors().size(); + RDataFrame dataFrame; //The dataframe to get back the scenarios from R + SensitivityScenarios thisExperiment = new SensitivityScenarios(); //The experiment we will build + List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); //The list of scenarios + List<Factor> factors = plan.getFactors(); //The factors + + checkAllFactorContinuous(factors); + + try { + + REngine engine = openEngine(outputDirectory); + + //Load the lhs library + engine.voidEval("library(lhs)"); + + //Create the scenarios + String rInstruction = "isis.methodAnalyse<-randomLHS(%s,%s)"; + String rCall = String.format(rInstruction, param_simulationNumber, + factorNumber); + + if (param_modifR) { + rCall = editRInstruction(rCall); + } + + engine.voidEval(rCall); + + // Get back experiment plan + engine.eval("expPlan<-as.data.frame(isis.methodAnalyse)"); + dataFrame = (RDataFrame)engine.eval("expPlan"); + dataFrame.setVariable("expPlan"); + + // Setting up the scenarios. + for (int j = 0; j < param_simulationNumber; j++) { + Scenario experimentScenario = new Scenario(); + for (int i = 0; i < factorNumber; i++) { + Factor factor = plan.getFactors().get(i); //The factor we are setting + factor.setValueForIdentifier(dataFrame.get(i,j)); + experimentScenario.addFactor(factor); + } + thisExperimentScenarios.add(experimentScenario); + thisExperiment.setScenarios(thisExperimentScenarios); + } + + engine.voidEval(getIsisFactorDistribution(factors)); + + engine.voidEval("call<-" + "\"isis.methodAnalyse<-randomLHS(" + + param_simulationNumber + "," + factorNumber + ")\""); + + engine.voidEval("isis.methodExp<-list(" + + "\"isis.factors\"=isis.factors," + + "\"isis.factor.distribution\"=isis.factor.distribution," + + "\"call\"=call)"); + + engine.voidEval("attr(isis.methodExp," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + + engine.voidEval("isis.simule<-data.frame(isis.methodAnalyse)"); + engine.voidEval("attr(isis.simule," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); + + String data = "data<-data.frame("; + + //Create the factors vectors and the dataFrame instruction + for (int j = 0; j < factors.size(); j++) { + Scenario firstScenario = thisExperimentScenarios.get(0); + Factor factor = firstScenario.getFactors().get(j); + String factorName = factor.getName().replaceAll(" ", ""); + + //the vector of the factor values + //read all the values one by one from the already created + //scenarios. + String vector = factorName + "<-c("; + for (int i = 0; i < param_simulationNumber; i++) { + Scenario scenario = thisExperimentScenarios.get(i); + List<Factor> factorList = scenario.getFactors(); + Factor factor1 = factorList.get(j); + if (i < (param_simulationNumber - 1)) { + vector += factor1.getDisplayedValue() + ","; + } else { + vector += factor1.getDisplayedValue(); + } + + } + vector = vector + ")"; + engine.voidEval(vector); + + //add factor1=factor(factor1) for each factor... + if (j < factors.size() - 1) { + data += factorName + "=factor(" + factorName + "),"; + } else { + data += factorName + "=factor(" + factorName + "))"; + } + + } + engine.voidEval(data); + + // Creating the factors vector. + rInstruction = "factornames<-c("; + for (int i = 0; i < factorNumber; i++) { + if (i != (factorNumber - 1)) { + rInstruction = rInstruction + "\"" + + factors.get(i).getName() + "\","; + } else { + rInstruction = rInstruction + "\"" + + factors.get(i).getName() + "\""; + } + } + rInstruction += ")"; + engine.voidEval(rInstruction); + + // Clean RData + for (Factor factor : factors) { + String factorName = factor.getName().replaceAll(" ", ""); + engine.remove(factorName); + } + + closeEngine(engine, outputDirectory); + + } catch (Exception e) { + throw new SensitivityException("Can't generate scenarios", e); + } + + return thisExperiment; + } + + @Override + public void analyzeResult(List<SimulationStorage> simulationStorages, + File outputDirectory) throws SensitivityException { + + SimulationStorage simulationStorage1 = simulationStorages.get(0); + String simulationName = outputDirectory.getName().replaceAll("-", ""); + SimulationParameter param = simulationStorage1.getParameter(); + int sensitivityNumber = param.getSensitivityExport().size(); + //List<SensitivityExport> export = param.getSensitivityExport(); + + try { + REngine engine = openEngine(outputDirectory); + + engine.voidEval("factors<-data.frame(isis.methodAnalyse)"); + + //Get back the factors number + int factorNumber = (Integer) engine.eval("length(factors)"); + + //Get back the simulation number + param_simulationNumber = (Integer) (engine.eval("length(factors[,1])")); + + for (int k = 0; k < sensitivityNumber; k++) { + + SensitivityExport sensitivityExport = + param.getSensitivityExport().get(k); + + String rInstruction = createImportInstruction(sensitivityExport, + simulationStorages); + + // Send the simulation results + engine.voidEval(rInstruction); + + //Put results in isis.simule + engine.voidEval("isis.simule<-data.frame(isis.simule," + + sensitivityExport.getExportFilename() + ")"); + } + + //adding attribute to isis.Simule + engine.voidEval("attr(isis.simule," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + + engine.voidEval("attr(isis.simule,\"call\")<-isis.methodExp$call"); + + for (int k = 0; k < sensitivityNumber; k++) { + + // Creates the R expression to import results in R + String name = param.getSensitivityExport().get(k) + .getExportFilename(); + + //Create the dataforaov data.frame + String dataframe = "dataforaov<-data.frame(factors," + name + + "=" + name + ")"; + engine.voidEval(dataframe); + + //Call aov() + String aovCall = "aovresult<-aov(" + name + "~"; + for (int j = 0; j < factorNumber; j++) { + + if (j < (factorNumber - 1)) { + aovCall += engine.eval("names(factors)[" + (j + 1) + "]") + + "+"; + } else { + aovCall += engine.eval("names(factors)[" + (j + 1) + "]") + + ",data=dataforaov)"; + } + } + engine.voidEval(aovCall); + + /*Export the results + *Export format is csv, data separated by ',' + *Results Export name is sensitivityExportName_Results.csv + *Sensitivity Indices export name is sensitivityExportName_SensitivityIndices.csv + */ + + //Compute Sum of Squares and Sensitivity indices + engine.voidEval("SoS<-summary(aovresult)[[1]][1:dim(summary(aovresult)[[1]])[1],2]"); + engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]"); + engine.voidEval("IndSensibilite<-SoS/sum(SoS)"); + + //Create a data.frame to export sensitivity important results in one file. + engine.voidEval("exportsensitivity<-data.frame(" + + "SoS[1:dim(summary(aovresult)[[1]])[1]]," + + "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])"); + engine.voidEval("names(exportsensitivity)<-c(" + + "\"Sum Of Squares\"," + + "\"Sensitivity indices\")"); + engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]"); + + + //Set dataforaov names + engine.voidEval("resultsnames<-c(isis.factor.distribution$NomFacteur,\"Result\")"); + engine.voidEval("names(dataforaov)<-resultsnames"); + + /*Set the export directory + *Export directory is the first simulation export directory. + */ + engine.setwd(outputDirectory); + + //Save the results with the scenarios. + engine.voidEval("write.csv(dataforaov,\"" + + param.getSensitivityExport().get(k).getExportFilename() + + "_Results.csv\")"); + + //Save the sensitivity indices + engine.voidEval("write.csv(exportsensitivity,\"" + + param.getSensitivityExport().get(k).getExportFilename() + + "_SensitivityIndices.csv\")"); + //FIXME export through java to enable export when using Rserve (when distant Rserve). + + //creating isis.methodAnalyse + String exportMethodAnalyse = String.format("%s.isis.methodAnalyse", simulationName + "." + name); + engine.voidEval(exportMethodAnalyse + "<-list(" + + "\"isis.factors\"=isis.factors," + + "\"isis.factor.distribution\"=isis.factor.distribution," + + "\"isis.simule\"=isis.simule," + + "call_method=\"" + aovCall + "\"," + + "\"analysis_result\"=list(aovresult,IndSensibilite))"); + + engine.voidEval("attr(" + exportMethodAnalyse + "," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + } + + closeEngine(engine, outputDirectory); + + } catch (Exception e) { + throw new SensitivityException("Can't evaluate results", e); + } + + } + + @Override + public String getDescription() { + return "Implementation of Random Latin Hypercube method method using" + + " R needs the 'lhs' package to work)"; + } + +} Copied: trunk/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java (from rev 3968, branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java) =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java (rev 0) +++ trunk/src/test/resources/test-database/sensitivityanalysis/RegularExpandGrid.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,344 @@ +/* + * #%L + * IsisFish data + * %% + * Copyright (C) 2009 - 2014 Ifremer, Code Lutin, Jean Couteau + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package sensitivityanalysis; + +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.export.SensitivityExport; +import fr.ifremer.isisfish.simulator.SimulationParameter; +import fr.ifremer.isisfish.simulator.sensitivity.*; +import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; +import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; +import fr.ifremer.isisfish.util.Doc; + +import org.apache.commons.lang.StringUtils; +import org.nuiton.j2r.REngine; +import org.nuiton.j2r.RException; +import org.nuiton.j2r.types.RDataFrame; + +import java.io.File; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * User: couteau + * Date: 6 janv. 2010 + * Time: 14:31:09 + */ +public class RegularExpandGrid extends AbstractSensitivityAnalysis { + + @Doc("Interaction order") + public int param_order = 2; + + @Doc("True to be able to modify the code sent to R") + public boolean param_modifR = false; + + /** + * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs + * continue. + * + * @return <tt>true</tt> s'il sait la gerer + */ + @Override + public boolean canManageCardinality() { + return false; + } + + @Override + public SensitivityScenarios compute(DesignPlan plan, File outputDirectory) + throws SensitivityException { + + SensitivityScenarios thisExperiment = new SensitivityScenarios(); + + setIsisFactorsR(plan, outputDirectory); + + //extract the factors from the design plan + List<Factor> factors = plan.getFactors(); + int factorsNb = factors.size(); + + try { + REngine engine = openEngine(outputDirectory); + + //Get Isis R session + engine.loadRData(outputDirectory.getParentFile(), + outputDirectory.getName()); + + //Create a list of the factors under the form factor1=factor1,... + String factorsNames = ""; + + //Create a list of the factors under the form factor1,factor2,... + String factorNames = ""; + + //create the factors vectors + for (Factor factor : factors) { + //The factor values vector + String factorName = factor.getName().replaceAll(" ", ""); + factorsNames += factorName + "=" + factorName + ","; + factorNames += factorName + ","; + String vector = factorName + "<-c("; + + Domain domain = factor.getDomain(); + + if (domain instanceof ContinuousDomain) { + //ContinuousDomain contDomain = (ContinuousDomain) domain; + int card = factor.getCardinality(); + Double min = 0.0; + Double max = 1.0; + + for (int i = 0; i < card; i++) { + //add the ith value + vector += (min + (i * (max - min) / (card - 1))) + ","; + } + } + + if (domain instanceof DiscreteDomain) { + int nbValues = ((DiscreteDomain) domain).getValuesCount(); + for (int i = 0; i < nbValues; i++) { + vector += "as.integer(" + i + "),"; + } + } + + vector = vector.substring(0, vector.length() - 1); + + vector += ")"; + + engine.voidEval(vector); + + + } + + factorsNames = factorsNames.substring(0,factorsNames.length()-1); + factorNames = factorNames.substring(0,factorNames.length()-1); + + + //X<-expand.grid(vector=???,weight=???) + String expandGrid = "isis.methodAnalyse<-expand.grid(%s)"; + + String rCall = String.format(expandGrid,factorsNames); + + if (param_modifR) { + rCall = editRInstruction(rCall); + } + + engine.voidEval(rCall); + + engine.eval("expPlan<-as.data.frame(isis.methodAnalyse)"); + RDataFrame dataFrame = (RDataFrame)engine.eval("expPlan"); + dataFrame.setVariable("expPlan"); + int nbExperiments = (Integer)engine.eval("dim(isis.methodAnalyse)[1]"); + + List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); + for (int j = 0; j < nbExperiments; j++) { + Scenario experimentScenario = new Scenario(); + for (int i = 0; i < factorsNb; i++) { + Factor factor = factors.get(i); + factor.setValueForIdentifier(dataFrame.get(i, j)); + experimentScenario.addFactor(factor); + } + thisExperimentScenarios.add(experimentScenario); + thisExperiment.setScenarios(thisExperimentScenarios); + } + + + String factorDistribution = "isis.factor.distribution<-data.frame(" + + "NomFacteur=c(%s)," + + "NomDistribution=c(%s)," + + "ParametreDistribution=c(%s))"; + + String distribution = ""; + String parameters = ""; + + for (int i = 0; i < factorsNb; i++) { + Domain domain = factors.get(i).getDomain(); + if (i != 0) { + distribution += ","; + parameters += ","; + } + if (domain instanceof ContinuousDomain){ + //ContinuousDomain contDomain = (ContinuousDomain)domain; + distribution += "\"qunif\""; + parameters += "\"[0.0;1.0]\""; + } else { + DiscreteDomain discDomain = (DiscreteDomain)domain; + distribution += "\"discrete\""; + parameters+="\"["; + Map<Object, Object> values = discDomain.getValues(); + int count=0; + Collection<Object> collecValues = values.values(); + for (Object value:collecValues){ + if (count!=0){ + parameters += ","; + } + parameters += StringUtils.replace(value.toString(), "\"", "\\\"") ; + count++; + } + parameters+="]\""; + } + } + engine.voidEval(String.format(factorDistribution, factorNames, + distribution, parameters)); + + engine.voidEval("call<-\"" + + String.format(expandGrid,factorsNames) + "\""); + engine.voidEval("isis.methodExp<-list(" + + "\"isis.factors\"=isis.factors," + + "\"isis.factor.distribution\"=isis.factor.distribution," + + "\"call\"=call)"); + engine.voidEval("attr(isis.methodExp," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + engine.voidEval("isis.simule<-isis.methodAnalyse"); + engine.voidEval("attr(isis.simule," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); + + closeEngine(engine, outputDirectory); + + } catch (RException eee) { + throw new SensitivityException("Can't generate scenarios", eee); + } + + return thisExperiment; + } + + @Override + public void analyzeResult(List<SimulationStorage> simulationStorages, + File outputDirectory) throws SensitivityException { + + try { + + REngine engine = openEngine(outputDirectory); + + //Get back the factors number + int factorNumber = (Integer)engine.eval("dim(isis.methodAnalyse)[2]"); + + SimulationParameter param = simulationStorages.get(0).getParameter(); + int sensitivityNumber = param.getSensitivityExport().size(); + + String firstStorageName = outputDirectory.getName().replaceAll("-", ""); + + for (int k = 0; k < sensitivityNumber; k++) { + + SensitivityExport sensitivityExport = + param.getSensitivityExport().get(k); + + String name = sensitivityExport.getExportFilename(); + + String rInstruction = createImportInstruction(sensitivityExport, + simulationStorages); + + // Send the simulation results + engine.voidEval(rInstruction); + + //Put results in isis.simule + engine.voidEval("isis.simule<-data.frame(isis.simule," + + name + ")"); + + //Create the dataforaov data.frame + String dataFrame = "dataforaov<-data.frame(isis.methodAnalyse," + + name + "=" + name + ")"; + engine.voidEval(dataFrame); + + //Call aov() + String aovCall = "aovresult<-aov(" + name + "~("; + for (int j = 0; j < factorNumber; j++) { + if (j < (factorNumber - 1)) { + aovCall = aovCall + + engine.eval("names(isis.methodAnalyse)[" + (j + 1) + "]") + + "+"; + } else { + aovCall = aovCall + + engine.eval("names(isis.methodAnalyse)[" + (j + 1) + "]") + + ")"; + if(param_order>1){ + aovCall+="^" + param_order + ",data=dataforaov)"; + }else{ + aovCall+=",data=dataforaov)"; + } + } + } + engine.voidEval(aovCall); + + /*Export the results + *Export format is csv, data separated by ',' + *Results Export name is sensitivityExportName_Results.csv + *Sensitivity Indices export name is sensitivityExportName_SensitivityIndices.csv + */ + + //Compute Sum of Squares and Sensitivity indices + engine.voidEval("SoS<-summary(aovresult)[[1]][1:dim(summary(aovresult)[[1]])[1],2]"); + engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]"); + engine.voidEval("IndSensibilite<-SoS/sum(SoS)"); + + //Create a data.frame to export sensitivity important results in one file. + engine.voidEval("exportsensitivity<-data.frame(" + + "SoS[1:dim(summary(aovresult)[[1]])[1]]," + + "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])"); + engine.voidEval("names(exportsensitivity)<-c(" + + "\"Sum Of Squares\"," + + "\"Sensitivity indices\")"); + engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]"); + + /*Set the export directory + *Export directory is the first simulation export directory. + */ + engine.setwd(outputDirectory); + + //Save the results with the scenarios. + engine.voidEval("write.csv(dataforaov,\"" + + param.getSensitivityExport().get(k) + + .getExportFilename() + "_Results.csv\")"); + + //Save the sensitivity indices + engine.voidEval("write.csv(exportsensitivity,\"" + + param.getSensitivityExport().get(k) + .getExportFilename() + + "_SensitivityIndices.csv\")"); + //FIXME export through java to enable export when using Rserve (when distant Rserve). + + //creating isis.methodAnalyse + String exportMethodAnalyse = String.format("%s.isis.methodAnalyse", firstStorageName + "." + name); + engine.voidEval(exportMethodAnalyse + "<-list(" + + "\"isis.factors\"=isis.factors," + + "\"isis.factor.distribution\"=isis.factor.distribution," + + "\"isis.simule\"=isis.simule," + + "\"call_method\"=\"" + aovCall + "\"," + + "\"analysis_result\"=list(aovresult,IndSensibilite))"); + + engine.voidEval("attr(" + exportMethodAnalyse + "," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + } + + closeEngine(engine, outputDirectory); + + } catch (Exception e) { + throw new SensitivityException("Can't evaluate results", e); + } + + } + + @Override + public String getDescription() { + return "Implementation of Expand Grid method using R"; + } +} Copied: trunk/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java (from rev 3968, branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java) =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java (rev 0) +++ trunk/src/test/resources/test-database/sensitivityanalysis/RegularFractions.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,343 @@ +/* + * #%L + * IsisFish data + * %% + * Copyright (C) 2009 - 2014 Ifremer, Code Lutin, Jean Couteau + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package sensitivityanalysis; + +import java.io.File; +import java.util.List; + +import fr.ifremer.isisfish.export.SensitivityExport; + +import org.nuiton.j2r.REngine; +import org.nuiton.j2r.RException; +import org.nuiton.j2r.types.RDataFrame; + +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.simulator.SimulationParameter; +import fr.ifremer.isisfish.simulator.sensitivity.*; +import fr.ifremer.isisfish.util.Doc; + +public class RegularFractions extends AbstractSensitivityAnalysis { + + @Doc("the path of the directory where the R function is stored (do not indicate the RegularFractions.R file name)") + public String param_pathToFunction = ""; + + @Doc("unique prime number of levels of all input and unit factors") + public int param_p = 2; + + @Doc("number of unit factors (so that there are N=p^r units)") + public int param_r = 2; + + @Doc("resolution of the fraction") + public int param_resolution = 2; + + @Doc("True to be able to modify the code sent to R") + public boolean param_modifR = false; + + /** + * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs + * continue. + * + * @return <tt>true</tt> s'il sait la gerer + */ + @Override + public boolean canManageCardinality() { + return true; + } + + @Override + public SensitivityScenarios compute(DesignPlan plan, File outputDirectory) + throws SensitivityException { + + setIsisFactorsR(plan, outputDirectory); + + RDataFrame dataFrame; + int factorNumber = plan.getFactors().size(); + List<Factor> factors = plan.getFactors(); + SensitivityScenarios thisExperiment = new SensitivityScenarios(); + List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); + + String factorNames = ""; + + //Test all factors, if one is discrete, return null + checkAllFactorContinuous(factors); + + //Create a string with all factors names + for (int i = 0; i < factorNumber; i++) { + if (i != 0) { + factorNames += ","; + } + + factorNames += "\"" + factors.get(i).getName() + "\""; + } + + try { + + REngine engine = openEngine(outputDirectory); + + //Clear session + engine.clearSession(); + + //Get Isis R session + engine.loadRData(outputDirectory.getParentFile(), + outputDirectory.getName()); + + //Set the working directory (to import the R function) + engine.setwd(new File(param_pathToFunction)); + + //Import the function + engine.voidEval("source(\"regularfractions.R\")"); + + //Create the instruction + String rInstruction = "isis.methodAnalyse<-regular.fraction(%s,%s,%s,%s)"; + String rCall = String.format(rInstruction, factors.size(), param_p, + param_r, param_resolution); + + if (param_modifR) { + rCall = editRInstruction(rCall); + } + + // Run function + engine.voidEval(rCall); + + // Run function + engine.voidEval("call<-\"" + rCall + "\""); + + // Creating the factors vector. + rInstruction = "factornames<-c(%s)"; + rCall = String.format(rInstruction, factorNames); + + engine.voidEval(rCall); + + + // Get back experiment plan + engine.eval("expPlan<-as.data.frame(isis.methodAnalyse[[1]])"); + dataFrame = (RDataFrame)engine.eval("expPlan"); + dataFrame.setVariable("expPlan"); + + //Get back the simulation number + int simulationNumber = (Integer) engine.eval("length(isis.methodAnalyse[[1]][,1])"); + + // Setting up the scenarios. + for (int j = 0; j < simulationNumber; j++) { + Scenario experimentScenario = new Scenario(); + for (int i = 0; i < factors.size(); i++) { + Factor factor = plan.getFactors().get(i); + factor.setValueForIdentifier(dataFrame.get(i,j)); + experimentScenario.addFactor(factor); + } + thisExperimentScenarios.add(experimentScenario); + thisExperiment.setScenarios(thisExperimentScenarios); + } + + String dataframe = "data<-data.frame("; + + //Create the factors vectors and the dataframe instruction + for (int j = 0; j < factorNumber; j++) { + Factor factor = factors.get(j); + String factorName = factor.getName().replaceAll(" ", ""); + + String vector = factorName + "<-c("; + for (int i = 0; i < simulationNumber; i++) { + Scenario scenario = thisExperimentScenarios.get(i); + List<Factor> newFactors = scenario.getFactors(); + Factor factor1 = newFactors.get(j); + + if (i < (simulationNumber - 1)) { + vector += factor1.getDisplayedValue() + ","; + } else { + vector += factor1.getDisplayedValue(); + } + + } + vector = vector + ")"; + engine.voidEval(vector); + + if (j < factorNumber - 1) { + dataframe += factorName + "=factor(" + factorName + "),"; + } else { + dataframe += factorName + "=factor(" + factorName + "))"; + } + + } + engine.voidEval(dataframe); + + engine.voidEval(getIsisFactorDistribution(factors)); + + engine.voidEval("isis.methodExp<-list(" + + "\"isis.factors\"=isis.factors," + + "\"isis.factor.distribution\"=isis.factor.distribution," + + "\"call\"=call)"); + + engine.voidEval("attr(isis.methodExp," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + + //Create isis.Simule + engine.voidEval("isis.simule<-data.frame(data)"); + + engine.voidEval("attr(isis.simule," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + + engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); + + closeEngine(engine, outputDirectory); + + } catch (RException eee) { + throw new SensitivityException("Can't generate scenarios", eee); + } + + return thisExperiment; + + } + + @Override + public void analyzeResult(List<SimulationStorage> simulationStorages, + File outputDirectory) throws SensitivityException { + + SimulationStorage firstStorage = simulationStorages.get(0); + SimulationParameter param = firstStorage.getParameter(); + List<SensitivityExport> exports = param.getSensitivityExport(); + int sensitivityNumber = exports.size(); + String simulationName = outputDirectory.getName().replaceAll("-", ""); + + try { + + REngine engine = openEngine(outputDirectory); + + //Get back the factors number + int factorNumber = (Integer) engine.eval("dim(isis.simule)[2]"); + + for (int k = 0; k < sensitivityNumber; k++) { + + SensitivityExport sensitivityExport = + param.getSensitivityExport().get(k); + + String rInstruction = createImportInstruction(sensitivityExport, + simulationStorages); + + // Send the simulation results + engine.voidEval(rInstruction); + + //Put results in isis.simule + engine.voidEval("isis.simule<-data.frame(isis.simule," + + sensitivityExport.getExportFilename() + ")"); + } + + //adding attribute to isis.Simule + engine.voidEval("attr(isis.simule," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + + for (SensitivityExport export : exports) { + + String name = export.getExportFilename(); + + //Create the dataforaov data.frame + String dataFrame = "dataforaov<-data.frame(isis.simule," + + name + "=" + name + ")"; + engine.voidEval(dataFrame); + + //Call aov() + String aovCall = "aovresult<-aov(" + name + "~("; + for (int j = 0; j < factorNumber; j++) { + + if (j < (factorNumber - 1)) { + aovCall = aovCall + + engine.eval("names(isis.simule)[" + (j + 1) + "]") + + "+"; + } else { + aovCall = aovCall + + engine.eval("names(isis.simule)[" + (j + 1) + "]") + + ")"; + if (param_resolution <= 4) { + aovCall += ",data=dataforaov)"; + } else { + aovCall += "^2,data=dataforaov)"; + } + } + } + engine.voidEval(aovCall); + + /*Export the results + *Export format is csv, data separated by ',' + *Results Export name is sensitivityExportName_Results.csv + *Sensitivity Indices export name is sensitivityExportName_SensitivityIndices.csv + */ + + //Compute Sum of Squares and Sensitivity indices + engine.voidEval("SoS<-summary(aovresult)[[1]][1:dim(summary(aovresult)[[1]])[1],2]"); + engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]"); + engine.voidEval("IndSensibilite<-SoS/sum(SoS)"); + + //Create a data.frame to export sensitivity important results in one file. + engine.voidEval("exportsensitivity<-data.frame(" + + "SoS[1:dim(summary(aovresult)[[1]])[1]]," + + "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])"); + engine.voidEval("names(exportsensitivity)<-c(" + + "\"Sum Of Squares\"," + + "\"Sensitivity indices\")"); + engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]"); + + //Set dataforaov names + engine.voidEval("resultsnames<-c(isis.factor.distribution$NomFacteur,\"Result\")"); + engine.voidEval("names(dataforaov)<-isis.factor.distribution$NomFacteur"); + + /*Set the export directory + *Export directory is the first simulation export directory. + */ + engine.setwd(outputDirectory); + + //Save the results with the scenarios. + engine.voidEval("write.csv(dataforaov,\"" + name + + "_Results.csv\")"); + + //Save the sensitivity indices + engine.voidEval("write.csv(exportsensitivity,\"" + name + + "_SensitivityIndices.csv\")"); + //FIXME export through java to enable export when using Rserve (when distant Rserve). + + //creating isis.methodAnalyse + String exportMethodAnalyse = String.format("%s.isis.methodAnalyse", simulationName + "." + name); + engine.voidEval(exportMethodAnalyse + "<-list(" + + "\"isis.factors\"=isis.factors," + + "\"isis.factor.distribution\"=isis.factor.distribution," + + "\"isis.simule\"=isis.simule," + + "\"call_method\"=\"" + aovCall + "\"," + + "\"analysis_result\"=list(aovresult,IndSensibilite))"); + + engine.voidEval("attr(" + exportMethodAnalyse + "," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + } + + closeEngine(engine, outputDirectory); + + } catch (Exception eee) { + throw new SensitivityException("Can't evaluate results", eee); + } + + } + + @Override + public String getDescription() { + return "Implementation of Regular fractions method using R"; + } + +} Deleted: trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorJavaExpandGrid.java =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorJavaExpandGrid.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorJavaExpandGrid.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,390 +0,0 @@ -/* - * #%L - * IsisFish data - * %% - * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package sensitivityanalysis; - -import fr.ifremer.isisfish.datastore.SimulationStorage; -import fr.ifremer.isisfish.export.SensitivityExport; -import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis; -import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; -import fr.ifremer.isisfish.simulator.sensitivity.Domain; -import fr.ifremer.isisfish.simulator.sensitivity.Factor; -import fr.ifremer.isisfish.simulator.sensitivity.Scenario; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; -import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; -import fr.ifremer.isisfish.util.Doc; -import java.io.File; -import java.util.List; -import org.nuiton.j2r.REngine; -import org.nuiton.j2r.RProxy; - -/** - * Implementation of ExpandGrid method using Java - * - * @author jcouteau - * @version $Revision: 1.0 $ - * - */ -public class SensitivityCalculatorJavaExpandGrid extends - AbstractSensitivityAnalysis { - - @Doc("Interaction order") - public int param_order = 2; - - /** - * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs - * continue. - * - * @return <tt>true</tt> s'il sait la gerer - */ - @Override - public boolean canManageCardinality() { - return false; - } - - @Override - public SensitivityScenarios compute(DesignPlan plan, File outputDirectory) - throws SensitivityException { - - setIsisFactorsR(plan, outputDirectory); - - int k = 1; //number of sensitivity scenarios (initialization) - int factorNumber = plan.getFactors().size(); //number of factors - List<Factor> factors = plan.getFactors(); //list of factors - - for (int i = 0; i < factorNumber; i++) { - Factor factor = factors.get(i); - Domain domain = factor.getDomain(); - - //calculate the number of scenarios - if (domain instanceof ContinuousDomain) { - if (factor.getCardinality() != 0) { - k = k * factor.getCardinality(); - } - } else if (domain instanceof DiscreteDomain) { - DiscreteDomain discreteDomain = (DiscreteDomain)domain; - if (discreteDomain.getValues().size() != 0) { - k = k * discreteDomain.getValues().size(); - } - } - } - - SensitivityScenarios thisExperiment = new SensitivityScenarios(); - List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); - - for (int i = 0; i < k; i++) { - int result = 0; //used for the euclidian division - int rest = i; //used for the euclidian division - Scenario experimentScenario = new Scenario(); - for (int j = 0; j < factorNumber; j++) { - Factor factor = factors.get(j); - Domain domain = factor.getDomain(); - if (domain instanceof ContinuousDomain) { - ContinuousDomain continuousDomain = (ContinuousDomain)domain; - Double max = continuousDomain.getCalculatorMaxBound(); - Double min = continuousDomain.getCalculatorMinBound(); - int card = factor.getCardinality(); - - //Do the euclidian division - result = (int) Math.floor(rest / card); - rest = rest - (card * result); - - //Calculate the value of the factor - Double value = min + ((max - min) / (card - 1) * rest); - if ((domain instanceof MatrixContinuousDomain) - || (domain instanceof EquationContinuousDomain)) { - factor.setValueForIdentifier(value); - } else { - factor.setValueForIdentifier(value); - } - } - if (factor.getDomain() instanceof DiscreteDomain) { - DiscreteDomain discreteDomain = (DiscreteDomain)domain; - int card = discreteDomain.getValues().size(); - - //Do the euclidian division - result = (int) Math.floor(rest / card); - rest = rest - (card * result); - - //Select the value of the factor - factor.setValueForIdentifier(rest); - } - rest = result; - experimentScenario.addFactor(factor); - } - thisExperimentScenarios.add(experimentScenario); - - } - thisExperiment.setScenarios(thisExperimentScenarios); - - thisExperimentScenarios = thisExperiment.getScenarios(); - - /* - * Call R to save the data for result analysis - */ - int scenariosNumber = thisExperimentScenarios.size(); - - try { - - REngine engine = new RProxy(); - - //Clear session - engine.clearSession(); - - //Get Isis R session - engine.loadRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - String dataframe = "data<-data.frame("; - - //Create the factors vectors and the dataframe instruction - for (int j = 0; j < factorNumber; j++) { - - Factor factor = factors.get(j); - String factorName = factor.getName().replaceAll(" ", ""); - - //String vector = "factor" + j + "<-c("; - String vector = factorName + "<-c("; - for (int i = 0; i < scenariosNumber; i++) { - Scenario scenario = thisExperimentScenarios.get(i); - List<Factor> newFactors = scenario.getFactors(); - Factor factor1 = newFactors.get(j); - - if (i < (scenariosNumber - 1)) { - vector += factor1.getDisplayedValue() + ","; - } else { - vector += factor1.getDisplayedValue(); - } - - } - vector = vector + ")"; - engine.voidEval(vector); - - if (j < factorNumber - 1) { - dataframe += factorName + "=factor(" + factorName + "),"; - } else { - dataframe += factorName + "=factor(" + factorName + "))"; - } - - } - engine.voidEval(dataframe); - - // Creating the factors vector. - String rInstruction = "factornames<-c("; - for (int i = 0; i < factorNumber; i++) { - if (i != (factorNumber - 1)) { - rInstruction = rInstruction + "\"" - + factors.get(i).getName() + "\","; - } else { - rInstruction = rInstruction + "\"" - + factors.get(i).getName() + "\""; - } - } - - rInstruction += ")"; - - engine.voidEval(rInstruction); - - //Create the isis.factor.distribution - engine.voidEval("isis.factor.distribution<-c(0.0)"); - - //Create isis.MethodExp - engine.voidEval("isis.MethodExp<-list(" + - "isis.factors," + - "isis.factor.distribution," + - "call_method=\"isis-fish-externeR\")"); - - engine.voidEval("attr(isis.MethodExp," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - //Create isis.Simule - engine.voidEval("isis.simule<-data.frame(data)"); - - engine.voidEval("attr(isis.simule," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); - - // Save Isis R session - engine.saveRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - engine.terminate(); - - } catch (Exception e) { - throw new SensitivityException("Can't generate scenarios", e); - } - - return thisExperiment; - } - - @Override - public void analyzeResult(List<SimulationStorage> simulationStorages, - File outputdirectory) throws SensitivityException { - - SimulationStorage firstStorage = simulationStorages.get(0); - String simulationName = firstStorage.getName().replaceAll("-", ""); - SimulationParameter param = firstStorage.getParameter(); - int sensitivityNumber = param.getSensitivityExport().size(); - - try { - - REngine engine = new RProxy(); - - //Clear session - engine.clearSession(); - - //Get Isis R session - engine.loadRData(outputdirectory.getParentFile(), - outputdirectory.getName()); - - //Get back the factors number - int factorNumber = (Integer)engine.eval("dim(data)[2]"); - - for (int k = 0; k < sensitivityNumber; k++) { - - SensitivityExport sensitivityExport = - param.getSensitivityExport().get(k); - - String name = sensitivityExport.getExportFilename(); - - String rInstruction = createImportInstruction(sensitivityExport, - simulationStorages); - - // Send the simulation results - engine.voidEval(rInstruction); - - //Put results in isis.simule - engine.voidEval("isis.simule<-data.frame(isis.simule," - + name + ")"); - - //Create the dataforaov data.frame - String dataframe = "dataforaov<-data.frame(data," + - name + "=" + name + ")"; - engine.voidEval(dataframe); - - //Call aov() - String aovCall = "aovresult<-aov(" + name + "~("; - for (int j = 0; j < factorNumber; j++) { - if (j < (factorNumber - 1)) { - aovCall = aovCall + - engine.eval("names(data)[" + (j + 1) + "]") + - "+"; - } else { - aovCall = aovCall + - engine.eval("names(data)[" + (j + 1) + "]") + - ")"; - if(param_order>1){ - aovCall+="^" + param_order + ",data=dataforaov)"; - }else{ - aovCall+=",data=dataforaov)"; - } - } - } - engine.voidEval(aovCall); - - /*Export the results - *Export format is csv, data separated by ',' - *Results Export name is sensitivityExportName_Results.csv - *Sensitivity Indices export name is sensitivityExportName_SensitivityIndices.csv - */ - - //Compute Sum of Squares and Sensitivity indices - engine.voidEval("SoS<-summary(aovresult)[[1]][1:dim(summary(aovresult)[[1]])[1],2]"); - engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]"); - engine.voidEval("IndSensibilite<-SoS/sum(SoS)"); - - //Create a data.frame to export sensitivity important results in one file. - engine.voidEval("exportsensitivity<-data.frame(" + - "SoS[1:dim(summary(aovresult)[[1]])[1]]," + - "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])"); - engine.voidEval("names(exportsensitivity)<-c(" + - "\"Sum Of Squares\"," + - "\"Sensitivity indices\")"); - engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]"); - - - //Set dataforaov names - engine.voidEval("resultsnames<-c(" + - "factornames," + - "\"Result\")"); - engine.voidEval("names(dataforaov)<-resultsnames"); - - /*Set the export directory - *Export directory is the first simulation export directory. - */ - engine.setwd(outputdirectory); - - //Save the results with the scenarios. - engine.voidEval("write.csv(dataforaov,\"" - + param.getSensitivityExport().get(k).getExportFilename() + "_Results.csv\")"); - - //Save the sensitivity indices - engine.voidEval("write.csv(exportsensitivity,\"" - + param.getSensitivityExport().get(k).getExportFilename() - + "_SensitivityIndices.csv\")"); - //FIXME export through java to enable export when using Rserve (when distant Rserve). - - //creating isis.methodAnalyse - engine.voidEval("isis.methodAnalyse<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"isis.simule\"=isis.simule," + - "call_method=\"" + aovCall + "\"," + - "\"analysis_result\"=list(aovresult,IndSensibilite))"); - - engine.voidEval("attr(isis.methodAnalyse," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-" + - "isis.methodAnalyse"; - engine.voidEval(String.format(renameIsisMethodAnalyse, - simulationName + "." + name)); - - } - - //Rename R objects for saving purpose - renameObjects(engine, simulationName); - - // Save Isis R session - engine.saveRData(outputdirectory.getParentFile(), - outputdirectory.getName()); - - engine.terminate(); - - } catch (Exception e) { - throw new SensitivityException("Can't evaluate results", e); - } - - } - - @Override - public String getDescription() { - return "Implementation of Expand Grid method using Java"; - } - -} Deleted: trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRDOptimal.java =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRDOptimal.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRDOptimal.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,403 +0,0 @@ -/* - * #%L - * IsisFish data - * %% - * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package sensitivityanalysis; - -import fr.ifremer.isisfish.datastore.SimulationStorage; -import fr.ifremer.isisfish.export.SensitivityExport; -import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis; -import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; -import fr.ifremer.isisfish.simulator.sensitivity.Domain; -import fr.ifremer.isisfish.simulator.sensitivity.Factor; -import fr.ifremer.isisfish.simulator.sensitivity.Scenario; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; -import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; -import fr.ifremer.isisfish.util.Doc; -import java.io.File; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import org.nuiton.j2r.REngine; -import org.nuiton.j2r.RException; -import org.nuiton.j2r.RProxy; -import org.nuiton.j2r.types.RDataFrame; - -/** - * User: couteau - * Date: 14 janv. 2010 - * Time: 11:58:09 - */ -public class SensitivityCalculatorRDOptimal - extends AbstractSensitivityAnalysis { - - @Doc("True to be able to modify the code sent to R") - public boolean param_modifR = false; - - @Doc("Order") - public int param_order=1; - - /** - * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs - * continue. - * - * @return <tt>true</tt> s'il sait la gerer - */ - @Override - public boolean canManageCardinality() { - return false; - } - - @Override - public SensitivityScenarios compute(DesignPlan plan, File outputDirectory) - throws SensitivityException { - - SensitivityScenarios thisExperiment = new SensitivityScenarios(); - - setIsisFactorsR(plan, outputDirectory); - - //extract the factors from the design plan - List<Factor> factors = plan.getFactors(); - int factorsNb = factors.size(); - - try { - REngine engine = new RProxy(); - - //Get Isis R session - engine.loadRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - engine.voidEval("library(AlgDesign)"); - - //Create a list of the factors under the form factor1=factor1,... - String factorsNames = ""; - - //Create a list of the factors under the form factor1,factor2,... - String factorNames = ""; - - //Create a list of the factors under the form factor1+factor2+... - String factorPlus=""; - - //create the factors vectors - for (Factor factor : factors) { - //The factor values vector - String factorName = factor.getName().replaceAll(" ", ""); - factorsNames += factorName + "=" + factorName + ","; - factorNames += factorName + ","; - factorPlus += factorName + "+"; - - String vector = factorName + "<-c("; - - Domain domain = factor.getDomain(); - - if (domain instanceof ContinuousDomain) { - ContinuousDomain contDomain = (ContinuousDomain) domain; - int card = factor.getCardinality(); - Double min = contDomain.getCalculatorMinBound(); - Double max = contDomain.getCalculatorMaxBound(); - - for (int i = 0; i < card; i++) { - //add the ith value - vector += (min + (i * (max - min) / (card - 1))) + ","; - } - } else { - Map<Object, Object> values = ((DiscreteDomain) domain).getValues(); - int nbValues = values.size(); - for (int i = 0; i < nbValues; i++) { - vector += "as.integer(" + i + "),"; - } - } - - vector = vector.substring(0, vector.length() - 1); - - vector += ")"; - - engine.voidEval(vector); - - - } - - factorsNames = factorsNames.substring(0,factorsNames.length()-1); - factorNames = factorNames.substring(0,factorNames.length()-1); - factorPlus = factorPlus.substring(0,factorPlus.length()-1); - - - //X<-expand.grid(vector=???,weight=???) - String expandGrid = "expandgrid<-expand.grid(%s)"; - - - - String rCall = String.format(expandGrid,factorsNames); - - engine.voidEval(rCall); - - if (param_order ==1 ){ - rCall = "x<-optFederov(~(%s),data=expandgrid, " + - "approximate =FALSE, center=F, criterion = \"D\"," + - "nRepeats=10)"; - } else { - rCall = "x<-optFederov(~(%s)^"+param_order+",data=expandgrid, " + - "approximate =FALSE, center=F, criterion = \"D\"," + - "nRepeats=10)"; - } - - rCall = String.format(rCall,factorPlus); - - if (param_modifR) { - rCall = editRInstruction(rCall); - } - - engine.voidEval("runif(1)"); - - engine.voidEval(rCall); - - engine.eval("expPlan<-as.data.frame(x$design)"); - RDataFrame dataFrame = (RDataFrame)engine.eval("expPlan"); - dataFrame.setVariable("expPlan"); - int nbExperiments = (Integer)engine.eval("dim(x$design)[1]"); - - List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); - for (int j = 0; j < nbExperiments; j++) { - Scenario experimentScenario = new Scenario(); - for (int i = 0; i < factorsNb; i++) { - Factor factor = factors.get(i); - factor.setValueForIdentifier(dataFrame.get(i, j)); - experimentScenario.addFactor(factor); - } - thisExperimentScenarios.add(experimentScenario); - thisExperiment.setScenarios(thisExperimentScenarios); - } - - - String factorDistribution = "isis.factor.distribution<-data.frame(" + - "NomFacteur=c(%s)," + - "NomDistribution=c(%s)," + - "ParametreDistribution=c(%s))"; - - String distribution = ""; - String parameters = ""; - - for (int i = 0; i < factorsNb; i++) { - Domain domain = factors.get(i).getDomain(); - if (i != 0) { - distribution += ","; - parameters += ","; - } - if (domain instanceof ContinuousDomain){ - ContinuousDomain contDomain = (ContinuousDomain)domain; - distribution += "\"qunif\""; - parameters += "\"[" + contDomain.getMinBound() - + ";" + contDomain.getMaxBound() - + "]\""; - } else { - DiscreteDomain discDomain = (DiscreteDomain)domain; - distribution += "\"discrete\""; - parameters+="\"["; - Map<Object, Object> values = discDomain.getValues(); - int count=0; - Collection<Object> collecValues = values.values(); - for (Object value:collecValues){ - if (count!=0){ - parameters += ","; - } - parameters += value; - count++; - } - parameters+="]\""; - } - } - engine.voidEval(String.format(factorDistribution, factorNames, - distribution, parameters)); - - engine.voidEval("call<-\"" + rCall + "\""); - engine.voidEval("isis.MethodExp<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"call\"=call)"); - engine.voidEval("attr(isis.MethodExp," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - engine.voidEval("isis.simule<-x$design"); - engine.voidEval("attr(isis.simule," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); - - // Save Isis R session - engine.saveRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - - } catch (RException eee) { - throw new SensitivityException("Can't generate scenarios", eee); - } - - return thisExperiment; - } - - @Override - public void analyzeResult(List<SimulationStorage> simulationStorages, - File outputDirectory) throws SensitivityException { - - try { - - REngine engine = new RProxy(); - - //Get Isis R session - engine.loadRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - //Get back the factors number - int factorNumber = (Integer)engine.eval("dim(x$design)[2]"); - - SimulationParameter param = simulationStorages.get(0).getParameter(); - int sensitivityNumber = param.getSensitivityExport().size(); - - SimulationStorage firstStorage = simulationStorages.get(0); - - String firstStorageName = firstStorage.getName().replaceAll("-", ""); - - for (int k = 0; k < sensitivityNumber; k++) { - - SensitivityExport sensitivityExport = - param.getSensitivityExport().get(k); - - String name = sensitivityExport.getExportFilename(); - - String rInstruction = createImportInstruction(sensitivityExport, - simulationStorages); - - // Send the simulation results - engine.voidEval(rInstruction); - - //Put results in isis.simule - engine.voidEval("isis.simule<-data.frame(isis.simule," - + name + ")"); - - //Create the dataforaov data.frame - String dataFrame = "dataforaov<-data.frame(x$design," - + name + "=" + name + ")"; - engine.voidEval(dataFrame); - - //Call aov() - String aovCall = "aovresult<-aov(" + name + "~("; - for (int j = 0; j < factorNumber; j++) { - if (j < (factorNumber - 1)) { - aovCall = aovCall - + engine.eval("names(x$design)[" + (j + 1) + "]") - + "+"; - } else { - aovCall = aovCall - + engine.eval("names(x$design)[" + (j + 1) + "]") - + ")"; - if(param_order>1){ - aovCall+="^" + param_order + ",data=dataforaov)"; - }else{ - aovCall+=",data=dataforaov)"; - } - } - } - engine.voidEval(aovCall); - - /*Export the results - *Export format is csv, data separated by ',' - *Results Export name is sensitivityExportName_Results.csv - *Sensitivity Indices export name is sensitivityExportName_SensitivityIndices.csv - */ - -//Compute Sum of Squares and Sensitivity indices - engine.voidEval("SoS<-summary(aovresult)[[1]][1:dim(summary(aovresult)[[1]])[1],2]"); - engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]"); - engine.voidEval("IndSensibilite<-SoS/sum(SoS)"); - - //Create a data.frame to export sensitivity important results in one file. - engine.voidEval("exportsensitivity<-data.frame(" + - "SoS[1:dim(summary(aovresult)[[1]])[1]]," + - "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])"); - engine.voidEval("names(exportsensitivity)<-c(" + - "\"Sum Of Squares\"," + - "\"Sensitivity indices\")"); - engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]"); - - - //Set dataforaov names - engine.voidEval("resultsnames<-c(names(x$design),\"Result\")"); - engine.voidEval("names(dataforaov)<-resultsnames"); - - - /*Set the export directory - *Export directory is the first simulation export directory. - */ - engine.setwd(outputDirectory); - - //Save the results with the scenarios. - engine.voidEval("write.csv(dataforaov,\"" - + param.getSensitivityExport().get(k) - - .getExportFilename() + "_Results.csv\")"); - - //Save the sensitivity indices - engine.voidEval("write.csv(exportsensitivity,\"" - + param.getSensitivityExport().get(k) - .getExportFilename() - + "_SensitivityIndices.csv\")"); - //FIXME export through java to enable export when using Rserve (when distant Rserve). - - //creating isis.methodAnalyse - engine.voidEval("isis.methodAnalyse<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"isis.simule\"=isis.simule," + - "\"call_method\"=\"" + aovCall + "\"," + - "\"analysis_result\"=list(aovresult,IndSensibilite))"); - - engine.voidEval("attr(isis.methodAnalyse," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse"; - engine.voidEval(String.format(renameIsisMethodAnalyse, - firstStorageName + "." + name)); - - } - - //Rename R objects for saving purpose - - renameObjects(engine, firstStorageName); - - //Save Isis R session - engine.saveRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - engine.terminate(); - - } catch (Exception e) { - throw new SensitivityException("Can't evaluate results", e); - } - - } - - @Override - public String getDescription() { - return "Implementation of D optimal method method using R, needs" + - "AlgDesign package to work"; - } -} Deleted: trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRExpandGrid.java =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRExpandGrid.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRExpandGrid.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,373 +0,0 @@ -/* - * #%L - * IsisFish data - * %% - * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package sensitivityanalysis; - -import fr.ifremer.isisfish.datastore.SimulationStorage; -import fr.ifremer.isisfish.export.SensitivityExport; -import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis; -import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; -import fr.ifremer.isisfish.simulator.sensitivity.Domain; -import fr.ifremer.isisfish.simulator.sensitivity.Factor; -import fr.ifremer.isisfish.simulator.sensitivity.Scenario; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; -import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; -import fr.ifremer.isisfish.util.Doc; -import java.io.File; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import org.nuiton.j2r.REngine; -import org.nuiton.j2r.RException; -import org.nuiton.j2r.RProxy; -import org.nuiton.j2r.types.RDataFrame; - -/** - * User: couteau - * Date: 6 janv. 2010 - * Time: 14:31:09 - */ -public class SensitivityCalculatorRExpandGrid - extends AbstractSensitivityAnalysis { - - @Doc("Interaction order") - public int param_order = 2; - - @Doc("True to be able to modify the code sent to R") - public boolean param_modifR = false; - - /** - * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs - * continue. - * - * @return <tt>true</tt> s'il sait la gerer - */ - @Override - public boolean canManageCardinality() { - return false; - } - - @Override - public SensitivityScenarios compute(DesignPlan plan, File outputDirectory) - throws SensitivityException { - - SensitivityScenarios thisExperiment = new SensitivityScenarios(); - - setIsisFactorsR(plan, outputDirectory); - - //extract the factors from the design plan - List<Factor> factors = plan.getFactors(); - int factorsNb = factors.size(); - - try { - REngine engine = new RProxy(); - - //Get Isis R session - engine.loadRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - //Create a list of the factors under the form factor1=factor1,... - String factorsNames = ""; - - //Create a list of the factors under the form factor1,factor2,... - String factorNames = ""; - - //create the factors vectors - for (Factor factor : factors) { - //The factor values vector - String factorName = factor.getName().replaceAll(" ", ""); - factorsNames += factorName + "=" + factorName + ","; - factorNames += factorName + ","; - String vector = factorName + "<-c("; - - Domain domain = factor.getDomain(); - - if (domain instanceof ContinuousDomain) { - ContinuousDomain contDomain = (ContinuousDomain) domain; - int card = factor.getCardinality(); - Double min = contDomain.getCalculatorMinBound(); - Double max = contDomain.getCalculatorMaxBound(); - - for (int i = 0; i < card; i++) { - //add the ith value - vector += (min + (i * (max - min) / (card - 1))) + ","; - } - } - - if (domain instanceof DiscreteDomain) { - Map<Object, Object> values = ((DiscreteDomain) domain).getValues(); - int nbValues = values.size(); - for (int i = 0; i < nbValues; i++) { - vector += "as.integer(" + i + "),"; - } - } - - vector = vector.substring(0, vector.length() - 1); - - vector += ")"; - - engine.voidEval(vector); - - - } - - factorsNames = factorsNames.substring(0,factorsNames.length()-1); - factorNames = factorNames.substring(0,factorNames.length()-1); - - - //X<-expand.grid(vector=???,weight=???) - String expandGrid = "x<-expand.grid(%s)"; - - String rCall = String.format(expandGrid,factorsNames); - - if (param_modifR) { - rCall = editRInstruction(rCall); - } - - engine.voidEval(rCall); - - engine.eval("expPlan<-as.data.frame(x)"); - RDataFrame dataFrame = (RDataFrame)engine.eval("expPlan"); - dataFrame.setVariable("expPlan"); - int nbExperiments = (Integer)engine.eval("dim(x)[1]"); - - List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); - for (int j = 0; j < nbExperiments; j++) { - Scenario experimentScenario = new Scenario(); - for (int i = 0; i < factorsNb; i++) { - Factor factor = factors.get(i); - factor.setValueForIdentifier(dataFrame.get(i, j)); - experimentScenario.addFactor(factor); - } - thisExperimentScenarios.add(experimentScenario); - thisExperiment.setScenarios(thisExperimentScenarios); - } - - - String factorDistribution = "isis.factor.distribution<-data.frame(" + - "NomFacteur=c(%s)," + - "NomDistribution=c(%s)," + - "ParametreDistribution=c(%s))"; - - String distribution = ""; - String parameters = ""; - - for (int i = 0; i < factorsNb; i++) { - Domain domain = factors.get(i).getDomain(); - if (i != 0) { - distribution += ","; - parameters += ","; - } - if (domain instanceof ContinuousDomain){ - ContinuousDomain contDomain = (ContinuousDomain)domain; - distribution += "\"qunif\""; - parameters += "\"[" + contDomain.getMinBound() - + ";" + contDomain.getMaxBound() - + "]\""; - } else { - DiscreteDomain discDomain = (DiscreteDomain)domain; - distribution += "\"discrete\""; - parameters+="\"["; - Map<Object, Object> values = discDomain.getValues(); - int count=0; - Collection<Object> collecValues = values.values(); - for (Object value:collecValues){ - if (count!=0){ - parameters += ","; - } - parameters += value; - count++; - } - parameters+="]\""; - } - } - engine.voidEval(String.format(factorDistribution, factorNames, - distribution, parameters)); - - engine.voidEval("call<-\"" + - String.format(expandGrid,factorsNames) + "\""); - engine.voidEval("isis.MethodExp<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"call\"=call)"); - engine.voidEval("attr(isis.MethodExp," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - engine.voidEval("isis.simule<-x"); - engine.voidEval("attr(isis.simule," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); - - // Save Isis R session - engine.saveRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - - } catch (RException eee) { - throw new SensitivityException("Can't generate scenarios", eee); - } - - return thisExperiment; - } - - @Override - public void analyzeResult(List<SimulationStorage> simulationStorages, - File outputDirectory) throws SensitivityException { - - try { - - REngine engine = new RProxy(); - - //Get Isis R session - engine.loadRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - //Get back the factors number - int factorNumber = (Integer)engine.eval("dim(x)[2]"); - - SimulationParameter param = simulationStorages.get(0).getParameter(); - int sensitivityNumber = param.getSensitivityExport().size(); - - SimulationStorage firstStorage = simulationStorages.get(0); - - String firstStorageName = firstStorage.getName().replaceAll("-", ""); - - for (int k = 0; k < sensitivityNumber; k++) { - - SensitivityExport sensitivityExport = - param.getSensitivityExport().get(k); - - String name = sensitivityExport.getExportFilename(); - - String rInstruction = createImportInstruction(sensitivityExport, - simulationStorages); - - // Send the simulation results - engine.voidEval(rInstruction); - - //Put results in isis.simule - engine.voidEval("isis.simule<-data.frame(isis.simule," - + name + ")"); - - //Create the dataforaov data.frame - String dataFrame = "dataforaov<-data.frame(x," - + name + "=" + name + ")"; - engine.voidEval(dataFrame); - - //Call aov() - String aovCall = "aovresult<-aov(" + name + "~("; - for (int j = 0; j < factorNumber; j++) { - if (j < (factorNumber - 1)) { - aovCall = aovCall - + engine.eval("names(x)[" + (j + 1) + "]") - + "+"; - } else { - aovCall = aovCall - + engine.eval("names(x)[" + (j + 1) + "]") - + ")"; - if(param_order>1){ - aovCall+="^" + param_order + ",data=dataforaov)"; - }else{ - aovCall+=",data=dataforaov)"; - } - } - } - engine.voidEval(aovCall); - - /*Export the results - *Export format is csv, data separated by ',' - *Results Export name is sensitivityExportName_Results.csv - *Sensitivity Indices export name is sensitivityExportName_SensitivityIndices.csv - */ - - //Compute Sum of Squares and Sensitivity indices - engine.voidEval("SoS<-summary(aovresult)[[1]][1:dim(summary(aovresult)[[1]])[1],2]"); - engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]"); - engine.voidEval("IndSensibilite<-SoS/sum(SoS)"); - - //Create a data.frame to export sensitivity important results in one file. - engine.voidEval("exportsensitivity<-data.frame(" + - "SoS[1:dim(summary(aovresult)[[1]])[1]]," + - "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])"); - engine.voidEval("names(exportsensitivity)<-c(" + - "\"Sum Of Squares\"," + - "\"Sensitivity indices\")"); - engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]"); - - /*Set the export directory - *Export directory is the first simulation export directory. - */ - engine.setwd(outputDirectory); - - //Save the results with the scenarios. - engine.voidEval("write.csv(dataforaov,\"" - + param.getSensitivityExport().get(k) - - .getExportFilename() + "_Results.csv\")"); - - //Save the sensitivity indices - engine.voidEval("write.csv(exportsensitivity,\"" - + param.getSensitivityExport().get(k) - .getExportFilename() - + "_SensitivityIndices.csv\")"); - //FIXME export through java to enable export when using Rserve (when distant Rserve). - - //creating isis.methodAnalyse - engine.voidEval("isis.methodAnalyse<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"isis.simule\"=isis.simule," + - "\"call_method\"=\"" + aovCall + "\"," + - "\"analysis_result\"=list(aovresult,IndSensibilite))"); - - engine.voidEval("attr(isis.methodAnalyse," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse"; - engine.voidEval(String.format(renameIsisMethodAnalyse, - firstStorageName + "." + name)); - - } - - //Rename R objects for saving purpose - - renameObjects(engine, firstStorageName); - - //Save Isis R session - engine.saveRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - engine.terminate(); - - } catch (Exception e) { - throw new SensitivityException("Can't evaluate results", e); - } - - } - - @Override - public String getDescription() { - return "Implementation of Expand Grid method using R"; - } -} Deleted: trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRFast.java =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRFast.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRFast.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,355 +0,0 @@ -/* - * #%L - * IsisFish data - * %% - * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package sensitivityanalysis; - -import fr.ifremer.isisfish.datastore.SimulationStorage; -import fr.ifremer.isisfish.export.SensitivityExport; -import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis; -import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; -import fr.ifremer.isisfish.simulator.sensitivity.Domain; -import fr.ifremer.isisfish.simulator.sensitivity.Factor; -import fr.ifremer.isisfish.simulator.sensitivity.Scenario; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; -import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; -import fr.ifremer.isisfish.util.Doc; -import java.io.File; -import java.util.List; -import org.nuiton.j2r.REngine; -import org.nuiton.j2r.RException; -import org.nuiton.j2r.RProxy; -import org.nuiton.j2r.types.RDataFrame; - -/** - * Implementation of Fast method using R. - * - * @author jcouteau - * @version $Revision: 89 $ - * - * Last update : $Date: 2009-03-25 13:45:16 +0100 (mer., 25 mars 2009) $ By : - * $Author: jcouteau $ - */ -public class SensitivityCalculatorRFast extends AbstractSensitivityAnalysis { - - @Doc("an integer giving the sample size, i.e. the length of the " + - "discretization of the s-space (see Cukier et al.). (default=20)") - public int param_n = 20; - - @Doc("an integer specifying the interference parameter, i.e. the number " + - "of harmonics to sum in the Fourier series decomposition (see Cukier et " + - "al.). (default=6)") - public int param_M = 6; - - @Doc("True to be able to modify the code sent to R") - public boolean param_modifR = false; - - /** - * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs - * continue. - * - * @return <tt>true</tt> s'il sait la gerer - */ - @Override - public boolean canManageCardinality() { - return true; - } - - @Override - public SensitivityScenarios compute(DesignPlan plan, File outputDirectory) - throws SensitivityException { - - setIsisFactorsR(plan, outputDirectory); - - RDataFrame dataFrame; - int nbExperiments; - int factorNumber = plan.getFactors().size(); - List<Factor> factors = plan.getFactors(); - SensitivityScenarios thisExperiment = new SensitivityScenarios(); - List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); - - //Test all factors, if one is discrete, return null - for (int i = 0; i < factorNumber; i++) { - if (factors.get(i).getDomain() instanceof DiscreteDomain) { - throw new SensitivityException(factors.get(i).getName() + - " has a discrete domain, this is not acceptable for fast " + - "method."); - } - } - String rInstruction = "a<-fast99(" + - "model=NULL," + - "factors=%s, " + - "n=%s, " + - "M=%s, " + - "q = \"qunif\", " + - "q.arg=list(min=0,max=1))"; - String rCall = String.format(rInstruction, factors.size(), param_n, - param_M); - - if (param_modifR) { - rCall = editRInstruction(rCall); - } - - try { - - REngine engine = new RProxy(); - - engine.clearSession(); - engine.loadRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - // Load sensitivity package into R (if package already loaded, - // nothing happens. - engine.voidEval("library(sensitivity)"); - - // Run sensitivity analysis - engine.voidEval(rCall); - - // Creating the factors vector. - rInstruction = "factornames<-c("; - for (int i = 0; i < factorNumber; i++) { - String factorName = factors.get(i).getName(); - if (i != (factorNumber - 1)) { - rInstruction += "\"" + factorName + "\","; - } else { - rInstruction += "\"" + factorName + "\""; - } - } - - rInstruction += ")"; - - engine.voidEval(rInstruction); - - // Get back experiment plan - dataFrame = (RDataFrame) engine.eval("a$X"); - dataFrame.setVariable("a$X"); - - nbExperiments = (Integer)engine.eval("dim(a$X)[1]"); - - String factorDistribution = "isis.factor.distribution<-data.frame(" + - "NomFacteur=c(%s)," + - "NomDistribution=c(%s)," + - "ParametreDistribution=c(%s))"; - - // Creating the vectors. - String distribution = ""; - String parameters = ""; - String factorNames = ""; - - for (int i = 0; i < factorNumber; i++) { - Factor factor = factors.get(i); - ContinuousDomain domain = (ContinuousDomain) factor.getDomain(); - if (i != 0) { - distribution += ","; - parameters += ","; - factorNames += ","; - } - - distribution += "\"qunif\""; - parameters += "\"[" + domain.getMinBound() + ";" + - domain.getMaxBound() + "]\""; - factorNames += "\"" + factor.getName() + "\""; - } - engine.voidEval(String.format(factorDistribution, factorNames, - distribution, parameters)); - - engine.voidEval("call<-a$call"); - - - engine.voidEval("isis.MethodExp<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"call\"=call)"); - - engine.voidEval("attr(isis.MethodExp,\"nomModel\")<-" + - "\"isis-fish-externe-R\""); - - engine.voidEval("isis.simule<-data.frame(a$X)"); - - engine.voidEval("attr(isis.simule,\"nomModel\")<-" + - "\"isis-fish-externe-R\""); - - engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); - - // Save Isis R session - engine.saveRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - // Setting up the scenarios. - for (int j = 0; j < nbExperiments; j++) { - Scenario experimentScenario = new Scenario(); - for (int i = 0; i < factorNumber; i++) { - Factor factor = plan.getFactors().get(i); - Domain domain = factor.getDomain(); - if ((domain instanceof MatrixContinuousDomain) - || (domain instanceof EquationContinuousDomain)) { - factor.setValueForIdentifier(dataFrame.get(i,j)); - } else { - ContinuousDomain continuousDomain = (ContinuousDomain)domain; - Double min = continuousDomain.getCalculatorMinBound(); - Double max = continuousDomain.getCalculatorMaxBound(); - Double dFValue = (Double)dataFrame.get(i,j); - Double value = min + (max - min) * dFValue; - factor.setValueForIdentifier(value); - } - experimentScenario.addFactor(factor); - } - thisExperimentScenarios.add(experimentScenario); - thisExperiment.setScenarios(thisExperimentScenarios); - } - } catch (RException eee) { - throw new SensitivityException("Can't generate scenarios", eee); - } - return thisExperiment; - - } - - @Override - public void analyzeResult(List<SimulationStorage> simulationStorages, - File outputDirectory) throws SensitivityException { - - SimulationStorage storage = simulationStorages.get(0); - String simulationName = storage.getName().replaceAll("-", ""); - - try { - - REngine engine = new RProxy(); - - //Clear session - engine.clearSession(); - - //Get Isis R session - engine.loadRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - engine.setwd(outputDirectory); - - // Call R - // Load sensitivity package into R (if package already loaded, - // nothing happens. - engine.voidEval("library(sensitivity)"); - - SimulationParameter param = simulationStorages.get(0).getParameter(); - - int sensitivityNumber = param.getSensitivityExport().size(); - - for (int k = 0; k < sensitivityNumber; k++) { - - SensitivityExport sensitivityExport = - param.getSensitivityExport().get(k); - - String rInstruction = createImportInstruction(sensitivityExport, - simulationStorages); - - // Send the simulation results - engine.voidEval(rInstruction); - - //Put results in isis.simule - engine.voidEval("isis.simule<-data.frame(isis.simule," + - sensitivityExport.getExportFilename() + ")"); - } - - //adding attribute to isis.Simule - engine.voidEval("attr(isis.simule,\"nomModel\")<-" + - "\"isis-fish-externe-R\""); - engine.voidEval("attr(isis.simule,\"call\")<-isis.MethodExp$call"); - - for (int k = 0; k < sensitivityNumber; k++) { - - // Creates the R expression to import results in R - String name = param.getSensitivityExport().get(k) - .getExportFilename(); - - //Compute results - engine.voidEval("tell(a,y=" + name + ")"); - - engine.voidEval("names(a$V)<-factornames"); - engine.voidEval("names(a$X)<-factornames"); - engine.voidEval("names(a$D1)<-factornames"); - engine.voidEval("names(a$Dt)<-factornames"); - - //creating isis.methodAnalyse - engine.voidEval("isis.methodAnalyse<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"isis.simule\"=isis.simule," + - "call_method=\"tell(a,y=" + name + ")" + "\"," + - "\"analysis_result\"=a)"); - - //setting isis.methodAnalyse attributes - engine.voidEval("attr(isis.methodAnalyse,\"nomModel\")<-" + - "\"isis-fish-externe-R\")"); - - //Create the data.frame of scenarios and results for export purpose - engine.voidEval("dfresults<-data.frame(a$X,a$y)"); - - //Set working directory - engine.setwd(outputDirectory); - - //Export V - engine.voidEval("write.csv(a$V,\"" + name + "_V.csv\")"); - - //Export D1 - engine.voidEval("write.csv(a$D1,\"" + name + "_D1.csv\")"); - - //Export Dt - engine.voidEval("write.csv(a$Dt,\"" + name + "_Dt.csv\")"); - //Set dfresults names - engine.voidEval("resultsnames<-c(factornames,\"Result\")"); - engine.voidEval("names(dfresults)<-resultsnames"); - - //Export results - engine.voidEval("write.csv(dfresults,\"" + name + - "_Results.csv\")"); - //FIXME export through java to enable export when using Rserve - - String renameIsisMethodAnalyse = "%s.isis.methodAnalyse" + - "<-isis.methodAnalyse"; - - engine.voidEval(String.format(renameIsisMethodAnalyse, - simulationName + "." + name)); - - } - - //Rename R objects for saving purpose - renameObjects(engine, simulationName); - - // Save Isis R session - engine.saveRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - } catch (Exception e) { - throw new SensitivityException("Can't evaluate results", e); - } - } - - @Override - public String getDescription() { - return "Implementation of FAST method using R (needs the sensitivity " + - "package to work)"; - } - -} Deleted: trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRFrF2.java =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRFrF2.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRFrF2.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,387 +0,0 @@ -/* - * #%L - * IsisFish data - * %% - * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package sensitivityanalysis; - -import fr.ifremer.isisfish.datastore.SimulationStorage; -import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis; -import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; -import fr.ifremer.isisfish.simulator.sensitivity.Factor; -import fr.ifremer.isisfish.simulator.sensitivity.Scenario; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; -import fr.ifremer.isisfish.util.Doc; -import java.io.File; -import java.util.List; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.j2r.REngine; -import org.nuiton.j2r.RException; -import org.nuiton.j2r.RProxy; -import org.nuiton.math.matrix.MatrixFactory; -import org.nuiton.math.matrix.MatrixND; -import org.nuiton.util.FileUtil; - -/** - * Implementation of FrF2 method using R. - * - * @author jcouteau - * @version $Revision: 94 $ - * - * Last update : $Date: 2009-04-03 13:13:35 +0200 (ven., 03 avr. 2009) $ By : - * $Author: chatellier $ - */ -public class SensitivityCalculatorRFrF2 extends AbstractSensitivityAnalysis { - - //TODO jcouteau 20110607 need to use new ethods on REngine instead of coding R sentences by hand. - - /** to use log facility, just put in your code: log.info("..."); */ - private static Log log = LogFactory - .getLog(SensitivityCalculatorRFrF2.class); - - @Doc("is the arabic numeral for the requested resolution of the design( 3 <= resolution <= 5). (if resolution=3, model = sum(Xi), if resolution = 4 or 5, model = sum(Xi)+sum(XiXj)") - public int param_resolution; - - /** - * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs - * continue. - * - * @return <tt>true</tt> s'il sait la gerer - */ - @Override - public boolean canManageCardinality() { - return true; - } - - @Override - public SensitivityScenarios compute(DesignPlan plan, File outputdirectory) - throws SensitivityException { - - double[] dataframe; - int nbExperiments; - int factorNumber = plan.getFactors().size(); - List<Factor> factors = plan.getFactors(); - SensitivityScenarios thisExperiment = new SensitivityScenarios(); - List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); - - testNoDiscrete(factors); - - try { - REngine engine = new RProxy(); - - //Clear session - engine.voidEval("rm(list=ls())"); - - engine.voidEval("library(FrF2)"); - - //Set the working directory (for import and exports) - engine.voidEval("setwd(\"" - + outputdirectory.getAbsolutePath().replaceAll("\\\\", "/") - + "\")"); - - String rInstruction = "a<-FrF2(nfactors=" + factorNumber - + ",resolution=" + param_resolution + ")"; - - engine.voidEval(rInstruction); - - // Export the FrF2 object for the second run in a .FrF2 file - engine.voidEval("dput(a,file=\".FrF2\")"); - - // Get back experiment plan - dataframe = (double[]) engine.eval("a$desnum"); - - // Creating the factors vector. - rInstruction = "factornames<-c("; - for (int i = 0; i < factorNumber; i++) { - if (i != (factorNumber - 1)) { - rInstruction = rInstruction + "\"" - + factors.get(i).getName() + "\","; - } else { - rInstruction = rInstruction + "\"" - + factors.get(i).getName() + "\""; - } - } - - rInstruction += ")"; - - engine.voidEval(rInstruction); - - // Export the factornames object for the second run in a .factornames file - engine.voidEval("dput(factornames,file=\".factornames\")"); - - - nbExperiments = dataframe.length / factorNumber; - - // Transform the result from R in a matrix - MatrixND frf2 = MatrixFactory.getInstance().create(dataframe, - new int[] { factorNumber, nbExperiments }); - - // Setting up the scenarios. - for (int j = 0; j < nbExperiments; j++) { - Scenario experimentScenario = new Scenario(); - for (int i = 0; i < factorNumber; i++) { - Factor factor = plan.getFactors().get(i); - - if (frf2.getValue(new int[]{i, j}) == -1) { - factor.setValueForIdentifier(0); - } else if (frf2.getValue(new int[]{i, j}) == 1) { - factor.setValueForIdentifier(1); - } - - experimentScenario.addFactor(factor); - } - thisExperimentScenarios.add(experimentScenario); - thisExperiment.setScenarios(thisExperimentScenarios); - } - - //Create the factors vectors - for (int j = 0; j < factorNumber; j++) { - Factor factor = thisExperimentScenarios.get(0).getFactors() - .get(j); - - String vector = "factor" + j + "<-c("; - for (int i = 0; i < nbExperiments; i++) { - if (i < (nbExperiments - 1)) { - vector = vector + factor.getDisplayedValue() + ","; - } else { - vector = vector + factor.getDisplayedValue(); - } - - } - vector = vector + ")"; - engine.voidEval(vector); - } - - //Create the data data.frame from the factors - String data = "data<-data.frame("; - for (int j = 0; j < factorNumber; j++) { - if (j < factorNumber - 1) { - data = data + "factor" + j + "=factor(factor" + j + "),"; - } else { - data = data + "factor" + j + "=factor(factor" + j + "))"; - } - - } - engine.voidEval(data); - - // Set output directory - engine.voidEval("setwd(\"" - + outputdirectory.getAbsolutePath().replaceAll("\\\\", "/") - + "\")"); - - // Export the scenario matrix for the second run in a .FrF2.csv file - engine.voidEval("write.csv(data,file=\".FrF2.csv\")"); - - engine.terminate(); - - } catch (RException e) { - throw new SensitivityException("Can't generate scenarios", e); - } - return thisExperiment; - - } - - @Override - public void analyzeResult(List<SimulationStorage> simulationStorages, - File outputdirectory) throws SensitivityException { - - try { - - REngine engine = new RProxy(); - - //Clear session - engine.voidEval("rm(list=ls())"); - - SimulationParameter param = simulationStorages.get(0) - .getParameter(); - int sensitivityNumber = param.getSensitivityExport().size(); - - for (int k = 0; k < sensitivityNumber; k++) { - - engine.voidEval("library(FrF2)"); - - // Set output directory - engine.voidEval("setwd(\"" - + outputdirectory.getAbsolutePath().replaceAll("\\\\", - "/") + "\")"); - - //Get back the FrF2 object - engine.voidEval("a<-dget(\".FrF2\")"); - - //Get back the scenarios - engine.voidEval("factors<-read.csv(\".FrF2.csv\")"); - - // Get the factornames object in the .factornames file - engine.voidEval("factornames<-dget(\".factornames\")"); - - //Get back the factors number - int factorNumber = ((Double) engine.eval("length(factors)-1")) - .intValue(); - - // Creates the R expression to import results in R - String name = param.getSensitivityExport().get(k) - .getExportFilename(); - String rInstruction = name + "<-c("; - for (int l = 0; l < simulationStorages.size(); l++) { - File importFile = new File(simulationStorages.get(l) - .getDirectory().toString() - + File.separator - + SimulationStorage.RESULT_EXPORT_DIRECTORY, param - .getSensitivityExport().get(k).getExportFilename() - + param.getSensitivityExport().get(k) - .getExtensionFilename()); - String simulResult = FileUtil.readAsString(importFile); - double simulationResult = Double.valueOf(simulResult); - if (l < simulationStorages.size() - 1) { - rInstruction = rInstruction + simulationResult + ","; - } else { - rInstruction = rInstruction + simulationResult; - } - } - rInstruction = rInstruction + ")"; - - // Send the simulation results - engine.voidEval(rInstruction); - - //Create the dataforaov data.frame - String dataframe = "dataforaov<-data.frame(factors,result=result)"; - engine.voidEval(dataframe); - - //get back the resolution - int resolution = (Integer) engine.eval("res.catlg(a$catentry)"); - - String aovCall; - - switch (resolution) { - case 3: - //Call aov() - aovCall = "aovresult<-aov(result~"; - for (int j = 0; j < factorNumber; j++) { - if (j < (factorNumber - 1)) { - aovCall = aovCall + "factor" + j + "+"; - } else { - aovCall = aovCall + "factor" + j - + ",data=dataforaov)"; - } - } - engine.voidEval(aovCall); - break; - case 4: - aovCall = "aovresult<-aov(result~"; - for (int j = 0; j < factorNumber; j++) { - aovCall = aovCall + "factor" + j + "+"; - } - for (int i = 0; i < factorNumber; i++) { - for (int j = 0; j < factorNumber; j++) { - if (i < j) { - aovCall = aovCall + "factor" + i + "*factor" - + j + "+"; - } - } - } - aovCall = aovCall.substring(0, aovCall.length() - 1); - aovCall = aovCall + ",data=dataforaov)"; - engine.voidEval(aovCall); - break; - case 5: - aovCall = "aovresult<-aov(result~"; - for (int j = 0; j < factorNumber; j++) { - aovCall = aovCall + "factor" + j + "+"; - } - for (int i = 0; i < factorNumber; i++) { - for (int j = 0; j < factorNumber; j++) { - if (i < j) { - aovCall = aovCall + "factor" + i + "*factor" - + j + "+"; - } - } - } - aovCall = aovCall.substring(0, aovCall.length() - 1); - aovCall = aovCall + ",data=dataforaov)"; - engine.voidEval(aovCall); - break; - default: - log.info("This resolution is not managed"); - break; - } - - /*Export the results - *Export format is csv, data separated by ',' - *Results Export name is sensitivityExportName_Results.csv - *Sensitivity Indices export name is sensitivityExportName_SensitivityIndices.csv - */ - - //Compute Sum of Squares and Sensitivity indices - engine.voidEval("SoS<-summary(aovresult)[[1]][1:" - + factorNumber + ",2]"); - engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:" - + factorNumber + "]"); - engine.voidEval("IndSensibilite<-SoS/sum(SoS)"); - - //Create a data.frame to export sensitivity important results in one file. - engine.voidEval("exportsensitivity=data.frame(SoS[1:" - + factorNumber + "],IndSensibilite[1:" + factorNumber - + "])"); - engine.voidEval("names(exportsensitivity)<-c(" + - "\"Sum Of Squares\",\"Sensitivity indices\")"); - - engine.voidEval("row.names(exportsensitivity)<-factornames"); - - /*Set the export directory - *Export directory is the first simulation export directory. - */ - engine.voidEval("setwd(\"" - + outputdirectory.getAbsolutePath().replaceAll("\\\\", - "/") + "\")"); - - //Set dataforaov names - engine.voidEval("resultsnames<-c(\"Simulation\"," + - "factornames,\"Result\")"); - engine.voidEval("names(dataforaov)<-resultsnames"); - - //Save the results with the scenarios. - engine.voidEval("write.csv(dataforaov,\"" - + param.getSensitivityExport().get(k) - .getExportFilename() + "_Results.csv\")"); - - //Save the sensitivity indices - engine.voidEval("write.csv(exportsensitivity,\"" - + param.getSensitivityExport().get(k) - .getExportFilename() - + "_SensitivityIndices.csv\")"); - - //FIXME export through java to enable export when using Rserve (when distant Rserve). - engine.terminate(); - } - - } catch (Exception e) { - throw new SensitivityException("Can't evaluate results", e); - } - - } - - @Override - public String getDescription() { - return "Implementation of FrF2 method method using R, at least 4 factors need to be declared (nneds the 'sensitivity' package to work)"; - } -} Deleted: trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRMorris.java =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRMorris.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRMorris.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,341 +0,0 @@ -/* - * #%L - * IsisFish data - * %% - * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package sensitivityanalysis; - -import fr.ifremer.isisfish.datastore.SimulationStorage; -import fr.ifremer.isisfish.export.SensitivityExport; -import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis; -import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; -import fr.ifremer.isisfish.simulator.sensitivity.Factor; -import fr.ifremer.isisfish.simulator.sensitivity.Scenario; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; -import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; -import fr.ifremer.isisfish.util.Doc; -import java.io.File; -import java.util.List; -import org.nuiton.j2r.REngine; -import org.nuiton.j2r.RException; -import org.nuiton.j2r.RProxy; -import org.nuiton.j2r.types.RDataFrame; - -/** - * Implementation of Morris method using R. - * - * @author jcouteau - * @version $Revision: 253 $ - * - * Last update : $Date: 2011-07-07 14:31:31 +0200 (jeu. 07 juil. 2011) $ By : - * $Author: chatellier $ - */ -public class SensitivityCalculatorRMorris extends AbstractSensitivityAnalysis { - - @Doc("Integer giving the number of repetitions of the design, i.e. the number of elementary effect computed per factor. (Default value : 4)") - public int param_r = 4; - - @Doc("True to be able to modify the code sent to R") - public boolean param_modifR = false; - - /** - * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs - * continus. - * - * @return <tt>true</tt> s'il sait la gerer - */ - @Override - public boolean canManageCardinality() { - return false; - } - - @Override - public SensitivityScenarios compute(DesignPlan plan, File outputDirectory) - throws SensitivityException { - - setIsisFactorsR(plan, outputDirectory); - - RDataFrame dataFrame; - int nbExperiments; - int factorNumber = plan.getFactors().size(); - - SensitivityScenarios thisExperiment = new SensitivityScenarios(); - - List<Factor> factors = plan.getFactors(); - - if (param_r == 0) { - param_r = 4; - } - - testNoDiscrete(factors); - - // Creating the vectors. - String factorNames = ""; - String levels = ""; - String gridJump = ""; - String binf = ""; - String bsup = ""; - for (int i = 0; i < factorNumber; i++) { - Factor factor = factors.get(i); - ContinuousDomain domain = (ContinuousDomain) factor.getDomain(); - if (i != 0) { - factorNames += ","; - levels += ","; - gridJump += ","; - binf += ","; - bsup += ","; - } - - factorNames += "\"" + factor.getName() + "\""; - - levels += factor.getCardinality(); - - gridJump += factor.getCardinality() / 2; - - binf += domain.getCalculatorMinBound(); - - bsup += domain.getCalculatorMaxBound(); - } - - String rInstruction = "a<-morris(model=NULL,factors=c(%s),r=%s," + - "design=list(type=\"oat\",levels=c(%s),grid.jump=c(%s))," + - "binf=c(%s),bsup=c(%s))"; - - String rCall = String.format(rInstruction, factorNames, param_r, - levels, gridJump, binf, bsup); - - if (param_modifR) { - rCall = editRInstruction(rCall); - } - - try { - REngine engine = new RProxy(); - - //Get Isis R session - engine.loadRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - // Load sensitivity package into R (if package already loaded, - // nothing happens. - engine.voidEval("library(sensitivity)"); - - // Run sensitivity analysis - engine.voidEval(rCall); - - // Creating the factors vector. - rInstruction = "factornames<-c(%s)"; - rCall = String.format(rInstruction, factorNames); - - engine.voidEval(rCall); - - // Set output directory - engine.setwd(outputDirectory); - - // Get back experiment plan - engine.eval("expPlan<-as.data.frame(a$X)"); - dataFrame = (RDataFrame) engine.eval("expPlan"); - dataFrame.setVariable("expPlan"); - - nbExperiments = (Integer)engine.eval("dim(a$X)[1]"); - - String factorDistribution = "isis.factor.distribution<-data.frame(" + - "NomFacteur=c(%s)," + - "NomDistribution=c(%s)," + - "ParametreDistribution=c(%s))"; - - String distribution = ""; - String parameters = ""; - - for (int i = 0; i < factorNumber; i++) { - Factor factor = factors.get(i); - ContinuousDomain domain = (ContinuousDomain) factor.getDomain(); - if (i != 0) { - distribution += ","; - parameters += ","; - } - - distribution += "\"qunif\""; - parameters += "\"[" + domain.getMinBound() + ";" + - domain.getMaxBound() + "]\""; - } - engine.voidEval(String.format(factorDistribution, factorNames, - distribution, parameters)); - - engine.voidEval("call<-a$call"); - engine.voidEval("isis.MethodExp<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"call\"=call)"); - engine.voidEval("attr(isis.MethodExp,\"nomModel\")<-" + - "\"isis-fish-externe-R\""); - engine.voidEval("isis.simule<-data.frame(a$X)"); - engine.voidEval("attr(isis.simule,\"nomModel\")<-" + - "\"isis-fish-externe-R\""); - engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); - - // Save Isis R session - engine.saveRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - // Setting up the scenarios. - List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); - for (int j = 0; j < nbExperiments; j++) { - Scenario experimentScenario = new Scenario(); - for (int i = 0; i < factorNumber; i++) { - Factor factor = factors.get(i); - factor.setValueForIdentifier(dataFrame.get(i, j)); - experimentScenario.addFactor(factor); - } - thisExperimentScenarios.add(experimentScenario); - thisExperiment.setScenarios(thisExperimentScenarios); - } - - } catch (RException eee) { - throw new SensitivityException("Can't generate scenarios", eee); - } - - return thisExperiment; - - } - - @Override - public void analyzeResult(List<SimulationStorage> simulationStorages, - File outputDirectory) throws SensitivityException { - - SimulationStorage storage = simulationStorages.get(0); - String simulationName = storage.getName().replaceAll("-", ""); - - try { - REngine engine = new RProxy(); - - //Get Isis R session - engine.loadRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - // Call R - // Load sensitivity package into R (if package already loaded, - // nothing happens. - engine.voidEval("library(sensitivity)"); - - //Set the working directory (for exports) - engine.setwd(outputDirectory); - - SimulationParameter param = simulationStorages.get(0) - .getParameter(); - int sensitivityNumber = param.getSensitivityExport().size(); - - for (int k = 0; k < sensitivityNumber; k++) { - - SensitivityExport sensitivityExport = - param.getSensitivityExport().get(k); - - String rInstruction = createImportInstruction(sensitivityExport, - simulationStorages); - - // Send the simulation results - engine.voidEval(rInstruction); - - //Put results in isis.simule - engine.voidEval("isis.simule<-data.frame(isis.simule," + - sensitivityExport.getExportFilename() + ")"); - } - - //adding attribute to isis.Simule - engine.voidEval("attr(isis.simule,\"nomModel\")<-" + - "\"isis-fish-externe-R\""); - - engine.voidEval("attr(isis.simule,\"call\")<-isis.MethodExp$call"); - - for (int k = 0; k < sensitivityNumber; k++) { - - // Creates the R expression to import results in R - String name = param.getSensitivityExport().get(k) - .getExportFilename(); - - //Compute results - engine.voidEval("tell(a,y=" + name + ")"); - - //creating isis.methodAnalyse - engine.voidEval("isis.methodAnalyse<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"isis.simule\"=isis.simule," + - "\"call_method\"=\"tell(a,y=" + name + ")" + "\"," + - "\"analysis_result\"=a)"); - - //setting isis.methodAnalyse attributes - engine.voidEval("attr(isis.methodAnalyse,\"nomModel\")<-" + - "\"isis-fish-externe-R\""); - - // Get back the sensitivity results, mu, mu star and sigma. - engine.voidEval("mu<-apply(a$ee, 2, mean)"); - engine.voidEval("mu.star <- apply(a$ee, 2, function(a) mean(abs(a)))"); - engine.voidEval("sigma <- apply(a$ee, 2, sd)"); - - //Create the data.frame of sensitivity indices for export purpose - engine.voidEval("df<-data.frame(mu,mu.star,sigma)"); - engine.voidEval("row.names(df)<-factornames"); - - //Create the data.frame of scenarios and results for export purpose - engine.voidEval("dfresults<-data.frame(a$X," + name + ")"); - - //Set dfresults names - engine.voidEval("resultsnames<-c(factornames,\"Result\")"); - engine.voidEval("names(dfresults)<-resultsnames"); - - //Export sensitivity indices - engine.voidEval("write.csv(df," + - "\"" + name + "_SensitivityIndices.csv\")"); - - //Export results - engine.voidEval("write.csv(dfresults," + - "\"" + name + "_Results.csv\")"); - //FIXME export through java to enable export when using Rserve - - String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-" + - "isis.methodAnalyse"; - - engine.voidEval(String.format(renameIsisMethodAnalyse, - simulationName + "." + name)); - - } - - //Rename R objects for saving purpose - renameObjects(engine,simulationName); - - // Save Isis R session - engine.saveRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - } catch (Exception e) { - throw new SensitivityException("Can't evaluate results", e); - } - - } - - @Override - public String getDescription() { - return "Implementation of Morris method using R (needs the sensitivity" + - " package to work)"; - } - -} Deleted: trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorROptimumLHS.java =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorROptimumLHS.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorROptimumLHS.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,396 +0,0 @@ -/* - * #%L - * IsisFish data - * %% - * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package sensitivityanalysis; - -import fr.ifremer.isisfish.datastore.SimulationStorage; -import fr.ifremer.isisfish.export.SensitivityExport; -import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis; -import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; -import fr.ifremer.isisfish.simulator.sensitivity.Factor; -import fr.ifremer.isisfish.simulator.sensitivity.Scenario; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; -import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; -import fr.ifremer.isisfish.util.Doc; -import java.io.File; -import java.util.List; -import org.nuiton.j2r.REngine; -import org.nuiton.j2r.RProxy; -import org.nuiton.j2r.types.RDataFrame; - -/** - * Implementation of Optimum Latin Hypercube method using R. - * - * @author jcouteau - * @version $Revision: 1.0 $ - */ -public class SensitivityCalculatorROptimumLHS extends - AbstractSensitivityAnalysis { - - @Doc("Number of simulations (default=10)") - public int param_simulationNumber = 10; - @Doc("The maximum number of times the Columnwise Pairwise algorithm is applied to all the columns(default=2).") - public int param_MaxSweeps = 2; - @Doc("The optimal stopping criterion (between 0 and 1) (default=0.1).") - public double param_eps = 0.1; - @Doc("True to be able to modify the code sent to R") - public boolean param_modifR = false; - - /** - * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs - * continue. - * - * @return <tt>true</tt> s'il sait la gerer - */ - @Override - public boolean canManageCardinality() { - return true; - } - - @Override - public SensitivityScenarios compute(DesignPlan plan, File outputdirectory) - throws SensitivityException { - - setIsisFactorsR(plan, outputdirectory); - - int factorNumber = plan.getFactors().size(); - List<Factor> factors = plan.getFactors(); - RDataFrame dataFrame; - SensitivityScenarios thisExperiment = new SensitivityScenarios(); - List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); - - //Test all factors, if one is discrete, return null - testNoDiscrete(factors); - - try { - REngine engine = new RProxy(); - - //Clear session - engine.clearSession(); - - //Set working directory to get Isis R session - engine.loadRData(outputdirectory.getParentFile(), - outputdirectory.getName()); - - //Load the lhs library - engine.voidEval("library(lhs)"); - - String rInstruction = "x<-optimumLHS(n=%s,k=%s,maxSweeps=%s,eps=%s)"; - - String rCall = String.format(rInstruction, param_simulationNumber, - factorNumber, param_MaxSweeps, param_eps); - - if (param_modifR) { - rCall = editRInstruction(rCall); - } - - //Create the scenarios - engine.voidEval(rCall); - - // Get back experiment plan - engine.eval("expPlan<-as.data.frame(x)"); - dataFrame = (RDataFrame)engine.eval("expPlan"); - dataFrame.setVariable("expPlan"); - - // Setting up the scenarios. - for (int j = 0; j < param_simulationNumber; j++) { - Scenario experimentScenario = new Scenario(); - for (int i = 0; i < factorNumber; i++) { - Factor factor = plan.getFactors().get(i); - factor.setValueForIdentifier(dataFrame.get(i, j)); - experimentScenario.addFactor(factor); - } - thisExperimentScenarios.add(experimentScenario); - thisExperiment.setScenarios(thisExperimentScenarios); - } - - String isisFactorDistribution = "isis.factor.distribution<-" + - "data.frame(" + - "NomFacteur=c(%s)," + - "NomDistribution=c(%s)," + - "ParametreDistribution=c(%s))"; - - String distribution = ""; - String parameters = ""; - String factorNames = ""; - - for (int i = 0; i < factors.size(); i++) { - Factor tempFactor = factors.get(i); - ContinuousDomain domain = (ContinuousDomain) tempFactor.getDomain(); - if (i != 0) { - distribution += ","; - factorNames += ","; - parameters += ","; - } - - factorNames += "\"" + factors.get(i).getName() + "\""; - distribution += "\"qunif\""; - //add [min;max] to parameters - parameters += "\"[" + domain.getMinBound() + ";" + - domain.getMaxBound() + "]\""; - } - - engine.voidEval(String.format(isisFactorDistribution, factorNames, - distribution, parameters)); - - engine.voidEval("call<-" + "\"x<-optimumLHS(" - + "n=" + param_simulationNumber - + ",k=" + factorNumber - + ",maxSweeps=" + param_MaxSweeps - + ",eps=" + param_eps + ")\""); - - engine.voidEval("isis.MethodExp<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"call\"=call)"); - - engine.voidEval("attr(isis.MethodExp," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - engine.voidEval("isis.simule<-data.frame(x)"); - - engine.voidEval("attr(isis.simule," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); - - String data = "data<-data.frame("; - - //Create the factors vectors and the dataFrame instruction - for (int j = 0; j < factors.size(); j++) { - //The factor values vector - String vector; - //Get back the factor - Scenario scenario = thisExperimentScenarios.get(0); - Factor factor = scenario.getFactors().get(j); - String factorName = factor.getName().replaceAll(" ", ""); - - vector = factorName + "<-c("; - for (int i = 0; i < param_simulationNumber; i++) { - //Get back the displayed value the factor - Scenario tempScenario = thisExperimentScenarios.get(i); - Factor tempFactor = tempScenario.getFactors().get(j); - Object value = tempFactor.getDisplayedValue(); - - if (i < (param_simulationNumber - 1)) { - vector = vector + value + ","; - } else { - vector += value; - } - - } - vector += ")"; - engine.voidEval(vector); - - if (j < factors.size() - 1) { - data += factorName + "=factor(" + factorName + "),"; - } else { - data += factorName + "=factor(" + factorName + "))"; - } - } - engine.voidEval(data); - - // Creating the factors vector. - rInstruction = "factornames<-c("; - for (int i = 0; i < factorNumber; i++) { - if (i != (factorNumber - 1)) { - rInstruction = rInstruction + "\"" - + factors.get(i).getName() + "\","; - } else { - rInstruction = rInstruction + "\"" - + factors.get(i).getName() + "\""; - } - } - - rInstruction += ")"; - - engine.voidEval(rInstruction); - - // Save Isis R session - engine.saveRData(outputdirectory.getParentFile(), - outputdirectory.getName()); - - engine.terminate(); - - } catch (Exception e) { - throw new SensitivityException("Can't generate scenarios", e); - } - - return thisExperiment; - } - - @Override - public void analyzeResult(List<SimulationStorage> simulationStorages, - File outputDirectory) throws SensitivityException { - - //The first storage to get the name and parameters all along the method - SimulationStorage storage = simulationStorages.get(0); - - String simulationName = storage.getName().replaceAll("-", ""); - - try { - - REngine engine = new RProxy(); - - //Clear session - engine.clearSession(); - - //Get Isis R session - engine.loadRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - engine.voidEval("factors<-data.frame(x)"); - engine.voidEval("names(factors)<-factornames"); - - //Get back the factors number - int factorNumber = (Integer) engine.eval("length(factors[1,])"); - //Get back the simulation number - param_simulationNumber = (Integer) (engine.eval("length(factors[,1])")); - - SimulationParameter param = storage.getParameter(); - int sensitivityNumber = param.getSensitivityExport().size(); - - for (int k = 0; k < sensitivityNumber; k++) { - - SensitivityExport sensitivityExport = - param.getSensitivityExport().get(k); - - String rInstruction = createImportInstruction(sensitivityExport, - simulationStorages); - - // Send the simulation results - engine.voidEval(rInstruction); - - //Put results in isis.simule - engine.voidEval("isis.simule<-data.frame(isis.simule," + - sensitivityExport.getExportFilename() + ")"); - } - - //adding attribute to isis.Simule - engine.voidEval("attr(isis.simule," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - engine.voidEval("attr(isis.simule,\"call\")<-isis.MethodExp$call"); - - for (int k = 0; k < sensitivityNumber; k++) { - - // Creates the R expression to import results in R - SensitivityExport export = param.getSensitivityExport().get(k); - String name = export.getExportFilename(); - - //Create the dataforaov data.frame - String dataframe = "dataforaov<-data.frame(factors," + - name + "=" + name + ")"; - engine.voidEval(dataframe); - - //Call aov() - String aovCall = "aovresult<-aov(" + name + "~"; - for (int j = 0; j < factorNumber; j++) { - - String factorName = (String) engine.eval("names(factors)[" + (j + 1) + "]"); - factorName = factorName.replaceAll(" ", "."); - - if (j < (factorNumber - 1)) { - aovCall += factorName + - "+"; - } else { - aovCall += factorName + ",data=dataforaov)"; - } - } - engine.voidEval(aovCall); - - /*Export the results - *Export format is csv, data separated by ',' - *Results Export name is sensitivityExportName_Results.csv - *Sensitivity Indices export name is sensitivityExportName_SensitivityIndices.csv - */ - - //Compute Sum of Squares and Sensitivity indices - engine.voidEval("SoS<-summary(aovresult)[[1]][1:dim(summary(aovresult)[[1]])[1],2]"); - engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]"); - engine.voidEval("IndSensibilite<-SoS/sum(SoS)"); - - //Create a data.frame to export sensitivity important results in one file. - engine.voidEval("exportsensitivity<-data.frame(" + - "SoS[1:dim(summary(aovresult)[[1]])[1]]," + - "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])"); - engine.voidEval("names(exportsensitivity)<-c(" + - "\"Sum Of Squares\"," + - "\"Sensitivity indices\")"); - engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]"); - - - //Set dataforaov names - engine.voidEval("names(dataforaov)<-c(factornames,\"Result\")"); - - /*Set the export directory - *Export directory is the first simulation export directory. - */ - engine.setwd(outputDirectory); - - //Save the results with the scenarios. - engine.voidEval("write.csv(dataforaov,\"" + - name + "_Results.csv\")"); - - //Save the sensitivity indices - engine.voidEval("write.csv(exportsensitivity,\"" + - name + "_SensitivityIndices.csv\")"); - //FIXME export through java to enable export when using Rserve (when distant Rserve). - - //creating isis.methodAnalyse - engine.voidEval("isis.methodAnalyse<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"isis.simule\"=isis.simule," + - "call_method=\"" + aovCall + "\""+ - ",\"analysis_result\"=list(aovresult,IndSensibilite))"); - - engine.voidEval("attr(isis.methodAnalyse," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-" + - "isis.methodAnalyse"; - - engine.voidEval(String.format(renameIsisMethodAnalyse, - simulationName + "." + name)); - - } - - //Rename R objects for saving purpose - renameObjects(engine, simulationName); - - engine.terminate(); - - } catch (Exception e) { - throw new SensitivityException("Can't evaluate results", e); - } - - } - - @Override - public String getDescription() { - return "Implementation of Random Latin Hypercube method method " + - "using R (needs 'lhs' package to work)"; - } - -} Deleted: trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRRandomLHS.java =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRRandomLHS.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRRandomLHS.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,387 +0,0 @@ -/* - * #%L - * IsisFish data - * %% - * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package sensitivityanalysis; - -import fr.ifremer.isisfish.datastore.SimulationStorage; -import fr.ifremer.isisfish.export.SensitivityExport; -import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis; -import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; -import fr.ifremer.isisfish.simulator.sensitivity.Factor; -import fr.ifremer.isisfish.simulator.sensitivity.Scenario; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; -import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; -import fr.ifremer.isisfish.util.Doc; -import java.io.File; -import java.util.List; -import org.nuiton.j2r.REngine; -import org.nuiton.j2r.RProxy; -import org.nuiton.j2r.types.RDataFrame; - -/** - * Implementation of Random Latin Hypercube method using R. - * - * @author jcouteau - * @version $Revision: 1.0 $ - */ -public class SensitivityCalculatorRRandomLHS extends - AbstractSensitivityAnalysis { - - @Doc("Simulation number (default=10)") - public int param_simulationNumber = 10; - @Doc("True to be able to modify the code sent to R") - public boolean param_modifR = false; - - /** - * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs - * continue. - * - * @return <tt>true</tt> s'il sait la gerer - */ - @Override - public boolean canManageCardinality() { - return true; - } - - @Override - public SensitivityScenarios compute(DesignPlan plan, File outputDirectory) - throws SensitivityException { - - setIsisFactorsR(plan, outputDirectory); - - int factorNumber = plan.getFactors().size(); - RDataFrame dataFrame; //The dataframe to get back the scenarios from R - SensitivityScenarios thisExperiment = new SensitivityScenarios(); //The experiment we will build - List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); //The list of scenarios - List<Factor> factors = plan.getFactors(); //The factors - - testNoDiscrete(factors); - - try { - - REngine engine = new RProxy(); //The R engine - - //Clear session - engine.clearSession(); - - //Get Isis R session - engine.loadRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - //Load the lhs library - engine.voidEval("library(lhs)"); - - //Create the scenarios - String rInstruction = "x<-randomLHS(%s,%s)"; - String rCall = String.format(rInstruction, param_simulationNumber, - factorNumber); - - if (param_modifR) { - rCall = editRInstruction(rCall); - } - - engine.voidEval(rCall); - - // Get back experiment plan - engine.eval("expPlan<-as.data.frame(x)"); - dataFrame = (RDataFrame)engine.eval("expPlan"); - dataFrame.setVariable("expPlan"); - - // Setting up the scenarios. - for (int j = 0; j < param_simulationNumber; j++) { - Scenario experimentScenario = new Scenario(); - for (int i = 0; i < factorNumber; i++) { - Factor factor = plan.getFactors().get(i); //The factor we are setting - factor.setValueForIdentifier(dataFrame.get(i,j)); - experimentScenario.addFactor(factor); - } - thisExperimentScenarios.add(experimentScenario); - thisExperiment.setScenarios(thisExperimentScenarios); - } - - String isisFactorDistribution = "isis.factor.distribution<-" + - "data.frame(" + - "NomFacteur=c(%s)," + - "NomDistribution=c(%s)," + - "ParametreDistribution=c(%s))"; - - String distribution = ""; - String parameters = ""; - String factorNames = ""; - - - //Create the strings for the isis.MethodExp instruction - for (int i = 0; i < factors.size(); i++) { - ContinuousDomain domain = (ContinuousDomain)factors.get(i).getDomain(); - if (i != 0) { - distribution += ","; //the distribution - factorNames += ","; //the factor names - parameters += ","; //the parameters - } - - factorNames += "\"" + factors.get(i).getName() + "\""; - distribution += "\"qunif\""; //all distributions are qunif - double min = domain.getCalculatorMinBound(); - double max = domain.getCalculatorMaxBound(); - parameters += "\"[" + min + ";" + max + "]\""; - } - engine.voidEval(String.format(isisFactorDistribution, factorNames, - distribution, parameters)); - - engine.voidEval("call<-" + "\"x<-randomLHS(" - + param_simulationNumber + "," + factorNumber + ")\""); - - engine.voidEval("isis.MethodExp<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"call\"=call)"); - - engine.voidEval("attr(isis.MethodExp," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - engine.voidEval("isis.simule<-data.frame(x)"); - engine.voidEval("attr(isis.simule," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); - - String data = "data<-data.frame("; - - //Create the factors vectors and the dataFrame instruction - for (int j = 0; j < factors.size(); j++) { - Scenario firstScenario = thisExperimentScenarios.get(0); - Factor factor = firstScenario.getFactors().get(j); - String factorName = factor.getName().replaceAll(" ", ""); - - //the vector of the factor values - //read all the values one by one from the already created - //scenarios. - String vector = factorName + "<-c("; - for (int i = 0; i < param_simulationNumber; i++) { - Scenario scenario = thisExperimentScenarios.get(i); - List<Factor> factorList = scenario.getFactors(); - Factor factor1 = factorList.get(j); - if (i < (param_simulationNumber - 1)) { - vector += factor1.getDisplayedValue() + ","; - } else { - vector += factor1.getDisplayedValue(); - } - - } - vector = vector + ")"; - engine.voidEval(vector); - - //add factor1=factor(factor1) for each factor... - if (j < factors.size() - 1) { - data += factorName + "=factor(" + factorName + "),"; - } else { - data += factorName + "=factor(" + factorName + "))"; - } - - } - engine.voidEval(data); - - // Creating the factors vector. - rInstruction = "factornames<-c("; - for (int i = 0; i < factorNumber; i++) { - if (i != (factorNumber - 1)) { - rInstruction = rInstruction + "\"" - + factors.get(i).getName() + "\","; - } else { - rInstruction = rInstruction + "\"" - + factors.get(i).getName() + "\""; - } - } - rInstruction += ")"; - engine.voidEval(rInstruction); - - // Save Isis R session - engine.saveRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - engine.terminate(); - - } catch (Exception e) { - throw new SensitivityException("Can't generate scenarios", e); - } - - return thisExperiment; - } - - @Override - public void analyzeResult(List<SimulationStorage> simulationStorages, - File outputDirectory) throws SensitivityException { - - SimulationStorage simulationStorage1 = simulationStorages.get(0); - String simName = simulationStorage1.getName(); - String simulationName = simName.replaceAll("-", ""); - SimulationParameter param = simulationStorage1.getParameter(); - int sensitivityNumber = param.getSensitivityExport().size(); - //List<SensitivityExport> export = param.getSensitivityExport(); - - try { - REngine engine = new RProxy(); - - //Clear session - engine.clearSession(); - - //Get Isis R session - engine.loadRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - engine.voidEval("factors<-data.frame(x)"); - - //Get back the factors number - int factorNumber = (Integer) engine.eval("length(factors)"); - - //Get back the simulation number - param_simulationNumber = (Integer) (engine.eval("length(factors[,1])")); - - for (int k = 0; k < sensitivityNumber; k++) { - - SensitivityExport sensitivityExport = - param.getSensitivityExport().get(k); - - String rInstruction = createImportInstruction(sensitivityExport, - simulationStorages); - - // Send the simulation results - engine.voidEval(rInstruction); - - //Put results in isis.simule - engine.voidEval("isis.simule<-data.frame(isis.simule," + - sensitivityExport.getExportFilename() + ")"); - } - - //adding attribute to isis.Simule - engine.voidEval("attr(isis.simule," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - engine.voidEval("attr(isis.simule,\"call\")<-isis.MethodExp$call"); - - for (int k = 0; k < sensitivityNumber; k++) { - - // Creates the R expression to import results in R - String name = param.getSensitivityExport().get(k) - .getExportFilename(); - - //Create the dataforaov data.frame - String dataframe = "dataforaov<-data.frame(factors," + name - + "=" + name + ")"; - engine.voidEval(dataframe); - - //Call aov() - String aovCall = "aovresult<-aov(" + name + "~"; - for (int j = 0; j < factorNumber; j++) { - - if (j < (factorNumber - 1)) { - aovCall += engine.eval("names(factors)[" + (j + 1) + "]") - + "+"; - } else { - aovCall += engine.eval("names(factors)[" + (j + 1) + "]") - + ",data=dataforaov)"; - } - } - engine.voidEval(aovCall); - - /*Export the results - *Export format is csv, data separated by ',' - *Results Export name is sensitivityExportName_Results.csv - *Sensitivity Indices export name is sensitivityExportName_SensitivityIndices.csv - */ - - //Compute Sum of Squares and Sensitivity indices - engine.voidEval("SoS<-summary(aovresult)[[1]][1:dim(summary(aovresult)[[1]])[1],2]"); - engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]"); - engine.voidEval("IndSensibilite<-SoS/sum(SoS)"); - - //Create a data.frame to export sensitivity important results in one file. - engine.voidEval("exportsensitivity<-data.frame(" + - "SoS[1:dim(summary(aovresult)[[1]])[1]]," + - "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])"); - engine.voidEval("names(exportsensitivity)<-c(" + - "\"Sum Of Squares\"," + - "\"Sensitivity indices\")"); - engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]"); - - - //Set dataforaov names - engine.voidEval("resultsnames<-c(factornames,\"Result\")"); - engine.voidEval("names(dataforaov)<-resultsnames"); - - /*Set the export directory - *Export directory is the first simulation export directory. - */ - engine.setwd(outputDirectory); - - //Save the results with the scenarios. - engine.voidEval("write.csv(dataforaov,\"" + - param.getSensitivityExport().get(k).getExportFilename() + - "_Results.csv\")"); - - //Save the sensitivity indices - engine.voidEval("write.csv(exportsensitivity,\"" + - param.getSensitivityExport().get(k).getExportFilename() + - "_SensitivityIndices.csv\")"); - //FIXME export through java to enable export when using Rserve (when distant Rserve). - - //creating isis.methodAnalyse - engine.voidEval("isis.methodAnalyse<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"isis.simule\"=isis.simule," + - "call_method=\"" + aovCall + "\"," + - "\"analysis_result\"=list(aovresult,IndSensibilite))"); - - engine.voidEval("attr(isis.methodAnalyse," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-" + - "isis.methodAnalyse"; - engine.voidEval(String.format(renameIsisMethodAnalyse, - simulationName + "." + name)); - - } - - //Rename R objects for saving purpose - renameObjects(engine, simulationName); - - // Save Isis R session - engine.saveRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - engine.terminate(); - - } catch (Exception e) { - throw new SensitivityException("Can't evaluate results", e); - } - - } - - @Override - public String getDescription() { - return "Implementation of Random Latin Hypercube method method using" + - " R needs the 'lhs' package to work)"; - } - -} Deleted: trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRSobol.java =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRSobol.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRSobol.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,334 +0,0 @@ -/* - * #%L - * IsisFish data - * %% - * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package sensitivityanalysis; - -import fr.ifremer.isisfish.datastore.SimulationStorage; -import fr.ifremer.isisfish.export.SensitivityExport; -import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis; -import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; -import fr.ifremer.isisfish.simulator.sensitivity.Domain; -import fr.ifremer.isisfish.simulator.sensitivity.Factor; -import fr.ifremer.isisfish.simulator.sensitivity.Scenario; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; -import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; -import fr.ifremer.isisfish.util.Doc; -import java.io.File; -import java.util.List; -import org.nuiton.j2r.REngine; -import org.nuiton.j2r.RProxy; -import org.nuiton.j2r.types.RDataFrame; - -/** - * Implementation of Sobol method using R. - * - * @author jcouteau - * @version $Revision: 89 $ - * - * Last update : $Date: 2009-03-25 13:45:16 +0100 (mer., 25 mars 2009) $ By : - * $Author: jcouteau $ - */ -public class SensitivityCalculatorRSobol extends AbstractSensitivityAnalysis { - - @Doc("the size of the 2 random samples") - public int param_n = 20; - - @Doc("the number of bootstrap replicates.") - public int param_nboot = 20; - - @Doc("True to be able to modify the code sent to R") - public boolean param_modifR = false; - - /** - * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs - * continue. - * - * @return <tt>true</tt> s'il sait la gerer - */ - @Override - public boolean canManageCardinality() { - return true; - } - - @Override - public SensitivityScenarios compute(DesignPlan plan, File outputdirectory) - throws SensitivityException { - - setIsisFactorsR(plan, outputdirectory); - - RDataFrame dataFrame; - int nbExperiments; - int factorNumber = plan.getFactors().size(); - List<Factor> factors = plan.getFactors(); - SensitivityScenarios thisExperiment = new SensitivityScenarios(); - List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); - - testNoDiscrete(factors); - - String rInstruction = "a<-sobol2002(model=NULL,X1=X1,X2=X2,nboot=%s)"; - String rCall = String.format(rInstruction, param_nboot); - - if (param_modifR) { - rCall = editRInstruction(rCall); - } - - try { - REngine engine = new RProxy(); - - //Clear session - engine.clearSession(); - - //Get Isis R session - engine.loadRData(outputdirectory.getParentFile(), - outputdirectory.getName()); - - engine.voidEval("library(sensitivity)"); - - engine.voidEval("X1<-data.frame(matrix(runif(" + factorNumber + "*" - + param_n + "),nrow=" + param_n + "))"); - engine.voidEval("X2<-data.frame(matrix(runif(" + factorNumber + "*" - + param_n + "),nrow=" + param_n + "))"); - - engine.voidEval(rCall); - - // Creating the factors vector. - rInstruction = "factornames<-c("; - for (int i = 0; i < factorNumber; i++) { - String factorName = factors.get(i).getName(); - if (i != (factorNumber - 1)) { - rInstruction += "\"" + factorName + "\","; - } else { - rInstruction += "\"" + factorName + "\""; - } - } - - rInstruction += ")"; - - engine.voidEval(rInstruction); - - // Get back experiment plan - dataFrame = (RDataFrame) engine.eval("a$X"); - dataFrame.setVariable("a$X"); - - nbExperiments = dataFrame.dim()[0]; - - String isisFactorDistribution = "isis.factor.distribution<-" + - "data.frame(NomFacteur=c(%s)," + - "NomDistribution=c(%s)," + - "ParametreDistribution=c(%s))"; - - // Creating the vectors. - String distribution = ""; - String parameters = ""; - String factorNames = ""; - - for (int i = 0; i < factorNumber; i++) { - Factor factor = factors.get(i); - Domain domain = factor.getDomain(); - if (i != 0) { - distribution += ","; - parameters += ","; - factorNames += ","; - } - - distribution += "\"qunif\""; - ContinuousDomain continuousDomain = (ContinuousDomain) domain; - double min = continuousDomain.getCalculatorMinBound(); - double max = continuousDomain.getCalculatorMaxBound(); - parameters += "\"[" + min + ";" + max + "]\""; - factorNames += "\"" + factor.getName() + "\""; - } - - engine.voidEval(String.format(isisFactorDistribution, factorNames, - distribution, parameters)); - - engine.voidEval("call<-a$call"); - - engine.voidEval("isis.MethodExp<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"call\"=call)"); - - engine.voidEval("attr(isis.MethodExp," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - engine.voidEval("isis.simule<-data.frame(a$X)"); - - engine.voidEval("attr(isis.simule," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); - - // Save Isis R session - engine.saveRData(outputdirectory.getParentFile(), - outputdirectory.getName()); - - // Setting up the scenarios. - for (int j = 0; j < nbExperiments; j++) { - Scenario experimentScenario = new Scenario(); - for (int i = 0; i < factorNumber; i++) { - Factor factor = plan.getFactors().get(i); - Double dFValue = (Double) dataFrame.get(i, j); - factor.setValueForIdentifier(dFValue); - experimentScenario.addFactor(factor); - } - thisExperimentScenarios.add(experimentScenario); - } - - } catch (Exception e) { - throw new SensitivityException("Can't generate scenarios", e);} - - - thisExperiment.setScenarios(thisExperimentScenarios); - return thisExperiment; - - } - - @Override - public void analyzeResult(List<SimulationStorage> simulationStorages, - File outputDirectory) throws SensitivityException { - - SimulationStorage firstStorage = simulationStorages.get(0); - SimulationParameter param = firstStorage.getParameter(); - int sensitivityNumber = param.getSensitivityExport().size(); - String simulationName = firstStorage.getName().replaceAll("-", ""); - - try { - - REngine engine = new RProxy(); - - //Clear session - engine.clearSession(); - - //Get Isis R session - engine.loadRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - // Call R - // Load sensitivity package into R (if package already loaded, - // nothing happens. - engine.voidEval("library(sensitivity)"); - - //Set X1 names - engine.voidEval("names(X1)<-factornames"); - //Set X2 names - engine.voidEval("names(X2)<-factornames"); - - //Set a$X names - engine.voidEval("names(a$X)<-factornames"); - - for (int k = 0; k < sensitivityNumber; k++) { - - SensitivityExport sensitivityExport = - param.getSensitivityExport().get(k); - - String rInstruction = createImportInstruction(sensitivityExport, - simulationStorages); - - // Send the simulation results - engine.voidEval(rInstruction); - - //Put results in isis.simule - engine.voidEval("isis.simule<-data.frame(isis.simule," + - sensitivityExport.getExportFilename() + ")"); - } - - //adding attribute to isis.Simule - engine.voidEval("attr(isis.simule," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - engine.voidEval("attr(isis.simule,\"call\")<-isis.MethodExp$call"); - - for (int k = 0; k < sensitivityNumber; k++) { - - SensitivityExport sensitivityExport = param.getSensitivityExport().get(k); - String name = sensitivityExport.getExportFilename(); - - //Compute results - engine.voidEval("tell(a,y=" + name + ")"); - - engine.voidEval("row.names(a$S)<-names(a$X)"); - engine.voidEval("row.names(a$T)<-names(a$X)"); - engine.voidEval("row.names(a$V)<-c(\"global\"," + - "names(a$X),paste(\"-\",names(a$X),sep=\"\"))"); - - //creating isis.methodAnalyse - engine.voidEval("isis.methodAnalyse<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"isis.simule\"=isis.simule," + - "call_method=\"tell(a,y=" + name + ")" + "\"," + - "\"analysis_result\"=a)"); - - //setting isis.methodAnalyse attributes - engine.voidEval("attr(isis.methodAnalyse," + - "\"nomModel\")<-\"isis-fish-externe-R\")"); - - //Create the data.frame of scenarios and results for export purpose - engine.voidEval("dfresults<-data.frame(a$X,a$y)"); - - //Set working directory - engine.setwd(outputDirectory); - - //Export V - engine.voidEval("write.csv(a$V,\"" - + name - + "_SensitivityIndices.csv\")"); - //Export DD - engine.voidEval("write.csv(a$D,\"" - + name + "_D.csv\")"); - - //Export S - engine.voidEval("write.csv(a$S,\"" - + name + "_S.csv\")"); - - //Export results - engine.voidEval("write.csv(dfresults,\"" - + name + "_Results.csv\")"); - //FIXME export through java to enable export when using Rserve - - String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-" + - "isis.methodAnalyse"; - engine.voidEval(String.format(renameIsisMethodAnalyse, - simulationName + "." + name)); - - } - - //Rename R objects for saving purpose - renameObjects(engine, simulationName); - - // Save Isis R session - engine.saveRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - } catch (Exception e) { - throw new SensitivityException("Can't evaluate results", e); - } - } - - @Override - public String getDescription() { - return "Implementation of Sobol method using R (use of the R " + - "sobol2002 method, needs the 'sensitivity' package to work)"; - } -} Deleted: trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRegularFractions.java =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRegularFractions.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/resources/test-database/sensitivityanalysis/SensitivityCalculatorRegularFractions.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -1,390 +0,0 @@ -/* - * #%L - * IsisFish data - * %% - * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Jean Couteau - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package sensitivityanalysis; - -import fr.ifremer.isisfish.datastore.SimulationStorage; -import fr.ifremer.isisfish.export.SensitivityExport; -import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis; -import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; -import fr.ifremer.isisfish.simulator.sensitivity.Domain; -import fr.ifremer.isisfish.simulator.sensitivity.Factor; -import fr.ifremer.isisfish.simulator.sensitivity.Scenario; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; -import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; -import fr.ifremer.isisfish.util.Doc; -import java.io.File; -import java.util.List; -import org.nuiton.j2r.REngine; -import org.nuiton.j2r.RException; -import org.nuiton.j2r.RProxy; -import org.nuiton.j2r.types.RDataFrame; - -public class SensitivityCalculatorRegularFractions extends - AbstractSensitivityAnalysis { - - @Doc("the path of the directory where the R function is stored (do not indicate the RegularFractions.R file name)") - public String param_pathToFunction = ""; - - @Doc("unique prime number of levels of all input and unit factors") - public int param_p = 2; - - @Doc("number of unit factors (so that there are N=p^r units)") - public int param_r = 2; - - @Doc("resolution of the fraction") - public int param_resolution = 2; - - @Doc("True to be able to modify the code sent to R") - public boolean param_modifR = false; - - /** - * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs - * continue. - * - * @return <tt>true</tt> s'il sait la gerer - */ - @Override - public boolean canManageCardinality() { - return true; - } - - @Override - public SensitivityScenarios compute(DesignPlan plan, File outputDirectory) - throws SensitivityException { - - setIsisFactorsR(plan, outputDirectory); - - RDataFrame dataFrame; - int factorNumber = plan.getFactors().size(); - List<Factor> factors = plan.getFactors(); - SensitivityScenarios thisExperiment = new SensitivityScenarios(); - List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); - - String factorNames = ""; - - //Test all factors, if one is discrete, return null - //Create a string with all factors names - for (int i = 0; i < factorNumber; i++) { - Domain domain = factors.get(i).getDomain(); - if (i != 0) { - factorNames += ","; - } - - factorNames += "\"" + factors.get(i).getName() + "\""; - - if (domain instanceof DiscreteDomain) { - throw new SensitivityException(factors.get(i).getName() + - " has a discrete domain, this is not acceptable for " + - "this method."); - } - } - - try { - - REngine engine = new RProxy(); - - //Clear session - engine.clearSession(); - - //Get Isis R session - engine.loadRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - //Set the working directory (to import the R function) - engine.setwd(new File(param_pathToFunction)); - - //Import the function - engine.voidEval("source(\"regularfractions.R\")"); - - //Create the instruction - String rInstruction = "x<-regular.fraction(%s,%s,%s,%s)"; - String rCall = String.format(rInstruction, factors.size(), param_p, - param_r, param_resolution); - - if (param_modifR) { - rCall = editRInstruction(rCall); - } - - // Run function - engine.voidEval(rCall); - - // Run function - engine.voidEval("call<-\"" + rCall + "\""); - - // Creating the factors vector. - rInstruction = "factornames<-c(%s)"; - rCall = String.format(rInstruction, factorNames); - - engine.voidEval(rCall); - - - // Get back experiment plan - engine.eval("expPlan<-as.data.frame(x[[1]])"); - dataFrame = (RDataFrame)engine.eval("expPlan"); - dataFrame.setVariable("expPlan"); - - //Get back the simulation number - int simulationNumber = (Integer) engine.eval("length(x[[1]][,1])"); - - // Setting up the scenarios. - for (int j = 0; j < simulationNumber; j++) { - Scenario experimentScenario = new Scenario(); - for (int i = 0; i < factors.size(); i++) { - Factor factor = plan.getFactors().get(i); - Domain domain = factor.getDomain(); - Double dFValue = (Double)dataFrame.get(i,j); - if ((domain instanceof MatrixContinuousDomain) - || (domain instanceof EquationContinuousDomain)) { - factor.setValueForIdentifier(dFValue); - } else { - ContinuousDomain contDomain = (ContinuousDomain)domain; - Double max = contDomain.getCalculatorMaxBound(); - Double min = contDomain.getCalculatorMinBound(); - Double value = min + (max - min) * dFValue / (param_p - 1); - factor.setValueForIdentifier(value); - } - experimentScenario.addFactor(factor); - } - thisExperimentScenarios.add(experimentScenario); - thisExperiment.setScenarios(thisExperimentScenarios); - } - - String dataframe = "data<-data.frame("; - - //Create the factors vectors and the dataframe instruction - for (int j = 0; j < factorNumber; j++) { - Factor factor = factors.get(j); - String factorName = factor.getName().replaceAll(" ", ""); - - String vector = factorName + "<-c("; - for (int i = 0; i < simulationNumber; i++) { - Scenario scenario = thisExperimentScenarios.get(i); - List<Factor> newFactors = scenario.getFactors(); - Factor factor1 = newFactors.get(j); - - if (i < (simulationNumber - 1)) { - vector += factor1.getDisplayedValue() + ","; - } else { - vector += factor1.getDisplayedValue(); - } - - } - vector = vector + ")"; - engine.voidEval(vector); - - if (j < factorNumber - 1) { - dataframe += factorName + "=factor(" + factorName + "),"; - } else { - dataframe += factorName + "=factor(" + factorName + "))"; - } - - } - engine.voidEval(dataframe); - - engine.voidEval("isis.factor.distribution<-c(0.0)"); - - engine.voidEval("isis.MethodExp<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"call\"=call)"); - - engine.voidEval("attr(isis.MethodExp," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - //Create isis.Simule - engine.voidEval("isis.simule<-data.frame(data)"); - - engine.voidEval("attr(isis.simule," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); - - // Save Isis R session - engine.saveRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - engine.terminate(); - - } catch (RException eee) { - throw new SensitivityException("Can't generate scenarios", eee); - } - - return thisExperiment; - - } - - @Override - public void analyzeResult(List<SimulationStorage> simulationStorages, - File outputDirectory) throws SensitivityException { - - SimulationStorage firstStorage = simulationStorages.get(0); - SimulationParameter param = firstStorage.getParameter(); - List<SensitivityExport> exports = param.getSensitivityExport(); - int sensitivityNumber = exports.size(); - String simulationName = firstStorage.getName().replaceAll("-", ""); - - try { - - REngine engine = new RProxy(); - - //Clear session - engine.clearSession(); - - //Get Isis R session - engine.loadRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - //Get back the factors number - int factorNumber = (Integer) engine.eval("dim(data)[2]"); - - for (int k = 0; k < sensitivityNumber; k++) { - - SensitivityExport sensitivityExport = - param.getSensitivityExport().get(k); - - String rInstruction = createImportInstruction(sensitivityExport, - simulationStorages); - - // Send the simulation results - engine.voidEval(rInstruction); - - //Put results in isis.simule - engine.voidEval("isis.simule<-data.frame(isis.simule," + - sensitivityExport.getExportFilename() + ")"); - } - - //adding attribute to isis.Simule - engine.voidEval("attr(isis.simule," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - for (SensitivityExport export : exports) { - - String name = export.getExportFilename(); - - //Create the dataforaov data.frame - String dataFrame = "dataforaov<-data.frame(data," + - name + "=" + name + ")"; - engine.voidEval(dataFrame); - - //Call aov() - String aovCall = "aovresult<-aov(" + name + "~("; - for (int j = 0; j < factorNumber; j++) { - - if (j < (factorNumber - 1)) { - aovCall = aovCall - + engine.eval("names(data)[" + (j + 1) + "]") - + "+"; - } else { - aovCall = aovCall - + engine.eval("names(data)[" + (j + 1) + "]") - + ")"; - if (param_resolution <= 4) { - aovCall += ",data=dataforaov)"; - } else { - aovCall += "^2,data=dataforaov)"; - } - } - } - engine.voidEval(aovCall); - - /*Export the results - *Export format is csv, data separated by ',' - *Results Export name is sensitivityExportName_Results.csv - *Sensitivity Indices export name is sensitivityExportName_SensitivityIndices.csv - */ - - //Compute Sum of Squares and Sensitivity indices - engine.voidEval("SoS<-summary(aovresult)[[1]][1:dim(summary(aovresult)[[1]])[1],2]"); - engine.voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:dim(summary(aovresult)[[1]])[1]]"); - engine.voidEval("IndSensibilite<-SoS/sum(SoS)"); - - //Create a data.frame to export sensitivity important results in one file. - engine.voidEval("exportsensitivity<-data.frame(" + - "SoS[1:dim(summary(aovresult)[[1]])[1]]," + - "IndSensibilite[1:dim(summary(aovresult)[[1]])[1]])"); - engine.voidEval("names(exportsensitivity)<-c(" + - "\"Sum Of Squares\"," + - "\"Sensitivity indices\")"); - engine.voidEval("row.names(exportsensitivity)<-dimnames(summary(aovresult)[[1]])[1][[1]][1:dim(summary(aovresult)[[1]])[1]]"); - - //Set dataforaov names - engine.voidEval("resultsnames<-c(factornames,\"Result\")"); - engine.voidEval("names(dataforaov)<-resultsnames"); - - /*Set the export directory - *Export directory is the first simulation export directory. - */ - engine.setwd(outputDirectory); - - //Save the results with the scenarios. - engine.voidEval("write.csv(dataforaov,\"" + name + - "_Results.csv\")"); - - //Save the sensitivity indices - engine.voidEval("write.csv(exportsensitivity,\"" + name + - "_SensitivityIndices.csv\")"); - //FIXME export through java to enable export when using Rserve (when distant Rserve). - - //creating isis.methodAnalyse - engine.voidEval("isis.methodAnalyse<-list(" + - "\"isis.factors\"=isis.factors," + - "\"isis.factor.distribution\"=isis.factor.distribution," + - "\"isis.simule\"=isis.simule," + - "\"call_method\"=\"" + aovCall + "\"," + - "\"analysis_result\"=list(aovresult,IndSensibilite))"); - - engine.voidEval("attr(isis.methodAnalyse," + - "\"nomModel\")<-\"isis-fish-externe-R\""); - - String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse"; - engine.voidEval(String.format(renameIsisMethodAnalyse, - simulationName + "." + name)); - - } - - //Rename R objects for saving purpose - renameObjects(engine,simulationName); - - // Save Isis R session - engine.saveRData(outputDirectory.getParentFile(), - outputDirectory.getName()); - - engine.terminate(); - - } catch (Exception eee) { - throw new SensitivityException("Can't evaluate results", eee); - } - - } - - @Override - public String getDescription() { - return "Implementation of Regular fractions method using R"; - } - -} Copied: trunk/src/test/resources/test-database/sensitivityanalysis/Sobol.java (from rev 3968, branches/4.0.1/src/test/resources/test-database/sensitivityanalysis/Sobol.java) =================================================================== --- trunk/src/test/resources/test-database/sensitivityanalysis/Sobol.java (rev 0) +++ trunk/src/test/resources/test-database/sensitivityanalysis/Sobol.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -0,0 +1,286 @@ +/* + * #%L + * IsisFish data + * %% + * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, Jean Couteau + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package sensitivityanalysis; + +import java.io.File; +import java.util.List; + +import fr.ifremer.isisfish.export.SensitivityExport; +import fr.ifremer.isisfish.simulator.sensitivity.*; + +import org.apache.commons.lang3.StringUtils; +import org.nuiton.j2r.REngine; + +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.simulator.SimulationParameter; +import fr.ifremer.isisfish.util.Doc; + +import org.nuiton.j2r.types.RDataFrame; + +/** + * Implementation of Sobol method using R. + * + * @author jcouteau + * @version $Revision$ + * + * Last update : $Date$ By : + * $Author$ + */ +public class Sobol extends AbstractSensitivityAnalysis { + + @Doc("the size of the 2 random samples") + public int param_n = 20; + + @Doc("the number of bootstrap replicates.") + public int param_nboot = 20; + + @Doc("True to be able to modify the code sent to R") + public boolean param_modifR = false; + + /** + * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs + * continue. + * + * @return <tt>true</tt> s'il sait la gerer + */ + @Override + public boolean canManageCardinality() { + return true; + } + + @Override + public SensitivityScenarios compute(DesignPlan plan, File outputDirectory) + throws SensitivityException { + + setIsisFactorsR(plan, outputDirectory); + + RDataFrame dataFrame; + int nbExperiments; + int factorNumber = plan.getFactors().size(); + List<Factor> factors = plan.getFactors(); + SensitivityScenarios thisExperiment = new SensitivityScenarios(); + List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); + + checkAllFactorContinuous(factors); + + String rInstruction = "isis.methodAnalyse<-sobol2002(model=NULL,X1=X1,X2=X2,nboot=%s)"; + String rCall = String.format(rInstruction, param_nboot); + + if (param_modifR) { + rCall = editRInstruction(rCall); + } + + try { + REngine engine = openEngine(outputDirectory); + + engine.voidEval("library(sensitivity)"); + + String x = "<-data.frame(matrix(c("; + + for (int i = 0; i < factorNumber; i++) { + x += "runif("+param_n+"),"; + } + + x = StringUtils.removeEnd(x, ","); + + x+="),nrow="+param_n+"))"; + + engine.voidEval("X1"+x); + engine.voidEval("X2"+x); + + engine.voidEval(rCall); + + // Creating the factors vector. + rInstruction = "factornames<-c("; + for (int i = 0; i < factorNumber; i++) { + String factorName = factors.get(i).getName(); + if (i != (factorNumber - 1)) { + rInstruction += "\"" + factorName + "\","; + } else { + rInstruction += "\"" + factorName + "\""; + } + } + + rInstruction += ")"; + + engine.voidEval(rInstruction); + + // Get back experiment plan + dataFrame = (RDataFrame) engine.eval("isis.methodAnalyse$X"); + dataFrame.setVariable("isis.methodAnalyse$X"); + + nbExperiments = dataFrame.dim()[0]; + + engine.voidEval(getIsisFactorDistribution(factors)); + + engine.voidEval("call<-isis.methodAnalyse$call"); + + engine.voidEval("isis.methodExp<-list(" + + "\"isis.factors\"=isis.factors," + + "\"isis.factor.distribution\"=isis.factor.distribution," + + "\"call\"=call)"); + + engine.voidEval("attr(isis.methodExp," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + + engine.voidEval("isis.simule<-data.frame(isis.methodAnalyse$X)"); + + engine.voidEval("attr(isis.simule," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + + engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); + + // Setting up the scenarios. + for (int j = 0; j < nbExperiments; j++) { + Scenario experimentScenario = new Scenario(); + for (int i = 0; i < factorNumber; i++) { + Factor factor = plan.getFactors().get(i); + Double dFValue = (Double) dataFrame.get(i, j); + factor.setValueForIdentifier(dFValue); + experimentScenario.addFactor(factor); + } + thisExperimentScenarios.add(experimentScenario); + } + + closeEngine(engine, outputDirectory); + + } catch (Exception e) { + throw new SensitivityException("Can't generate scenarios", e); + } + + thisExperiment.setScenarios(thisExperimentScenarios); + return thisExperiment; + + } + + @Override + public void analyzeResult(List<SimulationStorage> simulationStorages, + File outputDirectory) throws SensitivityException { + + SimulationStorage firstStorage = simulationStorages.get(0); + SimulationParameter param = firstStorage.getParameter(); + int sensitivityNumber = param.getSensitivityExport().size(); + String simulationName = outputDirectory.getName().replaceAll("-", ""); + + try { + + REngine engine = openEngine(outputDirectory); + + // Call R + // Load sensitivity package into R (if package already loaded, + // nothing happens. + engine.voidEval("library(sensitivity)"); + + //Set X1 names + engine.voidEval("names(X1)<-factornames"); + //Set X2 names + engine.voidEval("names(X2)<-factornames"); + + //Set a$X names + engine.voidEval("names(a$X)<-factornames"); + + for (int k = 0; k < sensitivityNumber; k++) { + + SensitivityExport sensitivityExport = + param.getSensitivityExport().get(k); + + String rInstruction = createImportInstruction(sensitivityExport, + simulationStorages); + + // Send the simulation results + engine.voidEval(rInstruction); + + //Put results in isis.simule + engine.voidEval("isis.simule<-data.frame(isis.simule," + + sensitivityExport.getExportFilename() + ")"); + } + + //adding attribute to isis.Simule + engine.voidEval("attr(isis.simule," + + "\"nomModel\")<-\"isis-fish-externe-R\""); + + engine.voidEval("attr(isis.simule,\"call\")<-isis.methodExp$call"); + + for (int k = 0; k < sensitivityNumber; k++) { + + SensitivityExport sensitivityExport = param.getSensitivityExport().get(k); + String name = sensitivityExport.getExportFilename(); + + //Compute results + engine.voidEval("tell(a,y=" + name + ")"); + + engine.voidEval("row.names(isis.methodAnalyse$S)<-names(isis.methodAnalyse$X)"); + engine.voidEval("row.names(isis.methodAnalyse$T)<-names(isis.methodAnalyse$X)"); + engine.voidEval("row.names(isis.methodAnalyse$V)<-c(\"global\"," + + "names(isis.methodAnalyse$X),paste(\"-\",names(isis.methodAnalyse$X),sep=\"\"))"); + + //creating isis.methodAnalyse + String exportMethodAnalyse = String.format("%s.isis.methodAnalyse", simulationName + "." + name); + engine.voidEval(exportMethodAnalyse + "<-list(" + + "\"isis.factors\"=isis.factors," + + "\"isis.factor.distribution\"=isis.factor.distribution," + + "\"isis.simule\"=isis.simule," + + "call_method=\"tell(a,y=" + name + ")" + "\"," + + "\"analysis_result\"=a)"); + + //setting isis.methodAnalyse attributes + engine.voidEval("attr(" + exportMethodAnalyse + "," + + "\"nomModel\")<-\"isis-fish-externe-R\")"); + + //Create the data.frame of scenarios and results for export purpose + engine.voidEval("dfresults<-data.frame(isis.methodAnalyse$X,isis.methodAnalyse$y)"); + + //Set working directory + engine.setwd(outputDirectory); + + //Export V + engine.voidEval("write.csv(isis.methodAnalyse$V,\"" + + name + + "_SensitivityIndices.csv\")"); + //Export DD + engine.voidEval("write.csv(isis.methodAnalyse$D,\"" + + name + "_D.csv\")"); + + //Export S + engine.voidEval("write.csv(isis.methodAnalyse$S,\"" + + name + "_S.csv\")"); + + //Export results + engine.voidEval("write.csv(dfresults,\"" + + name + "_Results.csv\")"); + //FIXME export through java to enable export when using Rserve + + } + + closeEngine(engine, outputDirectory); + } catch (Exception e) { + throw new SensitivityException("Can't evaluate results", e); + } + } + + @Override + public String getDescription() { + return "Implementation of Sobol method using R (use of the R " + + "sobol2002 method, needs the 'sensitivity' package to work)"; + } +} Modified: trunk/src/test/resources/test-database/simulationplans/CalibrationSimplexePasVariable2Capturabilite.java =================================================================== --- trunk/src/test/resources/test-database/simulationplans/CalibrationSimplexePasVariable2Capturabilite.java 2014-04-17 15:26:04 UTC (rev 3968) +++ trunk/src/test/resources/test-database/simulationplans/CalibrationSimplexePasVariable2Capturabilite.java 2014-04-17 16:48:13 UTC (rev 3969) @@ -29,6 +29,7 @@ import java.util.Collections; import java.util.List; +import fr.ifremer.isisfish.util.ScriptUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.math.matrix.MatrixIterator; @@ -384,7 +385,7 @@ exportHisto += experiences.getExperience(number).q1 + ";" + experiences.getExperience(number).q2 + ";" + experiences.getExperience(number).criteria + "\n"; - org.nuiton.util.FileUtil.writeString(exportHistoric, exportHisto); + ScriptUtil.writeString(exportHistoric, exportHisto); return doNext; }// fin du after simulation