r4231 - in trunk/src/main/java/fr/ifremer/isisfish: . simulator/sensitivity ui ui/input ui/models/rule ui/script ui/script/model ui/sensitivity ui/sensitivity/wizard ui/simulator
Author: echatellier Date: 2015-05-21 13:11:05 +0000 (Thu, 21 May 2015) New Revision: 4231 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4231 Log: Move script code to dedicated handler (simulator) Added: trunk/src/main/java/fr/ifremer/isisfish/ui/NavigationHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeContext.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContext.java trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityContext.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/AdvancedParamsHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ExportHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PlanHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PlanUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PreScriptsHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ResultChoiceHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulationTabHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulatorContext.java Removed: trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SensUI.jaxx Modified: trunk/src/main/java/fr/ifremer/isisfish/IsisFish.java trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtils.java trunk/src/main/java/fr/ifremer/isisfish/ui/StatusBarHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/StatusBarUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeTabUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersFactorTableCellEditor.java trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersFactorTableCellRenderer.java trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptTypesComboModel.java trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/script/model/ScriptTransferHandler.java 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/SensitivityUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.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/OptimizationHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationUI.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 Modified: trunk/src/main/java/fr/ifremer/isisfish/IsisFish.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/IsisFish.java 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/IsisFish.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -78,6 +78,7 @@ import fr.ifremer.isisfish.datastore.SimulatorStorage; import fr.ifremer.isisfish.simulator.launcher.SimulationMonitor; import fr.ifremer.isisfish.simulator.launcher.SimulationService; +import fr.ifremer.isisfish.ui.WelcomeContext; import fr.ifremer.isisfish.ui.WelcomeTabUI; import fr.ifremer.isisfish.ui.WelcomeUI; import fr.ifremer.isisfish.ui.util.ErrorHelper; @@ -711,7 +712,8 @@ final SwingSession session = new SwingSession(sessionFile, true); // lauch first UI (welcomeUI) - WelcomeUI welcome = new WelcomeUI(); + WelcomeContext welcomeContext = new WelcomeContext(); + WelcomeUI welcome = new WelcomeUI(welcomeContext); welcome.setTitle(t("isisfish.welcome.title", IsisConfig.getVersion())); // Set to exit on close welcome.setDefaultCloseOperation(WelcomeUI.DO_NOTHING_ON_CLOSE); Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtils.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtils.java 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtils.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -31,9 +31,12 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.math.matrix.MatrixND; +import org.nuiton.topia.persistence.TopiaEntity; import fr.ifremer.isisfish.entities.Equation; +import fr.ifremer.isisfish.types.Month; import fr.ifremer.isisfish.types.RangeOfValues; +import fr.ifremer.isisfish.types.TimeStep; import fr.ifremer.isisfish.types.TimeUnit; /** @@ -172,4 +175,28 @@ } return result; } + + /** + * Return if type can be defined as a factor. + * + * @param type type + * @return {@code true} if type can be defined as a factor + */ + public static boolean canBeFactor(Class type) { + boolean result = false; + + if (TopiaEntity.class.isAssignableFrom(type)) { + result = true; + } else if (double.class.isAssignableFrom(type)) { + result = true; + } else if (Number.class.isAssignableFrom(type)) { + result = true; + } else if (TimeStep.class.isAssignableFrom(type)) { + result = true; + } else if (Month.class.isAssignableFrom(type)) { + result = true; + } + + return result; + } } Added: trunk/src/main/java/fr/ifremer/isisfish/ui/NavigationHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/NavigationHandler.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/NavigationHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -0,0 +1,163 @@ +/* + * #%L + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2015 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; + +import java.lang.reflect.Constructor; +import java.util.HashMap; +import java.util.Map; + +import javax.swing.tree.TreeModel; + +import fr.ifremer.isisfish.entities.Cell; +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; +import fr.ifremer.isisfish.entities.Species; +import fr.ifremer.isisfish.entities.Strategy; +import fr.ifremer.isisfish.entities.TripType; +import fr.ifremer.isisfish.entities.VesselType; +import fr.ifremer.isisfish.entities.Zone; +import fr.ifremer.isisfish.ui.input.InputContentUI; +import fr.ifremer.isisfish.ui.input.cell.CellUI; +import fr.ifremer.isisfish.ui.input.fisheryregion.FisheryRegionUI; +import fr.ifremer.isisfish.ui.input.gear.GearUI; +import fr.ifremer.isisfish.ui.input.metier.MetierUI; +import fr.ifremer.isisfish.ui.input.observation.ObservationUI; +import fr.ifremer.isisfish.ui.input.population.PopulationUI; +import fr.ifremer.isisfish.ui.input.port.PortUI; +import fr.ifremer.isisfish.ui.input.setofvessels.SetOfVesselsUI; +import fr.ifremer.isisfish.ui.input.species.SpeciesUI; +import fr.ifremer.isisfish.ui.input.strategy.StrategyUI; +import fr.ifremer.isisfish.ui.input.tree.FisheryTreeHelper; +import fr.ifremer.isisfish.ui.input.tree.FisheryTreeNode; +import fr.ifremer.isisfish.ui.input.triptype.TripTypeUI; +import fr.ifremer.isisfish.ui.input.vesseltype.VesselTypeUI; +import fr.ifremer.isisfish.ui.input.zone.ZoneUI; +import jaxx.runtime.JAXXContext; + +/** + * Handler for tree navigation related interfaces. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class NavigationHandler extends CommonHandler { + + /** + * Cache pour n'instancier les ui qu'une seule fois + * et eviter que l'affichage saute pour l'utilsateur. + */ + protected Map<Class<?>, InputContentUI<?>> uiInstanceCache = new HashMap<>(); + + /** + * Get ui that can display internalClass. + * + * @param internalClass internal class to get ui + * @return ui for class + * @throws Exception + */ + protected InputContentUI<?> getUIInstanceForBeanClass(Class<?> internalClass, NavigationUI navigationUI) throws Exception { + + Class<? extends InputContentUI<?>> uiClass = null; + if (FisheryRegion.class.isAssignableFrom(internalClass)) { + uiClass = FisheryRegionUI.class; + } else if (Cell.class.isAssignableFrom(internalClass)) { + uiClass = CellUI.class; + } else if (Gear.class.isAssignableFrom(internalClass)) { + uiClass = GearUI.class; + } else if (Metier.class.isAssignableFrom(internalClass)) { + uiClass = MetierUI.class; + } else if (Population.class.isAssignableFrom(internalClass)) { + uiClass = PopulationUI.class; + } else if (Port.class.isAssignableFrom(internalClass)) { + uiClass = PortUI.class; + } else if (SetOfVessels.class.isAssignableFrom(internalClass)) { + uiClass = SetOfVesselsUI.class; + } else if (Species.class.isAssignableFrom(internalClass)) { + uiClass = SpeciesUI.class; + } else if (Strategy.class.isAssignableFrom(internalClass)) { + uiClass = StrategyUI.class; + } else if (TripType.class.isAssignableFrom(internalClass)) { + uiClass = TripTypeUI.class; + } else if (VesselType.class.isAssignableFrom(internalClass)) { + uiClass = VesselTypeUI.class; + } else if (Zone.class.isAssignableFrom(internalClass)) { + uiClass = ZoneUI.class; + } else if (Observation.class.isAssignableFrom(internalClass)) { + uiClass = ObservationUI.class; + } + + // use map to implement UI cache + InputContentUI<?> result = uiInstanceCache.get(uiClass); + if (result == null) { + Constructor<?> constructor = uiClass.getConstructor(JAXXContext.class); + result = (InputContentUI<?>)constructor.newInstance(navigationUI); + + uiInstanceCache.put(uiClass, result); + } + + return result; + } + + /** + * Change tree selection with new node id. + * + * Called by specific UI (CellUI to change node). + * + * @param inputUI context ui (to get context value tree helper...) + * @param nodeId node id to select + */ + public void setTreeSelection(InputContentUI<?> inputUI, String nodeId) { + setTreeSelection(inputUI, null, nodeId); + } + + /** + * Change tree selection with new node id. + * + * Called by specific UI (CellUI to change node). + * + * @param inputUI context ui (to get context value tree helper...) + * @param parentNodeId find node to select from this node + * @param nodeId node id to select + */ + public void setTreeSelection(InputContentUI<?> inputUI, String parentNodeId, String nodeId) { + FisheryTreeHelper fisheryTreeHelper = inputUI.getContextValue(FisheryTreeHelper.class); + TreeModel fisheryTreeModel = inputUI.getContextValue(TreeModel.class); + FisheryTreeNode fromNode = (FisheryTreeNode)fisheryTreeModel.getRoot(); + if (parentNodeId != null) { + fromNode = fisheryTreeHelper.findNode(fromNode, parentNodeId); + } + FisheryTreeNode newSelectNode = fisheryTreeHelper.findNode(fromNode, nodeId); + if (newSelectNode != null) { + fisheryTreeHelper.selectNode(newSelectNode); + } + } +} Property changes on: trunk/src/main/java/fr/ifremer/isisfish/ui/NavigationHandler.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/StatusBarHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/StatusBarHandler.java 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/StatusBarHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -25,13 +25,11 @@ import java.awt.Component; import java.awt.Rectangle; import java.awt.Robot; -import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import javax.swing.JFileChooser; import javax.swing.SwingUtilities; -import jaxx.runtime.JAXXContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -45,13 +43,23 @@ /** Class logger. */ private static Log log = LogFactory.getLog(StatusBarHandler.class); + protected StatusBarUI statusBarUI; + /** Attribute used to remember screenshot last directory. */ protected JFileChooser screenshotFileChooser; + public StatusBarHandler(StatusBarUI statusBarUI) { + this.statusBarUI = statusBarUI; + } + + public void afterInit() { + + } + /** * Ask user for screenshot save file and take screenshot to that file. */ - public void screenshot(Component parent) { + public void screenshot() { if (screenshotFileChooser == null) { screenshotFileChooser = new JFileChooser(); screenshotFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); @@ -66,6 +74,7 @@ } // find parent + Component parent = statusBarUI; while (!(parent instanceof WelcomeUI)) { parent = parent.getParent(); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/StatusBarUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/StatusBarUI.jaxx 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/StatusBarUI.jaxx 2015-05-21 13:11:05 UTC (rev 4231) @@ -23,10 +23,10 @@ #L% --> <Table> - <StatusBarHandler id="handler" /> + <StatusBarHandler id="handler" constructorParams="this" /> <script><![CDATA[ protected void $afterCompleteSetup() { - //getHandler().postInit(this); + handler.afterInit(); } /** * Change status message and stop progress bar if running. @@ -62,7 +62,7 @@ toolTipText="Stop the process" /> </cell> --> <cell> - <JLabel icon="camera.png" toolTipText="isisfish.status.screenshot" onMouseClicked="handler.screenshot(this)" /> + <JLabel icon="camera.png" toolTipText="isisfish.status.screenshot" onMouseClicked="handler.screenshot()" /> </cell> <cell fill="both"> <jaxx.runtime.swing.StatusMessagePanel /> Added: trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeContext.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeContext.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeContext.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -0,0 +1,35 @@ +/* + * #%L + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2015 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; + +import jaxx.runtime.context.JAXXInitialContext; + +public class WelcomeContext extends JAXXInitialContext { + + protected WelcomeSaveVerifier verifier = new WelcomeSaveVerifier(); + + public WelcomeContext() { + add(verifier); + } + +} Property changes on: trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeContext.java ___________________________________________________________________ Added: svn:eol-style + native Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -40,10 +40,6 @@ import javax.swing.JFrame; import javax.swing.ToolTipManager; -import jaxx.runtime.context.JAXXInitialContext; -import jaxx.runtime.swing.config.ConfigUI; -import jaxx.runtime.swing.config.ConfigUIHelper; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.widget.AboutFrame; @@ -53,16 +49,18 @@ import fr.ifremer.isisfish.ui.config.RConfigHandler; import fr.ifremer.isisfish.ui.config.RConfigUI; import fr.ifremer.isisfish.ui.config.SSHLauncherConfigUI; -import fr.ifremer.isisfish.ui.input.InputSaveVerifier; +import fr.ifremer.isisfish.ui.input.InputContext; import fr.ifremer.isisfish.ui.input.InputUI; import fr.ifremer.isisfish.ui.queue.QueueUI; import fr.ifremer.isisfish.ui.result.ResultUI; import fr.ifremer.isisfish.ui.script.ScriptUI; -import fr.ifremer.isisfish.ui.sensitivity.SensitivitySaveVerifier; +import fr.ifremer.isisfish.ui.sensitivity.SensitivityContext; import fr.ifremer.isisfish.ui.sensitivity.SensitivityUI; -import fr.ifremer.isisfish.ui.simulator.SimulAction; import fr.ifremer.isisfish.ui.simulator.SimulUI; +import fr.ifremer.isisfish.ui.simulator.SimulatorContext; import fr.ifremer.isisfish.ui.vcs.VCSConfigUI; +import jaxx.runtime.swing.config.ConfigUI; +import jaxx.runtime.swing.config.ConfigUIHelper; /** * Welcome related ui handler. @@ -78,8 +76,9 @@ /** Class logger. */ private static Log log = LogFactory.getLog(WelcomeHandler.class); + protected WelcomeUI welcomeUI; + protected Map<JFrame, WelcomePanelUI> allFrameOpened; - protected WelcomeSaveVerifier verifier = new WelcomeSaveVerifier(); // URL alias protected static final Map<String, String> URLSALIAS = new HashMap<String, String>(); @@ -92,10 +91,13 @@ URLSALIAS.put("TOPIA_API", "http://maven-site.nuiton.org/topia/topia-persistence/apidocs/index.html"); } - public void postInit(WelcomeUI welcomeUI) { - welcomeUI.setContextValue(verifier); + public WelcomeHandler(WelcomeUI welcomeUI) { + this.welcomeUI = welcomeUI; + } + + public void afterInit() { allFrameOpened = new HashMap<JFrame, WelcomePanelUI>(); - welcomeUI.getWelcomePanelUI().setContent(new WelcomeTabUI(new JAXXInitialContext().add(verifier))); + welcomeUI.getWelcomePanelUI().setContent(new WelcomeTabUI(welcomeUI)); // increase tooltip display time ToolTipManager toolTipManager = ToolTipManager.sharedInstance(); @@ -105,8 +107,7 @@ protected void openFrame(WelcomeUI welcomeUI, Component c, String title) { - JAXXInitialContext childContext = new JAXXInitialContext().add(verifier).add(this); - WelcomePanelUI welcome = new WelcomePanelUI(childContext); + WelcomePanelUI welcome = new WelcomePanelUI(welcomeUI); welcome.setContent(c); JFrame frame = new JFrame(title); @@ -132,10 +133,8 @@ * @param welcomeUI */ public void newSimulationFrame(WelcomeUI welcomeUI) { - JAXXInitialContext context = new JAXXInitialContext(); - context.add(new SimulAction()); - context.add(this); - SimulUI simulUI = new SimulUI(context); + SimulatorContext simulatorContext = new SimulatorContext(welcomeUI); + SimulUI simulUI = new SimulUI(simulatorContext); openFrame(welcomeUI, simulUI, t("isisfish.simulation.title")); } @@ -152,7 +151,9 @@ * @param welcomeUI */ public void newInputFrame(WelcomeUI welcomeUI) { - openFrame(welcomeUI, new InputUI(new JAXXInitialContext().add(verifier).add(new InputSaveVerifier()).add(this)), t("isisfish.input.title")); + InputContext inputContext = new InputContext(welcomeUI); + InputUI inputUI = new InputUI(inputContext); + openFrame(welcomeUI, inputUI, t("isisfish.input.title")); } /** @@ -168,7 +169,9 @@ * @param welcomeUI */ public void newSensitivityFrame(WelcomeUI welcomeUI) { - openFrame(welcomeUI, new SensitivityUI(new JAXXInitialContext().add(new SensitivitySaveVerifier()).add(new SimulAction()).add(this)), t("isisfish.sensitivity.title")); + SensitivityContext sensitivityContext = new SensitivityContext(welcomeUI); + SensitivityUI sensitivityUI = new SensitivityUI(sensitivityContext); + openFrame(welcomeUI, sensitivityUI, t("isisfish.sensitivity.title")); } /** @@ -184,6 +187,7 @@ * @param welcomeUI parent ui */ public void close(WelcomeUI welcomeUI) { + WelcomeSaveVerifier verifier = welcomeUI.getContextValue(WelcomeSaveVerifier.class); if (verifier.allIsSaved()) { welcomeUI.dispose(); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeTabUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeTabUI.jaxx 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeTabUI.jaxx 2015-05-21 13:11:05 UTC (rev 4231) @@ -24,11 +24,9 @@ --> <JPanel layout='{new BorderLayout()}'> <import> - fr.ifremer.isisfish.ui.simulator.SimulAction - jaxx.runtime.context.JAXXInitialContext - fr.ifremer.isisfish.ui.input.InputSaveVerifier - fr.ifremer.isisfish.ui.sensitivity.SensitivitySaveVerifier - fr.ifremer.isisfish.ui.sensitivity.SensitivityInputHandler + fr.ifremer.isisfish.ui.input.InputContext + fr.ifremer.isisfish.ui.sensitivity.SensitivityContext + fr.ifremer.isisfish.ui.simulator.SimulatorContext javax.swing.ImageIcon </import> @@ -46,16 +44,13 @@ </script> <JTabbedPane id="simulTabs" tabPlacement='{JTabbedPane.LEFT}' constraints="BorderLayout.CENTER"> <tab title=' ' icon='{new ImageIcon(getClass().getResource("/images/book.gif"))}'> - <fr.ifremer.isisfish.ui.input.InputUI id='inputUI' - constructorParams='new JAXXInitialContext().add(getContextValue(WelcomeSaveVerifier.class)).add(new InputSaveVerifier())' /> + <fr.ifremer.isisfish.ui.input.InputUI id='inputUI' constructorParams='new InputContext(this)' /> </tab> <tab title=' ' icon='{new ImageIcon(getClass().getResource("/images/simulation.gif"))}'> - <fr.ifremer.isisfish.ui.simulator.SimulUI id='simulUI' - constructorParams='new JAXXInitialContext().add(new SimulAction()).add(this)' /> + <fr.ifremer.isisfish.ui.simulator.SimulUI id='simulUI' constructorParams='new SimulatorContext(this)' /> </tab> <tab title=' ' icon='{new ImageIcon(getClass().getResource("/images/sensitivities.gif"))}'> - <fr.ifremer.isisfish.ui.sensitivity.SensitivityUI id="sensitivityUI" - constructorParams='new JAXXInitialContext().add(new SensitivitySaveVerifier()).add(new SimulAction()).add(new SensitivityInputHandler()).add(this)' /> + <fr.ifremer.isisfish.ui.sensitivity.SensitivityUI id="sensitivityUI" constructorParams='new SensitivityContext(this)' /> </tab> <tab title=' ' icon='{new ImageIcon(getClass().getResource("/images/calc.gif"))}'> <fr.ifremer.isisfish.ui.result.ResultUI /> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeUI.jaxx 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeUI.jaxx 2015-05-21 13:11:05 UTC (rev 4231) @@ -24,11 +24,11 @@ --> <JFrame width='874' height='736' resizable="true" layout='{new BorderLayout()}'> - <WelcomeHandler id="handler" /> + <WelcomeHandler id="handler" constructorParams="this" /> <script><![CDATA[ protected void $afterCompleteSetup() { - getHandler().postInit(this); + getHandler().afterInit(); } ]]></script> <JMenuBar> Added: trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContext.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContext.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContext.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -0,0 +1,47 @@ +/* + * #%L + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2015 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; + +import fr.ifremer.isisfish.ui.WelcomeSaveVerifier; +import jaxx.runtime.JAXXContext; +import jaxx.runtime.context.JAXXInitialContext; + +/** + * Ce contexte regroupe les élements qui servent à une hierachie d'interfaces Input. + * + * @author Eric Chatellier + */ +public class InputContext extends JAXXInitialContext { + + public InputContext(JAXXContext parent) { + setParentContext(parent); + + // add save verifier for this hierarchy + InputSaveVerifier inputSaveVerifier = new InputSaveVerifier(); + add(inputSaveVerifier); + + // this verifier is linked to global verifier + WelcomeSaveVerifier welcomeSaveVerifier = getContextValue(WelcomeSaveVerifier.class); + welcomeSaveVerifier.addSaveVerifier(inputSaveVerifier); + } +} Property changes on: trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContext.java ___________________________________________________________________ Added: svn:eol-style + native Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -31,9 +31,6 @@ import java.awt.event.ItemEvent; import java.io.File; import java.io.IOException; -import java.lang.reflect.Constructor; -import java.util.HashMap; -import java.util.Map; import javax.swing.JOptionPane; import javax.swing.JScrollPane; @@ -57,47 +54,22 @@ import fr.ifremer.isisfish.IsisFishRuntimeException; import fr.ifremer.isisfish.datastore.RegionStorage; import fr.ifremer.isisfish.datastore.StorageException; -import fr.ifremer.isisfish.entities.Cell; 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; import fr.ifremer.isisfish.entities.Species; import fr.ifremer.isisfish.entities.SpeciesDAO; -import fr.ifremer.isisfish.entities.Strategy; -import fr.ifremer.isisfish.entities.TripType; -import fr.ifremer.isisfish.entities.VesselType; -import fr.ifremer.isisfish.entities.Zone; import fr.ifremer.isisfish.mexico.export.RegionExplorer; import fr.ifremer.isisfish.mexico.export.RegionExport; import fr.ifremer.isisfish.mexico.export.RegionExportFactorXML; -import fr.ifremer.isisfish.ui.CommonHandler; -import fr.ifremer.isisfish.ui.NavigationUI; -import fr.ifremer.isisfish.ui.input.cell.CellUI; -import fr.ifremer.isisfish.ui.input.fisheryregion.FisheryRegionUI; -import fr.ifremer.isisfish.ui.input.gear.GearUI; -import fr.ifremer.isisfish.ui.input.metier.MetierUI; -import fr.ifremer.isisfish.ui.input.observation.ObservationUI; -import fr.ifremer.isisfish.ui.input.population.PopulationUI; -import fr.ifremer.isisfish.ui.input.port.PortUI; -import fr.ifremer.isisfish.ui.input.setofvessels.SetOfVesselsUI; -import fr.ifremer.isisfish.ui.input.species.SpeciesUI; -import fr.ifremer.isisfish.ui.input.strategy.StrategyUI; +import fr.ifremer.isisfish.ui.NavigationHandler; import fr.ifremer.isisfish.ui.input.tree.FisheryDataProvider; 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.input.tree.FisheryTreeSelectionModel; import fr.ifremer.isisfish.ui.input.tree.loadors.PopulationsNodeLoador; -import fr.ifremer.isisfish.ui.input.triptype.TripTypeUI; -import fr.ifremer.isisfish.ui.input.vesseltype.VesselTypeUI; -import fr.ifremer.isisfish.ui.input.zone.ZoneUI; import fr.ifremer.isisfish.ui.models.common.GenericComboModel; import fr.ifremer.isisfish.vcs.VCSException; -import jaxx.runtime.JAXXContext; /** * Main handler for fishery edition action. @@ -115,16 +87,10 @@ * Last update : $Date$ * By : $Author$ */ -public class InputHandler extends CommonHandler { +public class InputHandler extends NavigationHandler { /** Class logger. */ private static final Log log = LogFactory.getLog(InputHandler.class); - - /** - * Cache pour n'instancier les ui qu'une seule fois - * et eviter que l'affichage saute pour l'utilsateur. - */ - protected Map<Class<?>, InputContentUI<?>> uiInstanceCache = new HashMap<>(); /** * Post init ui. @@ -153,8 +119,7 @@ inputUI.getCardlayoutPrincipal().show(inputUI.getInputPanePrincipal(), "none"); TreeModel model = new DefaultTreeModel(null); inputUI.getFisheryRegionTree().setModel(model); - } - else { + } else { FisheryRegion fisheryRegion = null; RegionStorage regionStorage = null; TopiaContext topiaContext = null; @@ -564,90 +529,6 @@ } /** - * Get ui that can display internalClass. - * - * @param internalClass internal class to get ui - * @return ui for class - * @throws Exception - */ - protected InputContentUI<?> getUIInstanceForBeanClass(Class<?> internalClass, NavigationUI navigationUI) throws Exception { - - Class<? extends InputContentUI<?>> uiClass = null; - if (FisheryRegion.class.isAssignableFrom(internalClass)) { - uiClass = FisheryRegionUI.class; - } else if (Cell.class.isAssignableFrom(internalClass)) { - uiClass = CellUI.class; - } else if (Gear.class.isAssignableFrom(internalClass)) { - uiClass = GearUI.class; - } else if (Metier.class.isAssignableFrom(internalClass)) { - uiClass = MetierUI.class; - } else if (Population.class.isAssignableFrom(internalClass)) { - uiClass = PopulationUI.class; - } else if (Port.class.isAssignableFrom(internalClass)) { - uiClass = PortUI.class; - } else if (SetOfVessels.class.isAssignableFrom(internalClass)) { - uiClass = SetOfVesselsUI.class; - } else if (Species.class.isAssignableFrom(internalClass)) { - uiClass = SpeciesUI.class; - } else if (Strategy.class.isAssignableFrom(internalClass)) { - uiClass = StrategyUI.class; - } else if (TripType.class.isAssignableFrom(internalClass)) { - uiClass = TripTypeUI.class; - } else if (VesselType.class.isAssignableFrom(internalClass)) { - uiClass = VesselTypeUI.class; - } else if (Zone.class.isAssignableFrom(internalClass)) { - uiClass = ZoneUI.class; - } else if (Observation.class.isAssignableFrom(internalClass)) { - uiClass = ObservationUI.class; - } - - // use map to implement UI cache - InputContentUI<?> result = uiInstanceCache.get(uiClass); - if (result == null) { - Constructor<?> constructor = uiClass.getConstructor(JAXXContext.class); - result = (InputContentUI<?>)constructor.newInstance(navigationUI); - - uiInstanceCache.put(uiClass, result); - } - - return result; - } - - /** - * Change tree selection with new node id. - * - * Called by specific UI (CellUI to change node). - * - * @param inputUI context ui (to get context value tree helper...) - * @param nodeId node id to select - */ - public void setTreeSelection(InputContentUI<?> inputUI, String nodeId) { - setTreeSelection(inputUI, null, nodeId); - } - - /** - * Change tree selection with new node id. - * - * Called by specific UI (CellUI to change node). - * - * @param inputUI context ui (to get context value tree helper...) - * @param parentNodeId find node to select from this node - * @param nodeId node id to select - */ - public void setTreeSelection(InputContentUI<?> inputUI, String parentNodeId, String nodeId) { - FisheryTreeHelper fisheryTreeHelper = inputUI.getContextValue(FisheryTreeHelper.class); - TreeModel fisheryTreeModel = inputUI.getContextValue(TreeModel.class); - FisheryTreeNode fromNode = (FisheryTreeNode)fisheryTreeModel.getRoot(); - if (parentNodeId != null) { - fromNode = fisheryTreeHelper.findNode(fromNode, parentNodeId); - } - FisheryTreeNode newSelectNode = fisheryTreeHelper.findNode(fromNode, nodeId); - if (newSelectNode != null) { - fisheryTreeHelper.selectNode(newSelectNode); - } - } - - /** * Delete tree node referenced by parent, and auto select parent node. * * @param inputUI ui containing tree Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputUI.jaxx 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputUI.jaxx 2015-05-21 13:11:05 UTC (rev 4231) @@ -36,28 +36,28 @@ <JMenuBar id="menu" constraints='BorderLayout.NORTH'> <JMenu text="isisfish.common.region" id="menuRegion"> - <JMenuItem id="menuRegionImport" text="isisfish.input.menu.importRegion" onActionPerformed="getHandler().importRegion(this)" /> - <JMenuItem id="menuRegionImportRename" text="isisfish.input.menu.importRenameRegion" onActionPerformed="getHandler().importRegionAndRename(this)" /> - <JMenuItem text="isisfish.input.menu.importRegionSimulation" onActionPerformed="getHandler().importRegionFromSimulation(this)" enabled="false"/> - <JMenuItem id="menuRegionExport" text="isisfish.input.menu.exportRegion" enabled='{isRegionLoaded()}' onActionPerformed="getHandler().exportRegion(this)" /> - <JMenuItem id="menuRegionCopy" text="isisfish.input.menu.copyRegion" enabled='{isRegionLoaded()}' onActionPerformed="getHandler().copyRegion(this)" /> + <JMenuItem id="menuRegionImport" text="isisfish.input.menu.importRegion" onActionPerformed="handler.importRegion(this)" /> + <JMenuItem id="menuRegionImportRename" text="isisfish.input.menu.importRenameRegion" onActionPerformed="handler.importRegionAndRename(this)" /> + <JMenuItem text="isisfish.input.menu.importRegionSimulation" onActionPerformed="handler.importRegionFromSimulation(this)" enabled="false"/> + <JMenuItem id="menuRegionExport" text="isisfish.input.menu.exportRegion" enabled='{isRegionLoaded()}' onActionPerformed="handler.exportRegion(this)" /> + <JMenuItem id="menuRegionCopy" text="isisfish.input.menu.copyRegion" enabled='{isRegionLoaded()}' onActionPerformed="handler.copyRegion(this)" /> <JSeparator/> - <JMenuItem text="isisfish.input.menu.removeLocaly" enabled='{isRegionLoaded()}' onActionPerformed="getHandler().removeRegion(this, false)" /> + <JMenuItem text="isisfish.input.menu.removeLocaly" enabled='{isRegionLoaded()}' onActionPerformed="handler.removeRegion(this, false)" /> </JMenu> <JMenu text="isisfish.input.menu.server"> - <JMenuItem text="isisfish.input.menu.addRegion" enabled='{isRegionLoaded()}' onActionPerformed="getHandler().commitRegionInCVS(this)" /> - <JMenuItem text="isisfish.input.menu.commit" enabled='{isRegionLoaded()}' onActionPerformed="getHandler().commitRegionInCVS(this)" /> + <JMenuItem text="isisfish.input.menu.addRegion" enabled='{isRegionLoaded()}' onActionPerformed="handler.commitRegionInCVS(this)" /> + <JMenuItem text="isisfish.input.menu.commit" enabled='{isRegionLoaded()}' onActionPerformed="handler.commitRegionInCVS(this)" /> <JSeparator/> - <JMenuItem text="isisfish.input.menu.removeLocalyRemotely" enabled='{isRegionLoaded()}' onActionPerformed="getHandler().removeRegion(this, true)" /> + <JMenuItem text="isisfish.input.menu.removeLocalyRemotely" enabled='{isRegionLoaded()}' onActionPerformed="handler.removeRegion(this, true)" /> </JMenu> <JMenu text="isisfish.input.menu.sensitivity"> - <JMenuItem text="isisfish.input.menu.sensitivity.export" enabled='{isRegionLoaded()}' onActionPerformed="getHandler().exportRegionSensitivityFactors(this)" /> + <JMenuItem text="isisfish.input.menu.sensitivity.export" enabled='{isRegionLoaded()}' onActionPerformed="handler.exportRegionSensitivityFactors(this)" /> </JMenu> </JMenuBar> <JSplitPane oneTouchExpandable="true" dividerLocation="200" orientation="HORIZONTAL" constraints='BorderLayout.CENTER'> <JPanel layout='{new BorderLayout()}' minimumSize="{new java.awt.Dimension(0,0)}"> <org.jdesktop.swingx.JXComboBox id="fieldCurrentRegion" constraints='BorderLayout.NORTH' - onItemStateChanged='getHandler().regionChange(this, event)' + onItemStateChanged='handler.regionChange(this, event)' model='{new fr.ifremer.isisfish.ui.models.common.GenericComboModel<String>(fr.ifremer.isisfish.datastore.RegionStorage.getRegionNames())}'/> <JPanel id="treePanel" name="treePanel" layout='{new BorderLayout()}' constraints='BorderLayout.CENTER'> <JScrollPane constraints='BorderLayout.CENTER'> @@ -65,7 +65,7 @@ selectionMode='{javax.swing.tree.TreeSelectionModel.SINGLE_TREE_SELECTION}'/> <JTree id="fisheryRegionTree" selectionModel='{fisheryRegionTreeSelectionModel}' rootVisible="true" selectionRow='0' model='{new javax.swing.tree.DefaultTreeModel(null)}' rowHeight="0" - onValueChanged="getHandler().nodeSelectionChanged(this, event)" /> + onValueChanged="handler.nodeSelectionChanged(this, event)" /> </JScrollPane> </JPanel> <Table constraints='BorderLayout.SOUTH'> @@ -75,7 +75,7 @@ </cell> <cell fill='horizontal'> <JButton id="buttonNewRegion" text="isisfish.input.createNewRegion" - onActionPerformed='getHandler().createNewRegion(this)' enabled='{getFieldNewRegion().getText().length() > 0}'/> + onActionPerformed='handler.createNewRegion(this)' enabled='{getFieldNewRegion().getText().length() > 0}'/> </cell> </row> </Table> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersFactorTableCellEditor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersFactorTableCellEditor.java 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersFactorTableCellEditor.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -42,7 +42,7 @@ import fr.ifremer.isisfish.IsisFishException; import fr.ifremer.isisfish.datastore.RuleStorage; import fr.ifremer.isisfish.rule.Rule; -import fr.ifremer.isisfish.ui.sensitivity.SensitivityInputHandler; +import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils; import fr.ifremer.isisfish.ui.simulator.RuleChooser; import fr.ifremer.isisfish.ui.simulator.SimulAction; @@ -89,8 +89,7 @@ final String paramName = (String)value; try { Class paramType = RuleStorage.getParameterType(rule, paramName); - SensitivityInputHandler handler = ruleChooser.getContextValue(SensitivityInputHandler.class); - boolean canBeFactor = handler.canBeFactor(paramType); + boolean canBeFactor = SensitivityUtils.canBeFactor(paramType); if (canBeFactor) { JButton button = new JButton(Resource.getIcon("/icons/building_add.png")); button.addActionListener(new ActionListener() { Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersFactorTableCellRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersFactorTableCellRenderer.java 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersFactorTableCellRenderer.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -38,7 +38,7 @@ import fr.ifremer.isisfish.IsisFishException; import fr.ifremer.isisfish.datastore.RuleStorage; import fr.ifremer.isisfish.rule.Rule; -import fr.ifremer.isisfish.ui.sensitivity.SensitivityInputHandler; +import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils; import fr.ifremer.isisfish.ui.simulator.RuleChooser; /** @@ -79,8 +79,7 @@ String paramName = (String)value; try { Class paramType = RuleStorage.getParameterType(rule, paramName); - SensitivityInputHandler handler = ruleChooser.getContextValue(SensitivityInputHandler.class); - boolean canBeFactor = handler.canBeFactor(paramType); + boolean canBeFactor = SensitivityUtils.canBeFactor(paramType); if (canBeFactor) { comp = new JButton(Resource.getIcon("/icons/building_add.png")); } Deleted: trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -1,1154 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2006 - 2015 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 - * 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.script; - -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; -import java.io.IOException; -import java.io.PrintStream; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.io.Writer; -import java.lang.reflect.Method; -import java.net.URI; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -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; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.TreePath; - -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 org.nuiton.util.ZipUtil; - -import fr.ifremer.isisfish.IsisFish; -import fr.ifremer.isisfish.IsisFishRuntimeException; -import fr.ifremer.isisfish.datastore.CodeSourceStorage; -import fr.ifremer.isisfish.datastore.CodeSourceStorage.Location; -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; -import fr.ifremer.isisfish.datastore.SensitivityExportStorage; -import fr.ifremer.isisfish.datastore.SimulationPlanStorage; -import fr.ifremer.isisfish.datastore.SimulatorStorage; -import fr.ifremer.isisfish.equation.Language; -import fr.ifremer.isisfish.ui.WelcomePanelUI; -import fr.ifremer.isisfish.ui.script.model.ScriptTree; -import fr.ifremer.isisfish.ui.script.model.ScriptTreeModel; -import fr.ifremer.isisfish.ui.util.ErrorHelper; -import fr.ifremer.isisfish.util.CompileHelper; -import fr.ifremer.isisfish.util.JavadocHelper; -import fr.ifremer.isisfish.vcs.VCSException; -import freemarker.cache.ClassTemplateLoader; -import freemarker.template.Configuration; -import freemarker.template.Template; - -/** - * ScriptAction. - * - * Template are now loaded with freemarker. - * - * @author letellier - * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ - */ -public class ScriptAction implements TreeSelectionListener, CaretListener { - - /** to use log facility, just put in your code: log.info(\"...\"); */ - private static Log log = LogFactory.getLog(ScriptAction.class); - - /** Couleur de succes (vert leger). */ - protected static final Color COLOR_SUCCESS = new Color(210, 255, 210); - - /** Couleur d'echec (rouge leger). */ - protected static final Color COLOR_FAILURE = new Color(255, 210, 210); - - /** Storage for currently edited file. */ - protected CodeSourceStorage codeStorage; - - /** Freemarke configuration used to create new script (based on templates). */ - protected Configuration freemarkerConfiguration; - - /** UI managed by this action class. */ - protected ScriptUI scriptUI; - - /** - * Constructeur. - * - * Init freemarker. - * - * @param scriptUI managed script UI - */ - public ScriptAction(ScriptUI scriptUI) { - - this.scriptUI = scriptUI; - - freemarkerConfiguration = new Configuration(Configuration.VERSION_2_3_0); - // needed to overwrite "Defaults to default system encoding." - // fix encoding issue on some systems - freemarkerConfiguration.setDefaultEncoding("utf-8"); - // specific template loader to get template from jars (classpath) - ClassTemplateLoader templateLoader = new ClassTemplateLoader(ScriptAction.class, "/"); - freemarkerConfiguration.setTemplateLoader(templateLoader); - - } - - /** - * Post init, must be called after ui building. - */ - public void postInit() { - - ScriptTree scriptTree = this.scriptUI.getScriptTree(); - - // add listeners - scriptTree.addTreeSelectionListener(this); - this.scriptUI.getEditor().addCaretListener(this); - - // expand official VCS tree node - scriptTree.expandRow(0); - } - - /** - * Update script UI component actions buttons. - */ - protected void setButton() { - - File selectedFile = scriptUI.getScriptTree().getSelectedFile(); - - if (selectedFile != null) { - scriptUI.setSingleFileSelected(selectedFile.isFile()); - scriptUI.setJavaFileSelected(selectedFile.getName().endsWith(".java")); - } - else { - scriptUI.setSingleFileSelected(false); - scriptUI.setJavaFileSelected(false); - } - } - - protected void setStatusMessage(String msg) { - // FIXME remove all parent container reference - WelcomePanelUI parentUI = scriptUI.getParentContainer(WelcomePanelUI.class); - parentUI.setStatusMessage(msg); - } - protected void setStatusMessage(String msg, boolean running) { - // FIXME remove all parent container reference - WelcomePanelUI parentUI = scriptUI.getParentContainer(WelcomePanelUI.class); - parentUI.setStatusMessage(msg, running); - } - - /** - * Make new script, and select it on tree. - */ - 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()); - } - - /** - * Make new script, and select it on tree. - * - * @param scriptType script to make - */ - public void newScript(ScriptMapping scriptType) { - - String equationModelType = ""; - String equationModelTypePath = ""; - - // specific case for equation model - if (scriptType.equals(ScriptMapping.Formule)) { - List<String> values = FormuleStorage.getCategories(); - equationModelType = (String) JOptionPane.showInputDialog(scriptUI, - 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(t("isisfish.message.new.filename")); - // user cancel - if (!StringUtils.isEmpty(fileName)) { - File scriptFile = newScript(equationModelTypePath + fileName, scriptType); - // creation successful - if (scriptFile != null) { - ScriptTreeModel model = scriptUI.getScriptTreeModel(); - model.fileAdded(scriptFile); - TreePath treePath = model.getTreePathFor(scriptFile); - scriptUI.getScriptTree().setSelectionPath(treePath); - } - } - } - } - - /** - * Creer un nouveau script, ici un script peut-etre un Script, un Simulator, - * un Export. - * - * @param fileName full filename - * @param scriptType le type que l'on souhaite Script, Simulator, ou Export. - * @return created file or {@code null} if any error happen - */ - protected File newScript(String fileName, ScriptMapping scriptType) { - - if (log.isDebugEnabled()) { - log.debug("newScript called [" + scriptType + "]"); - } - - File scriptFile = null; - - try { - // Vérifie qu'il n'y pas de caractères spéciaux. Seul les caractre - // de a à z (majuscule ou minuscule) ainsi que les nombres sont - // autorisés. + pour signifier qu'il doit y avoir - // au moins 1 caractère. - String realFilename; - String category; - - int pos = fileName.lastIndexOf('/'); - if (pos != -1) { - if (scriptType != ScriptMapping.Formule) { - // interdit pour le moment ? - String message = t("isisfish.error.invalid.file.name", - fileName); - Exception e = new RuntimeException(message); - 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 = t("isisfish.error.invalid.file.name", - fileName); - Exception e = new RuntimeException(message); - returnError(t("isisfish.error.script.create", fileName, e.getMessage()), e); - return null; - } - realFilename = fileName - .substring(fileName.lastIndexOf('/') + 1); - category = fileName.substring(0, fileName.lastIndexOf('/')); - } else { - realFilename = fileName; - category = ""; - } - if (!realFilename.matches("[A-Z0-9_][a-zA-Z0-9_]*")) { - String message = t("isisfish.error.invalid.file.name", fileName); - Exception e = new RuntimeException(message); - returnError(t("isisfish.error.script.create", fileName, e.getMessage()), e); - return null; - } - //TODO do test on category - CodeSourceStorage script = null; - switch (scriptType) { - case CommunityFormule: - script = FormuleStorage.createFormule(category, realFilename, - Language.JAVA); - break; - case CommunitySimulationPlan: - script = SimulationPlanStorage.createSimulationPlan(fileName, Location.COMMUNITY); - break; - case CommunityExport: - case CommunityExportStep: - 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; - case CommunityScript: - script = ScriptStorage.createScript(fileName, Location.COMMUNITY); - break; - case CommunitySimulator: - script = SimulatorStorage.createSimulator(fileName, Location.COMMUNITY); - break; - case CommunitySensitivity: - script = SensitivityAnalysisStorage.createSensitivityAnalysis(fileName, Location.COMMUNITY); - break; - case CommunitySensitivityExport: - script = SensitivityExportStorage - .createSensitivityExport(fileName, Location.COMMUNITY); - break; - default: - if (log.isErrorEnabled()) { - log.fatal("ScriptType unknown: " + scriptType); - } - } - - if (script.exists()) { - // Message d'erreur si le fichier existe en local. - String message = t("isisfish.error.file.already.exists", fileName); - Exception e = new RuntimeException(message); - returnError(t("isisfish.error.script.create", fileName, e - .getMessage()), e); - } - - String scriptTemplatePath = scriptType.getTemplatePath(); - - if (scriptTemplatePath != null) { - - if (log.isDebugEnabled()) { - log.debug("Parsing freemarker template located in " - + scriptTemplatePath); - } - - // get template - Template template = freemarkerConfiguration - .getTemplate(scriptTemplatePath); - - // context values - Map<String, Object> root = new HashMap<String, Object>(); - root.put("name", realFilename); - 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(); - script.setContent(out.toString()); - } else { - throw new IsisFishRuntimeException("There is no templatePath"); - } - - codeStorage = script; - scriptFile = script.getFile(); - } catch (Exception eee) { - returnError(t("isisfish.error.script.create", fileName, eee - .getMessage()), eee); - } - - return scriptFile; - } - - /** - * Write error in log and display exception to user. - * - * @param s message - * @param eee cause - */ - protected void returnError(String s, Exception eee) { - if (log.isErrorEnabled()) { - log.error(s, eee); - } - ErrorHelper.showErrorDialog(s, eee); - } - - /* - * @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent) - */ - @Override - public void valueChanged(TreeSelectionEvent e) { - if (e.getNewLeadSelectionPath() != null) { - Object selectedNode = e.getNewLeadSelectionPath().getLastPathComponent(); - if (selectedNode instanceof File && ((File)selectedNode).isFile()) { - File selectedFile = (File)selectedNode; - // load file into current action codeStorage - loadScript(selectedFile); - scriptUI.getEditor().open(selectedFile); - // force refresh - scriptUI.getEditor().repaint(); - scriptUI.getEditor().validate(); - - setButton(); - } - else { - scriptUI.getEditor().close(); - // force refresh - scriptUI.getEditor().repaint(); - scriptUI.getEditor().validate(); - - setButton(); - } - } - } - - /** - * Load specified script in current action. - * - * TODO can we change this ? - * - * @param file file to load - */ - public void loadScript(File file) { - ScriptMapping mapping = ScriptMapping.getMappingFor(file); - CodeSourceStorage script = null; - - try { - switch (mapping) { - case Formule: - case CommunityFormule: - String fullPath = file.getAbsolutePath(); - int lastIndexOf = fullPath.lastIndexOf('/'); - // in string .../aaa/bbb/ccc/ddd.java - // get ccc - String category = fullPath.substring(fullPath.lastIndexOf('/', - lastIndexOf - 1) + 1, lastIndexOf); - if (mapping.equals(ScriptMapping.Formule)) { - script = FormuleStorage.getFormule(category, file.getName()); - } else { - script = FormuleStorage.getCommunityFormule(category, file.getName()); - } - break; - 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; - case Export: - case ExportStep: - script = ExportStorage.getExport(file.getName(), Location.OFFICIAL); - break; - case Script: - script = ScriptStorage.getScript(file.getName(), Location.OFFICIAL); - break; - case Simulator: - script = SimulatorStorage.getSimulator(file.getName(), Location.OFFICIAL); - break; - case Sensitivity: - script = SensitivityAnalysisStorage.getSensitivityAnalysis(file.getName(), Location.OFFICIAL); - break; - 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; - case CommunitySimulationPlan: - script = SimulationPlanStorage.getSimulationPlan(file.getName(), Location.COMMUNITY); - break; - case CommunityExport: - case CommunityExportStep: - script = ExportStorage.getExport(file.getName(), Location.COMMUNITY); - break; - case CommunityScript: - script = ScriptStorage.getScript(file.getName(), Location.COMMUNITY); - break; - case CommunitySimulator: - script = SimulatorStorage.getSimulator(file.getName(), Location.COMMUNITY); - break; - case CommunitySensitivity: - script = SensitivityAnalysisStorage.getSensitivityAnalysis(file.getName(), Location.COMMUNITY); - break; - case CommunitySensitivityExport: - script = SensitivityExportStorage.getSensitivityExport(file.getName(), Location.COMMUNITY); - break; - default: - log.fatal("ScriptType unknown: " + file.getName()); - } - - //frame.setInfoText(t("isisfish.message.load.finished")); - } catch (Exception eee) { - returnError(t("isisfish.error.script.load", file.getAbsolutePath(), - eee.getMessage()), eee); - - } finally { - codeStorage = script; - } - } - - public boolean fileLoaded() { - return codeStorage != null; - } - - public boolean isJavaScript() { - return JavaSourceStorage.class.isInstance(codeStorage); - } - - /** - * Save current editor test in current loaded codeStorage. - */ - public void saveScript() { - if (log.isDebugEnabled()) { - log.debug("saveScript called on " + codeStorage.getName()); - } - - try { - // setContent() or scriptUI.getEditor().save() - // if setContent() only editor ask for t saving - scriptUI.getEditor().save(); - String content = scriptUI.getEditor().getText(); - codeStorage.setContent(content, false); - - // notify tree to refresh - ScriptTreeModel model = scriptUI.getScriptTreeModel(); - model.fileModified(codeStorage.getFile()); - } catch (Exception eee) { - returnError(t("isisfish.error.script.save", codeStorage.getFile(), - eee.getMessage()), eee); - } - setStatusMessage(t("isisfish.message.save.finished")); - } - - /** - * Save script, and display commit UI. - */ - public void commitScript() { - - if (log.isDebugEnabled()) { - log.debug("commitScript called for " + codeStorage.getName()); - } - - try { - // save script before commit - saveScript(); - - String msg = JOptionPane.showInputDialog(t("isisfish.message.script.commit", codeStorage.getName())); - if (msg == null) { - setStatusMessage(t("isisfish.message.commit.cancelled")); - } else { - codeStorage.commit(msg); - codeStorage.reload(); - setStatusMessage(t("isisfish.message.commit.finished")); - } - } catch (Exception ex) { - if (log.isErrorEnabled()) { - log.error("Error on script commit", ex); - } - - // if vcs can't write - ErrorHelper.showErrorDialog(ex.getMessage(), ex); - } - } - - /** - * Exporte le(s) script(s) sélectionnés dans l'arbre. - * <br>L'arbre doit avoir au moins un script de selectionnés - */ - public void exportScript() { - - TreePath[] selectedFilesPath = scriptUI.getScriptTree().getSelectionPaths(); - - // first step : acquire list of files required - int prefixLength = IsisFish.config.getDatabaseDirectory() - .getAbsolutePath().length() + 1; - List<String> listFiles = extractFiles(prefixLength, selectedFilesPath); - - } - - protected static List<String> extractFiles(int prefixLength, - TreePath[] selectedPaths) { - List<String> result = new ArrayList<String>(); - List<File> dirFound = new ArrayList<File>(); - List<File> dirWithFileFound = new ArrayList<File>(); - - for (TreePath selectedPath : selectedPaths) { - - DefaultMutableTreeNode node = (DefaultMutableTreeNode) selectedPath - .getPathComponent(1); - String moduleDisplayName = String.valueOf(node.getUserObject()); - File file = ScriptMapping.valueOf(moduleDisplayName).getModule(); - int nbPaths = selectedPath.getPathCount(); - if (nbPaths > 2) - for (int i = 2; i < nbPaths; i++) { - node = (DefaultMutableTreeNode) selectedPath - .getPathComponent(i); - String pathName = String.valueOf(node.getUserObject()); - file = new File(file, pathName); - } - if (file.isFile()) { - File parentFile = file.getParentFile(); - if (!dirFound.contains(parentFile)) { - dirFound.add(parentFile); - } - dirWithFileFound.add(parentFile); - result.add(file.getAbsolutePath().substring(prefixLength)); - } else { - // mark the file - dirFound.add(file); - } - } - - // keep only user selected directories - dirFound.removeAll(dirWithFileFound); - dirWithFileFound.clear(); - - if (!dirFound.isEmpty()) { - List<File> listF = new ArrayList<File>(); - // there is some directories selected by user - for (File dir : dirFound) { - FileFilter filter = new FileFilter() { - FileFilter excludeFilter = getScriptFileFilter(); - - public boolean accept(File pathname) { - return !excludeFilter.accept(pathname); - } - }; - listF.addAll(FileUtil.getFilteredElements(dir, filter, true)); - } - for (File file : listF) - result.add(file.getAbsolutePath().substring(prefixLength)); - listF.clear(); - } - dirFound.clear(); - return result; - } - - /** - * Cut selection in current editor. - */ - public void cut() { - scriptUI.getEditor().cut(); - } - - /** - * Copy selection in current editor. - */ - public void copy() { - scriptUI.getEditor().copy(); - } - - /** - * Paste clipboard content in editor. - */ - public void paste() { - scriptUI.getEditor().paste(); - } - - protected static FileFilter scriptFileFilter; - - public static FileFilter getScriptFileFilter() { - if (scriptFileFilter == null) { - scriptFileFilter = new ScriptFileFilter(IsisFish.vcs); - } - return scriptFileFilter; - } - - /** - * Check script content. - * - * @return compilation success flag - */ - public boolean checkScript() { - - boolean check = false; - - // can't compile formule - if (codeStorage instanceof FormuleStorage) { - return false; - } - - if (log.isDebugEnabled()) { - log.debug("checkScript called"); - } - // save script before compile - saveScript(); - - JavaSourceStorage javaCode = (JavaSourceStorage) codeStorage; - StringWriter result = new StringWriter(); - PrintWriter out = new PrintWriter(result); - try { - int compileResult = javaCode.compile(false, out); - - if (compileResult == 0) { - check = true; - } - } catch (Exception eee) { - eee.printStackTrace(out); - } - out.flush(); - - if (check) { - scriptUI.getActionLogArea().setText( - t("isisfish.script.compilation.ok", result.toString())); - scriptUI.getActionLogArea().setBackground(COLOR_SUCCESS); - } else { - scriptUI.getActionLogArea().setText( - t("isisfish.script.compilation.failed", result - .toString())); - scriptUI.getActionLogArea().setBackground(COLOR_FAILURE); - } - - setStatusMessage(t("isisfish.message.check.finished")); - return check; - } - - /** - * Check all scripts. - */ - public void checkAllScripts() { - - setStatusMessage(t("isisfish.message.check.inprogress"), true); - - boolean allSuccess = true; - - // reste previous state - scriptUI.getActionLogArea().setBackground(null); - scriptUI.getActionLogArea().setText(""); - - for (ScriptMapping scriptMapping : ScriptMapping.values()) { - // normalement ne match pas les formules - // le cas est différent pour les formules - // 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(t("isisfish.script.compilingfile", javaFile)); - - StringWriter result = new StringWriter(); - PrintWriter out = new PrintWriter(result); - int compileResult = CompileHelper.compile(IsisFish.config.getDatabaseDirectory(), javaFile, IsisFish.config.getCompileDirectory(), out); - out.flush(); - - if (compileResult == 0) { - scriptUI.getActionLogArea().append(t("isisfish.common.ok") + "\n"); - } - else { - scriptUI.getActionLogArea().append(t("isisfish.common.error") + ":\n"); - scriptUI.getActionLogArea().append(result.toString() + "\n"); - scriptUI.getActionLogArea().setBackground(COLOR_FAILURE); - allSuccess = false; - } - - // scroll down - scriptUI.getActionLogArea().setCaretPosition(scriptUI.getActionLogArea().getText().length()); - } - } - - // set final color - if (allSuccess) { - scriptUI.getActionLogArea().setBackground(COLOR_SUCCESS); - } - - setStatusMessage(t("isisfish.message.check.finished")); - } - - /** - * Call main method in current cod storage code. - * Check script before call. - */ - public void evaluateScript() { - - if (log.isDebugEnabled()) { - log.debug("evaluateScript called"); - } - - try { - if (checkScript()) { - // reset area color - scriptUI.getActionLogArea().setBackground(null); - - JavaSourceStorage javaCode = (JavaSourceStorage) codeStorage; - ByteArrayOutputStream result = new ByteArrayOutputStream(); - PrintStream out = new PrintStream(result); - PrintStream err = new PrintStream(result); - PrintStream oldOut = System.out; - PrintStream oldErr = System.err; - System.setOut(out); - System.setErr(err); - Class<?> clazz = javaCode.getCodeClass(); - Method main = clazz.getMethod("main", String[].class); - //noinspection RedundantArrayCreation - main.invoke(null, new Object[] { new String[] {} }); - System.setOut(oldOut); - System.setErr(oldErr); - scriptUI.getActionLogArea().setText(result.toString()); - } - } catch (Exception ex) { - if (log.isDebugEnabled()) { - log.debug("Error on script evaluation", ex); - } - ByteArrayOutputStream result = new ByteArrayOutputStream(); - PrintStream out = new PrintStream(result); - ex.printStackTrace(out); - scriptUI.getActionLogArea().setText(result.toString()); - } - setStatusMessage(t("isisfish.message.evaluation.finished")); - } - - /** - * Copy a single file to destination directory. - * - * @param src file to copy - * @param path path of file to copy - * @param suffix file suffix - * @throws IOException if copy fail - */ - protected void backup(File src, String path, String suffix) - throws IOException { - - } - - /** - * Scan archive for script, and return an array of new files and conflict files. - * - * @param source archive file - * @param root database directory - * @return an array [newFiles, conflictFiles] - */ - protected static List<String>[] scanZip(File source, File root) { - - List<String> overwrittenFiles = new ArrayList<String>(); - List<String> newFiles = new ArrayList<String>(); - - // ontain list of relative paths (to add or overwrite) - try { - ZipUtil.scan(source, root, newFiles, overwrittenFiles, - getScriptFileFilter(), null, null); - } catch (IOException e) { - log.error("Can't scan zip (" + source + ")", e); - throw new RuntimeException(e); - } - - return new List[] { newFiles, overwrittenFiles }; - } - - /** - * Delete a script - * - * @param deleteRemote {@code true} to remove in vcs too - */ - public void deleteScript(boolean deleteRemote) { - - if (log.isDebugEnabled()) { - log.debug("DeleteScript called"); - } - - String name = codeStorage.getName(); - 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 - scriptUI.getEditor().close(); - - try { - // TODO change this, need to be called before - // effective deletion - scriptUI.getScriptTreeModel().fileDeleted(codeStorage.getFile()); - - //TODO desactive editor - //TODO Review this because after delete fi file saw previously - //TODO modified, it ask if we want to save, and then we have - //TODO again the file in panel but not in tree panel ? - codeStorage.delete(deleteRemote); - if (codeStorage.getFile().exists()) { - ErrorHelper.showErrorDialog(t("isisfish.error.script.delete", codeStorage - .getFile())); - } - } catch (Exception eee) { - returnError(t("isisfish.error.script.delete", - codeStorage == null ? null : codeStorage.getFile(), eee - .getMessage()), eee); - } - setStatusMessage(t("isisfish.message.delete.finished")); - } else { - setStatusMessage(t("isisfish.message.delete.canceled")); - } - } - - /** - * Show diff between selected files and files server version. - */ - public void diffScript() { - - if (log.isDebugEnabled()) { - log.debug("Method diffScript called on " + codeStorage.getFile()); - } - - try { - String result = null; - if (IsisFish.vcs.isOnRemote(codeStorage.getFile())) { - result = IsisFish.vcs.getDiff(codeStorage.getFile()); - } else { - result = "File not on remote"; - } - scriptUI.getActionLogArea().setText(result); - } catch (VCSException e) { - if (log.isErrorEnabled()) { - log.error("Can't get diff", e); - } - ErrorHelper.showErrorDialog(t("isisfish.vcs.vcssvn.diff.error"), e); - } - } - - /** enum to encapsulate a script module */ - protected enum ScriptMapping { - - Export( - ExportStorage.getExportDirectory(), - ExportStorage.EXPORT_TEMPLATE, true), - ExportStep( - ExportStorage.getExportDirectory(), - ExportStorage.EXPORT_STEP_TEMPLATE, true), - 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), - Sensitivity( - SensitivityAnalysisStorage.getSensitivityAnalysisDirectory(), - SensitivityAnalysisStorage.SENSITIVITY_ANALYSIS_TEMPLATE, true), - SensitivityExport( - SensitivityExportStorage.getSensitivityExportDirectory(), - SensitivityExportStorage.SENSITIVITY_EXPORT_TEMPLATE, true), - SimulationPlan( - SimulationPlanStorage.getSimulationPlanDirectory(), - SimulationPlanStorage.SIMULATION_PLAN_TEMPLATE, true), - Simulator( - SimulatorStorage.getSimulatorDirectory(), - SimulatorStorage.SIMULATOR_TEMPLATE, true), - Formule( - FormuleStorage.getFormuleDirectory(), - FormuleStorage.FORMULE_TEMPLATE, true), - - CommunityExport( - ExportStorage.getCommunityExportDirectory(), - ExportStorage.EXPORT_TEMPLATE), - CommunityExportStep( - ExportStorage.getCommunityExportDirectory(), - ExportStorage.EXPORT_STEP_TEMPLATE), - CommunityObjective( - ObjectiveStorage.getCommunityObjectiveDirectory(), - ObjectiveStorage.OBJECTIVE_TEMPLATE, true), - CommunityOptimization( - OptimizationStorage.getCommunityOptimizationDirectory(), - OptimizationStorage.OPTIMIZATION_TEMPLATE, true), - CommunityRule( - RuleStorage.getCommunityRuleDirectory(), - RuleStorage.RULE_TEMPLATE), - CommunityScript( - ScriptStorage.getCommunityScriptDirectory(), - ScriptStorage.SCRIPT_TEMPLATE), - CommunitySensitivity( - SensitivityAnalysisStorage.getCommunitySensitivityAnalysisDirectory(), - SensitivityAnalysisStorage.SENSITIVITY_ANALYSIS_TEMPLATE), - CommunitySensitivityExport( - SensitivityExportStorage.getCommunitySensitivityExportDirectory(), - SensitivityExportStorage.SENSITIVITY_EXPORT_TEMPLATE), - CommunitySimulationPlan( - SimulationPlanStorage.getCommunitySimulationPlanDirectory(), - SimulationPlanStorage.SIMULATION_PLAN_TEMPLATE), - CommunitySimulator( - SimulatorStorage.getCommunitySimulatorDirectory(), - SimulatorStorage.SIMULATOR_TEMPLATE), - CommunityFormule( - FormuleStorage.getCommunityFormuleDirectory(), - FormuleStorage.FORMULE_TEMPLATE); - - protected File module; - protected String templatePath; - protected boolean officialVCS; - - private ScriptMapping(File module, String templatePath) { - this(module, templatePath, false); - } - - private ScriptMapping(File module, String templatePath, boolean officialVCS) { - this.module = module; - this.templatePath = templatePath; - this.officialVCS = officialVCS; - } - - /** - * Get script type for script path. - * - * @param file file to get type - * @return ScriptMapping type - */ - public static ScriptMapping getMappingFor(File file) { - - ScriptMapping result = null; - - // test if path starts with type begin path - - // don't forget last / for distinction begin - // "sensitivity" and "sensitivityexport" - for (ScriptMapping mapping : ScriptMapping.values()) { - if (file.getAbsolutePath().startsWith(mapping.getModule().getAbsolutePath() + File.separator)) { - result = mapping; - } - } - - return result; - } - - public File getModule() { - return module; - } - - public String getTemplatePath() { - return templatePath; - } - - public boolean isOfficialVCS() { - return officialVCS; - } - } - - /** - * Generate javadoc and display output in UI. - */ - public void generateScriptJavadoc() { - setStatusMessage(t("isisfish.script.menu.javadocgenerating", - IsisFish.config.getJavadocDirectory()), true); - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - File rootDatabase = IsisFish.config.getDatabaseDirectory(); - File javadocDirectory = IsisFish.config.getJavadocDirectory(); - - StringWriter output = new StringWriter(); - PrintWriter out = new PrintWriter(output); - int ok = JavadocHelper.generateJavadoc(rootDatabase, - javadocDirectory, out); - - if (ok == 0) { - scriptUI.getActionLogArea().setText( - t("isisfish.script.javadoc.ok", output.toString())); - // vert leger - scriptUI.getActionLogArea().setBackground(COLOR_SUCCESS); - } else { - scriptUI.getActionLogArea().setText( - t("isisfish.script.compilation.failed", output - .toString())); - // rouge leger - scriptUI.getActionLogArea().setBackground(COLOR_FAILURE); - } - - setStatusMessage(t("isisfish.script.menu.javadocgenerated", - IsisFish.config.getJavadocDirectory())); - } - }); - } - - /** - * Open a browser displaying javadoc. - */ - public void showScriptJavadoc() { - try { - // in faut ouvrir l'index, sinon, ca ouvre - // un explorateur de fichier - File indexFile = new File(IsisFish.config.getJavadocDirectory(), - "index.html"); - - URI uri = indexFile.toURI(); - Desktop.getDesktop().browse(uri); - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error("Can't show script javadocs", e); - } - } - } - - /* - * @see javax.swing.event.CaretListener#caretUpdate(javax.swing.event.CaretEvent) - */ - @Override - public void caretUpdate(CaretEvent e) { - // selection pas vide si dot = mark - scriptUI.setTextSelected(e.getDot() != e.getMark()); - } - - /** - * Move files. - * (called by drag and drop handler). - * - * @param directory directory to moves files to - * @param filesToMove files to move to directory - */ - public void moveFiles(File directory, Collection<File> filesToMove) { - - ScriptTreeModel model = scriptUI.getScriptTreeModel(); - for (File fileToMove : filesToMove) { - model.fileDeleted(fileToMove); - File destFile = new File(directory, fileToMove.getName()); - try { - FileUtils.moveFile(fileToMove, destFile); - } catch (IOException ex) { - throw new IsisFishRuntimeException("Can't move file", ex); - } - model.fileAdded(destFile); - } - } -} Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptHandler.java (from rev 4226, trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptHandler.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -0,0 +1,1163 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2006 - 2015 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 + * 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.script; + +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; +import java.io.IOException; +import java.io.PrintStream; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.io.Writer; +import java.lang.reflect.Method; +import java.net.URI; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +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.SwingWorker; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.TreePath; + +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 org.nuiton.util.ZipUtil; + +import fr.ifremer.isisfish.IsisFish; +import fr.ifremer.isisfish.IsisFishRuntimeException; +import fr.ifremer.isisfish.datastore.CodeSourceStorage; +import fr.ifremer.isisfish.datastore.CodeSourceStorage.Location; +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; +import fr.ifremer.isisfish.datastore.SensitivityExportStorage; +import fr.ifremer.isisfish.datastore.SimulationPlanStorage; +import fr.ifremer.isisfish.datastore.SimulatorStorage; +import fr.ifremer.isisfish.equation.Language; +import fr.ifremer.isisfish.ui.WelcomePanelUI; +import fr.ifremer.isisfish.ui.script.model.ScriptTree; +import fr.ifremer.isisfish.ui.script.model.ScriptTreeModel; +import fr.ifremer.isisfish.ui.util.ErrorHelper; +import fr.ifremer.isisfish.util.CompileHelper; +import fr.ifremer.isisfish.util.JavadocHelper; +import fr.ifremer.isisfish.vcs.VCSException; +import freemarker.cache.ClassTemplateLoader; +import freemarker.template.Configuration; +import freemarker.template.Template; + +/** + * ScriptAction. + * + * Template are now loaded with freemarker. + * + * @author letellier + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class ScriptHandler implements TreeSelectionListener, CaretListener { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + private static Log log = LogFactory.getLog(ScriptHandler.class); + + /** Couleur de succes (vert leger). */ + protected static final Color COLOR_SUCCESS = new Color(210, 255, 210); + + /** Couleur d'echec (rouge leger). */ + protected static final Color COLOR_FAILURE = new Color(255, 210, 210); + + /** Storage for currently edited file. */ + protected CodeSourceStorage codeStorage; + + /** Freemarke configuration used to create new script (based on templates). */ + protected Configuration freemarkerConfiguration; + + /** UI managed by this action class. */ + protected ScriptUI scriptUI; + + /** + * Constructeur. + * + * Init freemarker. + * + * @param scriptUI managed script UI + */ + public ScriptHandler(ScriptUI scriptUI) { + + this.scriptUI = scriptUI; + + freemarkerConfiguration = new Configuration(Configuration.VERSION_2_3_0); + // needed to overwrite "Defaults to default system encoding." + // fix encoding issue on some systems + freemarkerConfiguration.setDefaultEncoding("utf-8"); + // specific template loader to get template from jars (classpath) + ClassTemplateLoader templateLoader = new ClassTemplateLoader(ScriptHandler.class, "/"); + freemarkerConfiguration.setTemplateLoader(templateLoader); + + } + + /** + * Post init, must be called after ui building. + */ + public void afterInit() { + + ScriptTree scriptTree = this.scriptUI.getScriptTree(); + + // add listeners + scriptTree.addTreeSelectionListener(this); + this.scriptUI.getEditor().addCaretListener(this); + + // expand official VCS tree node + scriptTree.expandRow(0); + } + + /** + * Update script UI component actions buttons. + */ + protected void setButton() { + + File selectedFile = scriptUI.getScriptTree().getSelectedFile(); + + if (selectedFile != null) { + scriptUI.setSingleFileSelected(selectedFile.isFile()); + scriptUI.setJavaFileSelected(selectedFile.getName().endsWith(".java")); + } else { + scriptUI.setSingleFileSelected(false); + scriptUI.setJavaFileSelected(false); + } + } + + protected void setStatusMessage(String msg) { + // FIXME remove all parent container reference + WelcomePanelUI parentUI = scriptUI.getParentContainer(WelcomePanelUI.class); + parentUI.setStatusMessage(msg); + } + protected void setStatusMessage(String msg, boolean running) { + // FIXME remove all parent container reference + WelcomePanelUI parentUI = scriptUI.getParentContainer(WelcomePanelUI.class); + parentUI.setStatusMessage(msg, running); + } + + /** + * Make new script, and select it on tree. + */ + public void newScript(MouseEvent event) { + JPopupMenu menu = new JPopupMenu(); + + // make a basic copy of already existing menu + JMenu oldMenu = scriptUI.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()); + } + + /** + * Make new script, and select it on tree. + * + * @param scriptType script to make + */ + public void newScript(ScriptMapping scriptType) { + + String equationModelType = ""; + String equationModelTypePath = ""; + + // specific case for equation model + if (scriptType.equals(ScriptMapping.Formule)) { + List<String> values = FormuleStorage.getCategories(); + equationModelType = (String) JOptionPane.showInputDialog(scriptUI, + 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(t("isisfish.message.new.filename")); + // user cancel + if (!StringUtils.isEmpty(fileName)) { + File scriptFile = newScript(equationModelTypePath + fileName, scriptType); + // creation successful + if (scriptFile != null) { + ScriptTreeModel model = scriptUI.getScriptTreeModel(); + model.fileAdded(scriptFile); + TreePath treePath = model.getTreePathFor(scriptFile); + scriptUI.getScriptTree().setSelectionPath(treePath); + } + } + } + } + + /** + * Creer un nouveau script, ici un script peut-etre un Script, un Simulator, + * un Export. + * + * @param fileName full filename + * @param scriptType le type que l'on souhaite Script, Simulator, ou Export. + * @return created file or {@code null} if any error happen + */ + protected File newScript(String fileName, ScriptMapping scriptType) { + + if (log.isDebugEnabled()) { + log.debug("newScript called [" + scriptType + "]"); + } + + File scriptFile = null; + + try { + // Vérifie qu'il n'y pas de caractères spéciaux. Seul les caractre + // de a à z (majuscule ou minuscule) ainsi que les nombres sont + // autorisés. + pour signifier qu'il doit y avoir + // au moins 1 caractère. + String realFilename; + String category; + + int pos = fileName.lastIndexOf('/'); + if (pos != -1) { + if (scriptType != ScriptMapping.Formule) { + // interdit pour le moment ? + String message = t("isisfish.error.invalid.file.name", + fileName); + Exception e = new RuntimeException(message); + 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 = t("isisfish.error.invalid.file.name", + fileName); + Exception e = new RuntimeException(message); + returnError(t("isisfish.error.script.create", fileName, e.getMessage()), e); + return null; + } + realFilename = fileName + .substring(fileName.lastIndexOf('/') + 1); + category = fileName.substring(0, fileName.lastIndexOf('/')); + } else { + realFilename = fileName; + category = ""; + } + if (!realFilename.matches("[A-Z0-9_][a-zA-Z0-9_]*")) { + String message = t("isisfish.error.invalid.file.name", fileName); + Exception e = new RuntimeException(message); + returnError(t("isisfish.error.script.create", fileName, e.getMessage()), e); + return null; + } + //TODO do test on category + CodeSourceStorage script = null; + switch (scriptType) { + case CommunityFormule: + script = FormuleStorage.createFormule(category, realFilename, + Language.JAVA); + break; + case CommunitySimulationPlan: + script = SimulationPlanStorage.createSimulationPlan(fileName, Location.COMMUNITY); + break; + case CommunityExport: + case CommunityExportStep: + 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; + case CommunityScript: + script = ScriptStorage.createScript(fileName, Location.COMMUNITY); + break; + case CommunitySimulator: + script = SimulatorStorage.createSimulator(fileName, Location.COMMUNITY); + break; + case CommunitySensitivity: + script = SensitivityAnalysisStorage.createSensitivityAnalysis(fileName, Location.COMMUNITY); + break; + case CommunitySensitivityExport: + script = SensitivityExportStorage + .createSensitivityExport(fileName, Location.COMMUNITY); + break; + default: + if (log.isErrorEnabled()) { + log.fatal("ScriptType unknown: " + scriptType); + } + } + + if (script.exists()) { + // Message d'erreur si le fichier existe en local. + String message = t("isisfish.error.file.already.exists", fileName); + Exception e = new RuntimeException(message); + returnError(t("isisfish.error.script.create", fileName, e + .getMessage()), e); + } + + String scriptTemplatePath = scriptType.getTemplatePath(); + + if (scriptTemplatePath != null) { + + if (log.isDebugEnabled()) { + log.debug("Parsing freemarker template located in " + + scriptTemplatePath); + } + + // get template + Template template = freemarkerConfiguration + .getTemplate(scriptTemplatePath); + + // context values + Map<String, Object> root = new HashMap<String, Object>(); + root.put("name", realFilename); + 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(); + script.setContent(out.toString()); + } else { + throw new IsisFishRuntimeException("There is no templatePath"); + } + + codeStorage = script; + scriptFile = script.getFile(); + } catch (Exception eee) { + returnError(t("isisfish.error.script.create", fileName, eee + .getMessage()), eee); + } + + return scriptFile; + } + + /** + * Write error in log and display exception to user. + * + * @param s message + * @param eee cause + */ + protected void returnError(String s, Exception eee) { + if (log.isErrorEnabled()) { + log.error(s, eee); + } + ErrorHelper.showErrorDialog(s, eee); + } + + /* + * @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent) + */ + @Override + public void valueChanged(TreeSelectionEvent e) { + if (e.getNewLeadSelectionPath() != null) { + Object selectedNode = e.getNewLeadSelectionPath().getLastPathComponent(); + if (selectedNode instanceof File && ((File)selectedNode).isFile()) { + File selectedFile = (File)selectedNode; + // load file into current action codeStorage + loadScript(selectedFile); + scriptUI.getEditor().open(selectedFile); + // force refresh + scriptUI.getEditor().repaint(); + scriptUI.getEditor().validate(); + + setButton(); + } + else { + scriptUI.getEditor().close(); + // force refresh + scriptUI.getEditor().repaint(); + scriptUI.getEditor().validate(); + + setButton(); + } + } + } + + /** + * Load specified script in current action. + * + * TODO can we change this ? + * + * @param file file to load + */ + public void loadScript(File file) { + ScriptMapping mapping = ScriptMapping.getMappingFor(file); + CodeSourceStorage script = null; + + try { + switch (mapping) { + case Formule: + case CommunityFormule: + String fullPath = file.getAbsolutePath(); + int lastIndexOf = fullPath.lastIndexOf('/'); + // in string .../aaa/bbb/ccc/ddd.java + // get ccc + String category = fullPath.substring(fullPath.lastIndexOf('/', + lastIndexOf - 1) + 1, lastIndexOf); + if (mapping.equals(ScriptMapping.Formule)) { + script = FormuleStorage.getFormule(category, file.getName()); + } else { + script = FormuleStorage.getCommunityFormule(category, file.getName()); + } + break; + 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; + case Export: + case ExportStep: + script = ExportStorage.getExport(file.getName(), Location.OFFICIAL); + break; + case Script: + script = ScriptStorage.getScript(file.getName(), Location.OFFICIAL); + break; + case Simulator: + script = SimulatorStorage.getSimulator(file.getName(), Location.OFFICIAL); + break; + case Sensitivity: + script = SensitivityAnalysisStorage.getSensitivityAnalysis(file.getName(), Location.OFFICIAL); + break; + 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; + case CommunitySimulationPlan: + script = SimulationPlanStorage.getSimulationPlan(file.getName(), Location.COMMUNITY); + break; + case CommunityExport: + case CommunityExportStep: + script = ExportStorage.getExport(file.getName(), Location.COMMUNITY); + break; + case CommunityScript: + script = ScriptStorage.getScript(file.getName(), Location.COMMUNITY); + break; + case CommunitySimulator: + script = SimulatorStorage.getSimulator(file.getName(), Location.COMMUNITY); + break; + case CommunitySensitivity: + script = SensitivityAnalysisStorage.getSensitivityAnalysis(file.getName(), Location.COMMUNITY); + break; + case CommunitySensitivityExport: + script = SensitivityExportStorage.getSensitivityExport(file.getName(), Location.COMMUNITY); + break; + default: + log.fatal("ScriptType unknown: " + file.getName()); + } + + //frame.setInfoText(t("isisfish.message.load.finished")); + } catch (Exception eee) { + returnError(t("isisfish.error.script.load", file.getAbsolutePath(), + eee.getMessage()), eee); + + } finally { + codeStorage = script; + } + } + + public boolean fileLoaded() { + return codeStorage != null; + } + + public boolean isJavaScript() { + return JavaSourceStorage.class.isInstance(codeStorage); + } + + /** + * Save current editor test in current loaded codeStorage. + */ + public void saveScript() { + if (log.isDebugEnabled()) { + log.debug("saveScript called on " + codeStorage.getName()); + } + + try { + // setContent() or scriptUI.getEditor().save() + // if setContent() only editor ask for t saving + scriptUI.getEditor().save(); + String content = scriptUI.getEditor().getText(); + codeStorage.setContent(content, false); + + // notify tree to refresh + ScriptTreeModel model = scriptUI.getScriptTreeModel(); + model.fileModified(codeStorage.getFile()); + } catch (Exception eee) { + returnError(t("isisfish.error.script.save", codeStorage.getFile(), + eee.getMessage()), eee); + } + setStatusMessage(t("isisfish.message.save.finished")); + } + + /** + * Save script, and display commit UI. + */ + public void commitScript() { + + if (log.isDebugEnabled()) { + log.debug("commitScript called for " + codeStorage.getName()); + } + + try { + // save script before commit + saveScript(); + + String msg = JOptionPane.showInputDialog(t("isisfish.message.script.commit", codeStorage.getName())); + if (msg == null) { + setStatusMessage(t("isisfish.message.commit.cancelled")); + } else { + codeStorage.commit(msg); + codeStorage.reload(); + setStatusMessage(t("isisfish.message.commit.finished")); + } + } catch (Exception ex) { + if (log.isErrorEnabled()) { + log.error("Error on script commit", ex); + } + + // if vcs can't write + ErrorHelper.showErrorDialog(ex.getMessage(), ex); + } + } + + /** + * Exporte le(s) script(s) sélectionnés dans l'arbre. + * <br>L'arbre doit avoir au moins un script de selectionnés + */ + public void exportScript() { + + TreePath[] selectedFilesPath = scriptUI.getScriptTree().getSelectionPaths(); + + // first step : acquire list of files required + int prefixLength = IsisFish.config.getDatabaseDirectory() + .getAbsolutePath().length() + 1; + List<String> listFiles = extractFiles(prefixLength, selectedFilesPath); + + } + + protected static List<String> extractFiles(int prefixLength, + TreePath[] selectedPaths) { + List<String> result = new ArrayList<String>(); + List<File> dirFound = new ArrayList<File>(); + List<File> dirWithFileFound = new ArrayList<File>(); + + for (TreePath selectedPath : selectedPaths) { + + DefaultMutableTreeNode node = (DefaultMutableTreeNode) selectedPath + .getPathComponent(1); + String moduleDisplayName = String.valueOf(node.getUserObject()); + File file = ScriptMapping.valueOf(moduleDisplayName).getModule(); + int nbPaths = selectedPath.getPathCount(); + if (nbPaths > 2) + for (int i = 2; i < nbPaths; i++) { + node = (DefaultMutableTreeNode) selectedPath + .getPathComponent(i); + String pathName = String.valueOf(node.getUserObject()); + file = new File(file, pathName); + } + if (file.isFile()) { + File parentFile = file.getParentFile(); + if (!dirFound.contains(parentFile)) { + dirFound.add(parentFile); + } + dirWithFileFound.add(parentFile); + result.add(file.getAbsolutePath().substring(prefixLength)); + } else { + // mark the file + dirFound.add(file); + } + } + + // keep only user selected directories + dirFound.removeAll(dirWithFileFound); + dirWithFileFound.clear(); + + if (!dirFound.isEmpty()) { + List<File> listF = new ArrayList<File>(); + // there is some directories selected by user + for (File dir : dirFound) { + FileFilter filter = new FileFilter() { + FileFilter excludeFilter = getScriptFileFilter(); + + public boolean accept(File pathname) { + return !excludeFilter.accept(pathname); + } + }; + listF.addAll(FileUtil.getFilteredElements(dir, filter, true)); + } + for (File file : listF) + result.add(file.getAbsolutePath().substring(prefixLength)); + listF.clear(); + } + dirFound.clear(); + return result; + } + + /** + * Cut selection in current editor. + */ + public void cut() { + scriptUI.getEditor().cut(); + } + + /** + * Copy selection in current editor. + */ + public void copy() { + scriptUI.getEditor().copy(); + } + + /** + * Paste clipboard content in editor. + */ + public void paste() { + scriptUI.getEditor().paste(); + } + + protected static FileFilter scriptFileFilter; + + public static FileFilter getScriptFileFilter() { + if (scriptFileFilter == null) { + scriptFileFilter = new ScriptFileFilter(IsisFish.vcs); + } + return scriptFileFilter; + } + + /** + * Check script content. + * + * @return compilation success flag + */ + public boolean checkScript() { + + boolean check = false; + + // can't compile formule + if (codeStorage instanceof FormuleStorage) { + return false; + } + + if (log.isDebugEnabled()) { + log.debug("checkScript called"); + } + // save script before compile + saveScript(); + + JavaSourceStorage javaCode = (JavaSourceStorage) codeStorage; + StringWriter result = new StringWriter(); + PrintWriter out = new PrintWriter(result); + try { + int compileResult = javaCode.compile(false, out); + + if (compileResult == 0) { + check = true; + } + } catch (Exception eee) { + eee.printStackTrace(out); + } + out.flush(); + + if (check) { + scriptUI.getActionLogArea().setText( + t("isisfish.script.compilation.ok", result.toString())); + scriptUI.getActionLogArea().setBackground(COLOR_SUCCESS); + } else { + scriptUI.getActionLogArea().setText( + t("isisfish.script.compilation.failed", result + .toString())); + scriptUI.getActionLogArea().setBackground(COLOR_FAILURE); + } + + setStatusMessage(t("isisfish.message.check.finished")); + return check; + } + + /** + * Check all scripts. + */ + public void checkAllScripts() { + new SwingWorker<Void, Void>() { + public Void doInBackground() { + checkAllScripts(); + return null; + } + }.execute(); + } + + protected void checkAllScriptsAsync() { + + setStatusMessage(t("isisfish.message.check.inprogress"), true); + + boolean allSuccess = true; + + // reste previous state + scriptUI.getActionLogArea().setBackground(null); + scriptUI.getActionLogArea().setText(""); + + for (ScriptMapping scriptMapping : ScriptMapping.values()) { + // normalement ne match pas les formules + // le cas est différent pour les formules + // 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(t("isisfish.script.compilingfile", javaFile)); + + StringWriter result = new StringWriter(); + PrintWriter out = new PrintWriter(result); + int compileResult = CompileHelper.compile(IsisFish.config.getDatabaseDirectory(), javaFile, IsisFish.config.getCompileDirectory(), out); + out.flush(); + + if (compileResult == 0) { + scriptUI.getActionLogArea().append(t("isisfish.common.ok") + "\n"); + } + else { + scriptUI.getActionLogArea().append(t("isisfish.common.error") + ":\n"); + scriptUI.getActionLogArea().append(result.toString() + "\n"); + scriptUI.getActionLogArea().setBackground(COLOR_FAILURE); + allSuccess = false; + } + + // scroll down + scriptUI.getActionLogArea().setCaretPosition(scriptUI.getActionLogArea().getText().length()); + } + } + + // set final color + if (allSuccess) { + scriptUI.getActionLogArea().setBackground(COLOR_SUCCESS); + } + + setStatusMessage(t("isisfish.message.check.finished")); + } + + /** + * Call main method in current cod storage code. + * Check script before call. + */ + public void evaluateScript() { + + if (log.isDebugEnabled()) { + log.debug("evaluateScript called"); + } + + try { + if (checkScript()) { + // reset area color + scriptUI.getActionLogArea().setBackground(null); + + JavaSourceStorage javaCode = (JavaSourceStorage) codeStorage; + ByteArrayOutputStream result = new ByteArrayOutputStream(); + PrintStream out = new PrintStream(result); + PrintStream err = new PrintStream(result); + PrintStream oldOut = System.out; + PrintStream oldErr = System.err; + System.setOut(out); + System.setErr(err); + Class<?> clazz = javaCode.getCodeClass(); + Method main = clazz.getMethod("main", String[].class); + //noinspection RedundantArrayCreation + main.invoke(null, new Object[] { new String[] {} }); + System.setOut(oldOut); + System.setErr(oldErr); + scriptUI.getActionLogArea().setText(result.toString()); + } + } catch (Exception ex) { + if (log.isDebugEnabled()) { + log.debug("Error on script evaluation", ex); + } + ByteArrayOutputStream result = new ByteArrayOutputStream(); + PrintStream out = new PrintStream(result); + ex.printStackTrace(out); + scriptUI.getActionLogArea().setText(result.toString()); + } + setStatusMessage(t("isisfish.message.evaluation.finished")); + } + + /** + * Copy a single file to destination directory. + * + * @param src file to copy + * @param path path of file to copy + * @param suffix file suffix + * @throws IOException if copy fail + */ + protected void backup(File src, String path, String suffix) + throws IOException { + + } + + /** + * Scan archive for script, and return an array of new files and conflict files. + * + * @param source archive file + * @param root database directory + * @return an array [newFiles, conflictFiles] + */ + protected static List<String>[] scanZip(File source, File root) { + + List<String> overwrittenFiles = new ArrayList<String>(); + List<String> newFiles = new ArrayList<String>(); + + // ontain list of relative paths (to add or overwrite) + try { + ZipUtil.scan(source, root, newFiles, overwrittenFiles, + getScriptFileFilter(), null, null); + } catch (IOException e) { + log.error("Can't scan zip (" + source + ")", e); + throw new RuntimeException(e); + } + + return new List[] { newFiles, overwrittenFiles }; + } + + /** + * Delete a script + * + * @param deleteRemote {@code true} to remove in vcs too + */ + public void deleteScript(boolean deleteRemote) { + + if (log.isDebugEnabled()) { + log.debug("DeleteScript called"); + } + + String name = codeStorage.getName(); + 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 + scriptUI.getEditor().close(); + + try { + // TODO change this, need to be called before + // effective deletion + scriptUI.getScriptTreeModel().fileDeleted(codeStorage.getFile()); + + //TODO desactive editor + //TODO Review this because after delete fi file saw previously + //TODO modified, it ask if we want to save, and then we have + //TODO again the file in panel but not in tree panel ? + codeStorage.delete(deleteRemote); + if (codeStorage.getFile().exists()) { + ErrorHelper.showErrorDialog(t("isisfish.error.script.delete", codeStorage + .getFile())); + } + } catch (Exception eee) { + returnError(t("isisfish.error.script.delete", + codeStorage == null ? null : codeStorage.getFile(), eee + .getMessage()), eee); + } + setStatusMessage(t("isisfish.message.delete.finished")); + } else { + setStatusMessage(t("isisfish.message.delete.canceled")); + } + } + + /** + * Show diff between selected files and files server version. + */ + public void diffScript() { + + if (log.isDebugEnabled()) { + log.debug("Method diffScript called on " + codeStorage.getFile()); + } + + try { + String result = null; + if (IsisFish.vcs.isOnRemote(codeStorage.getFile())) { + result = IsisFish.vcs.getDiff(codeStorage.getFile()); + } else { + result = "File not on remote"; + } + scriptUI.getActionLogArea().setText(result); + } catch (VCSException e) { + if (log.isErrorEnabled()) { + log.error("Can't get diff", e); + } + ErrorHelper.showErrorDialog(t("isisfish.vcs.vcssvn.diff.error"), e); + } + } + + /** enum to encapsulate a script module */ + protected enum ScriptMapping { + + Export( + ExportStorage.getExportDirectory(), + ExportStorage.EXPORT_TEMPLATE, true), + ExportStep( + ExportStorage.getExportDirectory(), + ExportStorage.EXPORT_STEP_TEMPLATE, true), + 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), + Sensitivity( + SensitivityAnalysisStorage.getSensitivityAnalysisDirectory(), + SensitivityAnalysisStorage.SENSITIVITY_ANALYSIS_TEMPLATE, true), + SensitivityExport( + SensitivityExportStorage.getSensitivityExportDirectory(), + SensitivityExportStorage.SENSITIVITY_EXPORT_TEMPLATE, true), + SimulationPlan( + SimulationPlanStorage.getSimulationPlanDirectory(), + SimulationPlanStorage.SIMULATION_PLAN_TEMPLATE, true), + Simulator( + SimulatorStorage.getSimulatorDirectory(), + SimulatorStorage.SIMULATOR_TEMPLATE, true), + Formule( + FormuleStorage.getFormuleDirectory(), + FormuleStorage.FORMULE_TEMPLATE, true), + + CommunityExport( + ExportStorage.getCommunityExportDirectory(), + ExportStorage.EXPORT_TEMPLATE), + CommunityExportStep( + ExportStorage.getCommunityExportDirectory(), + ExportStorage.EXPORT_STEP_TEMPLATE), + CommunityObjective( + ObjectiveStorage.getCommunityObjectiveDirectory(), + ObjectiveStorage.OBJECTIVE_TEMPLATE, true), + CommunityOptimization( + OptimizationStorage.getCommunityOptimizationDirectory(), + OptimizationStorage.OPTIMIZATION_TEMPLATE, true), + CommunityRule( + RuleStorage.getCommunityRuleDirectory(), + RuleStorage.RULE_TEMPLATE), + CommunityScript( + ScriptStorage.getCommunityScriptDirectory(), + ScriptStorage.SCRIPT_TEMPLATE), + CommunitySensitivity( + SensitivityAnalysisStorage.getCommunitySensitivityAnalysisDirectory(), + SensitivityAnalysisStorage.SENSITIVITY_ANALYSIS_TEMPLATE), + CommunitySensitivityExport( + SensitivityExportStorage.getCommunitySensitivityExportDirectory(), + SensitivityExportStorage.SENSITIVITY_EXPORT_TEMPLATE), + CommunitySimulationPlan( + SimulationPlanStorage.getCommunitySimulationPlanDirectory(), + SimulationPlanStorage.SIMULATION_PLAN_TEMPLATE), + CommunitySimulator( + SimulatorStorage.getCommunitySimulatorDirectory(), + SimulatorStorage.SIMULATOR_TEMPLATE), + CommunityFormule( + FormuleStorage.getCommunityFormuleDirectory(), + FormuleStorage.FORMULE_TEMPLATE); + + protected File module; + protected String templatePath; + protected boolean officialVCS; + + private ScriptMapping(File module, String templatePath) { + this(module, templatePath, false); + } + + private ScriptMapping(File module, String templatePath, boolean officialVCS) { + this.module = module; + this.templatePath = templatePath; + this.officialVCS = officialVCS; + } + + /** + * Get script type for script path. + * + * @param file file to get type + * @return ScriptMapping type + */ + public static ScriptMapping getMappingFor(File file) { + + ScriptMapping result = null; + + // test if path starts with type begin path + + // don't forget last / for distinction begin + // "sensitivity" and "sensitivityexport" + for (ScriptMapping mapping : ScriptMapping.values()) { + if (file.getAbsolutePath().startsWith(mapping.getModule().getAbsolutePath() + File.separator)) { + result = mapping; + } + } + + return result; + } + + public File getModule() { + return module; + } + + public String getTemplatePath() { + return templatePath; + } + + public boolean isOfficialVCS() { + return officialVCS; + } + } + + /** + * Generate javadoc and display output in UI. + */ + public void generateScriptJavadoc() { + setStatusMessage(t("isisfish.script.menu.javadocgenerating", + IsisFish.config.getJavadocDirectory()), true); + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + File rootDatabase = IsisFish.config.getDatabaseDirectory(); + File javadocDirectory = IsisFish.config.getJavadocDirectory(); + + StringWriter output = new StringWriter(); + PrintWriter out = new PrintWriter(output); + int ok = JavadocHelper.generateJavadoc(rootDatabase, + javadocDirectory, out); + + if (ok == 0) { + scriptUI.getActionLogArea().setText( + t("isisfish.script.javadoc.ok", output.toString())); + // vert leger + scriptUI.getActionLogArea().setBackground(COLOR_SUCCESS); + } else { + scriptUI.getActionLogArea().setText( + t("isisfish.script.compilation.failed", output + .toString())); + // rouge leger + scriptUI.getActionLogArea().setBackground(COLOR_FAILURE); + } + + setStatusMessage(t("isisfish.script.menu.javadocgenerated", + IsisFish.config.getJavadocDirectory())); + } + }); + } + + /** + * Open a browser displaying javadoc. + */ + public void showScriptJavadoc() { + try { + // in faut ouvrir l'index, sinon, ca ouvre + // un explorateur de fichier + File indexFile = new File(IsisFish.config.getJavadocDirectory(), + "index.html"); + + URI uri = indexFile.toURI(); + Desktop.getDesktop().browse(uri); + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("Can't show script javadocs", e); + } + } + } + + /* + * @see javax.swing.event.CaretListener#caretUpdate(javax.swing.event.CaretEvent) + */ + @Override + public void caretUpdate(CaretEvent e) { + // selection pas vide si dot = mark + scriptUI.setTextSelected(e.getDot() != e.getMark()); + } + + /** + * Move files. + * (called by drag and drop handler). + * + * @param directory directory to moves files to + * @param filesToMove files to move to directory + */ + public void moveFiles(File directory, Collection<File> filesToMove) { + + ScriptTreeModel model = scriptUI.getScriptTreeModel(); + for (File fileToMove : filesToMove) { + model.fileDeleted(fileToMove); + File destFile = new File(directory, fileToMove.getName()); + try { + FileUtils.moveFile(fileToMove, destFile); + } catch (IOException ex) { + throw new IsisFishRuntimeException("Can't move file", ex); + } + model.fileAdded(destFile); + } + } +} Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptTypesComboModel.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptTypesComboModel.java 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptTypesComboModel.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -30,7 +30,7 @@ import javax.swing.DefaultComboBoxModel; -import fr.ifremer.isisfish.ui.script.ScriptAction.ScriptMapping; +import fr.ifremer.isisfish.ui.script.ScriptHandler.ScriptMapping; /** * Model pour la liste des scripts disponibles. Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptUI.jaxx 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptUI.jaxx 2015-05-21 13:11:05 UTC (rev 4231) @@ -24,16 +24,16 @@ --> <JPanel layout='{new BorderLayout()}'> - <ScriptAction id="scriptAction" javaBean="new ScriptAction(this)" /> + <ScriptHandler id="handler" constructorParams="this" /> <import> - javax.swing.SwingWorker java.awt.Font </import> + <script><![CDATA[ - protected void $afterCompleteSetup() { - getScriptAction().postInit(); - } + protected void $afterCompleteSetup() { + handler.afterInit(); + } ]]></script> <Boolean id="fileSelected" javaBean="false" /> @@ -46,63 +46,63 @@ <JMenu id="scriptTxtFile" text="isisfish.script.menu.file"> <JMenu id="scriptNewMenu" text="isisfish.script.menu.new" icon="script.png"> <JMenuItem id="miNewScript" text="isisfish.script.menu.txtNewScript" - onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunityScript)' icon="script.png" /> + onActionPerformed='handler.newScript(ScriptHandler.ScriptMapping.CommunityScript)' icon="script.png" /> <JMenuItem id="miNewSimulator" text="isisfish.script.menu.txtNewSimulator" - onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunitySimulator)' icon="script.png" /> + onActionPerformed='handler.newScript(ScriptHandler.ScriptMapping.CommunitySimulator)' icon="script.png" /> <JMenuItem id="miNewExport" text="isisfish.script.menu.txtNewExport" - onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunityExport)' icon="script.png" /> + onActionPerformed='handler.newScript(ScriptHandler.ScriptMapping.CommunityExport)' icon="script.png" /> <JMenuItem id="miNewExportStep" text="isisfish.script.menu.txtNewExportStep" - onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunityExportStep)' icon="script.png" /> + onActionPerformed='handler.newScript(ScriptHandler.ScriptMapping.CommunityExportStep)' icon="script.png" /> <JMenuItem id="miNewRule" text="isisfish.script.menu.txtNewRule" - onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunityRule)' icon="script.png" /> + onActionPerformed='handler.newScript(ScriptHandler.ScriptMapping.CommunityRule)' icon="script.png" /> <JMenuItem id="miNewSImulationPlan" text="isisfish.script.menu.txtNewSimulationPlan" - onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunitySimulationPlan)' icon="script.png" /> + onActionPerformed='handler.newScript(ScriptHandler.ScriptMapping.CommunitySimulationPlan)' icon="script.png" /> <JMenuItem id="miNewSensitivity" text="isisfish.script.menu.txtNewSensitivity" - onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunitySensitivity)' icon="script.png" /> + onActionPerformed='handler.newScript(ScriptHandler.ScriptMapping.CommunitySensitivity)' icon="script.png" /> <JMenuItem id="miNewSensitivityExport" text="isisfish.script.menu.txtNewSensitivityExport" - onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunitySensitivityExport)' icon="script.png" /> + onActionPerformed='handler.newScript(ScriptHandler.ScriptMapping.CommunitySensitivityExport)' icon="script.png" /> <JMenuItem text="isisfish.script.menu.txtNewObjective" - onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunityObjective)' icon="script.png" /> + onActionPerformed='handler.newScript(ScriptHandler.ScriptMapping.CommunityObjective)' icon="script.png" /> <JMenuItem text="isisfish.script.menu.txtNewOptimization" - onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunityOptimization)' icon="script.png" /> + onActionPerformed='handler.newScript(ScriptHandler.ScriptMapping.CommunityOptimization)' icon="script.png" /> <JMenuItem id="miNewEquationModel" text="isisfish.script.menu.txtNewEquationModel" - onActionPerformed='getScriptAction().newScript(ScriptAction.ScriptMapping.CommunityFormule)' icon="script.png" /> + onActionPerformed='handler.newScript(ScriptHandler.ScriptMapping.CommunityFormule)' icon="script.png" /> </JMenu> <JMenuItem id="miSave" text="isisfish.script.menu.save" - onActionPerformed="getScriptAction().saveScript()" icon="script_save.png" enabled='{isSingleFileSelected()}' /> + onActionPerformed="handler.saveScript()" icon="script_save.png" enabled='{isSingleFileSelected()}' /> <JSeparator/> <JMenuItem id="miDelete" text="isisfish.script.menu.deleteLocaly" - onActionPerformed='getScriptAction().deleteScript(false)' icon="script_delete.png" enabled='{isSingleFileSelected()}' /> + onActionPerformed='handler.deleteScript(false)' icon="script_delete.png" enabled='{isSingleFileSelected()}' /> </JMenu> <JMenu id="scriptTxtEdit" text="isisfish.script.menu.edit"> <JMenuItem id="miCut" text="isisfish.script.menu.cut" - onActionPerformed="getScriptAction().cut()" icon="cut.png" enabled='{isTextSelected()}' /> + onActionPerformed="handler.cut()" icon="cut.png" enabled='{isTextSelected()}' /> <JMenuItem id="miCopy" text="isisfish.script.menu.copy" - onActionPerformed="getScriptAction().copy()" icon="page_copy.png" enabled='{isTextSelected()}' /> + onActionPerformed="handler.copy()" icon="page_copy.png" enabled='{isTextSelected()}' /> <JMenuItem id="miPaste" text="isisfish.script.menu.paste" - onActionPerformed="getScriptAction().paste()" icon="page_paste.png" enabled='{isSingleFileSelected()}' /> + onActionPerformed="handler.paste()" icon="page_paste.png" enabled='{isSingleFileSelected()}' /> </JMenu> <JMenu id="scriptTxtVCS" text="isisfish.script.menu.txtVCS"> <JMenuItem id="miCommitVCS" text="isisfish.script.menu.commit" icon="database_go.png" - onActionPerformed="getScriptAction().commitScript()" enabled='{isSingleFileSelected()}' /> + onActionPerformed="handler.commitScript()" enabled='{isSingleFileSelected()}' /> <JMenuItem id="miDiffVCS" text="isisfish.script.menu.diff" accelerator="mnDiffVCS" - onActionPerformed="getScriptAction().diffScript()" enabled='{isSingleFileSelected()}' /> + onActionPerformed="handler.diffScript()" enabled='{isSingleFileSelected()}' /> <JSeparator/> <JMenuItem id="miDeleteVCS" text="isisfish.script.menu.deleteLocalyServer" - onActionPerformed='getScriptAction().deleteScript(true)' icon="database_delete.png"/> + onActionPerformed='handler.deleteScript(true)' icon="database_delete.png"/> </JMenu> <JMenu id="scriptTxtCode" text="isisfish.script.menu.code"> <JMenuItem id="miCheckSyntax" text="isisfish.script.menu.checkSyntax" icon="script_code_red.png" - onActionPerformed="getScriptAction().checkScript()" enabled='{isJavaFileSelected()}' /> + onActionPerformed="handler.checkScript()" enabled='{isJavaFileSelected()}' /> <JMenuItem id="miCheckAllSyntax" text="isisfish.script.menu.checkAllSyntax" icon="script_code_red.png" - onActionPerformed="new SwingWorker<Void, Void>(){public Void doInBackground(){getScriptAction().checkAllScripts();return null;}}.execute()" /> + onActionPerformed="handler.checkAllScripts()" /> <JMenuItem id="miEvaluate" text="isisfish.script.menu.evaluate" icon="script_gear.png" - onActionPerformed="getScriptAction().evaluateScript()" enabled='{isJavaFileSelected()}' /> + onActionPerformed="handler.evaluateScript()" enabled='{isJavaFileSelected()}' /> <JSeparator/> <JMenuItem id="miGenerateJavadoc" text="isisfish.script.menu.javadocgenerate" - onActionPerformed="getScriptAction().generateScriptJavadoc()"/> + onActionPerformed="handler.generateScriptJavadoc()"/> <JMenuItem id="miShowJavadoc" text="isisfish.script.menu.javadocshow" - onActionPerformed="getScriptAction().showScriptJavadoc()"/> + onActionPerformed="handler.showScriptJavadoc()"/> </JMenu> </JMenuBar> @@ -110,23 +110,23 @@ <JPanel layout='{new BorderLayout()}' constraints='BorderLayout.CENTER'> <JPanel id="buttonBar" layout='{new GridLayout()}' constraints='BorderLayout.NORTH'> <JButton id="buttonScriptNew" text="isisfish.script.newplus" toolTipText='isisfish.script.new.tooltip' - onMousePressed='getScriptAction().newScript(this, event)' icon="script.png" /> + onMousePressed='handler.newScript(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" /> + enabled='{isSingleFileSelected()}' onActionPerformed='handler.saveScript()' icon="script_save.png" /> <JButton id="buttonScriptExport" text="isisfish.script.export" toolTipText="isisfish.script.export.tooltip" enabled='false' - onActionPerformed='getScriptAction().exportScript()' icon="page_white_compressed.png" /> + onActionPerformed='handler.exportScript()' icon="page_white_compressed.png" /> <JButton id="buttonScriptCommit" text="isisfish.script.commit" toolTipText="isisfish.script.commit.tooltip" enabled='{isSingleFileSelected()}' - onActionPerformed='getScriptAction().commitScript()' icon="database_go.png" /> + onActionPerformed='handler.commitScript()' icon="database_go.png" /> <JButton id="buttonScriptCut" text="isisfish.script.cut" toolTipText="isisfish.script.cut.tooltip" enabled='{isTextSelected()}' - onActionPerformed='getScriptAction().cut()' icon="cut.png" /> + onActionPerformed='handler.cut()' icon="cut.png" /> <JButton id="buttonScriptCopy" text="isisfish.script.copy" toolTipText="isisfish.script.copy.tooltip" enabled='{isTextSelected()}' - onActionPerformed='getScriptAction().copy()' icon="page_copy.png" /> + onActionPerformed='handler.copy()' icon="page_copy.png" /> <JButton id="buttonScriptPaste" text="isisfish.script.paste" toolTipText="isisfish.script.paste.tooltip" enabled='{isSingleFileSelected()}' - onActionPerformed='getScriptAction().paste()' icon="page_paste.png" /> + onActionPerformed='handler.paste()' icon="page_paste.png" /> <JButton id="buttonScriptCheck" text="isisfish.script.check" toolTipText="isisfish.script.check.tooltip" enabled='{isJavaFileSelected()}' - onActionPerformed='getScriptAction().checkScript()' icon="script_code_red.png" /> + onActionPerformed='handler.checkScript()' icon="script_code_red.png" /> <JButton id="buttonScriptEval" text="isisfish.script.evaluate" toolTipText="isisfish.script.evaluate.tooltip" enabled='{isJavaFileSelected()}' - onActionPerformed='getScriptAction().evaluateScript()' icon="script_gear.png" /> + onActionPerformed='handler.evaluateScript()' icon="script_gear.png" /> </JPanel> <JSplitPane oneTouchExpandable="true" dividerLocation="250" orientation="HORIZONTAL" constraints='BorderLayout.CENTER'> <JScrollPane> 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 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/script/model/ScriptTransferHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -151,7 +151,7 @@ if (directory != null) { Object myObject = transferable.getTransferData(ScriptTranferable.myData); List<File> movedFiles = (List<File>) myObject; - scriptUI.getScriptAction().moveFiles(directory, movedFiles); + scriptUI.getHandler().moveFiles(directory, movedFiles); } } catch (IOException e) { if (log.isErrorEnabled()) { Added: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityContext.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityContext.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityContext.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -0,0 +1,51 @@ +/* + * #%L + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2015 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; + +import fr.ifremer.isisfish.ui.WelcomeSaveVerifier; +import fr.ifremer.isisfish.ui.simulator.SimulAction; +import jaxx.runtime.JAXXContext; +import jaxx.runtime.context.JAXXInitialContext; + +/** + * Ce contexte regroupe les élements qui servent à une hierachie d'interfaces Sensitivity. + * + * @author Eric Chatellier + */ +public class SensitivityContext extends JAXXInitialContext { + + public SensitivityContext(JAXXContext parent) { + setParentContext(parent); + + // add save verifier for this hierarchy + SensitivitySaveVerifier sensitivitySaveVerifier = new SensitivitySaveVerifier(); + add(sensitivitySaveVerifier); + + // this verifier is linked to global verifier + WelcomeSaveVerifier welcomeSaveVerifier = getContextValue(WelcomeSaveVerifier.class); + welcomeSaveVerifier.addSaveVerifier(sensitivitySaveVerifier); + + // FIXME remove this + add(new SimulAction()); + } +} Property changes on: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityContext.java ___________________________________________________________________ Added: svn:eol-style + native Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -32,12 +32,10 @@ import java.io.File; import java.util.List; -import javax.swing.JComponent; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPopupMenu; 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; @@ -47,9 +45,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.math.matrix.gui.MatrixPanelEditor; import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaEntityContextable; import org.nuiton.util.FileUtil; @@ -59,18 +55,14 @@ import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; import fr.ifremer.isisfish.simulator.sensitivity.Factor; import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup; -import fr.ifremer.isisfish.types.Month; -import fr.ifremer.isisfish.types.TimeStep; +import fr.ifremer.isisfish.ui.NavigationHandler; import fr.ifremer.isisfish.ui.input.InputContentUI; -import fr.ifremer.isisfish.ui.input.InputHandler; -import fr.ifremer.isisfish.ui.input.equation.InputOneEquationUI; import fr.ifremer.isisfish.ui.input.tree.FisheryDataProvider; 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; /** @@ -82,7 +74,7 @@ * Last update : $Date$ * By : $Author$ */ -public class SensitivityInputHandler extends InputHandler { +public class SensitivityInputHandler extends NavigationHandler { /** Class logger. */ private static Log log = LogFactory.getLog(SensitivityInputHandler.class); @@ -313,37 +305,13 @@ } } - /** - * Return if type can be defined as a factor. - * - * @param type type - * @return {@code true} if type can be defined as a factor - */ - public boolean canBeFactor(Class type) { - boolean result = false; - - if (TopiaEntity.class.isAssignableFrom(type)) { - result = true; - } else if (double.class.isAssignableFrom(type)) { - result = true; - } else if (Number.class.isAssignableFrom(type)) { - result = true; - } else if (TimeStep.class.isAssignableFrom(type)) { - result = true; - } else if (Month.class.isAssignableFrom(type)) { - result = true; - } - - return result; - } - - /** + /* * Return value in swing component that could be next used into factor * for discrete factor values. * * @param component component * @return factor value - */ + * protected Object getComponentValue(JComponent component) { Object result = null; if (component instanceof JTextComponent) { @@ -360,7 +328,7 @@ } return result; - } + }*/ /** * Export factors list to xml mexico file. Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySaveVerifier.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySaveVerifier.java 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySaveVerifier.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -23,8 +23,6 @@ package fr.ifremer.isisfish.ui.sensitivity; -import javax.swing.JOptionPane; - import fr.ifremer.isisfish.ui.input.InputSaveVerifier; /** @@ -47,7 +45,7 @@ // qui sont passés ou des modifications d'equation // on ne doit pas demander à l'utilisateur de sauver // ou meme carrement sauver les modification - return JOptionPane.YES_OPTION; + return YES_OPTION; } } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx 2015-05-21 13:11:05 UTC (rev 4231) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric + Copyright (C) 2009 - 2015 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 @@ -46,8 +46,8 @@ @Override public void refresh() { - paramsUI.refresh(); - advancedParamsUI.refresh(); + paramsUI.getHandler().refresh(); + advancedParamsUI.getHandler().refresh(); } @Override @@ -75,13 +75,14 @@ sensitivityTabUI.setFactorModel(); } ]]></script> + <JTabbedPane id="bodyTabbedPane"> <tab title='isisfish.params.title'> <fr.ifremer.isisfish.ui.simulator.ParamsUI id='paramsUI' sensitivity='true' regionStorage="{getRegionStorage()}" constructorParams='new JAXXInitialContext().add(new SensitivitySaveVerifier()).add("SimulationUI", this).add(this)' /> </tab> <tab title='isisfish.sensitivity.title' enabled="false"> - <fr.ifremer.isisfish.ui.sensitivity.SensitivityTabUI id="sensitivityTabUI" + <SensitivityTabUI id="sensitivityTabUI" constructorParams='new JAXXInitialContext().add(new SensitivitySaveVerifier()).add("SimulationUI", this).add(this)' /> </tab> <tab title='isisfish.sensitivityChooser.title' enabled="false"> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -40,8 +40,6 @@ import javax.swing.JTextField; import javax.swing.text.JTextComponent; -import jaxx.runtime.context.JAXXInitialContext; - import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; Added: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/AdvancedParamsHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/AdvancedParamsHandler.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/AdvancedParamsHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -0,0 +1,144 @@ +/* + * #%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 static org.nuiton.i18n.I18n.t; + +import java.util.Iterator; +import java.util.Map; + +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.table.DefaultTableModel; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * AdvancedParams UI handler. + * + * @author Eric Chatellier + */ +public class AdvancedParamsHandler extends SimulationTabHandler { + + /** Class logger. */ + private static final Log log = LogFactory.getLog(AdvancedParamsHandler.class); + + protected AdvancedParamsUI tabUI; + + protected AdvancedParamsHandler(AdvancedParamsUI tabUI) { + super(tabUI); + this.tabUI = tabUI; + } + + protected void afterInit() { + /** + * Listener to enable/disable remove button. + */ + tabUI.tableTagValues.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + tabUI.setRemove(tabUI.tableTagValues.getSelectedRow() != -1); + } + }); + + refresh(); + } + + public void refresh() { + tabUI.fieldSimulAdvParamsSimulatorSelect.setSelectedItem(tabUI.getContextValue(SimulAction.class).getSimulationParameter().getSimulatorName()); + tabUI.fieldSimulationStatistique.setSelected(tabUI.getContextValue(SimulAction.class).getSimulationParameter().getUseStatistic()); + tabUI.fieldSimulationCache.setSelected(tabUI.getContextValue(SimulAction.class).getSimulationParameter().getUseCache()); + + tabUI.fieldSimulAdvParamsSimulLoggerError.setSelected(tabUI.getContextValue(SimulAction.class).getSimulationParameter().isSimulErrorLevel()); + tabUI.fieldSimulAdvParamsSimulLoggerWarn.setSelected(tabUI.getContextValue(SimulAction.class).getSimulationParameter().isSimulWarnLevel()); + tabUI.fieldSimulAdvParamsSimulLoggerInfo.setSelected(tabUI.getContextValue(SimulAction.class).getSimulationParameter().isSimulInfoLevel()); + tabUI.fieldSimulAdvParamsSimulLoggerDebug.setSelected(tabUI.getContextValue(SimulAction.class).getSimulationParameter().isSimulDebugLevel()); + + tabUI.fieldSimulAdvParamsScriptLoggerError.setSelected(tabUI.getContextValue(SimulAction.class).getSimulationParameter().isScriptErrorLevel()); + tabUI.fieldSimulAdvParamsScriptLoggerWarn.setSelected(tabUI.getContextValue(SimulAction.class).getSimulationParameter().isScriptWarnLevel()); + tabUI.fieldSimulAdvParamsScriptLoggerInfo.setSelected(tabUI.getContextValue(SimulAction.class).getSimulationParameter().isScriptInfoLevel()); + tabUI.fieldSimulAdvParamsScriptLoggerDebug.setSelected(tabUI.getContextValue(SimulAction.class).getSimulationParameter().isScriptDebugLevel()); + + tabUI.fieldSimulAdvParamsLibLoggerError.setSelected(tabUI.getContextValue(SimulAction.class).getSimulationParameter().isLibErrorLevel()); + tabUI.fieldSimulAdvParamsLibLoggerWarn.setSelected(tabUI.getContextValue(SimulAction.class).getSimulationParameter().isLibWarnLevel()); + tabUI.fieldSimulAdvParamsLibLoggerInfo.setSelected(tabUI.getContextValue(SimulAction.class).getSimulationParameter().isLibInfoLevel()); + tabUI.fieldSimulAdvParamsLibLoggerDebug.setSelected(tabUI.getContextValue(SimulAction.class).getSimulationParameter().isLibDebugLevel()); + + setTableTagValues(); + } + + protected void addTagValue() { + tabUI.getContextValue(SimulAction.class).addTagValue(tabUI.fieldTag.getText(), tabUI.fieldValue.getText()); + setTableTagValues(); + valueChanged(true); + } + + protected void removeTagValue() { + tabUI.getContextValue(SimulAction.class).removeTagValue(tabUI.tableTagValues.getValueAt(tabUI.tableTagValues.getSelectedRow(),0).toString()); + setTableTagValues(); + valueChanged(true); + } + + protected void saveTagValues() { + if (tabUI.fieldSimulAdvParamsSimulatorSelect.getSelectedIndex() != -1) { + tabUI.getContextValue(SimulAction.class).saveTagValue(tabUI.fieldSimulAdvParamsSimulatorSelect.getSelectedItem().toString()); + } + valueChanged(false); + } + + protected void setSimulatorName() { + if (tabUI.fieldSimulAdvParamsSimulatorSelect.getSelectedIndex() != -1) { + tabUI.getContextValue(SimulAction.class).getSimulationParameter().setSimulatorName(tabUI.fieldSimulAdvParamsSimulatorSelect.getSelectedItem().toString()); + valueChanged(true); + } + } + + protected void setTableTagValues() { + Map<String, String> tagValues = tabUI.getContextValue(SimulAction.class).getSimulationParameter().getTagValue(); + + // TODO make a table model for it + String columnName[] = { t("isisfish.common.tag"), t("isisfish.common.value")}; + if (tagValues != null) { + DefaultTableModel model = new DefaultTableModel(columnName, tagValues.size()) { + @Override + public boolean isCellEditable(int row, int column) { + return false; + } + }; + //Set<Entry<String, String>> set = tagValues.entrySet(); + int row = 0; + for (Iterator<String> it = tagValues.keySet().iterator(); it.hasNext();) { + String name = it.next(); + model.setValueAt(name, row, 0); + model.setValueAt(tagValues.get(name), row, 1); + row++; + } + tabUI.tableTagValues.setModel(model); + } + } + + protected void valueChanged(boolean b) { + tabUI.setChanged(b); + } +} Property changes on: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/AdvancedParamsHandler.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/AdvancedParamsUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/AdvancedParamsUI.jaxx 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/AdvancedParamsUI.jaxx 2015-05-21 13:11:05 UTC (rev 4231) @@ -23,120 +23,24 @@ #L% --> <Table> + + <AdvancedParamsHandler id="handler" constructorParams="this" /> + <Boolean id='ajout' javaBean='false'/> <Boolean id='remove' javaBean='false'/> <Boolean id='changed' javaBean='false'/> <import> static org.nuiton.i18n.I18n.t - javax.swing.table.DefaultTableModel; - java.util.Map.Entry; - javax.swing.event.ListSelectionListener - java.util.Set - java.util.Iterator javax.swing.DefaultComboBoxModel - javax.swing.event.ListSelectionEvent </import> - <script><![CDATA[ - + <script><![CDATA[ protected void $afterCompleteSetup() { - /** - * Listener to enable/disable remove button. - */ - tableTagValues.getSelectionModel().addListSelectionListener(new ListSelectionListener() { - @Override - public void valueChanged(ListSelectionEvent e) { - setRemove(tableTagValues.getSelectedRow() != -1); - } - }); - - refresh(); + handler.afterInit(); } - - public void refresh() { - fieldSimulAdvParamsSimulatorSelect.setSelectedItem(getContextValue(SimulAction.class).getSimulationParameter().getSimulatorName()); - fieldSimulationStatistique.setSelected(getContextValue(SimulAction.class).getSimulationParameter().getUseStatistic()); - fieldSimulationCache.setSelected(getContextValue(SimulAction.class).getSimulationParameter().getUseCache()); + ]]></script> - fieldSimulAdvParamsSimulLoggerError.setSelected(getContextValue(SimulAction.class).getSimulationParameter().isSimulErrorLevel()); - fieldSimulAdvParamsSimulLoggerWarn.setSelected(getContextValue(SimulAction.class).getSimulationParameter().isSimulWarnLevel()); - fieldSimulAdvParamsSimulLoggerInfo.setSelected(getContextValue(SimulAction.class).getSimulationParameter().isSimulInfoLevel()); - fieldSimulAdvParamsSimulLoggerDebug.setSelected(getContextValue(SimulAction.class).getSimulationParameter().isSimulDebugLevel()); - - fieldSimulAdvParamsScriptLoggerError.setSelected(getContextValue(SimulAction.class).getSimulationParameter().isScriptErrorLevel()); - fieldSimulAdvParamsScriptLoggerWarn.setSelected(getContextValue(SimulAction.class).getSimulationParameter().isScriptWarnLevel()); - fieldSimulAdvParamsScriptLoggerInfo.setSelected(getContextValue(SimulAction.class).getSimulationParameter().isScriptInfoLevel()); - fieldSimulAdvParamsScriptLoggerDebug.setSelected(getContextValue(SimulAction.class).getSimulationParameter().isScriptDebugLevel()); - - fieldSimulAdvParamsLibLoggerError.setSelected(getContextValue(SimulAction.class).getSimulationParameter().isLibErrorLevel()); - fieldSimulAdvParamsLibLoggerWarn.setSelected(getContextValue(SimulAction.class).getSimulationParameter().isLibWarnLevel()); - fieldSimulAdvParamsLibLoggerInfo.setSelected(getContextValue(SimulAction.class).getSimulationParameter().isLibInfoLevel()); - fieldSimulAdvParamsLibLoggerDebug.setSelected(getContextValue(SimulAction.class).getSimulationParameter().isLibDebugLevel()); - - setTableTagValues(); - } - - public AdvancedParamsUI(SimulAction action) { - setContextValue(action); - } - - protected void addTagValue() { - getContextValue(SimulAction.class).addTagValue(fieldTag.getText(), fieldValue.getText()); - setTableTagValues(); - valueChanged(true); - } - - protected void removeTagValue() { - getContextValue(SimulAction.class).removeTagValue(tableTagValues.getValueAt(tableTagValues.getSelectedRow(),0).toString()); - setTableTagValues(); - valueChanged(true); - } - - protected void saveTagValues() { - if (fieldSimulAdvParamsSimulatorSelect.getSelectedIndex() != -1) { - getContextValue(SimulAction.class).saveTagValue(fieldSimulAdvParamsSimulatorSelect.getSelectedItem().toString()); - } - valueChanged(false); - } - - protected void setSimulatorName() { - if (fieldSimulAdvParamsSimulatorSelect.getSelectedIndex() != -1) { - getContextValue(SimulAction.class).getSimulationParameter().setSimulatorName(fieldSimulAdvParamsSimulatorSelect.getSelectedItem().toString()); - valueChanged(true); - } - } - - protected void setTableTagValues() { - Map<String, String> tagValues = getContextValue(SimulAction.class).getSimulationParameter().getTagValue(); - - // TODO make a table model for it - String columnName[] = { t("isisfish.common.tag"), t("isisfish.common.value")}; - if (tagValues != null) { - DefaultTableModel model = new DefaultTableModel(columnName, tagValues.size()) { - @Override - public boolean isCellEditable(int row, int column) { - return false; - } - }; - Set<Entry<String, String>> set = tagValues.entrySet(); - int row = 0; - for (Iterator<String> it = tagValues.keySet().iterator(); it.hasNext();) { - String name = it.next(); - model.setValueAt(name, row, 0); - model.setValueAt(tagValues.get(name), row, 1); - row++; - } - tableTagValues.setModel(model); - } - } - - protected void valueChanged(boolean b) { - setChanged(b); - } - - ]]> - </script> <row> <cell fill="horizontal" rows="2"> <JLabel text="isisfish.advancedParams.simulatorUse"/> @@ -145,7 +49,7 @@ <JComboBox id="fieldSimulAdvParamsSimulatorSelect" genericType="String" model='{new DefaultComboBoxModel(getContextValue(SimulAction.class).getSimulatorNames().toArray())}' - onActionPerformed='setSimulatorName()'/> + onActionPerformed='handler.setSimulatorName()'/> </cell> </row> <row> @@ -254,7 +158,7 @@ </row> <row> <cell columns="4" fill="horizontal" weightx="1.0"> - <JButton text="isisfish.common.add" enabled="{isAjout()}" onActionPerformed='addTagValue()'/> + <JButton text="isisfish.common.add" enabled="{isAjout()}" onActionPerformed='handler.addTagValue()'/> </cell> </row> <row> @@ -266,12 +170,12 @@ </row> <row> <cell columns="4" fill="horizontal" weightx="1.0"> - <JButton text="isisfish.common.remove" enabled="{isRemove()}" onActionPerformed='removeTagValue()'/> + <JButton text="isisfish.common.remove" enabled="{isRemove()}" onActionPerformed='handler.removeTagValue()'/> </cell> </row> <row> <cell columns="5" fill="horizontal"> - <JButton text="isisfish.common.saveNextSimulation" enabled="{isChanged()}" onActionPerformed='saveTagValues()'/> + <JButton text="isisfish.common.saveNextSimulation" enabled="{isChanged()}" onActionPerformed='handler.saveTagValues()'/> </cell> </row> </Table> Added: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ExportHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ExportHandler.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ExportHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -0,0 +1,118 @@ +/* + * #%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 static org.nuiton.i18n.I18n.t; + +import java.util.LinkedList; +import java.util.List; + +import javax.swing.event.ListSelectionEvent; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import fr.ifremer.isisfish.ui.WelcomePanelUI; +import fr.ifremer.isisfish.ui.models.common.GenericListModel; + +/** + * Export UI handler. + * + * @author Eric Chatellier + */ +public class ExportHandler extends SimulationTabHandler { + + /** Class logger. */ + private static final Log log = LogFactory.getLog(ExportHandler.class); + + protected ExportUI tabUI; + + protected ExportHandler(ExportUI tabUI) { + super(tabUI); + this.tabUI = tabUI; + } + + protected void afterInit() { + refresh(); + } + + protected SimulAction getSimulAction() { + return tabUI.getContextValue(SimulAction.class); + } + + public void refresh() { + + // FIXME listen for export modification here + + // fill export + setListSimulExportChooseModel(); + } + + protected void setListSimulExportChooseModel() { + java.util.List<String> availableExports = getSimulAction().getExportNames(); + java.util.List<String> userExports = getSimulAction().getSimulationParameter().getExportNames(); + // userExports = intersection(userExports,availableExports) + userExports.retainAll(availableExports); + + GenericListModel<String> exportModel = new GenericListModel<String>(availableExports); + tabUI.listSimulExportChoose.setModel(exportModel); + + for (String userExport : userExports) { + int index = availableExports.indexOf(userExport); + tabUI.listSimulExportChoose.addSelectionInterval(index, index); + } + } + + protected void saveSimulationExports(ListSelectionEvent event) { + // Set exports (this can save empty list (not a big deal)) + List<String> values = tabUI.listSimulExportChoose.getSelectedValuesList(); + List<String> exportNames = new LinkedList<>(); + for (String o : values) { + exportNames.add(o); + } + getSimulAction().getSimulationParameter().setExportNames(exportNames); + + if (log.isDebugEnabled()) { + log.debug("Set exports in simulation : " + exportNames); + } + } + + protected void saveConfigExports() { + // Set exports (this can save empty list (not a big deal)) + List<String> values = tabUI.listSimulExportChoose.getSelectedValuesList(); + List<String> exportNames = new LinkedList<String>(); + for (String o : values) { + exportNames.add(o); + } + getSimulAction().getSimulationParameter().setExportNames(exportNames); + + getSimulAction().saveExport(); + setInfoText(t("isisfish.export.saved")); + } + + protected void setInfoText(String txt) { + // TODO remove getParentContainer use + WelcomePanelUI root = tabUI.getParentContainer(WelcomePanelUI.class); + root.setStatusMessage(txt); + } +} Property changes on: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ExportHandler.java ___________________________________________________________________ Added: svn:eol-style + native Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ExportUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ExportUI.jaxx 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ExportUI.jaxx 2015-05-21 13:11:05 UTC (rev 4231) @@ -23,94 +23,27 @@ #L% --> <Table> - <import> - static org.nuiton.i18n.I18n.t - fr.ifremer.isisfish.ui.WelcomePanelUI; - fr.ifremer.isisfish.ui.models.common.GenericListModel; - javax.swing.event.ListSelectionEvent; - java.util.LinkedList - </import> + <ExportHandler id="handler" constructorParams="this" /> <script><![CDATA[ - protected void $afterCompleteSetup() { - refresh(); + handler.afterInit(); } + ]]></script> - protected SimulAction getSimulAction() { - return getContextValue(SimulAction.class); - } - - public void refresh() { - - // FIXME listen for export modification here - - // fill export - setListSimulExportChooseModel(); - } - - protected void setListSimulExportChooseModel() { - java.util.List<String> availableExports = getSimulAction().getExportNames(); - java.util.List<String> userExports = getSimulAction().getSimulationParameter().getExportNames(); - // userExports = intersection(userExports,availableExports) - userExports.retainAll(availableExports); - - GenericListModel<String> exportModel = new GenericListModel<String>(availableExports); - listSimulExportChoose.setModel(exportModel); - - for (String userExport : userExports) { - int index = availableExports.indexOf(userExport); - listSimulExportChoose.addSelectionInterval(index, index); - } - } - - protected void saveSimulationExports(ListSelectionEvent event) { - // Set exports (this can save empty list (not a big deal)) - List<String> values = listSimulExportChoose.getSelectedValuesList(); - List<String> exportNames = new LinkedList<>(); - for (String o : values) { - exportNames.add(o); - } - getSimulAction().getSimulationParameter().setExportNames(exportNames); - - if (log.isDebugEnabled()) { - log.debug("Set exports in simulation : " + exportNames); - } - } - - protected void saveConfigExports() { - // Set exports (this can save empty list (not a big deal)) - List<String> values = listSimulExportChoose.getSelectedValuesList(); - List<String> exportNames = new LinkedList<String>(); - for (String o : values) { - exportNames.add(o); - } - getSimulAction().getSimulationParameter().setExportNames(exportNames); - - getSimulAction().saveExport(); - setInfoText(t("isisfish.export.saved")); - } - - protected void setInfoText(String txt) { - // TODO remove getParentContainer use - WelcomePanelUI root = getParentContainer(WelcomePanelUI.class); - root.setStatusMessage(txt); - } - ]]> - </script> <row> <cell fill="both" weightx="1.0" weighty="1.0"> <JScrollPane> <JList id="listSimulExportChoose" selectionMode="{javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION}" genericType="String" cellRenderer='{new fr.ifremer.isisfish.ui.models.export.ExportNameListRenderer()}' - onValueChanged='saveSimulationExports(event)' /> + onValueChanged='handler.saveSimulationExports(event)' /> </JScrollPane> </cell> </row> <row> <cell fill="horizontal"> - <JButton text="isisfish.common.saveNextSimulation" onActionPerformed='saveConfigExports()'/> + <JButton text="isisfish.common.saveNextSimulation" onActionPerformed='handler.saveConfigExports()'/> </cell> </row> </Table> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -63,48 +63,55 @@ import fr.ifremer.isisfish.ui.sensitivity.SensitivityTabUI; import fr.ifremer.isisfish.ui.widget.editor.FactorEditorListener; -public class OptimizationHandler { +public class OptimizationHandler extends SimulationTabHandler { private static final Log log = LogFactory.getLog(OptimizationHandler.class); protected FactorEditorListener factorEditorListener; - public void init(final OptimizationUI view) { - + protected OptimizationUI tabUI; + + public OptimizationHandler(OptimizationUI tabUI) { + super(tabUI); + this.tabUI = tabUI; } + + public void afterInit() { + // model init + tabUI.getExportObservationTable().setModel(getExportObservationTableModel()); + } - public void refresh(OptimizationUI view) { + public void refresh() { // get info - SimulAction simulAction = view.getContextValue(SimulAction.class); + SimulAction simulAction = tabUI.getContextValue(SimulAction.class); SimulationParameter param = simulAction.getSimulationParameter(); - RegionStorage regionStorage = view.getContextValue(RegionStorage.class); + RegionStorage regionStorage = tabUI.getContextValue(RegionStorage.class); // refresh after simulation storage set if (param.getObjective() != null) { - view.getFieldObjectiveMethodSelect().setSelectedItem(ObjectiveStorage.getName(param.getObjective())); + tabUI.getFieldObjectiveMethodSelect().setSelectedItem(ObjectiveStorage.getName(param.getObjective())); } if (param.getOptimization() != null) { - view.getFieldOptimizationMethodSelect().setSelectedItem(OptimizationStorage.getName(param.getOptimization())); + tabUI.getFieldOptimizationMethodSelect().setSelectedItem(OptimizationStorage.getName(param.getOptimization())); } // export/observation - view.getExportObservationTable().setModel(getExportObservationTableModel(view)); + tabUI.getExportObservationTable().setModel(getExportObservationTableModel()); // order matters - view.getExportObservationTable().getColumnModel().getColumn(0).setCellRenderer(new ExportTableCellRenderer()); + tabUI.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()); + tabUI.getExportObservationTable().getColumnModel().getColumn(1).setCellEditor(editor); + tabUI.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); + protected SimulationParameter getSimulationParameter() { + SimulAction simulAction = tabUI.getContextValue(SimulAction.class); SimulationParameter param = simulAction.getSimulationParameter(); return param; } @@ -115,7 +122,7 @@ * @return model */ public GenericComboModel<String> getObjectiveComboModel() { - List<String> result = new ArrayList<String>(); + List<String> result = new ArrayList<>(); for (String r : ObjectiveStorage.getObjectiveNames()) { // there is some non java files in sensitivity directory if (r.endsWith(".java")) { @@ -125,19 +132,17 @@ } } - GenericComboModel<String> model = new GenericComboModel<String>(result); + GenericComboModel<String> model = new GenericComboModel<>(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); + public void objectiveChanged() { + String objectiveName = (String)tabUI.getFieldObjectiveMethodSelect().getSelectedItem(); + SimulationParameter param = getSimulationParameter(); + RegionStorage regionStorage = tabUI.getContextValue(RegionStorage.class); // creation new instance only when name change to not lose parameters value Objective objective = param.getObjective(); @@ -158,37 +163,36 @@ // update model ScriptParametersTableModel parametersTableModel = new ScriptParametersTableModel(objective); - view.getSimulObjectiveMethodParam().setModel(parametersTableModel); - view.getSimulObjectiveMethodParam().getColumnModel().getColumn(0).setCellRenderer(new ScriptParametersTableCellRenderer(objective)); + tabUI.getSimulObjectiveMethodParam().setModel(parametersTableModel); + tabUI.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); + editor.setFactorActionListener(getFactorActionListener()); + tabUI.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) { + protected FactorEditorListener getFactorActionListener() { if (factorEditorListener == null) { factorEditorListener = new FactorEditorListener() { public void actionPerformed(ActionEvent event) { // init new sensitivity tav ui hierarchy - final SensitivityTabUI sensitivityTabUI = new SensitivityTabUI(view); + final SensitivityTabUI sensitivityTabUI = new SensitivityTabUI(tabUI); sensitivityTabUI.setContextValue(new SensitivitySaveVerifier()); // prevent NPE - sensitivityTabUI.setContextValue(view.getParentContainer(SimulationUI.class), "SimulationUI"); // prevent NPE + sensitivityTabUI.setContextValue(tabUI.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); + RegionStorage regionStorage = tabUI.getContextValue(RegionStorage.class); TopiaContext tx = regionStorage.getStorage().beginTransaction(); FisheryRegion fisheryRegion = RegionStorage.getFisheryRegion(tx); sensitivityTabUI.setFisheryRegion(fisheryRegion); @@ -202,7 +206,7 @@ dialog.setTitle("Sélection d'un facteur"); dialog.add(sensitivityTabUI); dialog.setSize(800, 600); - dialog.setLocationRelativeTo(view); + dialog.setLocationRelativeTo(tabUI); dialog.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { @@ -240,19 +244,17 @@ } } - GenericComboModel<String> model = new GenericComboModel<String>(result); + GenericComboModel<String> model = new GenericComboModel<>(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); + public void optimizationChanged() { + String optimizationName = (String)tabUI.getFieldOptimizationMethodSelect().getSelectedItem(); + SimulationParameter param = getSimulationParameter(); + RegionStorage regionStorage = tabUI.getContextValue(RegionStorage.class); // creation new instance only when name change to not lose parameters value Optimization optimization = param.getOptimization(); @@ -273,13 +275,13 @@ // update model ScriptParametersTableModel parametersTableModel = new ScriptParametersTableModel(optimization); - view.getSimulOptimizationMethodParam().setModel(parametersTableModel); - view.getSimulOptimizationMethodParam().getColumnModel().getColumn(0).setCellRenderer(new ScriptParametersTableCellRenderer(optimization)); + tabUI.getSimulOptimizationMethodParam().setModel(parametersTableModel); + tabUI.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); + editor.setFactorActionListener(getFactorActionListener()); + tabUI.getSimulOptimizationMethodParam().getColumnModel().getColumn(1).setCellEditor(editor); } } @@ -289,7 +291,7 @@ * @return model */ public ListModel<String> getExportListModel() { - List<String> result = new ArrayList<String>(); + List<String> result = new ArrayList<>(); for (String r : ExportStorage.getExportNames()) { // there is some non java files in sensitivity directory if (r.endsWith(".java")) { @@ -306,11 +308,10 @@ /** * ExportInfo model for combo box. * - * @param view view * @return model */ - public ExportObservationTableModel getExportObservationTableModel(OptimizationUI view) { - SimulationParameter param = getSimulationParameter(view); + public ExportObservationTableModel getExportObservationTableModel() { + SimulationParameter param = getSimulationParameter(); Map<ExportInfo, Observation> optimizationExportsObservations = param.getOptimizationExportsObservations(); ExportObservationTableModel model = new ExportObservationTableModel(optimizationExportsObservations); return model; @@ -318,16 +319,14 @@ /** * Add selected export. - * - * @param view view */ - public void addExports(OptimizationUI view) { + public void addExports() { // get elements - SimulationParameter param = getSimulationParameter(view); - ExportObservationTableModel tableModel = (ExportObservationTableModel)view.getExportObservationTable().getModel(); + SimulationParameter param = getSimulationParameter(); + ExportObservationTableModel tableModel = (ExportObservationTableModel)tabUI.getExportObservationTable().getModel(); // add all selected exports - List<String> selectedExports = view.getFieldExportList().getSelectedValuesList(); + List<String> selectedExports = tabUI.getFieldExportList().getSelectedValuesList(); for (String selectedExport : selectedExports) { try { // create export instance @@ -347,16 +346,14 @@ /** * Remove selected exports in table. - * - * @param view view */ - public void removeExports(OptimizationUI view) { + public void removeExports() { // get element - SimulationParameter param = getSimulationParameter(view); + SimulationParameter param = getSimulationParameter(); Map<ExportInfo, Observation> optimizationExports = param.getOptimizationExportsObservations(); - ExportObservationTableModel tableModel = (ExportObservationTableModel)view.getExportObservationTable().getModel(); + ExportObservationTableModel tableModel = (ExportObservationTableModel)tabUI.getExportObservationTable().getModel(); - JTable table = view.getExportObservationTable(); + JTable table = tabUI.getExportObservationTable(); int[] rows = table.getSelectedRows(); // reverse order for (int i = rows.length - 1; i >= 0; i--) { @@ -371,14 +368,12 @@ /** * Clear all export in table. - * - * @param view view */ - public void clearExports(OptimizationUI view) { + public void clearExports() { // get elements - SimulationParameter param = getSimulationParameter(view); + SimulationParameter param = getSimulationParameter(); Map<ExportInfo, Observation> optimizationExports = param.getOptimizationExportsObservations(); - ExportObservationTableModel tableModel = (ExportObservationTableModel)view.getExportObservationTable().getModel(); + ExportObservationTableModel tableModel = (ExportObservationTableModel)tabUI.getExportObservationTable().getModel(); // clear optimizationExports.clear(); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationUI.jaxx 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationUI.jaxx 2015-05-21 13:11:05 UTC (rev 4231) @@ -23,23 +23,15 @@ #L% --> <Table> - <script><![CDATA[ - protected void $afterCompleteSetup() { - handler.init(this); - } - // application will be refreshed by regionStorage change - protected void regionStorageChanged() { - //handler.refresh(this); - } + <OptimizationHandler id="handler" constructorParams="this" /> - public void refresh() { - handler.refresh(this); - } + <script><![CDATA[ + protected void $afterCompleteSetup() { + handler.afterInit(); + } ]]></script> - <OptimizationHandler id="handler" javaBean='new OptimizationHandler()'/> - <!-- Objective choice and param --> <row> <cell fill="horizontal"> @@ -47,7 +39,7 @@ </cell> <cell fill="horizontal" weightx="1.0" columns="2"> <JComboBox id="fieldObjectiveMethodSelect" genericType="String" model='{handler.getObjectiveComboModel()}' - onActionPerformed='handler.objectiveChanged(this)' + onActionPerformed='handler.objectiveChanged()' renderer="{new fr.ifremer.isisfish.ui.models.optimization.ObjectiveComboRenderer()}"/> </cell> </row> @@ -66,7 +58,7 @@ </cell> <cell fill="horizontal" weightx="1.0" columns="2"> <JComboBox id="fieldOptimizationMethodSelect" genericType="String" model='{handler.getOptimizationComboModel()}' - onActionPerformed='handler.optimizationChanged(this)' + onActionPerformed='handler.optimizationChanged()' renderer="{new fr.ifremer.isisfish.ui.models.optimization.OptimizationComboRenderer()}"/> </cell> </row> @@ -97,26 +89,26 @@ <row> <cell fill="horizontal"> <JButton id="addExportsButton" text="isisfish.common.add" enabled="false" - onActionPerformed="handler.addExports(this)" /> + onActionPerformed="handler.addExports()" /> </cell> </row> <row> <cell fill="horizontal"> <JButton id="removeExportsButton" text="isisfish.common.remove" enabled="false" - onActionPerformed="handler.removeExports(this)" /> + onActionPerformed="handler.removeExports()" /> </cell> </row> <row> <cell fill="horizontal"> <JButton id="clearExportsButton" text="isisfish.common.clear" enabled="false" - onActionPerformed="handler.clearExports(this)" /> + onActionPerformed="handler.clearExports()" /> </cell> </row> </Table> </cell> <cell fill="both" weightx="1.0" weighty="1.0"> <JScrollPane> - <JTable id="exportObservationTable" model="{handler.getExportObservationTableModel(this)}" rowHeight='24' /> + <JTable id="exportObservationTable" rowHeight='24' /> <ListSelectionModel id="exportObservationSelectionModel" initializer="exportObservationTable.getSelectionModel()" onValueChanged='removeExportsButton.setEnabled(!exportObservationSelectionModel.isSelectionEmpty());clearExportsButton.setEnabled(exportObservationTable.getModel().getRowCount() > 0);' /> </JScrollPane> Added: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsHandler.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -0,0 +1,383 @@ +/* + * #%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 static org.nuiton.i18n.I18n.t; + +import java.awt.Cursor; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.ComboBoxModel; +import javax.swing.DefaultListModel; +import javax.swing.SwingUtilities; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaException; + +import fr.ifremer.isisfish.datastore.RegionStorage; +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.datastore.StorageChangeEvent; +import fr.ifremer.isisfish.datastore.StorageChangeListener; +import fr.ifremer.isisfish.datastore.StorageException; +import fr.ifremer.isisfish.entities.FisheryRegion; +import fr.ifremer.isisfish.entities.Population; +import fr.ifremer.isisfish.entities.Strategy; +import fr.ifremer.isisfish.simulator.launcher.SimulationJob; +import fr.ifremer.isisfish.simulator.launcher.SimulationService; +import fr.ifremer.isisfish.simulator.launcher.SimulationServiceListener; +import fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher; +import fr.ifremer.isisfish.ui.SimulationUI; +import fr.ifremer.isisfish.ui.WelcomePanelUI; +import fr.ifremer.isisfish.ui.WelcomeTabUI; +import fr.ifremer.isisfish.ui.models.common.GenericComboModel; +import fr.ifremer.isisfish.ui.sensitivity.SensitivityUI; + +/** + * Params UI handler. + * + * @author Eric Chatellier + */ +public class ParamsHandler extends SimulationTabHandler { + + /** Class logger. */ + private static final Log log = LogFactory.getLog(ParamsHandler.class); + + protected ParamsUI tabUI; + + // instances variables déclaration + protected SimulationServiceListener simulationListener; + protected StorageChangeListener regionStorageListener; + + protected List<String> oldSimulNames = null; + + protected ParamsHandler(ParamsUI tabUI) { + super(tabUI); + this.tabUI = tabUI; + } + + protected void afterInit() { + regionStorageListener = new StorageChangeListener() { + @Override + public void versionDataChanged(StorageChangeEvent e) { + GenericComboModel<String> model = new GenericComboModel<String>(fr.ifremer.isisfish.datastore.RegionStorage.getRegionNames()); + tabUI.fieldSimulParamsRegion.setModel(model); + } + }; + RegionStorage.addStorageChangeListener(regionStorageListener); + + simulationListener = new SimulationServiceListener() { + @Override + public void simulationStart(SimulationService simService, SimulationJob job) { + + } + + @Override + public void simulationStop(SimulationService simService, final SimulationJob job) { + final GenericComboModel<String> model = (GenericComboModel<String>)tabUI.fieldSimulParamsSelect.getModel(); + SwingUtilities.invokeLater(new Runnable() { + public void run() { + model.addElement(job.getId()); + } + }); + } + + @Override + public void clearJobDone(SimulationService simService) { + + } + }; + SimulationService.getService().addSimulationServiceListener(simulationListener); + + // la gestion des regles est maintenant independante de SimulAction + // il faut faire la lié aux parametres de simulations + getSimulAction().getSimulationParameter().setRules(tabUI.ruleChooser.getRulesList()); + } + + public void refresh() { + if (getSimulAction().getSimulationStorage() != null) { + tabUI.fieldSimulParamsName.setText(getSimulAction().getSimulationStorage().getName()); + } + tabUI.fieldSimulParamsDesc.setText(getSimulAction().getSimulationParameter().getDescription()); + setListSimulParamsStrategiesItems(); + setListSimulParamsPopulationsItems(); + } + + /** + * Called on user region selection change. + */ + protected void regionChange() { + // le premier item est " " pour ne pas avoir de selection par defaut + final String selected = tabUI.fieldSimulParamsRegion.getSelectedItem().toString(); + if (log.isDebugEnabled()) { + log.debug(" selected " + selected); + } + if(selected != null && !selected.trim().isEmpty()) { + tabUI.getParentContainer(WelcomePanelUI.class).setStatusMessage(t("isisfish.message.loading.region")); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + getSimulAction().regionChange(tabUI, selected); + // FIXME fix this + if (!tabUI.isSensitivity()) { + tabUI.getParentContainer(SimulUI.class).refresh(); + } else { + tabUI.getParentContainer(SensitivityUI.class).refresh(); + } + setSensitivityTabRegion(); + tabUI.getParentContainer(WelcomePanelUI.class).setStatusMessage(t("isisfish.message.region.loaded")); + } + }); + } + } + + protected void initSimulationParams() { + if (!tabUI.isSensitivity()){ + // prescript + String preScript = getSimulAction().getSimulationParameter().getPreScript(); + tabUI.fieldUseSimulPreScripts.setSelected(preScript != null && !preScript.isEmpty()); + tabUI.getParentContainer(SimulUI.class).getPreScriptUI().getFieldSimulPreScript().setText(preScript); + + // simulation plan + tabUI.fieldSimulUseSimulationPlan.setSelected(getSimulAction().getSimulationParameter().getUseSimulationPlan()); + tabUI.getParentContainer(SimulUI.class).getPlanUI().getHandler().refresh(); + + // optimization + tabUI.fieldSimulUseOptimization.setSelected(getSimulAction().getSimulationParameter().getUseOptimization()); + tabUI.getParentContainer(SimulUI.class).getOptimizationUI().getHandler().refresh(); + + } + } + + protected void setSensitivityTabRegion() { + if (tabUI.isSensitivity()) { + try { + // FIXME this transaction in never closed + // and can't be closed because used in + TopiaContext tx = getSimulAction().getRegionStorage().getStorage().beginTransaction(); + FisheryRegion fisheryRegion = RegionStorage.getFisheryRegion(tx); + tabUI.getParentContainer(SensitivityUI.class).getSensitivityTabUI().setFisheryRegion(fisheryRegion); + tabUI.getParentContainer(SensitivityUI.class).getSensitivityTabUI().setTreeModel(); + } catch (StorageException ex) { + if (log.isErrorEnabled()) { + log.error("Can't reload factors", ex); + } + } catch (TopiaException ex) { + if (log.isErrorEnabled()) { + log.error("Can't reload factors", ex); + } + } + } + } + protected void initSensitivityParams() { + if (tabUI.isSensitivity()) { + tabUI.getParentContainer(SensitivityUI.class).getSensitivityChooserUI().refreshSelectedSensitivityAnalysis(); + tabUI.getParentContainer(SensitivityUI.class).getSensitivityTabUI().setFactorModel(); + tabUI.getParentContainer(SensitivityUI.class).getSensitivityChooserUI().setSensitivityExportListModel(); + tabUI.sensitivityOnlyKeepFirstResultCheckBox.setSelected(getSimulAction().getSimulationParameter().isSensitivityAnalysisOnlyKeepFirst()); + } + } + + /*public void setSimulationParameter(SimulAction simulAction){ + getSimulAction().setSimulationParameter(getSimulAction().getSimulationParameter()); + }*/ + + protected void loadOldSimulation() { + final String selected = tabUI.fieldSimulParamsSelect.getSelectedItem().toString(); + // le premier item est " " pour ne pas avoir de selection par defaut + if (selected != null && !selected.equals(" ")) { + tabUI.getParentContainer(WelcomePanelUI.class).setStatusMessage(t("isisfish.message.loading.old.simulation")); + tabUI.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + + getSimulAction().loadOldSimulation(selected); + tabUI.fieldSimulParamsRegion.setSelectedItem(tabUI.getContextValue(SimulAction.class).getSimulationParameter().getRegionName()); + + // FIXME fix this + if (!tabUI.isSensitivity()) { + tabUI.getParentContainer(SimulUI.class).refresh(); + } else { + tabUI.getParentContainer(SensitivityUI.class).refresh(); + } + + // mise a jour des années + tabUI.fieldSimulParamsNbMois.setText(String.valueOf(getSimulAction().getNumberOfMonths())); + initSimulationParams(); + initSensitivityParams(); + + // regles + tabUI.ruleChooser.setRulesList(getSimulAction().getSimulationParameter().getRules()); + + tabUI.getParentContainer(WelcomePanelUI.class).setStatusMessage(t("isisfish.message.old.simulation.loaded")); + tabUI.setCursor(Cursor.getDefaultCursor()); + } + }); + } + } + + /** + * Lance la simulation. + */ + protected void launchSimulation() { + + if (!tabUI.isSensitivity()) { + getSimulAction().launchSimulation(tabUI.fieldSimulParamsName.getText(), (SimulatorLauncher)tabUI.comboSelLauncher.getSelectedItem()); + } else { + getSimulAction().launchSimulationWithSensibility(tabUI.fieldSimulParamsName.getText(), (SimulatorLauncher)tabUI.comboSelLauncher.getSelectedItem()); + } + + // dans le cas d'une fenetre independante, il n'y a pas de ParentContainer + WelcomeTabUI parent = tabUI.getParentContainer(WelcomeTabUI.class); + if (parent != null) { + parent.setQueueTabSelection(); + } + } + protected void enablePreScript() { + getSimulAction().getSimulationParameter().setUsePreScript(tabUI.fieldUseSimulPreScripts.isSelected()); + SimulationUI simulationUI = tabUI.getParentContainer(SimulationUI.class); + simulationUI.setEnabledPrescriptTab(tabUI.fieldUseSimulPreScripts.isSelected()); + } + protected void enableSimulationPlan() { + getSimulAction().getSimulationParameter().setUseSimulationPlan(tabUI.fieldSimulUseSimulationPlan.isSelected()); + SimulationUI simulationUI = tabUI.getParentContainer(SimulationUI.class); + simulationUI.setEnabledSimulationPlanTab(tabUI.fieldSimulUseSimulationPlan.isSelected()); + } + + protected void enableOptimization() { + getSimulAction().getSimulationParameter().setUseOptimization(tabUI.fieldSimulUseOptimization.isSelected()); + SimulationUI simulationUI = tabUI.getParentContainer(SimulationUI.class); + simulationUI.setEnabledOptimizationTab(tabUI.fieldSimulUseOptimization.isSelected()); + } + + protected void setListSimulParamsStrategiesItems() { + List<Strategy> strategiesSelected = getSimulAction().getSimulationParameter().getStrategies(); + DefaultListModel listSimulParamsStrategiesModel = new DefaultListModel(); + List<Strategy> strategies = getSimulAction().getStrategies(); + for (Strategy s : strategies){ + listSimulParamsStrategiesModel.addElement(s); + } + tabUI.listSimulParamsStrategies.setModel(listSimulParamsStrategiesModel); + if (listSimulParamsStrategiesModel.size() != 0) { + for (Strategy s : strategiesSelected){ + int index = listSimulParamsStrategiesModel.indexOf(s); + tabUI.listSimulParamsStrategies.addSelectionInterval(index, index); + } + //strategySelected(); + } + } + protected void setListSimulParamsPopulationsItems(){ + List<Population> populationsSelected = getSimulAction().getSimulationParameter().getPopulations(); + DefaultListModel listSimulParamsPopulationsModel = new DefaultListModel(); + List<Population> populations = getSimulAction().getPopulations(); + for (Population p : populations){ + listSimulParamsPopulationsModel.addElement(p); + } + tabUI.listSimulParamsPopulations.setModel(listSimulParamsPopulationsModel); + if (listSimulParamsPopulationsModel.size() != 0) { + for (Population p : populationsSelected) { + int index = listSimulParamsPopulationsModel.indexOf(p); + tabUI.listSimulParamsPopulations.addSelectionInterval(index, index); + } + //getSimulAction().populationSelected(this); + } + } + + protected void strategySelected(){ + getSimulAction().setStrategies(tabUI.listSimulParamsStrategies.getSelectedValuesList()); + } + + protected ComboBoxModel<String> getSimulParamsSelectModel() { + return getSimulParamsSelectModel(false); + } + + protected ComboBoxModel<String> getSimulParamsSelectModel(boolean force) { + List<String> items = getFilteredOldSimulatorNames(force); + GenericComboModel<String> result = new GenericComboModel<String>(items); + return result; + } + + protected void resetFilter(){ + resetOldSimulatorNames(); + tabUI.fieldSimulParamsSelect.setModel(getSimulParamsSelectModel(false)); + } + + /** + * Return old simulations. + * + * @return old simulations + */ + public List<String> getOldSimulationItem() { + + //try { + oldSimulNames = new ArrayList<String>(); + + //FilterModel<SimulationProperties, String> filterModel; + // keep in context list of old simulation names (for filter process) + oldSimulNames.addAll(SimulationStorage.getSimulationNames()); + // create filter model + //filterModel = SimulationFilterUtil.createFilterModel(oldSimulNames); + // to used directly model.getFilteredResult() in xml + // we must fill filterModel result with original items + //filterModel.selectAll(); + + // chatellier : Ajout d'une entrée vide pour forcer la sélection + // et que le changement lance un evenement sur la liste + // Add empty item after, otherwise, un " " directory + // will be created + oldSimulNames.add(0, " "); + + return oldSimulNames; + /*} catch (ParseException e) { + if (log.isErrorEnabled()) { + log.error("Can't get old simulation item", 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(t("isisfish.error.simulation.listoldsimulation"), e); + } + return null;*/ + } + + public List<String> getFilteredOldSimulatorNames(boolean force) { + if (oldSimulNames == null || force) { + oldSimulNames = getOldSimulationItem(); + } + return oldSimulNames; + } + + public void setOldSimulatorNames(List<String> sn) { + oldSimulNames = sn; + } + + public void resetOldSimulatorNames() { + oldSimulNames = getOldSimulationItem(); + } +} Property changes on: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsHandler.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx 2015-05-21 13:11:05 UTC (rev 4231) @@ -23,296 +23,24 @@ #L% --> <Table> + <ParamsHandler id="handler" constructorParams="this" /> + <fr.ifremer.isisfish.datastore.RegionStorage id="regionStorage" javaBean="null" /> <!-- ui state when editing --> <Boolean id='sensitivity' javaBean='false' /> <import> - static org.nuiton.i18n.I18n.t - java.text.ParseException; - fr.ifremer.isisfish.datastore.RegionStorage - fr.ifremer.isisfish.datastore.StorageChangeEvent - fr.ifremer.isisfish.datastore.StorageChangeListener - fr.ifremer.isisfish.datastore.StorageException - fr.ifremer.isisfish.entities.Population - fr.ifremer.isisfish.entities.Strategy - fr.ifremer.isisfish.entities.FisheryRegion - fr.ifremer.isisfish.ui.SimulationUI - fr.ifremer.isisfish.ui.WelcomePanelUI - fr.ifremer.isisfish.ui.WelcomeTabUI - fr.ifremer.isisfish.ui.models.common.GenericComboModel - fr.ifremer.isisfish.ui.sensitivity.SensitivityUI - fr.ifremer.isisfish.ui.widget.FilterableComboBox - fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher - fr.ifremer.isisfish.simulator.launcher.SimulationService - fr.ifremer.isisfish.simulator.launcher.SimulationJob - fr.ifremer.isisfish.simulator.launcher.SimulationServiceListener - org.nuiton.topia.TopiaException - org.nuiton.topia.TopiaContext - javax.swing.SwingUtilities - javax.swing.DefaultComboBoxModel - java.awt.CardLayout - java.awt.Cursor java.awt.Dimension - java.io.IOException - javax.swing.DefaultListModel - javax.swing.ComboBoxModel + javax.swing.DefaultComboBoxModel </import> - <script><![CDATA[ -// instances variables déclaration -SimulationServiceListener simulationListener; -StorageChangeListener regionStorageListener; -SimulAction simulAction = getContextValue(SimulAction.class); -regionStorageListener = new StorageChangeListener() { - @Override - public void versionDataChanged(StorageChangeEvent e) { - GenericComboModel<String> model = new GenericComboModel<String>(fr.ifremer.isisfish.datastore.RegionStorage.getRegionNames()); - fieldSimulParamsRegion.setModel(model); + <script><![CDATA[ + protected void $afterCompleteSetup() { + handler.afterInit(); } -}; -RegionStorage.addStorageChangeListener(regionStorageListener); + ]]></script> -simulationListener = new SimulationServiceListener() { - @Override - public void simulationStart(SimulationService simService, SimulationJob job) { - - } - - @Override - public void simulationStop(SimulationService simService, final SimulationJob job) { - final GenericComboModel<String> model = (GenericComboModel<String>)fieldSimulParamsSelect.getModel(); - SwingUtilities.invokeLater(new Runnable() { - public void run() { - model.addElement(job.getId()); - } - }); - } - - @Override - public void clearJobDone(SimulationService simService) { - - } -} -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()); - } - fieldSimulParamsDesc.setText(simulAction.getSimulationParameter().getDescription()); - setListSimulParamsStrategiesItems(); - setListSimulParamsPopulationsItems(); -} - -/** - * Called on user region selection change. - */ -protected void regionChange() { - // le premier item est " " pour ne pas avoir de selection par defaut - final String selected = fieldSimulParamsRegion.getSelectedItem().toString(); - if (log.isDebugEnabled()) { - log.debug(" selected " + selected); - } - if(selected != null && !selected.trim().isEmpty()) { - getParentContainer(WelcomePanelUI.class).setStatusMessage(t("isisfish.message.loading.region")); - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - simulAction.regionChange(ParamsUI.this, selected); - // FIXME fix this - if (!isSensitivity()) { - getParentContainer(SimulUI.class).refresh(); - } else { - getParentContainer(SensitivityUI.class).refresh(); - } - setSensitivityTabRegion(); - getParentContainer(WelcomePanelUI.class).setStatusMessage(t("isisfish.message.region.loaded")); - } - }); - } -} - -protected void initSimulationParams() { - if (!isSensitivity()){ - // prescript - String preScript = simulAction.getSimulationParameter().getPreScript(); - fieldUseSimulPreScripts.setSelected(preScript != null && !preScript.isEmpty()); - getParentContainer(SimulUI.class).getPreScriptUI().getFieldSimulPreScript().setText(preScript); - - // 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 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); - getParentContainer(SensitivityUI.class).getSensitivityTabUI().setTreeModel(); - } catch (StorageException ex) { - if (log.isErrorEnabled()) { - log.error("Can't reload factors", ex); - } - } catch (TopiaException ex) { - if (log.isErrorEnabled()) { - log.error("Can't reload factors", ex); - } - } - } -} -protected void initSensitivityParams() { - if (isSensitivity()) { - getParentContainer(SensitivityUI.class).getSensitivityChooserUI().refreshSelectedSensitivityAnalysis(); - getParentContainer(SensitivityUI.class).getSensitivityTabUI().setFactorModel(); - getParentContainer(SensitivityUI.class).getSensitivityChooserUI().setSensitivityExportListModel(); - sensitivityOnlyKeepFirstResultCheckBox.setSelected(simulAction.getSimulationParameter().isSensitivityAnalysisOnlyKeepFirst()); - } -} - -public void setSimulationParameter(SimulAction simulAction){ - simulAction.setSimulationParameter(simulAction.getSimulationParameter()); -} - -protected void loadOldSimulation() { - 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(t("isisfish.message.loading.old.simulation")); - setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - - simulAction.loadOldSimulation(selected); - fieldSimulParamsRegion.setSelectedItem(getContextValue(SimulAction.class).getSimulationParameter().getRegionName()); - - // FIXME fix this - if (!isSensitivity()) { - getParentContainer(SimulUI.class).refresh(); - } else { - getParentContainer(SensitivityUI.class).refresh(); - } - - // mise a jour des années - fieldSimulParamsNbMois.setText(String.valueOf(simulAction.getNumberOfMonths())); - initSimulationParams(); - initSensitivityParams(); - - // regles - ruleChooser.setRulesList(simulAction.getSimulationParameter().getRules()); - - getParentContainer(WelcomePanelUI.class).setStatusMessage(t("isisfish.message.old.simulation.loaded")); - setCursor(Cursor.getDefaultCursor()); - } - }); - } -} - -/** - * Lance la simulation. - */ -protected void launchSimulation() { - - if (!isSensitivity()) { - simulAction.launchSimulation(fieldSimulParamsName.getText(), (SimulatorLauncher)comboSelLauncher.getSelectedItem()); - } - else { - simulAction.launchSimulationWithSensibility(fieldSimulParamsName.getText(), (SimulatorLauncher)comboSelLauncher.getSelectedItem()); - } - - // dans le cas d'une fenetre independante, il n'y a pas de ParentContainer - WelcomeTabUI parent = getParentContainer(WelcomeTabUI.class); - if (parent != null) { - parent.setQueueTabSelection(); - } -} -protected void enablePreScript() { - simulAction.getSimulationParameter().setUsePreScript(fieldUseSimulPreScripts.isSelected()); - SimulationUI simulationUI = getParentContainer(SimulationUI.class); - simulationUI.setEnabledPrescriptTab(fieldUseSimulPreScripts.isSelected()); -} -protected void enableSimulationPlan() { - simulAction.getSimulationParameter().setUseSimulationPlan(fieldSimulUseSimulationPlan.isSelected()); - SimulationUI simulationUI = getParentContainer(SimulationUI.class); - 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(); - java.util.List<Strategy> strategies = simulAction.getStrategies(); - for (Strategy s : strategies){ - listSimulParamsStrategiesModel.addElement(s); - } - listSimulParamsStrategies.setModel(listSimulParamsStrategiesModel); - if (listSimulParamsStrategiesModel.size() != 0) { - for (Strategy s : strategiesSelected){ - int index = listSimulParamsStrategiesModel.indexOf(s); - listSimulParamsStrategies.addSelectionInterval(index, index); - } - //strategySelected(); - } -} -protected void setListSimulParamsPopulationsItems(){ - List<Population> populationsSelected = simulAction.getSimulationParameter().getPopulations(); - DefaultListModel listSimulParamsPopulationsModel = new DefaultListModel(); - List<Population> populations = simulAction.getPopulations(); - for (Population p : populations){ - listSimulParamsPopulationsModel.addElement(p); - } - listSimulParamsPopulations.setModel(listSimulParamsPopulationsModel); - if (listSimulParamsPopulationsModel.size() != 0) { - for (Population p : populationsSelected) { - int index = listSimulParamsPopulationsModel.indexOf(p); - listSimulParamsPopulations.addSelectionInterval(index, index); - } - //simulAction.populationSelected(this); - } -} - -protected void strategySelected(){ - simulAction.setStrategies(listSimulParamsStrategies.getSelectedValuesList()); -} - -protected ComboBoxModel<String> getSimulParamsSelectModel() { - return getSimulParamsSelectModel(false); -} - -protected ComboBoxModel<String> getSimulParamsSelectModel(boolean force) { - List<String> items = simulAction.getFilteredOldSimulatorNames(force); - GenericComboModel<String> result = new GenericComboModel<String>(items); - return result; -} - -protected void resetFilter(){ - simulAction.resetOldSimulatorNames(); - fieldSimulParamsSelect.setModel(getSimulParamsSelectModel(false)); -} - ]]> - </script> <row> <cell fill="horizontal" weightx="1.0"> <Table> @@ -321,10 +49,10 @@ <JLabel text="isisfish.params.loadOldSimulation" /> </cell> <cell fill="horizontal" weightx="1.0"> - <FilterableComboBox id="fieldSimulParamsSelect" + <fr.ifremer.isisfish.ui.widget.FilterableComboBox id="fieldSimulParamsSelect" genericType="String" - model='{getSimulParamsSelectModel()}' - onActionPerformed='loadOldSimulation()' /> + model='{handler.getSimulParamsSelectModel()}' + onActionPerformed='handler.loadOldSimulation()' /> </cell> </row> </Table> @@ -352,8 +80,8 @@ <JTextField id="fieldSimulParamsName" /> <javax.swing.text.Document javaBean="fieldSimulParamsName.getDocument()" - onInsertUpdate='simulAction.setName(fieldSimulParamsName.getText())' - onRemoveUpdate='simulAction.setName(fieldSimulParamsName.getText())' /> + onInsertUpdate='getContextValue(SimulAction.class).setName(fieldSimulParamsName.getText())' + onRemoveUpdate='getContextValue(SimulAction.class).setName(fieldSimulParamsName.getText())' /> </cell> </row> </Table> @@ -368,7 +96,7 @@ <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()' /> + onActionPerformed='handler.regionChange()' /> </cell> </row> </Table> @@ -384,11 +112,11 @@ weighty="0.3"> <JScrollPane> <JTextArea id="fieldSimulParamsDesc" - text='{simulAction.getSimulationParameter().getDescription()}' /> + text='{getContextValue(SimulAction.class).getSimulationParameter().getDescription()}' /> <javax.swing.text.Document javaBean="fieldSimulParamsDesc.getDocument()" - onInsertUpdate='simulAction.getSimulationParameter().setDescription(fieldSimulParamsDesc.getText())' - onRemoveUpdate='simulAction.getSimulationParameter().setDescription(fieldSimulParamsDesc.getText())' /> + onInsertUpdate='getContextValue(SimulAction.class).getSimulationParameter().setDescription(fieldSimulParamsDesc.getText())' + onRemoveUpdate='getContextValue(SimulAction.class).getSimulationParameter().setDescription(fieldSimulParamsDesc.getText())' /> </JScrollPane> </cell> </row> @@ -404,11 +132,11 @@ <cell fill="both" weightx="1.0"> <JTextField id="fieldSimulParamsNbMois" - text='{String.valueOf(simulAction.getSimulationParameter().getNumberOfMonths())}' /> + text='{String.valueOf(getContextValue(SimulAction.class).getSimulationParameter().getNumberOfMonths())}' /> <javax.swing.text.Document javaBean="fieldSimulParamsNbMois.getDocument()" - onInsertUpdate='simulAction.setNumberOfMonths(fieldSimulParamsNbMois.getText())' - onRemoveUpdate='simulAction.setNumberOfMonths(fieldSimulParamsNbMois.getText())' /> + onInsertUpdate='getContextValue(SimulAction.class).setNumberOfMonths(fieldSimulParamsNbMois.getText())' + onRemoveUpdate='getContextValue(SimulAction.class).setNumberOfMonths(fieldSimulParamsNbMois.getText())' /> </cell> </row> </Table> @@ -438,7 +166,7 @@ genericType="fr.ifremer.isisfish.entities.Strategy" selectionMode="{javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION}" selectionModel="{new jaxx.runtime.swing.OneClicListSelectionModel(listSimulParamsStrategies.getSelectionModel(), listSimulParamsStrategies.getModel())}" - onValueChanged='strategySelected()' + onValueChanged='handler.strategySelected()' enabled="{getRegionStorage() != null}" /> </JScrollPane> </cell> @@ -449,7 +177,7 @@ genericType="fr.ifremer.isisfish.entities.Population" selectionMode="{javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION}" selectionModel="{new jaxx.runtime.swing.OneClicListSelectionModel(listSimulParamsPopulations.getSelectionModel(), listSimulParamsPopulations.getModel())}" - onValueChanged='simulAction.populationSelected(this)' + onValueChanged='getContextValue(SimulAction.class).populationSelected(this)' enabled="{getRegionStorage() != null}" /> </JScrollPane> </cell> @@ -457,7 +185,7 @@ <row> <cell fill="both" weighty="1" columns="2"> <JPanel id="populationEffectivesPanel" - layout="{new CardLayout()}"> + layout="{new java.awt.CardLayout()}"> <JLabel text="isisfish.params.nopopulation" horizontalAlignment="center" border="{BorderFactory.createEtchedBorder()}" @@ -483,7 +211,7 @@ <cell anchor="north"> <JButton id="addRuleFactorButton" icon='{SwingUtil.createImageIcon("building_add.png")}' - onActionPerformed="simulAction.addFactorWithComponent(this, ruleChooser)" + onActionPerformed="getContextValue(SimulAction.class).addFactorWithComponent(this, ruleChooser)" visible="{isSensitivity()}" enabled="{getRegionStorage() != null}" /> </cell> @@ -503,32 +231,32 @@ <cell fill="horizontal" weightx="1"> <JCheckBox text="isisfish.params.usePreSimulationScript" id="fieldUseSimulPreScripts" - selected='{simulAction.getSimulationParameter().getUsePreScript()}' + selected='{getContextValue(SimulAction.class).getSimulationParameter().getUsePreScript()}' visible='{!isSensitivity()}' - onItemStateChanged='enablePreScript()' /> + onItemStateChanged='handler.enablePreScript()' /> </cell> <cell fill="horizontal" weightx="1"> <JCheckBox text="isisfish.params.useSimulationPlan" id="fieldSimulUseSimulationPlan" - selected='{simulAction.getSimulationParameter().getUseSimulationPlan()}' + selected='{getContextValue(SimulAction.class).getSimulationParameter().getUseSimulationPlan()}' visible='{!isSensitivity()}' - onItemStateChanged='enableSimulationPlan()' + onItemStateChanged='handler.enableSimulationPlan()' enabled="{getRegionStorage() != null}" /> </cell> <cell fill="horizontal" weightx="1"> <JCheckBox text="isisfish.params.useOptimization" id="fieldSimulUseOptimization" - selected='{simulAction.getSimulationParameter().getUseOptimization()}' + selected='{getContextValue(SimulAction.class).getSimulationParameter().getUseOptimization()}' visible='{!isSensitivity()}' - onItemStateChanged='enableOptimization()' + onItemStateChanged='handler.enableOptimization()' enabled="{getRegionStorage() != null}" /> </cell> <cell fill="horizontal" weightx="1"> <JCheckBox text="isisfish.params.sensitivityOnlyKeepFirstResult" id="sensitivityOnlyKeepFirstResultCheckBox" - selected='{simulAction.getSimulationParameter().isSensitivityAnalysisOnlyKeepFirst()}' + selected='{getContextValue(SimulAction.class).getSimulationParameter().isSensitivityAnalysisOnlyKeepFirst()}' visible='{isSensitivity()}' - onItemStateChanged='simulAction.getSimulationParameter().setSensitivityAnalysisOnlyKeepFirst(sensitivityOnlyKeepFirstResultCheckBox.isSelected())' + onItemStateChanged='getContextValue(SimulAction.class).getSimulationParameter().setSensitivityAnalysisOnlyKeepFirst(sensitivityOnlyKeepFirstResultCheckBox.isSelected())' enabled="{getRegionStorage() != null}" /> </cell> </row> @@ -545,12 +273,12 @@ <cell fill="horizontal" weightx="0.4"> <JComboBox id="comboSelLauncher" genericType="fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher" - model='{new DefaultComboBoxModel(simulAction.getSimulationLauncher().toArray())}' /> + model='{new DefaultComboBoxModel(getContextValue(SimulAction.class).getSimulationLauncher().toArray())}' /> </cell> <cell fill="horizontal" weightx="0.4"> <JButton id="buttonSimulParamsSimulate" text="isisfish.common.simulate" - onActionPerformed='launchSimulation()' + onActionPerformed='handler.launchSimulation()' enabled="{getRegionStorage() != null}" /> </cell> <cell fill="horizontal" weightx="0.2"> Added: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PlanHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PlanHandler.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PlanHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -0,0 +1,144 @@ +/* + * #%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.util.List; + +import javax.swing.table.DefaultTableModel; + +import fr.ifremer.isisfish.datastore.RegionStorage; +import fr.ifremer.isisfish.datastore.SimulationPlanStorage; +import fr.ifremer.isisfish.datastore.StorageChangeEvent; +import fr.ifremer.isisfish.datastore.StorageChangeListener; +import fr.ifremer.isisfish.simulator.SimulationPlan; +import fr.ifremer.isisfish.ui.models.common.GenericComboModel; +import fr.ifremer.isisfish.ui.models.common.GenericListModel; +import fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellEditor; +import fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellRenderer; +import fr.ifremer.isisfish.ui.models.common.ScriptParametersTableModel; + +/** + * Plan UI handler. + * + * @author Eric Chatellier + */ +public class PlanHandler extends SimulationTabHandler { + + protected PlanUI tabUI; + + protected StorageChangeListener simulationPlanStorageListener; + + protected PlanHandler(PlanUI tabUI) { + super(tabUI); + this.tabUI = tabUI; + } + + protected void afterInit() { + simulationPlanStorageListener = new StorageChangeListener() { + @Override + public void versionDataChanged(StorageChangeEvent e) { + refresh(); + } + }; + SimulationPlanStorage.addStorageChangeListener(simulationPlanStorageListener); + + // model init + tabUI.fieldSimulParamsSimulationPlansSelect.setModel(getSimulationPlansComboModel()); + tabUI.listSimulParamsSimulationPlansList.setModel(getSimulationSimulationPlansListModel()); + } + + public void refresh() { + // simulation plans names list + tabUI.fieldSimulParamsSimulationPlansSelect.setModel(getSimulationPlansComboModel()); + // simulation simulation plans instance + tabUI.listSimulParamsSimulationPlansList.setModel(getSimulationSimulationPlansListModel()); + } + + /** + * Refresh simulation plan names list. + */ + protected GenericComboModel<String> getSimulationPlansComboModel() { + List<String> simulationPlanNames = tabUI.simulAction.getSimulationPlanNames(); + GenericComboModel<String> model = new GenericComboModel<>(simulationPlanNames); + return model; + } + + /** + * Refresh simulation simulation plan list. + */ + protected GenericListModel<SimulationPlan> getSimulationSimulationPlansListModel() { + List<SimulationPlan> simulationPlans = tabUI.simulAction.getParamSimulationPlans(); + GenericListModel<SimulationPlan> model = new GenericListModel<>(simulationPlans); + return model; + } + + protected void addSimulationPlan() { + String selectedSimulationPlanName = (String)tabUI.fieldSimulParamsSimulationPlansSelect.getSelectedItem(); + tabUI.simulAction.addSimulationPlan(tabUI, selectedSimulationPlanName); + tabUI.listSimulParamsSimulationPlansList.setModel(getSimulationSimulationPlansListModel()); + setSimulationPlanButtons(); + } + + protected void removeSimulationPlan() { + SimulationPlan selectedSimulationPlan = (SimulationPlan)tabUI.listSimulParamsSimulationPlansList.getSelectedValue(); + tabUI.simulAction.removeSimulationPlan(selectedSimulationPlan); + tabUI.listSimulParamsSimulationPlansList.setModel(getSimulationSimulationPlansListModel()); + setSimulationPlanButtons(); + } + + protected void clearSimulationPlan() { + tabUI.simulAction.clearSimulationPlans(); + tabUI.listSimulParamsSimulationPlansList.setModel(getSimulationSimulationPlansListModel()); + setSimulationPlanButtons(); + } + + protected void setSimulationPlanButtons() { + if (tabUI.getContextValue(SimulAction.class).getParamSimulationPlans().isEmpty()) { + tabUI.buttonSimulParamsSimulationPlansClear.setEnabled(false); + tabUI.buttonSimulParamsSimulationPlansRemove.setEnabled(false); + } else { + if (tabUI.listSimulParamsSimulationPlansList.getSelectedIndex() != -1) { + tabUI.buttonSimulParamsSimulationPlansRemove.setEnabled(true); + } else { + tabUI.buttonSimulParamsSimulationPlansRemove.setEnabled(false); + } + tabUI.buttonSimulParamsSimulationPlansClear.setEnabled(true); + } + setSimulParamsSimulationPlans(); + } + + protected void setSimulParamsSimulationPlans() { + SimulationPlan selectedSimulationPlan = (SimulationPlan)tabUI.listSimulParamsSimulationPlansList.getSelectedValue(); + if (selectedSimulationPlan != null) { + ScriptParametersTableModel model = new ScriptParametersTableModel(selectedSimulationPlan); + tabUI.simulParamsSimulationPlans.setModel(model); + ScriptParametersTableCellEditor cellEditor = new ScriptParametersTableCellEditor(selectedSimulationPlan); + cellEditor.setRegionStorage(tabUI.getContextValue(RegionStorage.class)); + tabUI.simulParamsSimulationPlans.getColumnModel().getColumn(0).setCellRenderer(new ScriptParametersTableCellRenderer(selectedSimulationPlan)); + tabUI.simulParamsSimulationPlans.getColumnModel().getColumn(1).setCellEditor(cellEditor); + } else { + // clear table + tabUI.simulParamsSimulationPlans.setModel(new DefaultTableModel()); + } + } +} Property changes on: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PlanHandler.java ___________________________________________________________________ Added: svn:eol-style + native Added: svn:keywords + Author Date Id Revision HeadURL Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PlanUI.jaxx (from rev 4226, trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SensUI.jaxx) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PlanUI.jaxx (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PlanUI.jaxx 2015-05-21 13:11:05 UTC (rev 4231) @@ -0,0 +1,92 @@ +<!-- + #%L + IsisFish + + $Id$ + $HeadURL$ + %% + Copyright (C) 2005 - 2015 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> + <PlanHandler id="handler" constructorParams="this" /> + + <import> + java.awt.Dimension + </import> + + <SimulAction id='simulAction' javaBean='getContextValue(SimulAction.class)' /> + + <script><![CDATA[ + protected void $afterCompleteSetup() { + handler.afterInit(); + } + ]]></script> + + <row> + <cell columns="2" fill="horizontal" weightx="1.0"> + <JComboBox id="fieldSimulParamsSimulationPlansSelect" + genericType="String" + renderer='{new fr.ifremer.isisfish.ui.models.simulationplan.SimulationPlanComboRenderer()}' /> + </cell> + </row> + <row> + <cell fill="both" weightx="0.5"> + <JScrollPane minimumSize='{new Dimension(0,0)}' preferredSize='{new Dimension(0,0)}'> + <JList id="listSimulParamsSimulationPlansList" selectionMode="{javax.swing.ListSelectionModel.SINGLE_SELECTION}" + genericType="fr.ifremer.isisfish.simulator.SimulationPlan" + onValueChanged='handler.setSimulationPlanButtons()' + cellRenderer='{new fr.ifremer.isisfish.ui.models.simulationplan.SimulationPlanListRenderer()}'/> + </JScrollPane> + </cell> + <cell fill="both" weightx="0.5"> + <Table name="isisfish.sens.title"> + <row> + <cell fill="both" weightx="1.0"> + <JButton id="buttonSimulParamsSimulationPlansAdd" text="isisfish.common.add" + onActionPerformed='handler.addSimulationPlan()'/> + </cell> + </row> + <row> + <cell fill="both" weightx="1.0"> + <JButton id="buttonSimulParamsSimulationPlansRemove" text="isisfish.common.remove" + onActionPerformed='handler.removeSimulationPlan()' enabled='false'/> + </cell> + </row> + <row> + <cell fill="both" weightx="1.0"> + <JButton id="buttonSimulParamsSimulationPlansClear" text="isisfish.common.clear" + onActionPerformed='handler.clearSimulationPlan()' enabled='false'/> + </cell> + </row> + </Table> + </cell> + </row> + <row> + <cell columns="2" fill="both" weightx="1.0" weighty="1.0"> + <JScrollPane> + <JTable id="simulParamsSimulationPlans" rowHeight='24' name="isisfish.sens.planParameters"/> + </JScrollPane> + </cell> + </row> + <row> + <cell columns="2" fill="horizontal" weightx="1.0"> + <JButton text="isisfish.sens.backParameter" onActionPerformed='getParentContainer(fr.ifremer.isisfish.ui.SimulationUI.class).selectParametersTab()'/> + </cell> + </row> +</Table> + Added: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PreScriptsHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PreScriptsHandler.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PreScriptsHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -0,0 +1,50 @@ +/* + * #%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; + +/** + * Prescript UI handler. + * + * @author Eric Chatellier + */ +public class PreScriptsHandler extends SimulationTabHandler { + + protected PreScriptsUI tabUI; + + protected PreScriptsHandler(PreScriptsUI tabUI) { + super(tabUI); + this.tabUI = tabUI; + } + + protected void afterInit() { + + } + + protected void save() { + tabUI.getContextValue(SimulAction.class).getSimulationParameter().setPreScript(tabUI.fieldSimulPreScript.getText()); + } + + public void refresh() { + + } +} Property changes on: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PreScriptsHandler.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PreScriptsUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PreScriptsUI.jaxx 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PreScriptsUI.jaxx 2015-05-21 13:11:05 UTC (rev 4231) @@ -23,28 +23,20 @@ #L% --> <JPanel layout='{new BorderLayout()}'> - <script><![CDATA[ - public PreScriptsUI(SimulAction action) { - setContextValue(action); - } - protected void save() { - getContextValue(SimulAction.class).getSimulationParameter().setPreScript(fieldSimulPreScript.getText()); - } + <PreScriptsHandler id="handler" constructorParams="this" /> - protected void refresh() { - - } - - /*protected void backParameter() { - SimulUI simul = getParentContainer(SimulUI.class); - simul.selTab(0); - }*/ + <script><![CDATA[ + protected void $afterCompleteSetup() { + handler.afterInit(); + } ]]></script> + <org.fife.ui.rtextarea.RTextScrollPane constraints='BorderLayout.CENTER'> - <org.fife.ui.rsyntaxtextarea.RSyntaxTextArea id="fieldSimulPreScript" onFocusLost='save()' + <org.fife.ui.rsyntaxtextarea.RSyntaxTextArea id="fieldSimulPreScript" onFocusLost='handler.save()' 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> Added: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ResultChoiceHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ResultChoiceHandler.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ResultChoiceHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -0,0 +1,89 @@ +/* + * #%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 static org.nuiton.i18n.I18n.t; + +import java.util.List; + +import javax.swing.event.ListSelectionEvent; + +import fr.ifremer.isisfish.ui.WelcomePanelUI; +import fr.ifremer.isisfish.ui.models.common.GenericListModel; + +/** + * Result choice UI handler. + * + * @author Eric Chatellier + */ +public class ResultChoiceHandler extends SimulationTabHandler { + + protected ResultChoiceUI tabUI; + + public ResultChoiceHandler(ResultChoiceUI tabUI) { + super(tabUI); + this.tabUI = tabUI; + } + + protected void afterInit() { + refresh(); + } + + public void refresh() { + + // FIXME listen for result name modification + + setListSimulResultChooseModel(); + } + + protected void setListSimulResultChooseModel() { + + List<String> availableResults = getSimulAction().getResultNames(); + List<String> userResults = getSimulAction().getDefaultResultNames(); + // userResults = intersection(userResults,availableResult) + userResults.retainAll(availableResults); + + GenericListModel<String> resultModel = new GenericListModel<>(availableResults); + tabUI.listResultNames.setModel(resultModel); + + for (String userResult : userResults) { + int index = availableResults.indexOf(userResult); + tabUI.listResultNames.addSelectionInterval(index, index); + } + } + + protected void saveParametersResultNames(ListSelectionEvent event) { + tabUI.getContextValue(SimulAction.class).saveParametersResultNames(tabUI.listResultNames.getSelectedValuesList()); + } + + protected void saveConfigResultNames() { + tabUI.getContextValue(SimulAction.class).saveConfigurationResultNames(tabUI.listResultNames.getSelectedValuesList()); + setStatusMessage(t("isisfish.resultChoice.saved")); + } + + protected void setStatusMessage(String txt) { + // TODO remove getParentContainer use + WelcomePanelUI root = tabUI.getParentContainer(WelcomePanelUI.class); + root.setStatusMessage(txt); + } +} Property changes on: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ResultChoiceHandler.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ResultChoiceUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ResultChoiceUI.jaxx 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ResultChoiceUI.jaxx 2015-05-21 13:11:05 UTC (rev 4231) @@ -23,69 +23,22 @@ #L% --> <JPanel layout='{new BorderLayout()}'> - <import> - static org.nuiton.i18n.I18n.t - fr.ifremer.isisfish.ui.WelcomePanelUI - fr.ifremer.isisfish.ui.models.common.GenericListModel - javax.swing.event.ListSelectionEvent - </import> - <script><![CDATA[ - + <ResultChoiceHandler id="handler" constructorParams="this" /> + + <script><![CDATA[ protected void $afterCompleteSetup() { - refresh(); + handler.afterInit(); } + ]]></script> - public void refresh() { - - // FIXME listen for result name modification - - setListSimulResultChooseModel(); - } - - protected SimulAction getSimulAction() { - return getContextValue(SimulAction.class); - } - - protected void setListSimulResultChooseModel() { - - List<String> availableResults = getSimulAction().getResultNames(); - List<String> userResults = getSimulAction().getDefaultResultNames(); - // userResults = intersection(userResults,availableResult) - userResults.retainAll(availableResults); - - GenericListModel<String> resultModel = new GenericListModel<>(availableResults); - listResultNames.setModel(resultModel); - - for (String userResult : userResults) { - int index = availableResults.indexOf(userResult); - listResultNames.addSelectionInterval(index, index); - } - } - - protected void saveParametersResultNames(ListSelectionEvent event) { - getContextValue(SimulAction.class).saveParametersResultNames(listResultNames.getSelectedValuesList()); - } - - protected void saveConfigResultNames() { - getContextValue(SimulAction.class).saveConfigurationResultNames(listResultNames.getSelectedValuesList()); - setStatusMessage(t("isisfish.resultChoice.saved")); - } - - protected void setStatusMessage(String txt) { - // TODO remove getParentContainer use - WelcomePanelUI root = getParentContainer(WelcomePanelUI.class); - root.setStatusMessage(txt); - } - ]]> - </script> <JLabel text="isisfish.resultChoice.save" horizontalAlignment="center" constraints='BorderLayout.NORTH'/> <JScrollPane constraints='BorderLayout.CENTER'> <JList id="listResultNames" selectionMode="{javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION}" genericType="String" cellRenderer='{new fr.ifremer.isisfish.ui.models.result.ResultListRenderer()}' - onValueChanged='saveParametersResultNames(event)' /> + onValueChanged='handler.saveParametersResultNames(event)' /> </JScrollPane> - <JButton constraints='BorderLayout.SOUTH' text="isisfish.common.saveNextSimulation" onActionPerformed='saveConfigResultNames()'/> + <JButton constraints='BorderLayout.SOUTH' text="isisfish.common.saveNextSimulation" onActionPerformed='handler.saveConfigResultNames()'/> </JPanel> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooser.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooser.jaxx 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooser.jaxx 2015-05-21 13:11:05 UTC (rev 4231) @@ -25,6 +25,8 @@ @param : Region storage (context) --> <Table> + <RuleChooserHandler id="handler" constructorParams="this" /> + <!-- Rules collection managed by current ui instance. --> <java.util.List genericType='fr.ifremer.isisfish.rule.Rule' id="rulesList" javaBean='new java.util.ArrayList<fr.ifremer.isisfish.rule.Rule>()'/> @@ -33,35 +35,9 @@ <Boolean id="showFactorColumn" javaBean="false" /> - <RuleChooserHandler id="handler" /> - - <import> - java.beans.PropertyChangeEvent - java.beans.PropertyChangeListener - java.util.List - fr.ifremer.isisfish.rule.Rule - fr.ifremer.isisfish.ui.models.common.GenericListModel - fr.ifremer.isisfish.ui.models.common.ScriptParametersTableModel - </import> - <script><![CDATA[ protected void $afterCompleteSetup() { - // Manage rule list change - addPropertyChangeListener(PROPERTY_RULES_LIST, new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getNewValue() == null) { - selectedRulesListModel.setElementList(new ArrayList<Rule>()); - } else { - List<Rule> rules = (List<Rule>)evt.getNewValue(); - selectedRulesListModel.setElementList(rules); - } - } - }); - - // fix colums size for buttons - if (isShowFactorColumn()) { - SwingUtil.fixTableColumnWidth(selectedRuleParameterTable, 2, 30); - } + handler.afterInit(); } ]]></script> @@ -88,7 +64,7 @@ </JScrollPane> </cell> <cell fill='horizontal'> - <JButton id="addRulesButton" text="isisfish.common.add" enabled="false" onActionPerformed='handler.addSelectedRules(this)'/> + <JButton id="addRulesButton" text="isisfish.common.add" enabled="false" onActionPerformed='handler.addSelectedRules()'/> </cell> <cell fill="both" rows="3" weightx="1" weighty="1"> <JScrollPane enabled="{isActive()}"> @@ -96,20 +72,20 @@ <JList id="selectedRulesList" selectionMode="{javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION}" genericType="fr.ifremer.isisfish.rule.Rule" model='{selectedRulesListModel}' cellRenderer='{new fr.ifremer.isisfish.ui.models.rule.RuleListCellRenderer()}' - onValueChanged='removeRuleButton.setEnabled(selectedRulesList.getSelectedIndex() != -1);clearRulesButton.setEnabled(selectedRulesList.getSelectedIndex() != -1);handler.displayRuleParameters(this)' /> + onValueChanged='removeRuleButton.setEnabled(selectedRulesList.getSelectedIndex() != -1);clearRulesButton.setEnabled(selectedRulesList.getSelectedIndex() != -1);handler.displayRuleParameters()' /> </JScrollPane> </cell> </row> <row> <cell fill='horizontal'> <JButton id="removeRuleButton" text="isisfish.common.remove" - enabled="false" onActionPerformed='handler.removeSelectedRules(this)'/> + enabled="false" onActionPerformed='handler.removeSelectedRules()'/> </cell> </row> <row> <cell fill='horizontal' anchor="north"> <JButton id="clearRulesButton" text="isisfish.common.clear" - enabled="false" onActionPerformed='handler.clearAllRules(this)'/> + enabled="false" onActionPerformed='handler.clearAllRules()'/> </cell> </row> <row weightx="2" weighty="2" columns="3"> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooserHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooserHandler.java 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooserHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -23,6 +23,9 @@ package fr.ifremer.isisfish.ui.simulator; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.ArrayList; import java.util.List; import fr.ifremer.isisfish.IsisFishException; @@ -36,6 +39,7 @@ import fr.ifremer.isisfish.ui.models.rule.RuleParametersFactorTableCellEditor; import fr.ifremer.isisfish.ui.models.rule.RuleParametersFactorTableCellRenderer; import fr.ifremer.isisfish.ui.widget.editor.ScriptParameterDialog; +import jaxx.runtime.SwingUtil; /** * Handler for {@link RuleChooser class}. @@ -48,12 +52,36 @@ */ public class RuleChooserHandler { + protected RuleChooser ruleChooser; + + public RuleChooserHandler(RuleChooser ruleChooser) { + this.ruleChooser = ruleChooser; + } + + protected void afterInit() { + + // Manage rule list change + ruleChooser.addPropertyChangeListener(RuleChooser.PROPERTY_RULES_LIST, new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { + if (evt.getNewValue() == null) { + ruleChooser.selectedRulesListModel.setElementList(new ArrayList<Rule>()); + } else { + List<Rule> rules = (List<Rule>)evt.getNewValue(); + ruleChooser.selectedRulesListModel.setElementList(rules); + } + } + }); + + // fix colums size for buttons + if (ruleChooser.isShowFactorColumn()) { + SwingUtil.fixTableColumnWidth(ruleChooser.selectedRuleParameterTable, 2, 30); + } + } + /** * Get new instance for selected rules names and add it to {@code rulesList} list. - * - * @param ruleChooser rule chooser ui */ - protected void addSelectedRules(RuleChooser ruleChooser) { + protected void addSelectedRules() { List<String> availableRuleValues = ruleChooser.getAvailableRuleList().getSelectedValuesList(); for (String availableRuleName : availableRuleValues) { try { @@ -74,10 +102,8 @@ /** * Remove selected rules for selected rules list. - * - * @param ruleChooser rule chooser ui */ - protected void removeSelectedRules(RuleChooser ruleChooser) { + protected void removeSelectedRules() { SimulAction simulAction = ruleChooser.getContextValue(SimulAction.class); List<Rule> selectedRuleValues = ruleChooser.getSelectedRulesList().getSelectedValuesList(); for (Rule selectedRuleValue : selectedRuleValues) { @@ -99,10 +125,8 @@ /** * Clear selected rule list. - * - * @param ruleChooser rule chooser ui */ - protected void clearAllRules(RuleChooser ruleChooser) { + protected void clearAllRules() { // condition pour savoir si on est dans l'instance principal // de définition d'une simulation (hack) if (ruleChooser.isShowFactorColumn()) { @@ -120,10 +144,8 @@ /** * Display parameters table form single selected list. - * - * @param ruleChooser rule chooser ui */ - protected void displayRuleParameters(RuleChooser ruleChooser) { + protected void displayRuleParameters() { Rule selectedRule = (Rule)ruleChooser.getSelectedRulesList().getSelectedValue(); if (selectedRule != null) { ruleChooser.getSelectedRuleParameterTableModel().setScript(selectedRule); Deleted: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SensUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SensUI.jaxx 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SensUI.jaxx 2015-05-21 13:11:05 UTC (rev 4231) @@ -1,187 +0,0 @@ -<!-- - #%L - IsisFish - - $Id$ - $HeadURL$ - %% - Copyright (C) 2005 - 2015 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> - <import> - java.awt.Dimension - javax.swing.table.DefaultTableModel - fr.ifremer.isisfish.datastore.SimulationPlanStorage - fr.ifremer.isisfish.datastore.StorageChangeEvent - fr.ifremer.isisfish.datastore.StorageChangeListener - fr.ifremer.isisfish.simulator.SimulationPlan - fr.ifremer.isisfish.ui.models.common.GenericComboModel - fr.ifremer.isisfish.ui.models.simulationplan.SimulationPlanComboRenderer - fr.ifremer.isisfish.ui.models.common.GenericListModel - fr.ifremer.isisfish.ui.models.simulationplan.SimulationPlanListRenderer - fr.ifremer.isisfish.ui.models.common.ScriptParametersTableModel - fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellEditor - fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellRenderer - fr.ifremer.isisfish.datastore.RegionStorage - </import> - <SimulAction id='simulAction' javaBean='getContextValue(SimulAction.class)' /> - - <script><![CDATA[ - - // to be notified of storage change event - StorageChangeListener simulationPlanStorageListener; - - protected void $afterCompleteSetup() { - simulationPlanStorageListener = new StorageChangeListener() { - @Override - public void versionDataChanged(StorageChangeEvent e) { - refresh(); - } - }; - SimulationPlanStorage.addStorageChangeListener(simulationPlanStorageListener); - } - - public void refresh() { - // simulation plans names list - fieldSimulParamsSimulationPlansSelect.setModel(getSimulationPlansComboModel()); - // simulation simulation plans instance - listSimulParamsSimulationPlansList.setModel(getSimulationSimulationPlansListModel()); - } - - /** - * Refresh simulation plan names list. - */ - protected GenericComboModel<String> getSimulationPlansComboModel() { - List<String> simulationPlanNames = simulAction.getSimulationPlanNames(); - GenericComboModel<String> model = new GenericComboModel<>(simulationPlanNames); - return model; - } - - /** - * Refresh simulation simulation plan list. - */ - protected GenericListModel<SimulationPlan> getSimulationSimulationPlansListModel() { - List<SimulationPlan> simulationPlans = simulAction.getParamSimulationPlans(); - GenericListModel<SimulationPlan> model = new GenericListModel<>(simulationPlans); - return model; - } - - protected void addSimulationPlan() { - String selectedSimulationPlanName = (String)fieldSimulParamsSimulationPlansSelect.getSelectedItem(); - simulAction.addSimulationPlan(this, selectedSimulationPlanName); - listSimulParamsSimulationPlansList.setModel(getSimulationSimulationPlansListModel()); - setSimulationPlanButtons(); - } - - protected void removeSimulationPlan() { - SimulationPlan selectedSimulationPlan = (SimulationPlan)listSimulParamsSimulationPlansList.getSelectedValue(); - simulAction.removeSimulationPlan(selectedSimulationPlan); - listSimulParamsSimulationPlansList.setModel(getSimulationSimulationPlansListModel()); - setSimulationPlanButtons(); - } - - protected void clearSimulationPlan() { - simulAction.clearSimulationPlans(); - listSimulParamsSimulationPlansList.setModel(getSimulationSimulationPlansListModel()); - setSimulationPlanButtons(); - } - - protected void setSimulationPlanButtons() { - if (getContextValue(SimulAction.class).getParamSimulationPlans().isEmpty()) { - buttonSimulParamsSimulationPlansClear.setEnabled(false); - buttonSimulParamsSimulationPlansRemove.setEnabled(false); - } else { - if (listSimulParamsSimulationPlansList.getSelectedIndex() != -1) { - buttonSimulParamsSimulationPlansRemove.setEnabled(true); - } else { - buttonSimulParamsSimulationPlansRemove.setEnabled(false); - } - buttonSimulParamsSimulationPlansClear.setEnabled(true); - } - setSimulParamsSimulationPlans(); - } - - protected void setSimulParamsSimulationPlans() { - SimulationPlan selectedSimulationPlan = (SimulationPlan)listSimulParamsSimulationPlansList.getSelectedValue(); - if (selectedSimulationPlan != null) { - ScriptParametersTableModel model = new ScriptParametersTableModel(selectedSimulationPlan); - simulParamsSimulationPlans.setModel(model); - ScriptParametersTableCellEditor cellEditor = new ScriptParametersTableCellEditor(selectedSimulationPlan); - cellEditor.setRegionStorage(getContextValue(RegionStorage.class)); - simulParamsSimulationPlans.getColumnModel().getColumn(0).setCellRenderer(new ScriptParametersTableCellRenderer(selectedSimulationPlan)); - simulParamsSimulationPlans.getColumnModel().getColumn(1).setCellEditor(cellEditor); - } else { - // clear table - simulParamsSimulationPlans.setModel(new DefaultTableModel()); - } - } - ]]> - </script> - <row> - <cell columns="2" fill="horizontal" weightx="1.0"> - <JComboBox id="fieldSimulParamsSimulationPlansSelect" model='{getSimulationPlansComboModel()}' - genericType="String" - renderer='{new SimulationPlanComboRenderer()}' /> - </cell> - </row> - <row> - <cell fill="both" weightx="0.5"> - <JScrollPane minimumSize='{new Dimension(0,0)}' preferredSize='{new Dimension(0,0)}'> - <JList id="listSimulParamsSimulationPlansList" selectionMode="{javax.swing.ListSelectionModel.SINGLE_SELECTION}" - genericType="fr.ifremer.isisfish.simulator.SimulationPlan" - onValueChanged='setSimulationPlanButtons()' model='{getSimulationSimulationPlansListModel()}' - cellRenderer='{new SimulationPlanListRenderer()}'/> - </JScrollPane> - </cell> - <cell fill="both" weightx="0.5"> - <Table name="isisfish.sens.title"> - <row> - <cell fill="both" weightx="1.0"> - <JButton id="buttonSimulParamsSimulationPlansAdd" text="isisfish.common.add" - onActionPerformed='addSimulationPlan()'/> - </cell> - </row> - <row> - <cell fill="both" weightx="1.0"> - <JButton id="buttonSimulParamsSimulationPlansRemove" text="isisfish.common.remove" - onActionPerformed='removeSimulationPlan()' enabled='false'/> - </cell> - </row> - <row> - <cell fill="both" weightx="1.0"> - <JButton id="buttonSimulParamsSimulationPlansClear" text="isisfish.common.clear" - onActionPerformed='clearSimulationPlan()' enabled='false'/> - </cell> - </row> - </Table> - </cell> - </row> - <row> - <cell columns="2" fill="both" weightx="1.0" weighty="1.0"> - <JScrollPane> - <JTable id="simulParamsSimulationPlans" rowHeight='24' name="isisfish.sens.planParameters"/> - </JScrollPane> - </cell> - </row> - <row> - <cell columns="2" fill="horizontal" weightx="1.0"> - <JButton text="isisfish.sens.backParameter" onActionPerformed='getParentContainer(fr.ifremer.isisfish.ui.SimulationUI.class).selectParametersTab()'/> - </cell> - </row> -</Table> - Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -135,7 +135,6 @@ protected RegionStorage regionStorage = null; protected SimulationStorage simulStorage = null; - protected List<String> oldSimulNames = null; protected String simulName = null; /** @@ -504,61 +503,6 @@ return SimulatorStorage.getSimulatorNames(); } - /** - * Return old simulations. - * - * @return old simulations - */ - public List<String> getOldSimulationItem() { - - //try { - oldSimulNames = new ArrayList<String>(); - - //FilterModel<SimulationProperties, String> filterModel; - // keep in context list of old simulation names (for filter process) - oldSimulNames.addAll(SimulationStorage.getSimulationNames()); - // create filter model - //filterModel = SimulationFilterUtil.createFilterModel(oldSimulNames); - // to used directly model.getFilteredResult() in xml - // we must fill filterModel result with original items - //filterModel.selectAll(); - - // chatellier : Ajout d'une entrée vide pour forcer la sélection - // et que le changement lance un evenement sur la liste - // Add empty item after, otherwise, un " " directory - // will be created - oldSimulNames.add(0, " "); - - return oldSimulNames; - /*} catch (ParseException e) { - if (log.isErrorEnabled()) { - log.error("Can't get old simulation item", 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(t("isisfish.error.simulation.listoldsimulation"), e); - } - return null;*/ - } - - public List<String> getFilteredOldSimulatorNames(boolean force) { - if (oldSimulNames == null || force) { - oldSimulNames = getOldSimulationItem(); - } - return oldSimulNames; - } - - public void setOldSimulatorNames(List<String> sn) { - oldSimulNames = sn; - } - - public void resetOldSimulatorNames() { - oldSimulNames = getOldSimulationItem(); - } - /* ************ * AdvancedParameterUI @@ -651,12 +595,12 @@ return param.getSimulationPlans(); } - public void addSimulationPlan(SensUI sensUI, String name) { + public void addSimulationPlan(PlanUI planUI, String name) { try { SimulationPlan sp = SimulationPlanStorage.getSimulationPlan(name).getNewInstance(); // add it after autoconfiguration (if enabled) - sp = (SimulationPlan)ScriptParameterDialog.displayConfigurationFrame(sensUI, sp); + sp = (SimulationPlan)ScriptParameterDialog.displayConfigurationFrame(planUI, sp); if (sp != null) { getSimulationParameter().addSimulationPlan(sp); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulUI.jaxx 2015-05-20 13:37:54 UTC (rev 4230) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulUI.jaxx 2015-05-21 13:11:05 UTC (rev 4231) @@ -27,14 +27,14 @@ <script><![CDATA[ @Override public void refresh() { - paramsUI.refresh(); - preScriptUI.refresh(); - sensUI.refresh(); - optimizationUI.refresh(); - exportUI.refresh(); - resultChoiceUI.refresh(); - advancedParamsUI.refresh(); - optimizationUI.refresh(); + paramsUI.getHandler().refresh(); + preScriptUI.getHandler().refresh(); + planUI.getHandler().refresh(); + optimizationUI.getHandler().refresh(); + exportUI.getHandler().refresh(); + resultChoiceUI.getHandler().refresh(); + advancedParamsUI.getHandler().refresh(); + optimizationUI.getHandler().refresh(); } /** @@ -42,7 +42,7 @@ */ @Override protected void regionStorageChanged() { - optimizationUI.regionStorageChanged(); + //optimizationUI.getHandler().regionStorageChanged(); } @Override @@ -82,7 +82,7 @@ <PreScriptsUI id="preScriptUI" constructorParams='this' /> </tab> <tab title='isisfish.sens.title' enabled='false'> - <SensUI id="sensUI" constructorParams='this' /> + <PlanUI id="planUI" constructorParams='this' /> </tab> <tab title='isisfish.optimization.title' enabled='false'> <OptimizationUI id="optimizationUI" constructorParams='this' /> Added: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulationTabHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulationTabHandler.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulationTabHandler.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -0,0 +1,44 @@ +package fr.ifremer.isisfish.ui.simulator; + +import fr.ifremer.isisfish.simulator.SimulationParameter; +import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup; +import fr.ifremer.isisfish.ui.CommonHandler; +import jaxx.runtime.JAXXContext; + +/** + * Handler common à tous les handler de chaque onglet de l'interface de simulation. + * + * @author Eric Chatellier + */ +public abstract class SimulationTabHandler extends CommonHandler { + + // TODO might be something else, like SimulatorTabUI ? + protected JAXXContext simulationUI; + + protected SimulationTabHandler(JAXXContext simulationUI) { + this.simulationUI = simulationUI; + } + + /** + * Return simulation parameters from context. + * + * @return SimulationParameter + */ + protected SimulationParameter getParameters() { + return simulationUI.getContextValue(SimulationParameter.class); + } + + /** + * Return FactorGroup from context. + * + * @return FactorGroup + */ + protected FactorGroup getFactorGroup() { + return simulationUI.getContextValue(FactorGroup.class); + } + + @Deprecated + protected SimulAction getSimulAction() { + return simulationUI.getContextValue(SimulAction.class); + } +} Property changes on: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulationTabHandler.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulatorContext.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulatorContext.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulatorContext.java 2015-05-21 13:11:05 UTC (rev 4231) @@ -0,0 +1,41 @@ +/* + * #%L + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2015 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 jaxx.runtime.JAXXContext; +import jaxx.runtime.context.JAXXInitialContext; + +/** + * Ce contexte regroupe les élements qui servent à une hierachie d'interfaces Simulator. + * + * @author Eric Chatellier + */ +public class SimulatorContext extends JAXXInitialContext { + + public SimulatorContext(JAXXContext parent) { + setParentContext(parent); + + // FIXME remove this + add(new SimulAction()); + } +} Property changes on: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulatorContext.java ___________________________________________________________________ Added: svn:eol-style + native Added: svn:keywords + Author Date Id Revision HeadURL
participants (1)
-
echatellier@users.forge.codelutin.com