r4233 - in trunk/src: main/java/fr/ifremer/isisfish/ui main/java/fr/ifremer/isisfish/ui/config main/java/fr/ifremer/isisfish/ui/input main/java/fr/ifremer/isisfish/ui/input/cell main/java/fr/ifremer/isisfish/ui/result main/java/fr/ifremer/isisfish/ui/sensitivity main/java/fr/ifremer/isisfish/ui/sensitivity/model main/java/fr/ifremer/isisfish/ui/sensitivity/wizard main/java/fr/ifremer/isisfish/ui/simulator main/java/fr/ifremer/isisfish/ui/widget test/java/fr/ifremer/isisfish/ui
Author: echatellier Date: 2015-05-22 16:10:26 +0000 (Fri, 22 May 2015) New Revision: 4233 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4233 Log: Move script code to dedicated handler (sensitivity) Added: trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/FactorWizardHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulatorTabHandler.java Removed: trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigAction.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulationTabHandler.java Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/NavigationHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/NavigationUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/config/RConfigHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/config/RConfigUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/cell/CellHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultSimulationFrame.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTransferHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTree.java trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/FactorWizardUI.jaxx 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/OptimizationHandler.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/PreScriptsHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ResultChoiceHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java trunk/src/main/java/fr/ifremer/isisfish/ui/widget/Interval.java trunk/src/test/java/fr/ifremer/isisfish/ui/AbstractFestIT.java Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/NavigationHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/NavigationHandler.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/NavigationHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -81,7 +81,7 @@ * Get ui that can display internalClass. * * @param internalClass internal class to get ui - * @return ui for class + * @return navigationUI for class * @throws Exception */ protected InputContentUI<?> getUIInstanceForBeanClass(Class<?> internalClass, NavigationUI navigationUI) throws Exception { Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/NavigationUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/NavigationUI.jaxx 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/NavigationUI.jaxx 2015-05-22 16:10:26 UTC (rev 4233) @@ -22,6 +22,6 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<JPanel layout='{new BorderLayout()}'> +<JPanel layout='{new BorderLayout()}' abstract="true"> </JPanel> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -302,8 +302,6 @@ */ public void configurationR(WelcomeUI welcomeUI) { RConfigUI rconfigUI = new RConfigUI(welcomeUI, welcomeUI); - RConfigHandler handler = rconfigUI.getHandler(); - handler.init(rconfigUI); rconfigUI.pack(); rconfigUI.setLocationRelativeTo(welcomeUI); rconfigUI.setVisible(true); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/config/RConfigHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/config/RConfigHandler.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/config/RConfigHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -50,12 +50,16 @@ private static Log log = LogFactory.getLog(RConfigHandler.class); + protected RConfigUI rconfigUI; + + public RConfigHandler(RConfigUI rconfigUI) { + this.rconfigUI = rconfigUI; + } + /** * Initialise l'ui. - * - * @param rconfigUI ui to init */ - public void init(RConfigUI rconfigUI) { + public void afterInit() { String rHome = System.getenv("R_HOME"); rconfigUI.getRHomeField().setText(rHome); if (StringUtils.isBlank(rHome)) { @@ -84,10 +88,8 @@ /** * Test r configuration. - * - * @param rconfigUI */ - public void testRCOnfiguration(RConfigUI rconfigUI) { + public void testRCOnfiguration() { REngine engine = null; try { engine = new RProxy(); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/config/RConfigUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/config/RConfigUI.jaxx 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/config/RConfigUI.jaxx 2015-05-22 16:10:26 UTC (rev 4233) @@ -23,7 +23,14 @@ #L% --> <JDialog title="isisfish.simulator.configuration.r.title" layout="{new BorderLayout()}"> - <RConfigHandler id="handler" /> + <RConfigHandler id="handler" constructorParams='this' /> + + <script><![CDATA[ + protected void $afterCompleteSetup() { + handler.afterInit(); + } + ]]></script> + <Table constraints="BorderLayout.CENTER"> <row> <cell columns="2"> @@ -58,7 +65,7 @@ <cell columns="2" anchor='center'> <JPanel> <JButton text="isisfish.simulator.configuration.r.launchtest" - onActionPerformed="getHandler().testRCOnfiguration(this)" /> + onActionPerformed="handler.testRCOnfiguration()" /> <JButton text="isisfish.common.close" onActionPerformed="dispose()" /> </JPanel> Deleted: trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigAction.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigAction.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigAction.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -1,561 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, Chatellier Eric - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * 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.config; - -import static org.nuiton.i18n.I18n.t; - -import java.awt.Color; -import java.io.File; -import java.io.IOException; -import java.io.StringWriter; -import java.io.Writer; - -import javax.swing.JComponent; -import javax.swing.JOptionPane; - -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.jcraft.jsch.JSch; -import com.jcraft.jsch.JSchException; -import com.jcraft.jsch.KeyPair; -import com.jcraft.jsch.Session; - -import fr.ifremer.isisfish.IsisFish; -import fr.ifremer.isisfish.util.ssh.InvalidPassphraseException; -import fr.ifremer.isisfish.util.ssh.ProxyCommand; -import fr.ifremer.isisfish.util.ssh.SSHAgent; -import fr.ifremer.isisfish.util.ssh.SSHException; -import fr.ifremer.isisfish.util.ssh.SSHUserInfo; -import fr.ifremer.isisfish.util.ssh.SSHUtils; - -/** - * Action for SSHLauncherConfig UI. - * - * @author chatellier - * @version $Revision$ - * - * Last update : $Date$ - * By : $Author$ - */ -public class SSHLauncherConfigAction { - - /** Class logger. */ - private static Log log = LogFactory.getLog(SSHLauncherConfigAction.class); - - protected SSHLauncherConfigUI configUI; - - protected String currentSSHserver; - protected String currentSSHUsername; - protected File currentSSHKey; - protected String currentSSHUserhome; - protected String currentSSHDatapath; - protected String currentSSHIsisHome; - protected String currentSSHTempPath; - protected String currentSSHJavaPath; - protected String currentSSHPbsBinPath; - protected String currentSSHPbsQsubOptions; - protected String currentSSHMaxThreads; - protected String currentSSHMaxMemory; - protected String currentSSHControlInterval; - - /** - * Constructor with UI. - * - * @param configUI config ui - */ - public SSHLauncherConfigAction(SSHLauncherConfigUI configUI) { - this.configUI = configUI; - } - - /** - * Reset values with default configuration values. - */ - public void resetSSHConfiguration() { - // server config - configUI.getSshServerField().setText(IsisFish.config.getSimulatorSshServer()); - configUI.getUsernameField().setText(IsisFish.config.getSimulatorSshUsername()); - configUI.getSshKeyField().setText(IsisFish.config.getSSHPrivateKeyFilePath().getAbsolutePath()); - - // caparmor config - configUI.getSshUserhomeField().setText(IsisFish.config.getSimulatorSshUserHome()); - configUI.getSshDatapathField().setText(IsisFish.config.getSimulatorSshDataPath()); - configUI.getSshIsisHomeField().setText(IsisFish.config.getSimulatorSshIsisHome()); - configUI.getSshTemppathField().setText(IsisFish.config.getSimulatorSshTmpPath()); - configUI.getSshJavaPathField().setText(IsisFish.config.getSimulatorSshJavaPath()); - configUI.getSshPbsBinPathField().setText(IsisFish.config.getSimulatorSshPbsBinPath()); - configUI.getSshPbsQsubOptionsField().setText(IsisFish.config.getSimulatorSshPbsQsubOptions()); - configUI.getSshControlIntervalField().setText(String.valueOf(IsisFish.config.getSimulatorSshControlCheckInterval())); - configUI.getSshMaxThreadsField().setText(String.valueOf(IsisFish.config.getSimulatorSshMaxThreads())); - configUI.getSshMaxMemoryField().setText(IsisFish.config.getSimulatorSshMaxMemory()); - - doCheck(); - } - - /** - * Reset display. - */ - protected void configurationChanged() { - - configUI.setConnected(false); - configUI.getMessageLabel().setText(""); - configUI.getStatusFreeDatabaseLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", "isis-database", "0")); - configUI.getStatusFreeTempLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", "isis-tmp", "0")); - - } - - /** - * Check input format validity. - */ - public void doCheck() { - - configurationChanged(); - - // copy values - currentSSHserver = configUI.getSshServerField().getText().trim(); - if (currentSSHserver.isEmpty()) { - setColor(true, configUI.getSshServerField()); - } else { - setColor(false, configUI.getSshServerField()); - } - - // copy values - //currentSSHsftpServer = configUI.getSshSftpServerField().getText().trim(); - - // can be empty (optionnal use) - currentSSHUsername = configUI.getUsernameField().getText().trim(); - if (!currentSSHUsername.matches("\\w+")) { - setColor(true, configUI.getUsernameField()); - } else { - setColor(false, configUI.getUsernameField()); - } - - // if ssh key is set, must be a valid file - currentSSHKey = new File(configUI.getSshKeyField().getText().trim()); - if (!currentSSHKey.isFile()) { - setColor(true, configUI.getSshKeyField()); - } else { - configUI.getSshKeyButton().setEnabled(false); - configUI.getSshKeyField().setEnabled(false); - setColor(false, configUI.getSshKeyField()); - } - - currentSSHDatapath = configUI.getSshDatapathField().getText().trim(); - if (currentSSHDatapath.isEmpty()) { - setColor(true, configUI.getSshDatapathField()); - } else { - setColor(false, configUI.getSshDatapathField()); - } - - currentSSHIsisHome = configUI.getSshIsisHomeField().getText().trim(); - if (currentSSHIsisHome.isEmpty()) { - setColor(true, configUI.getSshIsisHomeField()); - } else { - setColor(false, configUI.getSshIsisHomeField()); - } - - currentSSHTempPath = configUI.getSshTemppathField().getText().trim(); - if (currentSSHTempPath.isEmpty()) { - setColor(true, configUI.getSshTemppathField()); - } else { - setColor(false, configUI.getSshTemppathField()); - } - - currentSSHJavaPath = configUI.getSshJavaPathField().getText().trim(); - if (currentSSHJavaPath.isEmpty()) { - setColor(true, configUI.getSshJavaPathField()); - } else { - setColor(false, configUI.getSshJavaPathField()); - } - - currentSSHPbsBinPath = configUI.getSshPbsBinPathField().getText() - .trim(); - if (currentSSHPbsBinPath.isEmpty()) { - setColor(true, configUI.getSshPbsBinPathField()); - } else { - setColor(false, configUI.getSshPbsBinPathField()); - } - - // currentSSHPbsQsubOptions - currentSSHPbsQsubOptions = configUI.getSshPbsQsubOptionsField().getText().trim(); - - // currentSSHMaxThreads - currentSSHMaxThreads = configUI.getSshMaxThreadsField().getText().trim(); - if (!currentSSHMaxThreads.matches("\\d+")) { - setColor(true, configUI.getSshMaxThreadsField()); - } else { - setColor(false, configUI.getSshMaxThreadsField()); - } - - // currentSSHMaxMemory - currentSSHMaxMemory = configUI.getSshMaxMemoryField().getText().trim(); - - // currentSSHControlInterval - currentSSHControlInterval = configUI.getSshControlIntervalField() - .getText().trim(); - if (!currentSSHControlInterval.matches("\\d+")) { - setColor(true, configUI.getSshControlIntervalField()); - } else { - setColor(false, configUI.getSshControlIntervalField()); - } - } - - /** - * Set values in config and force configuration save. - */ - public void saveSSHConfiguration() { - IsisFish.config.setSimulatorSshServer(currentSSHserver); - //IsisFish.config.setSimulatorSshSftpServer(currentSSHsftpServer); - IsisFish.config.setSimulatorSshUsername(currentSSHUsername); - IsisFish.config.setSSHPrivateKeyFilePath(currentSSHKey); - - IsisFish.config.setSimulatorSshUserHome(currentSSHUserhome); - IsisFish.config.setSimulatorSshDataPath(currentSSHDatapath); - IsisFish.config.setSimulatorSshIsisHome(currentSSHIsisHome); - IsisFish.config.setSimulatorSshTmpPath(currentSSHTempPath); - IsisFish.config.setSimulatorSshJavaPath(currentSSHJavaPath); - IsisFish.config.setSimulatorSshPbsBinPath(currentSSHPbsBinPath); - IsisFish.config.setSimulatorSshPbsQsubOptions(currentSSHPbsQsubOptions); - IsisFish.config.setSimulatorSshControlCheckInterval(Integer.parseInt(currentSSHControlInterval)); - IsisFish.config.setSimulatorSshMaxThreads(Integer.parseInt(currentSSHMaxThreads)); - IsisFish.config.setSimulatorSshMaxMemory(currentSSHMaxMemory); - - IsisFish.config.saveForUser(); - configUI.dispose(); - } - - /** - * Close frame. - */ - public void cancelSSHConfiguration() { - configUI.dispose(); - } - - /** - * Realise une connexion ssh et teste les données. - */ - public void testSSHConfiguration() { - JSch jsch = new JSch(); - - String host = currentSSHserver; - int port = 22; // by default, 22 - String sPort = null; - - try { - if (host.indexOf(':') > 0) { - sPort = host.substring(host.indexOf(':') + 1); - port = Integer.parseInt(sPort); - host = host.substring(0, host.indexOf(':')); - } - - // add ssh key - boolean sshKeyUsed = false; - if (currentSSHKey.canRead()) { - if (log.isInfoEnabled()) { - log.info(t("Ssh key found '%s' will be used to connect to", - currentSSHKey.getAbsoluteFile(), host)); - } - jsch.addIdentity(currentSSHKey.getAbsolutePath()); - sshKeyUsed = true; - } else { - if (log.isInfoEnabled()) { - log.info(t("Can't read ssh key : %s", currentSSHKey)); - } - } - - Session session = jsch.getSession(currentSSHUsername, host, port); - String proxyCommand = IsisFish.config.getSimulatorSshProxyCommand(); - if (StringUtils.isNotBlank(proxyCommand)) { - session.setProxy(new ProxyCommand(proxyCommand)); - } - - // username and password will be given via UserInfo interface. - SSHUserInfo ui = new SSHUserInfo(); - if (sshKeyUsed) { - char[] passchars = SSHAgent.getAgent().getPassphrase(currentSSHKey); - String passphrase = String.valueOf(passchars); - ui.setPassphrase(passphrase); - setTestMessage(t("isisfish.simulator.ssh.configuration.connectingpk"), false); - } else { - setTestMessage(t("isisfish.simulator.ssh.configuration.connecting"), false); - } - session.setUserInfo(ui); - session.connect(10000); // timeout - - setTestMessage(t("isisfish.simulator.ssh.configuration.connectionok"), false); - - // get user home - currentSSHUserhome = getUserHomeDirectory(session); - configUI.getSshUserhomeField().setText(currentSSHUserhome); - // get space disk - String databaseSize = getFolderSize(session, currentSSHDatapath); - String temppathSize = getFolderSize(session, currentSSHTempPath); - configUI.getStatusFreeDatabaseLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", currentSSHDatapath, databaseSize)); - configUI.getStatusFreeTempLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", currentSSHTempPath, temppathSize)); - session.disconnect(); - - configUI.setConnected(true); - } catch (NumberFormatException e) { - if (log.isErrorEnabled()) { - log.error("Can't connect", e); - } - setTestMessage(t("isisfish.error.simulation.remote.wrongportvalue", - sPort), true); - } catch (JSchException e) { - if (log.isErrorEnabled()) { - log.error("Can't connect", e); - } - setTestMessage(t("isisfish.simulator.ssh.configuration.connectionerror", e - .getMessage()), true); - } catch (SSHException e) { - if (log.isErrorEnabled()) { - log.error("Can't connect", e); - } - setTestMessage(t("isisfish.simulator.ssh.configuration.connectionerror", e - .getMessage()), true); - } catch (InvalidPassphraseException e) { - if (log.isErrorEnabled()) { - log.error("Can't connect", e); - } - setTestMessage( - t("isisfish.simulator.ssh.configuration.invalidpassphrase"), - true); - } - } - - /** - * Get user home directory with an opened session. - * - * @param session opened session - * @return 'pwd' result - * @throws SSHException - */ - protected String getUserHomeDirectory(Session session) throws SSHException { - - String command = "pwd"; - - Writer output = new StringWriter(); - int exit = SSHUtils.exec(session, command, output); - - if (exit != 0) { - throw new SSHException(t("Command '%s' fail to execute", command)); - } - - String out = output.toString(); - return out; - } - - /** - * Get user home directory with an opened session. - * - * @param session opened session - * @param path path to get size - * @return dir size - * @throws SSHException - */ - protected String getFolderSize(Session session, String path) throws SSHException { - - String command = "du -hs \"" + path + "\""; - - Writer output = new StringWriter(); - SSHUtils.exec(session, command, output); - - // la sortie est "35Go isisdatabase-3" - String out = output.toString(); - out = out.split("\\s+")[0]; - return out; - } - - /** - * Clear database. - */ - public void clearDatabase() { - clearFolder(currentSSHDatapath); - } - - /** - * Clear temp directory. - */ - public void clearTempDirectory() { - clearFolder(currentSSHTempPath); - } - - /** - * Clear specified directory. - * - * @param path path to clear - */ - protected void clearFolder(String path) { - - // prevent, for home deletion, can happens :D - if (StringUtils.isEmpty(path) || path.trim().equals(".")) { - throw new IllegalArgumentException("Can't delete directory : " + path); - } - - int response = JOptionPane.showConfirmDialog(configUI, t("isisfish.simulator.ssh.configuration.freespace.confirmdelete", path), - t("isisfish.common.confirm"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); - - if (response == JOptionPane.YES_OPTION) { - JSch jsch = new JSch(); - - String host = currentSSHserver; - int port = 22; // by default, 22 - String sPort = null; - - try { - if (host.indexOf(':') > 0) { - sPort = host.substring(host.indexOf(':') + 1); - port = Integer.parseInt(sPort); - host = host.substring(0, host.indexOf(':')); - } - - // add ssh key - boolean sshKeyUsed = false; - if (currentSSHKey.canRead()) { - if (log.isInfoEnabled()) { - log.info(t("Ssh key found '%s' will be used to connect to", - currentSSHKey.getAbsoluteFile(), host)); - } - jsch.addIdentity(currentSSHKey.getAbsolutePath()); - sshKeyUsed = true; - } else { - if (log.isInfoEnabled()) { - log.info(t("Can't read ssh key : %s", currentSSHKey)); - } - } - - Session session = jsch.getSession(currentSSHUsername, host, port); - String proxyCommand = IsisFish.config.getSimulatorSshProxyCommand(); - if (StringUtils.isNotBlank(proxyCommand)) { - session.setProxy(new ProxyCommand(proxyCommand)); - } - - // username and password will be given via UserInfo interface. - SSHUserInfo ui = new SSHUserInfo(); - if (sshKeyUsed) { - char[] passchars = SSHAgent.getAgent().getPassphrase(currentSSHKey); - String passphrase = String.valueOf(passchars); - ui.setPassphrase(passphrase); - } - session.setUserInfo(ui); - session.connect(10000); // timeout - - String command = "rm -rf \"" + path + "\""; - - if (log.isDebugEnabled()) { - log.debug("Removing folder with command : " + command); - } - Writer output = new StringWriter(); - int exit = SSHUtils.exec(session, command, output); - - // get space disk - String databaseSize = getFolderSize(session, currentSSHDatapath); - String temppathSize = getFolderSize(session, currentSSHTempPath); - configUI.getStatusFreeDatabaseLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", currentSSHDatapath, databaseSize)); - configUI.getStatusFreeTempLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", currentSSHTempPath, temppathSize)); - session.disconnect(); - - session.disconnect(); - if (exit != 0) { - throw new SSHException(t("Command '%s' fail to execute", command)); - } - } - catch (Exception e) { - if (log.isErrorEnabled()) { - log.error("Can't connect", e); - } - setTestMessage(t("isisfish.simulator.ssh.configuration.connectionerror", e.getMessage()), true); - } - } - else { - if (log.isInfoEnabled()) { - log.info("Delete action canceled by user"); - } - } - } - - /** - * Generate new SSH key. - */ - protected void generateSSHKey() { - if (currentSSHKey.exists()) { - throw new IllegalArgumentException("Can't overwrite ssh key"); - } - - try { - // make parent dir - if (currentSSHKey.getParentFile() != null - && !currentSSHKey.getParentFile().exists()) { - currentSSHKey.getParentFile().mkdirs(); - } - JSch jsch = new JSch(); - KeyPair kpair = KeyPair.genKeyPair(jsch, KeyPair.RSA, 2048); - //kpair.setPassphrase(passphrase); - kpair.writePrivateKey(currentSSHKey.getAbsolutePath()); - kpair.writePublicKey(currentSSHKey.getAbsolutePath() + ".pub", - currentSSHUsername + "@forIsisFish"); - if (log.isInfoEnabled()) { - log.info("Finger print: " + kpair.getFingerPrint()); - } - kpair.dispose(); - } catch (JSchException e) { - if (log.isErrorEnabled()) { - log.error("Can't make ssh key", e); - } - } catch (IOException e) { - if (log.isErrorEnabled()) { - log.error("Can't make ssh key", e); - } - } - - // refresh ckeck - doCheck(); - } - - /** - * Set color depending of field validity. - * - * - * @param invalid valid field - * @param component component to set color - */ - protected void setColor(boolean invalid, JComponent component) { - component.setForeground(invalid ? Color.RED : Color.BLACK); - } - - /** - * Set message in message field with status color. - * - * @param message message to display - * @param error error status - */ - protected void setTestMessage(String message, boolean error) { - configUI.getMessageLabel().setForeground( - error ? Color.RED : Color.GREEN.darker()); - configUI.getMessageLabel().setText(message); - } -} Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigHandler.java (from rev 4226, trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigAction.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigHandler.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -0,0 +1,566 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, Chatellier Eric + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * 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.config; + +import static org.nuiton.i18n.I18n.t; + +import java.awt.Color; +import java.io.File; +import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; + +import javax.swing.JComponent; +import javax.swing.JOptionPane; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.JSchException; +import com.jcraft.jsch.KeyPair; +import com.jcraft.jsch.Session; + +import fr.ifremer.isisfish.IsisFish; +import fr.ifremer.isisfish.util.ssh.InvalidPassphraseException; +import fr.ifremer.isisfish.util.ssh.ProxyCommand; +import fr.ifremer.isisfish.util.ssh.SSHAgent; +import fr.ifremer.isisfish.util.ssh.SSHException; +import fr.ifremer.isisfish.util.ssh.SSHUserInfo; +import fr.ifremer.isisfish.util.ssh.SSHUtils; + +/** + * Action for SSHLauncherConfig UI. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class SSHLauncherConfigHandler { + + /** Class logger. */ + private static Log log = LogFactory.getLog(SSHLauncherConfigHandler.class); + + protected SSHLauncherConfigUI configUI; + + protected String currentSSHserver; + protected String currentSSHUsername; + protected File currentSSHKey; + protected String currentSSHUserhome; + protected String currentSSHDatapath; + protected String currentSSHIsisHome; + protected String currentSSHTempPath; + protected String currentSSHJavaPath; + protected String currentSSHPbsBinPath; + protected String currentSSHPbsQsubOptions; + protected String currentSSHMaxThreads; + protected String currentSSHMaxMemory; + protected String currentSSHControlInterval; + + /** + * Constructor with UI. + * + * @param configUI config ui + */ + public SSHLauncherConfigHandler(SSHLauncherConfigUI configUI) { + this.configUI = configUI; + } + + protected void afterInit() { + // fill default values + resetSSHConfiguration(); + } + + /** + * Reset values with default configuration values. + */ + public void resetSSHConfiguration() { + // server config + configUI.getSshServerField().setText(IsisFish.config.getSimulatorSshServer()); + configUI.getUsernameField().setText(IsisFish.config.getSimulatorSshUsername()); + configUI.getSshKeyField().setText(IsisFish.config.getSSHPrivateKeyFilePath().getAbsolutePath()); + + // caparmor config + configUI.getSshUserhomeField().setText(IsisFish.config.getSimulatorSshUserHome()); + configUI.getSshDatapathField().setText(IsisFish.config.getSimulatorSshDataPath()); + configUI.getSshIsisHomeField().setText(IsisFish.config.getSimulatorSshIsisHome()); + configUI.getSshTemppathField().setText(IsisFish.config.getSimulatorSshTmpPath()); + configUI.getSshJavaPathField().setText(IsisFish.config.getSimulatorSshJavaPath()); + configUI.getSshPbsBinPathField().setText(IsisFish.config.getSimulatorSshPbsBinPath()); + configUI.getSshPbsQsubOptionsField().setText(IsisFish.config.getSimulatorSshPbsQsubOptions()); + configUI.getSshControlIntervalField().setText(String.valueOf(IsisFish.config.getSimulatorSshControlCheckInterval())); + configUI.getSshMaxThreadsField().setText(String.valueOf(IsisFish.config.getSimulatorSshMaxThreads())); + configUI.getSshMaxMemoryField().setText(IsisFish.config.getSimulatorSshMaxMemory()); + + doCheck(); + } + + /** + * Reset display. + */ + protected void configurationChanged() { + + configUI.setConnected(false); + configUI.getMessageLabel().setText(""); + configUI.getStatusFreeDatabaseLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", "isis-database", "0")); + configUI.getStatusFreeTempLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", "isis-tmp", "0")); + + } + + /** + * Check input format validity. + */ + public void doCheck() { + + configurationChanged(); + + // copy values + currentSSHserver = configUI.getSshServerField().getText().trim(); + if (currentSSHserver.isEmpty()) { + setColor(true, configUI.getSshServerField()); + } else { + setColor(false, configUI.getSshServerField()); + } + + // copy values + //currentSSHsftpServer = configUI.getSshSftpServerField().getText().trim(); + + // can be empty (optionnal use) + currentSSHUsername = configUI.getUsernameField().getText().trim(); + if (!currentSSHUsername.matches("\\w+")) { + setColor(true, configUI.getUsernameField()); + } else { + setColor(false, configUI.getUsernameField()); + } + + // if ssh key is set, must be a valid file + currentSSHKey = new File(configUI.getSshKeyField().getText().trim()); + if (!currentSSHKey.isFile()) { + setColor(true, configUI.getSshKeyField()); + } else { + configUI.getSshKeyButton().setEnabled(false); + configUI.getSshKeyField().setEnabled(false); + setColor(false, configUI.getSshKeyField()); + } + + currentSSHDatapath = configUI.getSshDatapathField().getText().trim(); + if (currentSSHDatapath.isEmpty()) { + setColor(true, configUI.getSshDatapathField()); + } else { + setColor(false, configUI.getSshDatapathField()); + } + + currentSSHIsisHome = configUI.getSshIsisHomeField().getText().trim(); + if (currentSSHIsisHome.isEmpty()) { + setColor(true, configUI.getSshIsisHomeField()); + } else { + setColor(false, configUI.getSshIsisHomeField()); + } + + currentSSHTempPath = configUI.getSshTemppathField().getText().trim(); + if (currentSSHTempPath.isEmpty()) { + setColor(true, configUI.getSshTemppathField()); + } else { + setColor(false, configUI.getSshTemppathField()); + } + + currentSSHJavaPath = configUI.getSshJavaPathField().getText().trim(); + if (currentSSHJavaPath.isEmpty()) { + setColor(true, configUI.getSshJavaPathField()); + } else { + setColor(false, configUI.getSshJavaPathField()); + } + + currentSSHPbsBinPath = configUI.getSshPbsBinPathField().getText() + .trim(); + if (currentSSHPbsBinPath.isEmpty()) { + setColor(true, configUI.getSshPbsBinPathField()); + } else { + setColor(false, configUI.getSshPbsBinPathField()); + } + + // currentSSHPbsQsubOptions + currentSSHPbsQsubOptions = configUI.getSshPbsQsubOptionsField().getText().trim(); + + // currentSSHMaxThreads + currentSSHMaxThreads = configUI.getSshMaxThreadsField().getText().trim(); + if (!currentSSHMaxThreads.matches("\\d+")) { + setColor(true, configUI.getSshMaxThreadsField()); + } else { + setColor(false, configUI.getSshMaxThreadsField()); + } + + // currentSSHMaxMemory + currentSSHMaxMemory = configUI.getSshMaxMemoryField().getText().trim(); + + // currentSSHControlInterval + currentSSHControlInterval = configUI.getSshControlIntervalField() + .getText().trim(); + if (!currentSSHControlInterval.matches("\\d+")) { + setColor(true, configUI.getSshControlIntervalField()); + } else { + setColor(false, configUI.getSshControlIntervalField()); + } + } + + /** + * Set values in config and force configuration save. + */ + public void saveSSHConfiguration() { + IsisFish.config.setSimulatorSshServer(currentSSHserver); + //IsisFish.config.setSimulatorSshSftpServer(currentSSHsftpServer); + IsisFish.config.setSimulatorSshUsername(currentSSHUsername); + IsisFish.config.setSSHPrivateKeyFilePath(currentSSHKey); + + IsisFish.config.setSimulatorSshUserHome(currentSSHUserhome); + IsisFish.config.setSimulatorSshDataPath(currentSSHDatapath); + IsisFish.config.setSimulatorSshIsisHome(currentSSHIsisHome); + IsisFish.config.setSimulatorSshTmpPath(currentSSHTempPath); + IsisFish.config.setSimulatorSshJavaPath(currentSSHJavaPath); + IsisFish.config.setSimulatorSshPbsBinPath(currentSSHPbsBinPath); + IsisFish.config.setSimulatorSshPbsQsubOptions(currentSSHPbsQsubOptions); + IsisFish.config.setSimulatorSshControlCheckInterval(Integer.parseInt(currentSSHControlInterval)); + IsisFish.config.setSimulatorSshMaxThreads(Integer.parseInt(currentSSHMaxThreads)); + IsisFish.config.setSimulatorSshMaxMemory(currentSSHMaxMemory); + + IsisFish.config.saveForUser(); + configUI.dispose(); + } + + /** + * Close frame. + */ + public void cancelSSHConfiguration() { + configUI.dispose(); + } + + /** + * Realise une connexion ssh et teste les données. + */ + public void testSSHConfiguration() { + JSch jsch = new JSch(); + + String host = currentSSHserver; + int port = 22; // by default, 22 + String sPort = null; + + try { + if (host.indexOf(':') > 0) { + sPort = host.substring(host.indexOf(':') + 1); + port = Integer.parseInt(sPort); + host = host.substring(0, host.indexOf(':')); + } + + // add ssh key + boolean sshKeyUsed = false; + if (currentSSHKey.canRead()) { + if (log.isInfoEnabled()) { + log.info(t("Ssh key found '%s' will be used to connect to", + currentSSHKey.getAbsoluteFile(), host)); + } + jsch.addIdentity(currentSSHKey.getAbsolutePath()); + sshKeyUsed = true; + } else { + if (log.isInfoEnabled()) { + log.info(t("Can't read ssh key : %s", currentSSHKey)); + } + } + + Session session = jsch.getSession(currentSSHUsername, host, port); + String proxyCommand = IsisFish.config.getSimulatorSshProxyCommand(); + if (StringUtils.isNotBlank(proxyCommand)) { + session.setProxy(new ProxyCommand(proxyCommand)); + } + + // username and password will be given via UserInfo interface. + SSHUserInfo ui = new SSHUserInfo(); + if (sshKeyUsed) { + char[] passchars = SSHAgent.getAgent().getPassphrase(currentSSHKey); + String passphrase = String.valueOf(passchars); + ui.setPassphrase(passphrase); + setTestMessage(t("isisfish.simulator.ssh.configuration.connectingpk"), false); + } else { + setTestMessage(t("isisfish.simulator.ssh.configuration.connecting"), false); + } + session.setUserInfo(ui); + session.connect(10000); // timeout + + setTestMessage(t("isisfish.simulator.ssh.configuration.connectionok"), false); + + // get user home + currentSSHUserhome = getUserHomeDirectory(session); + configUI.getSshUserhomeField().setText(currentSSHUserhome); + // get space disk + String databaseSize = getFolderSize(session, currentSSHDatapath); + String temppathSize = getFolderSize(session, currentSSHTempPath); + configUI.getStatusFreeDatabaseLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", currentSSHDatapath, databaseSize)); + configUI.getStatusFreeTempLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", currentSSHTempPath, temppathSize)); + session.disconnect(); + + configUI.setConnected(true); + } catch (NumberFormatException e) { + if (log.isErrorEnabled()) { + log.error("Can't connect", e); + } + setTestMessage(t("isisfish.error.simulation.remote.wrongportvalue", + sPort), true); + } catch (JSchException e) { + if (log.isErrorEnabled()) { + log.error("Can't connect", e); + } + setTestMessage(t("isisfish.simulator.ssh.configuration.connectionerror", e + .getMessage()), true); + } catch (SSHException e) { + if (log.isErrorEnabled()) { + log.error("Can't connect", e); + } + setTestMessage(t("isisfish.simulator.ssh.configuration.connectionerror", e + .getMessage()), true); + } catch (InvalidPassphraseException e) { + if (log.isErrorEnabled()) { + log.error("Can't connect", e); + } + setTestMessage( + t("isisfish.simulator.ssh.configuration.invalidpassphrase"), + true); + } + } + + /** + * Get user home directory with an opened session. + * + * @param session opened session + * @return 'pwd' result + * @throws SSHException + */ + protected String getUserHomeDirectory(Session session) throws SSHException { + + String command = "pwd"; + + Writer output = new StringWriter(); + int exit = SSHUtils.exec(session, command, output); + + if (exit != 0) { + throw new SSHException(t("Command '%s' fail to execute", command)); + } + + String out = output.toString(); + return out; + } + + /** + * Get user home directory with an opened session. + * + * @param session opened session + * @param path path to get size + * @return dir size + * @throws SSHException + */ + protected String getFolderSize(Session session, String path) throws SSHException { + + String command = "du -hs \"" + path + "\""; + + Writer output = new StringWriter(); + SSHUtils.exec(session, command, output); + + // la sortie est "35Go isisdatabase-3" + String out = output.toString(); + out = out.split("\\s+")[0]; + return out; + } + + /** + * Clear database. + */ + public void clearDatabase() { + clearFolder(currentSSHDatapath); + } + + /** + * Clear temp directory. + */ + public void clearTempDirectory() { + clearFolder(currentSSHTempPath); + } + + /** + * Clear specified directory. + * + * @param path path to clear + */ + protected void clearFolder(String path) { + + // prevent, for home deletion, can happens :D + if (StringUtils.isEmpty(path) || path.trim().equals(".")) { + throw new IllegalArgumentException("Can't delete directory : " + path); + } + + int response = JOptionPane.showConfirmDialog(configUI, t("isisfish.simulator.ssh.configuration.freespace.confirmdelete", path), + t("isisfish.common.confirm"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); + + if (response == JOptionPane.YES_OPTION) { + JSch jsch = new JSch(); + + String host = currentSSHserver; + int port = 22; // by default, 22 + String sPort = null; + + try { + if (host.indexOf(':') > 0) { + sPort = host.substring(host.indexOf(':') + 1); + port = Integer.parseInt(sPort); + host = host.substring(0, host.indexOf(':')); + } + + // add ssh key + boolean sshKeyUsed = false; + if (currentSSHKey.canRead()) { + if (log.isInfoEnabled()) { + log.info(t("Ssh key found '%s' will be used to connect to", + currentSSHKey.getAbsoluteFile(), host)); + } + jsch.addIdentity(currentSSHKey.getAbsolutePath()); + sshKeyUsed = true; + } else { + if (log.isInfoEnabled()) { + log.info(t("Can't read ssh key : %s", currentSSHKey)); + } + } + + Session session = jsch.getSession(currentSSHUsername, host, port); + String proxyCommand = IsisFish.config.getSimulatorSshProxyCommand(); + if (StringUtils.isNotBlank(proxyCommand)) { + session.setProxy(new ProxyCommand(proxyCommand)); + } + + // username and password will be given via UserInfo interface. + SSHUserInfo ui = new SSHUserInfo(); + if (sshKeyUsed) { + char[] passchars = SSHAgent.getAgent().getPassphrase(currentSSHKey); + String passphrase = String.valueOf(passchars); + ui.setPassphrase(passphrase); + } + session.setUserInfo(ui); + session.connect(10000); // timeout + + String command = "rm -rf \"" + path + "\""; + + if (log.isDebugEnabled()) { + log.debug("Removing folder with command : " + command); + } + Writer output = new StringWriter(); + int exit = SSHUtils.exec(session, command, output); + + // get space disk + String databaseSize = getFolderSize(session, currentSSHDatapath); + String temppathSize = getFolderSize(session, currentSSHTempPath); + configUI.getStatusFreeDatabaseLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", currentSSHDatapath, databaseSize)); + configUI.getStatusFreeTempLabel().setText(t("isisfish.simulator.ssh.configuration.freespace.label", currentSSHTempPath, temppathSize)); + session.disconnect(); + + session.disconnect(); + if (exit != 0) { + throw new SSHException(t("Command '%s' fail to execute", command)); + } + } + catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("Can't connect", e); + } + setTestMessage(t("isisfish.simulator.ssh.configuration.connectionerror", e.getMessage()), true); + } + } + else { + if (log.isInfoEnabled()) { + log.info("Delete action canceled by user"); + } + } + } + + /** + * Generate new SSH key. + */ + protected void generateSSHKey() { + if (currentSSHKey.exists()) { + throw new IllegalArgumentException("Can't overwrite ssh key"); + } + + try { + // make parent dir + if (currentSSHKey.getParentFile() != null + && !currentSSHKey.getParentFile().exists()) { + currentSSHKey.getParentFile().mkdirs(); + } + JSch jsch = new JSch(); + KeyPair kpair = KeyPair.genKeyPair(jsch, KeyPair.RSA, 2048); + //kpair.setPassphrase(passphrase); + kpair.writePrivateKey(currentSSHKey.getAbsolutePath()); + kpair.writePublicKey(currentSSHKey.getAbsolutePath() + ".pub", + currentSSHUsername + "@forIsisFish"); + if (log.isInfoEnabled()) { + log.info("Finger print: " + kpair.getFingerPrint()); + } + kpair.dispose(); + } catch (JSchException e) { + if (log.isErrorEnabled()) { + log.error("Can't make ssh key", e); + } + } catch (IOException e) { + if (log.isErrorEnabled()) { + log.error("Can't make ssh key", e); + } + } + + // refresh ckeck + doCheck(); + } + + /** + * Set color depending of field validity. + * + * + * @param invalid valid field + * @param component component to set color + */ + protected void setColor(boolean invalid, JComponent component) { + component.setForeground(invalid ? Color.RED : Color.BLACK); + } + + /** + * Set message in message field with status color. + * + * @param message message to display + * @param error error status + */ + protected void setTestMessage(String message, boolean error) { + configUI.getMessageLabel().setForeground( + error ? Color.RED : Color.GREEN.darker()); + configUI.getMessageLabel().setText(message); + } +} Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigUI.jaxx 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigUI.jaxx 2015-05-22 16:10:26 UTC (rev 4233) @@ -24,19 +24,21 @@ --> <JDialog resizable="false" title="isisfish.simulator.ssh.configuration.title" layout="{new javax.swing.BoxLayout(this.getContentPane(), javax.swing.BoxLayout.PAGE_AXIS)}"> + + <SSHLauncherConfigHandler id="handler" constructorParams='this' /> + <import> static org.nuiton.i18n.I18n.t </import> - <SSHLauncherConfigAction id="action" javaBean="new SSHLauncherConfigAction(this)" /> + <Boolean id="connected" javaBean="false" /> <script><![CDATA[ + protected void $afterCompleteSetup() { + handler.afterInit(); + } + ]]></script> - // fill default values - getAction().resetSSHConfiguration(); - - ]]></script> - <Table border='{BorderFactory.createTitledBorder(t("isisfish.simulator.ssh.configuration.connection"))}' fill='horizontal'> <row> @@ -46,7 +48,7 @@ </cell> <cell fill='horizontal' columns="2"> <JTextField id='sshServerField' toolTipText='isisfish.config.main.simulation.ssh.server.description' - onKeyReleased="getAction().doCheck()" /> + onKeyReleased="handler.doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -56,7 +58,7 @@ </cell> <cell columns="2"> <JTextField id='usernameField' toolTipText='isisfish.config.main.simulation.ssh.username.description' - onKeyReleased="getAction().doCheck()" /> + onKeyReleased="handler.doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -65,10 +67,10 @@ </cell> <cell weightx="2.0"> <JTextField id='sshKeyField' toolTipText='isisfish.config.ssh.key.file.description' - onKeyReleased="getAction().doCheck()" /> + onKeyReleased="handler.doCheck()" /> </cell> <cell> - <JButton id='sshKeyButton' text='isisfish.simulator.ssh.configuration.keygenerate' onActionPerformed="getAction().generateSSHKey()" /> + <JButton id='sshKeyButton' text='isisfish.simulator.ssh.configuration.keygenerate' onActionPerformed="handler.generateSSHKey()" /> </cell> </row> </Table> @@ -80,7 +82,7 @@ </cell> <cell weightx="1.0"> <JTextField id='sshUserhomeField' enabled='false' toolTipText='isisfish.config.main.simulation.ssh.userhome.description' - onKeyReleased="getAction().doCheck()" /> + onKeyReleased="handler.doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -90,7 +92,7 @@ </cell> <cell weightx="1.0"> <JTextField id='sshDatapathField' toolTipText='isisfish.config.main.simulation.ssh.datapath.description' - onKeyReleased="getAction().doCheck()" /> + onKeyReleased="handler.doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -100,7 +102,7 @@ </cell> <cell> <JTextField id='sshIsisHomeField' toolTipText='isisfish.config.main.simulation.ssh.isis.home.description' - onKeyReleased="getAction().doCheck()" /> + onKeyReleased="handler.doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -110,7 +112,7 @@ </cell> <cell> <JTextField id='sshTemppathField' toolTipText='isisfish.config.main.simulation.ssh.tmppath.description' - onKeyReleased="getAction().doCheck()" /> + onKeyReleased="handler.doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -121,7 +123,7 @@ <cell> <JTextField id='sshJavaPathField' toolTipText='isisfish.config.main.simulation.ssh.javapath.description' - onKeyReleased="getAction().doCheck()" /> + onKeyReleased="handler.doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -132,7 +134,7 @@ <cell> <JTextField id='sshPbsBinPathField' toolTipText='isisfish.config.main.simulation.ssh.pbsbinpath.description' - onKeyReleased="getAction().doCheck()" /> + onKeyReleased="handler.doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -143,7 +145,7 @@ <cell> <JTextField id='sshPbsQsubOptionsField' toolTipText='isisfish.config.main.simulation.ssh.pbsqsuboptions.description' - onKeyReleased="getAction().doCheck()" /> + onKeyReleased="handler.doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -154,7 +156,7 @@ <cell> <JTextField id='sshMaxThreadsField' toolTipText='isisfish.config.main.simulation.ssh.max.threads.description' - onKeyReleased="getAction().doCheck()" /> + onKeyReleased="handler.doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -165,7 +167,7 @@ <cell> <JTextField id='sshMaxMemoryField' toolTipText='isisfish.config.main.simulation.ssh.max.memory.description' - onKeyReleased="getAction().doCheck()" /> + onKeyReleased="handler.doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -176,23 +178,23 @@ <cell> <JTextField id='sshControlIntervalField' toolTipText='isisfish.config.main.simulation.ssh.control.check.interval.description' - onKeyReleased="getAction().doCheck()" /> + onKeyReleased="handler.doCheck()" /> </cell> </row> </Table> <Table> <row fill='horizontal'> <cell fill='horizontal' weightx="1.0"> - <JButton id='testButton' text='isisfish.simulator.ssh.configuration.test' onActionPerformed="getAction().testSSHConfiguration()" icon="connect.png" /> + <JButton id='testButton' text='isisfish.simulator.ssh.configuration.test' onActionPerformed="handler.testSSHConfiguration()" icon="connect.png" /> </cell> <cell fill='horizontal' weightx="1.0"> - <JButton id='validButton' text='isisfish.common.valid' onActionPerformed="getAction().saveSSHConfiguration()" icon="accept.png" enabled='{isConnected()}' /> + <JButton id='validButton' text='isisfish.common.valid' onActionPerformed="handler.saveSSHConfiguration()" icon="accept.png" enabled='{isConnected()}' /> </cell> <cell fill='horizontal' weightx="1.0"> - <JButton id='resetButton' text='isisfish.common.reset' onActionPerformed="getAction().resetSSHConfiguration()" icon="arrow_undo.png" /> + <JButton id='resetButton' text='isisfish.common.reset' onActionPerformed="handler.resetSSHConfiguration()" icon="arrow_undo.png" /> </cell> <cell fill='horizontal' weightx="1.0"> - <JButton id='cancelButton' text='isisfish.common.cancel' onActionPerformed="getAction().cancelSSHConfiguration()" icon="cancel.png" /> + <JButton id='cancelButton' text='isisfish.common.cancel' onActionPerformed="handler.cancelSSHConfiguration()" icon="cancel.png" /> </cell> </row> </Table> @@ -214,7 +216,7 @@ </cell> <cell> <JButton id='clearDatabaseButton' text='isisfish.common.clear' icon="paintbrush.png" - onActionPerformed="getAction().clearDatabase()" enabled='{isConnected()}' /> + onActionPerformed="handler.clearDatabase()" enabled='{isConnected()}' /> </cell> </row> <row fill='horizontal'> @@ -223,7 +225,7 @@ </cell> <cell> <JButton id='clearTempButton' text='isisfish.common.clear' icon="paintbrush.png" - onActionPerformed="getAction().clearTempDirectory()" enabled='{isConnected()}' /> + onActionPerformed="handler.clearTempDirectory()" enabled='{isConnected()}' /> </cell> </row> </Table> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentHandler.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -32,8 +32,8 @@ import org.nuiton.topia.persistence.TopiaEntityContextable; import fr.ifremer.isisfish.ui.CommonHandler; +import fr.ifremer.isisfish.ui.sensitivity.wizard.FactorWizardHandler; import fr.ifremer.isisfish.ui.sensitivity.wizard.FactorWizardUI; -import fr.ifremer.isisfish.ui.sensitivity.wizard.SensitivityWizardHandler; /** * Common handler for all input ui. @@ -87,7 +87,7 @@ if (bean != null) { FactorWizardUI factorWizardUI = new FactorWizardUI(inputContentUI); - SensitivityWizardHandler handler = factorWizardUI.getHandler(); + FactorWizardHandler handler = factorWizardUI.getHandler(); handler.initNewFactor(factorWizardUI, bean, sensitivityMethod); factorWizardUI.pack(); factorWizardUI.setLocationRelativeTo(inputContentUI); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/cell/CellHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/cell/CellHandler.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/cell/CellHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -39,7 +39,7 @@ import fr.ifremer.isisfish.ui.input.InputContentHandler; import fr.ifremer.isisfish.ui.input.InputUI; import fr.ifremer.isisfish.ui.models.common.GenericComboModel; -import fr.ifremer.isisfish.ui.sensitivity.SensitivityTabUI; +import fr.ifremer.isisfish.ui.sensitivity.SensitivityInputUI; /** * Cell handler. @@ -114,11 +114,10 @@ InputUI inputUI = inputContentUI.getParentContainer(InputUI.class); if (inputUI != null) { inputUI.getHandler().setTreeSelection(this.inputContentUI, c.getTopiaId()); + } else { + SensitivityInputUI sensitivityInputUI = inputContentUI.getParentContainer(SensitivityInputUI.class); + sensitivityInputUI.getHandler().setTreeSelection(this.inputContentUI, c.getTopiaId()); } - else { - SensitivityTabUI sensitivityTabUI = inputContentUI.getParentContainer(SensitivityTabUI.class); - sensitivityTabUI.getHandler().setTreeSelection(this.inputContentUI, c.getTopiaId()); - } } } } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultHandler.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -75,12 +75,16 @@ protected SimulationServiceListener listener = null; + protected ResultUI resultUI; + + public ResultHandler(ResultUI resultUI) { + this.resultUI = resultUI; + } + /** * Initialise la vue avec les liste des simulations disponible. - * - * @param resultUI */ - public void init(final ResultUI resultUI) { + public void afterInit() { initSimulationList(resultUI); // reference must stay allocated Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultSimulationFrame.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultSimulationFrame.jaxx 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultSimulationFrame.jaxx 2015-05-22 16:10:26 UTC (rev 4233) @@ -33,8 +33,6 @@ } } ]]></script> - - <ResultHandler id="handler"/> <fr.ifremer.isisfish.datastore.SimulationStorage id="simulationStorage" javaBean="null"/> <fr.ifremer.isisfish.entities.FisheryRegion id="fisheryRegion" javaBean="null"/> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultUI.jaxx 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultUI.jaxx 2015-05-22 16:10:26 UTC (rev 4233) @@ -24,13 +24,14 @@ --> <JPanel layout='{new BorderLayout()}'> - <ResultHandler id="handler" /> + <ResultHandler id="handler" constructorParams='this' /> <script><![CDATA[ protected void $afterCompleteSetup() { - getHandler().init(this); + handler.afterInit(); } ]]></script> + <Table constraints="BorderLayout.NORTH"> <row> <cell> Added: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserHandler.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -0,0 +1,229 @@ +package fr.ifremer.isisfish.ui.sensitivity; + +import java.awt.CardLayout; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.ComboBoxModel; +import javax.swing.table.DefaultTableModel; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import fr.ifremer.isisfish.datastore.RegionStorage; +import fr.ifremer.isisfish.datastore.SensitivityAnalysisStorage; +import fr.ifremer.isisfish.datastore.SensitivityExportStorage; +import fr.ifremer.isisfish.datastore.StorageChangeEvent; +import fr.ifremer.isisfish.datastore.StorageChangeListener; +import fr.ifremer.isisfish.export.SensitivityExport; +import fr.ifremer.isisfish.simulator.sensitivity.Domain; +import fr.ifremer.isisfish.simulator.sensitivity.Factor; +import fr.ifremer.isisfish.simulator.sensitivity.SensitivityAnalysis; +import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; +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; +import fr.ifremer.isisfish.ui.models.sensitivityexport.SensitivityExportListRenderer; +import fr.ifremer.isisfish.ui.sensitivity.model.FactorCardinalityTableModel; +import fr.ifremer.isisfish.ui.simulator.SimulAction; + +public class SensitivityChooserHandler { + + /** Class logger. */ + private static Log log = LogFactory.getLog(SensitivityInputHandler.class); + + protected SensitivityChooserUI sensitivityChooserUI; + + protected StorageChangeListener sensitivityAnalysisListener; + protected StorageChangeListener sensitivityExportListener; + + public SensitivityChooserHandler(SensitivityChooserUI sensitivityChooserUI) { + this.sensitivityChooserUI = sensitivityChooserUI; + } + + protected void afterInit() { + // listener to listen for modification on sensitivity analysis + sensitivityAnalysisListener = new StorageChangeListener() { + @Override + public void versionDataChanged(StorageChangeEvent e) { + sensitivityChooserUI.fieldSensitivityAnalysisSelect.setModel(getSensitivityAnalysisModel()); + } + }; + SensitivityAnalysisStorage.addStorageChangeListener(sensitivityAnalysisListener); + + // listener to listen for modification on sensitivity exports + sensitivityExportListener = new StorageChangeListener() { + @Override + public void versionDataChanged(StorageChangeEvent e) { + sensitivityChooserUI.availableSensitivityExports.setModel(getAvailableExportListModel()); + } + }; + SensitivityExportStorage.addStorageChangeListener(sensitivityExportListener); + } + + @Deprecated + protected SimulAction getSimulAction() { + return sensitivityChooserUI.getContextValue(SimulAction.class); + } + + public ComboBoxModel<String> getSensitivityAnalysisModel() { + List<String> sensitivityNames = getSimulAction().getSensitivityAnalysisNames(); + GenericComboModel<String> model = new GenericComboModel<>(sensitivityNames); + return model; + } + + /** + * Auto select analysis in JComboBox + * with analysis selected in SimulAction. + * + * Used by "reloadOldSimulation" operation. + */ + public void refreshSelectedSensitivityAnalysis() { + SensitivityAnalysis sensitivityAnalysis = getSimulAction().getSensitivityAnalysis(); + if (sensitivityAnalysis != null) { + if (log.isDebugEnabled()) { + log.debug("Refreshing sensitivity analysis list"); + } + // TODO it's not getSimpleName() here ! + sensitivityChooserUI.fieldSensitivityAnalysisSelect.setSelectedItem(sensitivityAnalysis.getClass().getSimpleName()); + } + } + + protected void sensitivityAnalysisChanged() { + + String sensitivityName = (String)sensitivityChooserUI.fieldSensitivityAnalysisSelect.getSelectedItem(); + + // when analysis is changed by refreshSelectedSensitivityAnalysis + // this event is thrown by build a new Analysis instance + // and parameter are lost + // fix it with a small class name test + SensitivityAnalysis sensitivityAnalysis = getSimulAction().getSensitivityAnalysis(); + if (sensitivityAnalysis != null && sensitivityAnalysis.getClass().getSimpleName().equals(sensitivityName)) { + sensitivityAnalysis = getSimulAction().getSensitivityAnalysis(); + } else { + sensitivityAnalysis = getSimulAction().getSensitivityAnalysisInstance(sensitivityName); + } + + // can be null for example if analysis can't be compiled + if (sensitivityAnalysis != null) { + getSimulAction().setSensitivityAnalysis(sensitivityAnalysis); + + CardLayout factorPanelLayout = (CardLayout)sensitivityChooserUI.factorCardinalityPanel.getLayout(); + if (sensitivityAnalysis.canManageCardinality()) { + factorPanelLayout.show(sensitivityChooserUI.factorCardinalityPanel, "factorCardinalitySupported"); + } else { + factorPanelLayout.show(sensitivityChooserUI.factorCardinalityPanel, "factorCardinalityNotSupported"); + } + + // update model + ScriptParametersTableModel parametersTableModel = new ScriptParametersTableModel(sensitivityAnalysis); + sensitivityChooserUI.simulSensitivityAnalysisParam.setModel(parametersTableModel); + sensitivityChooserUI.simulSensitivityAnalysisParam.getColumnModel().getColumn(0).setCellRenderer(new ScriptParametersTableCellRenderer(sensitivityAnalysis)); + sensitivityChooserUI.simulSensitivityAnalysisParam.getColumnModel().getColumn(1).setCellEditor(new ScriptParametersTableCellEditor(sensitivityAnalysis)); + } + } + + public void setFactorCardinalityTableModel() { + List<Factor> factors = getSimulAction().getFactorGroup().getFactors(); + List<Factor> factorsContinue = new ArrayList<Factor>(); + /* get sublist with only Continous factor */ + for (Factor f : factors) { + Domain domain = f.getDomain(); + if (ContinuousDomain.class.isInstance(domain)) { + ContinuousDomain continuousDomain = (ContinuousDomain)domain; + factorsContinue.add(f); + } + } + FactorCardinalityTableModel model = new FactorCardinalityTableModel(factorsContinue); + sensitivityChooserUI.factorCardinality.setModel(model); + } + + protected GenericListModel<String> getAvailableExportListModel() { + List<String> exportNames = getSimulAction().getSensitivityExportNames(); + GenericListModel<String> model = new GenericListModel<>(exportNames); + return model; + } + + /** + * Add multiples export. + * + * Export name can be duplicated. + */ + protected void addExports() { + List<String> exportNames = sensitivityChooserUI.availableSensitivityExports.getSelectedValuesList(); + for (String exportName : exportNames) { + getSimulAction().addSensitivityExport(sensitivityChooserUI, exportName); + } + setSensitivityExportListModel(); + } + + /** + * Remove multiple export. + */ + protected void removeExports() { + List<SensitivityExport> exports = sensitivityChooserUI.selectedSensitivityExports.getSelectedValuesList(); + for (SensitivityExport export : exports) { + getSimulAction().removeSensitivityExport(export); + } + setSensitivityExportListModel(); + } + + /** + * Clear all export. + */ + protected void clearExports() { + getSimulAction().clearSensitivityExport(); + setSensitivityExportListModel(); + } + + /** + * Set model (refresh export JList). + */ + public void setSensitivityExportListModel() { + List<SensitivityExport> exports = getSimulAction().getSensitivityExports(); + GenericListModel<SensitivityExport> model = new GenericListModel<>(exports); + sensitivityChooserUI.selectedSensitivityExports.setModel(model); + sensitivityChooserUI.selectedSensitivityExports.setCellRenderer(new SensitivityExportListRenderer()); + + sensitivityChooserUI.clearExportsButton.setEnabled(!exports.isEmpty()); + } + + /** + * When selection change on available export list. + */ + protected void availableSensitivityExportSelection() { + sensitivityChooserUI.addExportButton.setEnabled(sensitivityChooserUI.availableSensitivityExports.getSelectedIndices().length != 0); + } + + /** + * When selection change on choosen export list. + */ + protected void selectedSensitivityExportSelection() { + if (log.isDebugEnabled()) { + log.debug("Sensitivity export selection change"); + } + setExportParams(); + sensitivityChooserUI.removeExportButton.setEnabled(sensitivityChooserUI.selectedSensitivityExports.getSelectedIndices().length != 0); + } + + /** + * Fill export parameters names and values in table. + */ + protected void setExportParams() { + SimulAction simulAction = sensitivityChooserUI.getContextValue(SimulAction.class); + + if (sensitivityChooserUI.selectedSensitivityExports.getSelectedIndices().length == 1) { + SensitivityExport export = (SensitivityExport)sensitivityChooserUI.selectedSensitivityExports.getSelectedValue(); + ScriptParametersTableModel model = new ScriptParametersTableModel(export); + sensitivityChooserUI.exportParamsTable.setModel(model); + sensitivityChooserUI.exportParamsTable.getColumnModel().getColumn(0).setCellRenderer(new ScriptParametersTableCellRenderer(export)); + ScriptParametersTableCellEditor cellEditor = new ScriptParametersTableCellEditor(export); + cellEditor.setRegionStorage(sensitivityChooserUI.getContextValue(RegionStorage.class)); + sensitivityChooserUI.exportParamsTable.getColumnModel().getColumn(1).setCellEditor(cellEditor); + } else { + sensitivityChooserUI.exportParamsTable.setModel(new DefaultTableModel()); + } + } +} Property changes on: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserHandler.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserUI.jaxx 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserUI.jaxx 2015-05-22 16:10:26 UTC (rev 4233) @@ -23,227 +23,22 @@ #L% --> <Table> - <import> - java.awt.CardLayout - javax.swing.ComboBoxModel - javax.swing.table.DefaultTableModel - fr.ifremer.isisfish.datastore.RegionStorage - fr.ifremer.isisfish.datastore.SensitivityAnalysisStorage - fr.ifremer.isisfish.datastore.SensitivityExportStorage - fr.ifremer.isisfish.datastore.StorageChangeEvent - fr.ifremer.isisfish.datastore.StorageChangeListener - fr.ifremer.isisfish.export.SensitivityExport - fr.ifremer.isisfish.simulator.sensitivity.Domain - fr.ifremer.isisfish.simulator.sensitivity.Factor - fr.ifremer.isisfish.simulator.sensitivity.SensitivityAnalysis - fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain - fr.ifremer.isisfish.ui.models.common.GenericListModel - fr.ifremer.isisfish.ui.models.common.GenericComboModel - fr.ifremer.isisfish.ui.models.sensitivityexport.SensitivityExportListRenderer - fr.ifremer.isisfish.ui.models.sensitivityexport.SensitivityExportNameListRenderer - fr.ifremer.isisfish.ui.models.sensitivityanalysis.SensitivityAnalysisComboRenderer - fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellEditor - fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellRenderer - fr.ifremer.isisfish.ui.models.common.ScriptParametersTableModel - fr.ifremer.isisfish.ui.sensitivity.model.FactorCardinalityTableModel - fr.ifremer.isisfish.ui.simulator.SimulAction - </import> + <SensitivityChooserHandler id="handler" constructorParams='this' /> - <script><![CDATA[ - - // listener to listen for modification on sensitivity analysis - StorageChangeListener sensitivityAnalysisListener; - sensitivityAnalysisListener = new StorageChangeListener() { - @Override - public void versionDataChanged(StorageChangeEvent e) { - fieldSensitivityAnalysisSelect.setModel(getSensitivityAnalysisModel()); - } - }; - SensitivityAnalysisStorage.addStorageChangeListener(sensitivityAnalysisListener); - - // listener to listen for modification on sensitivity exports - StorageChangeListener sensitivityExportListener; - sensitivityExportListener = new StorageChangeListener() { - @Override - public void versionDataChanged(StorageChangeEvent e) { - availableSensitivityExports.setModel(getAvailableExportListModel()); - } - }; - SensitivityExportStorage.addStorageChangeListener(sensitivityExportListener); - - - protected SimulAction getSimulAction() { - return getContextValue(SimulAction.class); + <script><![CDATA[ + protected void $afterCompleteSetup() { + handler.afterInit(); } - - public ComboBoxModel<String> getSensitivityAnalysisModel() { - List<String> sensitivityNames = getSimulAction().getSensitivityAnalysisNames(); - GenericComboModel<String> model = new GenericComboModel<>(sensitivityNames); - return model; - } - - /** - * Auto select analysis in JComboBox - * with analysis selected in SimulAction. - * - * Used by "reloadOldSimulation" operation. - */ - public void refreshSelectedSensitivityAnalysis() { - SensitivityAnalysis sensitivityAnalysis = getSimulAction().getSensitivityAnalysis(); - if (sensitivityAnalysis != null) { - if (log.isDebugEnabled()) { - log.debug("Refreshing sensitivity analysis list"); - } - // TODO it's not getSimpleName() here ! - fieldSensitivityAnalysisSelect.setSelectedItem(sensitivityAnalysis.getClass().getSimpleName()); - } - } - - protected void sensitivityAnalysisChanged() { - - String sensitivityName = (String)fieldSensitivityAnalysisSelect.getSelectedItem(); - - // when analysis is changed by refreshSelectedSensitivityAnalysis - // this event is thrown by build a new Analysis instance - // and parameter are lost - // fix it with a small class name test - SensitivityAnalysis sensitivityAnalysis = getSimulAction().getSensitivityAnalysis(); - if (sensitivityAnalysis != null && sensitivityAnalysis.getClass().getSimpleName().equals(sensitivityName)) { - sensitivityAnalysis = getSimulAction().getSensitivityAnalysis(); - } else { - sensitivityAnalysis = getSimulAction().getSensitivityAnalysisInstance(sensitivityName); - } - - // can be null for example if analysis can't be compiled - if (sensitivityAnalysis != null) { - getSimulAction().setSensitivityAnalysis(sensitivityAnalysis); - - CardLayout factorPanelLayout = (CardLayout)factorCardinalityPanel.getLayout(); - if (sensitivityAnalysis.canManageCardinality()) { - factorPanelLayout.show(factorCardinalityPanel, "factorCardinalitySupported"); - } else { - factorPanelLayout.show(factorCardinalityPanel, "factorCardinalityNotSupported"); - } - - // update model - ScriptParametersTableModel parametersTableModel = new ScriptParametersTableModel(sensitivityAnalysis); - simulSensitivityAnalysisParam.setModel(parametersTableModel); - simulSensitivityAnalysisParam.getColumnModel().getColumn(0).setCellRenderer(new ScriptParametersTableCellRenderer(sensitivityAnalysis)); - simulSensitivityAnalysisParam.getColumnModel().getColumn(1).setCellEditor(new ScriptParametersTableCellEditor(sensitivityAnalysis)); - } - } - - public void setFactorCardinalityTableModel() { - List<Factor> factors = getSimulAction().getFactorGroup().getFactors(); - List<Factor> factorsContinue = new ArrayList<Factor>(); - /* get sublist with only Continous factor */ - for (Factor f : factors) { - Domain domain = f.getDomain(); - if (ContinuousDomain.class.isInstance(domain)) { - ContinuousDomain continuousDomain = (ContinuousDomain)domain; - factorsContinue.add(f); - } - } - FactorCardinalityTableModel model = new FactorCardinalityTableModel(factorsContinue); - factorCardinality.setModel(model); - } - - protected GenericListModel<String> getAvailableExportListModel() { - List<String> exportNames = getSimulAction().getSensitivityExportNames(); - GenericListModel<String> model = new GenericListModel<>(exportNames); - return model; - } - - /** - * Add multiples export. - * - * Export name can be duplicated. - */ - protected void addExports() { - List<String> exportNames = availableSensitivityExports.getSelectedValuesList(); - for (String exportName : exportNames) { - getSimulAction().addSensitivityExport(this, exportName); - } - setSensitivityExportListModel(); - } - - /** - * Remove multiple export. - */ - protected void removeExports() { - List<SensitivityExport> exports = selectedSensitivityExports.getSelectedValuesList(); - for (SensitivityExport export : exports) { - getSimulAction().removeSensitivityExport(export); - } - setSensitivityExportListModel(); - } - - /** - * Clear all export. - */ - protected void clearExports() { - getSimulAction().clearSensitivityExport(); - setSensitivityExportListModel(); - } - - /** - * Set model (refresh export JList). - */ - public void setSensitivityExportListModel() { - List<SensitivityExport> exports = getSimulAction().getSensitivityExports(); - GenericListModel<SensitivityExport> model = new GenericListModel<>(exports); - selectedSensitivityExports.setModel(model); - selectedSensitivityExports.setCellRenderer(new SensitivityExportListRenderer()); - - clearExportsButton.setEnabled(!exports.isEmpty()); - } - - /** - * When selection change on available export list. - */ - protected void availableSensitivityExportSelection() { - addExportButton.setEnabled(availableSensitivityExports.getSelectedIndices().length != 0); - } - - /** - * When selection change on choosen export list. - */ - protected void selectedSensitivityExportSelection() { - if (log.isDebugEnabled()) { - log.debug("Sensitivity export selection change"); - } - setExportParams(); - removeExportButton.setEnabled(selectedSensitivityExports.getSelectedIndices().length != 0); - } - - /** - * Fill export parameters names and values in table. - */ - protected void setExportParams() { - SimulAction simulAction = getContextValue(SimulAction.class); - - if (selectedSensitivityExports.getSelectedIndices().length == 1) { - SensitivityExport export = (SensitivityExport)selectedSensitivityExports.getSelectedValue(); - ScriptParametersTableModel model = new ScriptParametersTableModel(export); - exportParamsTable.setModel(model); - exportParamsTable.getColumnModel().getColumn(0).setCellRenderer(new ScriptParametersTableCellRenderer(export)); - ScriptParametersTableCellEditor cellEditor = new ScriptParametersTableCellEditor(export); - cellEditor.setRegionStorage(getContextValue(RegionStorage.class)); - exportParamsTable.getColumnModel().getColumn(1).setCellEditor(cellEditor); - } - else { - exportParamsTable.setModel(new DefaultTableModel()); - } - } ]]></script> + <row> <cell fill="horizontal"> <JLabel text="isisfish.sensitivity.select"/> </cell> <cell fill="horizontal" weightx="1.0"> - <JComboBox id="fieldSensitivityAnalysisSelect" model='{getSensitivityAnalysisModel()}' - genericType="String" - renderer='{new SensitivityAnalysisComboRenderer()}' onActionPerformed='sensitivityAnalysisChanged()'/> + <JComboBox id="fieldSensitivityAnalysisSelect" model='{handler.getSensitivityAnalysisModel()}' + genericType="String" onActionPerformed='handler.sensitivityAnalysisChanged()' + renderer='{new fr.ifremer.isisfish.ui.models.sensitivityanalysis.SensitivityAnalysisComboRenderer()}' /> </cell> </row> <row> @@ -255,11 +50,12 @@ </row> <row> <cell columns="2" fill="both" weightx="1.0" weighty="1.0"> - <JPanel id="factorCardinalityPanel" layout="{new CardLayout()}"> + <JPanel id="factorCardinalityPanel" layout="{new java.awt.CardLayout()}"> <JLabel text="isisfish.sensitivity.methodfactorsupported" horizontalAlignment="center" border="{BorderFactory.createEtchedBorder()}" font-style="italic" constraints='"factorCardinalitySupported"'/> <JScrollPane id="factorCardinalityScrollPane" constraints='"factorCardinalityNotSupported"'> - <JTable id="factorCardinality" model="{new FactorCardinalityTableModel()}" rowHeight='24' /> + <JTable id="factorCardinality" rowHeight='24' + model="{new fr.ifremer.isisfish.ui.sensitivity.model.FactorCardinalityTableModel()}" /> </JScrollPane> </JPanel> </cell> @@ -276,26 +72,26 @@ <cell fill="both" weightx="0.5" weighty="1.0"> <JScrollPane> <JList id="availableSensitivityExports" selectionMode="{javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION}" - model='{getAvailableExportListModel()}' cellRenderer='{new SensitivityExportNameListRenderer()}' - genericType="String" - onValueChanged='availableSensitivityExportSelection()' /> + model='{handler.getAvailableExportListModel()}' + cellRenderer='{new fr.ifremer.isisfish.ui.models.sensitivityexport.SensitivityExportNameListRenderer()}' + genericType="String" onValueChanged='handler.availableSensitivityExportSelection()' /> </JScrollPane> </cell> <cell fill="both" weighty="1.0"> <Table> <row> <cell fill="both"> - <JButton id="addExportButton" text="isisfish.common.add" enabled="false" onActionPerformed='addExports()' /> + <JButton id="addExportButton" text="isisfish.common.add" enabled="false" onActionPerformed='handler.addExports()' /> </cell> </row> <row> <cell fill="both"> - <JButton id="removeExportButton" text="isisfish.common.remove" enabled="false" onActionPerformed='removeExports()' /> + <JButton id="removeExportButton" text="isisfish.common.remove" enabled="false" onActionPerformed='handler.removeExports()' /> </cell> </row> <row> <cell fill="both"> - <JButton id="clearExportsButton" text="isisfish.common.clear" enabled="false" onActionPerformed='clearExports()' /> + <JButton id="clearExportsButton" text="isisfish.common.clear" enabled="false" onActionPerformed='handler.clearExports()' /> </cell> </row> </Table> @@ -304,7 +100,7 @@ <JScrollPane> <JList id="selectedSensitivityExports" selectionMode="{javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION}" genericType="fr.ifremer.isisfish.export.SensitivityExport" - onValueChanged='selectedSensitivityExportSelection()' /> + onValueChanged='handler.selectedSensitivityExportSelection()' /> </JScrollPane> </cell> </row> 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-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -50,19 +50,23 @@ import org.nuiton.util.FileUtil; import fr.ifremer.isisfish.IsisFishRuntimeException; +import fr.ifremer.isisfish.datastore.RegionStorage; import fr.ifremer.isisfish.entities.FisheryRegion; import fr.ifremer.isisfish.mexico.MexicoHelper; 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.ui.NavigationHandler; +import fr.ifremer.isisfish.ui.WelcomePanelUI; import fr.ifremer.isisfish.ui.input.InputContentUI; +import fr.ifremer.isisfish.ui.input.InputSaveVerifier; 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.model.FactorTreeModel; +import fr.ifremer.isisfish.ui.sensitivity.wizard.FactorWizardHandler; import fr.ifremer.isisfish.ui.sensitivity.wizard.FactorWizardUI; -import fr.ifremer.isisfish.ui.sensitivity.wizard.SensitivityWizardHandler; import fr.ifremer.isisfish.ui.simulator.SimulAction; /** @@ -79,18 +83,66 @@ /** Class logger. */ private static Log log = LogFactory.getLog(SensitivityInputHandler.class); + protected SensitivityInputUI sensitivityInputUI; + + public SensitivityInputHandler(SensitivityInputUI sensitivityInputUI) { + this.sensitivityInputUI = sensitivityInputUI; + } + + protected void afterInit() { + + } + + @Deprecated + protected SimulAction getSimulAction() { + return sensitivityInputUI.getContextValue(SimulAction.class); + } + + protected InputSaveVerifier getVerifier() { + return sensitivityInputUI.getContextValue(InputSaveVerifier.class); + } + + protected RegionStorage getRegionStorage() { + return sensitivityInputUI.getContextValue(RegionStorage.class); + } + + public void setTreeModel() { + if (sensitivityInputUI.getFisheryRegion() != null) { + sensitivityInputUI.getCardlayoutPrincipal().show(sensitivityInputUI.inputPanePrincipal,"normale"); + sensitivityInputUI.setContextValue(sensitivityInputUI.getFisheryRegion()); + loadFisheryRegionTree(); + } + } + + protected void setInfoText(String s) { + WelcomePanelUI root = sensitivityInputUI.getParentContainer(WelcomePanelUI.class); + root.setStatusMessage(s); + } + + protected void regionNull() { + sensitivityInputUI.getCardlayoutPrincipal().show(sensitivityInputUI.inputPanePrincipal,"none"); + DefaultTreeModel model = new DefaultTreeModel(null); + sensitivityInputUI.fisheryRegionTree.setModel(model); + } + + public void setFactorModel() { + FactorGroup factorGroup = getSimulAction().getFactorGroup(); + FactorTreeModel model = new FactorTreeModel(factorGroup); + sensitivityInputUI.factorsTree.setModel(model); + sensitivityInputUI.getParentContainer(SensitivityUI.class).getSensitivityChooserUI().getHandler().setFactorCardinalityTableModel(); + } + /** * - * @param sensitivityTabUI */ - public void loadFisheryRegionTree(SensitivityTabUI sensitivityTabUI) { - FisheryRegion fisheryRegion = sensitivityTabUI.getFisheryRegion(); + public void loadFisheryRegionTree() { + FisheryRegion fisheryRegion = sensitivityInputUI.getFisheryRegion(); if (fisheryRegion == null) { // show empty region ui - sensitivityTabUI.getCardlayoutPrincipal().show(sensitivityTabUI.getInputPanePrincipal(),"none"); + sensitivityInputUI.getCardlayoutPrincipal().show(sensitivityInputUI.getInputPanePrincipal(),"none"); TreeModel model = new DefaultTreeModel(null); - sensitivityTabUI.getFisheryRegionTree().setModel(model); + sensitivityInputUI.getFisheryRegionTree().setModel(model); } else { // init tree model loader with fishery region @@ -98,27 +150,26 @@ FisheryDataProvider dataProvider = new FisheryDataProvider(fisheryRegion); treeHelper.setDataProvider(dataProvider); TreeModel model = treeHelper.createTreeModel(fisheryRegion); - sensitivityTabUI.getFisheryRegionTree().setModel(model); - sensitivityTabUI.getFisheryRegionTree().setCellRenderer(new FisheryTreeRenderer(dataProvider)); - treeHelper.setUI(sensitivityTabUI.getFisheryRegionTree(), true, false, null); + sensitivityInputUI.getFisheryRegionTree().setModel(model); + sensitivityInputUI.getFisheryRegionTree().setCellRenderer(new FisheryTreeRenderer(dataProvider)); + treeHelper.setUI(sensitivityInputUI.getFisheryRegionTree(), true, false, null); // global context value : fisheryRegion, regionStorage, treeHelper - sensitivityTabUI.setContextValue(fisheryRegion); - sensitivityTabUI.setContextValue(treeHelper); - sensitivityTabUI.setContextValue(model); - sensitivityTabUI.setContextValue(fisheryRegion.getTopiaContext()); + sensitivityInputUI.setContextValue(fisheryRegion); + sensitivityInputUI.setContextValue(treeHelper); + sensitivityInputUI.setContextValue(model); + sensitivityInputUI.setContextValue(fisheryRegion.getTopiaContext()); - sensitivityTabUI.getCardlayoutPrincipal().show(sensitivityTabUI.getInputPanePrincipal(),"normale"); + sensitivityInputUI.getCardlayoutPrincipal().show(sensitivityInputUI.getInputPanePrincipal(),"normale"); } } /** * Changement de selection dans l'arbre de la pecherie. * - * @param sensitivityTabUI * @param event */ - public void nodeSelectionChanged(SensitivityTabUI sensitivityTabUI, TreeSelectionEvent event) { + public void nodeSelectionChanged(TreeSelectionEvent event) { TreePath newTreePath = event.getNewLeadSelectionPath(); @@ -135,12 +186,12 @@ try { if (isisTreeNode.isStaticNode()) { - FisheryRegion fisheryRegion = sensitivityTabUI.getContextValue(FisheryRegion.class); + FisheryRegion fisheryRegion = sensitivityInputUI.getContextValue(FisheryRegion.class); TopiaContext topiaContext = fisheryRegion.getTopiaContext(); topiaEntity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId); } - InputContentUI inputContentUI = getUIInstanceForBeanClass(internalClass, sensitivityTabUI); + InputContentUI inputContentUI = getUIInstanceForBeanClass(internalClass, sensitivityInputUI); // mandatory set inputContentUI.getSaveVerifier().reset(); // before set bean !!! @@ -155,11 +206,11 @@ inputContentUI.setSensitivity(true); // add initialized ui to panel - sensitivityTabUI.getCardlayoutPrincipal().show(sensitivityTabUI.getInputPanePrincipal(), "normale"); - sensitivityTabUI.getInputPane().removeAll(); - sensitivityTabUI.getInputPane().add(inputContentUI, BorderLayout.CENTER); - sensitivityTabUI.getInputPane().repaint(); - sensitivityTabUI.getInputPane().validate(); + sensitivityInputUI.getCardlayoutPrincipal().show(sensitivityInputUI.getInputPanePrincipal(), "normale"); + sensitivityInputUI.getInputPane().removeAll(); + sensitivityInputUI.getInputPane().add(inputContentUI, BorderLayout.CENTER); + sensitivityInputUI.getInputPane().repaint(); + sensitivityInputUI.getInputPane().validate(); } catch (Exception ex) { throw new IsisFishRuntimeException("Can't display bean " + topiaId, ex); } @@ -170,36 +221,34 @@ /** * Add new continuous factor group in factor tree. * - * @param sensitivityTabUI * @param continuous continuous */ - public void addNewFactorGroup(SensitivityTabUI sensitivityTabUI, boolean continuous) { - String factorName = JOptionPane.showInputDialog(sensitivityTabUI, t("isisfish.sensitivity.newfactorname"), + public void addNewFactorGroup(boolean continuous) { + String factorName = JOptionPane.showInputDialog(sensitivityInputUI, t("isisfish.sensitivity.newfactorname"), t("isisfish.sensitivity.title"), JOptionPane.QUESTION_MESSAGE); if (StringUtils.isNotBlank(factorName)) { - FactorGroup rootFactorGroup = sensitivityTabUI.getSimulAction().getFactorGroup(); + FactorGroup rootFactorGroup = getSimulAction().getFactorGroup(); FactorGroup factorGroup = new FactorGroup(factorName, continuous); rootFactorGroup.addFactor(factorGroup); - sensitivityTabUI.setFactorModel(); + setFactorModel(); } } /** * Move factors to another factorgroup. * - * @param sensitivityTabUI * @param selectedFactorGroup * @param movedFactors */ - public void moveFactor(SensitivityTabUI sensitivityTabUI, FactorGroup selectedFactorGroup, List<Factor> movedFactors) { + public void moveFactor(FactorGroup selectedFactorGroup, List<Factor> movedFactors) { try { // add all factors, to do first, throw // exception if can't be done selectedFactorGroup.addAllFactors(movedFactors); // remove duplicated from factor group - FactorGroup rootFactorGroup = sensitivityTabUI.getSimulAction().getFactorGroup(); + FactorGroup rootFactorGroup = getSimulAction().getFactorGroup(); if (!rootFactorGroup.equals(selectedFactorGroup)) { rootFactorGroup.removeAll(movedFactors); } @@ -212,9 +261,9 @@ } } } - sensitivityTabUI.setFactorModel(); + setFactorModel(); } catch (IllegalArgumentException ex) { - JOptionPane.showMessageDialog(sensitivityTabUI, t("isisfish.sensitivity.moveillegal"), + JOptionPane.showMessageDialog(sensitivityInputUI, t("isisfish.sensitivity.moveillegal"), t("isisfish.sensitivity.title"), JOptionPane.ERROR_MESSAGE); } } @@ -227,10 +276,9 @@ * <li>right click : popup menu</li> * </ul> * - * @param sensitivityTabUI ui * @param e mouse event */ - public void factorsTreeMouseClicked(final SensitivityTabUI sensitivityTabUI, MouseEvent e) { + public void factorsTreeMouseClicked(MouseEvent e) { // clic droit if (e.getButton() == MouseEvent.BUTTON3) { JPopupMenu menu = new JPopupMenu(); @@ -238,7 +286,7 @@ menuItemDelete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - deleteSelectedFactors(sensitivityTabUI); + deleteSelectedFactors(); } }); menu.add(menuItemDelete); @@ -246,18 +294,16 @@ } else if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) { // autre double clic - factorSelected(sensitivityTabUI); + factorSelected(); } } /** * Factor selection, display modification wizard. - * - * @param sensitivityTabUI */ - protected void factorSelected(SensitivityTabUI sensitivityTabUI) { + protected void factorSelected() { // get selected factor - TreePath selectedPath = sensitivityTabUI.getFactorsTree().getSelectionPath(); + TreePath selectedPath = sensitivityInputUI.getFactorsTree().getSelectionPath(); // method appelee au clic, donc pas forcement de selection if (selectedPath != null) { @@ -266,11 +312,11 @@ if (selectedObject != null) { if (!(selectedObject instanceof FactorGroup)) { Factor selectedFactor = (Factor)selectedObject; - FactorWizardUI factorWizardUI = new FactorWizardUI(sensitivityTabUI); - SensitivityWizardHandler handler = factorWizardUI.getHandler(); + FactorWizardUI factorWizardUI = new FactorWizardUI(sensitivityInputUI); + FactorWizardHandler handler = factorWizardUI.getHandler(); handler.initExistingFactor(factorWizardUI, selectedFactor); factorWizardUI.pack(); - factorWizardUI.setLocationRelativeTo(sensitivityTabUI); + factorWizardUI.setLocationRelativeTo(sensitivityInputUI); factorWizardUI.setVisible(true); } } @@ -280,9 +326,9 @@ /** * Delete selection factors. */ - protected void deleteSelectedFactors(SensitivityTabUI sensitivityTabUI) { + protected void deleteSelectedFactors() { // get selected factor - TreePath[] selectedPaths = sensitivityTabUI.getFactorsTree().getSelectionPaths(); + TreePath[] selectedPaths = sensitivityInputUI.getFactorsTree().getSelectionPaths(); if (!ArrayUtils.isEmpty(selectedPaths)) { // can happen for (TreePath selectedPath : selectedPaths) { Object[] pathWay = selectedPath.getPath(); @@ -297,7 +343,7 @@ log.debug("Deleting factor " + selectedFactor.getName()); } selectedFactorGroup.remove(selectedFactor); - sensitivityTabUI.setFactorModel(); + setFactorModel(); } } } @@ -305,39 +351,14 @@ } } - /* - * 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) { - result = ((JTextComponent) component).getText(); - } else if (component instanceof MatrixPanelEditor) { - result = ((MatrixPanelEditor) component).getMatrix(); - } else if (component instanceof InputOneEquationUI) { - result = ((InputOneEquationUI) component).getEditor().getText(); - } else if (component instanceof RuleChooser) { - result = ((RuleChooser)component).getRulesList(); - } - if (log.isDebugEnabled()) { - log.debug("Value for component : " + component.getClass().getSimpleName() + " is " + result); - } - - return result; - }*/ - /** * Export factors list to xml mexico file. * * @since 4.1.1.2 */ - public void exportFactorsToMexico(SensitivityTabUI view) { + public void exportFactorsToMexico() { File xmlFile = FileUtil.getFile(t("isisfish.sensitivity.mexico.exporttoxml.title"), - t("isisfish.sensitivity.mexico.exporttoxml.approve"), view, + t("isisfish.sensitivity.mexico.exporttoxml.approve"), sensitivityInputUI, new String[]{ ".*\\.xml", t("isisfish.sensitivity.mexico.exporttoxml.filter") @@ -350,11 +371,11 @@ xmlFile = new File(xmlFile.getAbsolutePath() + ".xml"); } - SimulAction simulAction = view.getContextValue(SimulAction.class); + SimulAction simulAction = sensitivityInputUI.getContextValue(SimulAction.class); DesignPlan designPlan = new DesignPlan(); designPlan.setFactorGroup(simulAction.getFactorGroup()); - String xml = MexicoHelper.getDesignPlanAsXML(designPlan); + //String xml = MexicoHelper.getDesignPlanAsXML(designPlan); MexicoHelper.writeDesignPlanToFile(xmlFile, designPlan); } } Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputUI.jaxx (from rev 4230, trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputUI.jaxx (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputUI.jaxx 2015-05-22 16:10:26 UTC (rev 4233) @@ -0,0 +1,86 @@ +<!-- + #%L + IsisFish + + $Id$ + $HeadURL$ + %% + Copyright (C) 2009 - 2012 Ifremer, CodeLutin, Chatellier Eric + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<fr.ifremer.isisfish.ui.NavigationUI> + + <SensitivityInputHandler id="handler" constructorParams='this' /> + + <fr.ifremer.isisfish.entities.FisheryRegion id='fisheryRegion' javaBean='null'/> + + <script><![CDATA[ + protected void $afterCompleteSetup() { + handler.afterInit(); + } + ]]></script> + + <JSplitPane oneTouchExpandable="true" dividerLocation="200" orientation="HORIZONTAL" constraints='BorderLayout.CENTER'> + <JPanel layout='{new BorderLayout()}'> + <JSplitPane oneTouchExpandable="true" dividerLocation="400" orientation="VERTICAL" constraints='BorderLayout.CENTER'> + <JScrollPane> + <javax.swing.tree.DefaultTreeSelectionModel id='fisheryRegionTreeSelectionModel' + selectionMode='{javax.swing.tree.TreeSelectionModel.SINGLE_TREE_SELECTION}'/> + <JTree id="fisheryRegionTree" rootVisible="true" selectionRow='0' + selectionModel='{getFisheryRegionTreeSelectionModel()}' + model='{new javax.swing.tree.DefaultTreeModel(null)}' + onValueChanged="handler.nodeSelectionChanged(event)" /> + </JScrollPane> + <Table> + <row> + <cell anchor='west'> + <JButton icon="factors/dgroup.png" toolTipText="isisfish.sensitivity.newfactordgroup.tip" + onActionPerformed="handler.addNewFactorGroup(false)"/> + </cell> + <cell anchor='west'> + <JButton icon="factors/cgroup.png" toolTipText="isisfish.sensitivity.newfactorcgroup.tip" + onActionPerformed="handler.addNewFactorGroup(true)"/> + </cell> + <cell anchor='west' weightx='1'> + <JButton icon="script_go.png" toolTipText="isisfish.sensitivity.mexico.exporttoxml.tip" + onActionPerformed="handler.exportFactorsToMexico()"/> + </cell> + </row> + <row> + <cell columns='3' fill="both" weightx='1.0' weighty='1.0'> + <JScrollPane> + <fr.ifremer.isisfish.ui.sensitivity.model.FactorTree id="factorsTree" constructorParams='this' + rootVisible="true" selectionRow='0' + model='{new fr.ifremer.isisfish.ui.sensitivity.model.FactorTreeModel(handler.getSimulAction().getFactorGroup())}' + cellRenderer='{new fr.ifremer.isisfish.ui.sensitivity.model.FactorTreeCellRenderer()}' + onMouseClicked='handler.factorsTreeMouseClicked(event)'/> + </JScrollPane> + </cell> + </row> + </Table> + </JSplitPane> + </JPanel> + <java.awt.CardLayout id='cardlayoutPrincipal'/> + <JPanel id='inputPanePrincipal' layout='{getCardlayoutPrincipal()}'> + <JPanel layout='{new BorderLayout()}' constraints='"none"'> + <JLabel id='none' horizontalAlignment="0" text="isisfish.input.selectRegion" constraints='BorderLayout.CENTER'/> + </JPanel> + <jaxx.runtime.swing.CardLayout2 id='cardlayout'/> + <JPanel id="inputPane" layout='{getCardlayout()}' constraints='"normale"'/> + </JPanel> + </JSplitPane> +</fr.ifremer.isisfish.ui.NavigationUI> Added: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassHandler.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -0,0 +1,116 @@ +package fr.ifremer.isisfish.ui.sensitivity; + +import java.awt.event.ActionEvent; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import fr.ifremer.isisfish.datastore.SimulationStorage; +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.ui.models.common.GenericComboModel; +import fr.ifremer.isisfish.ui.simulator.SimulAction; + +public class SensitivitySecondPassHandler { + + /** Class logger. */ + private static Log log = LogFactory.getLog(SensitivitySecondPassHandler.class); + + protected SensitivitySecondPassUI sensitivitySecondPassUI; + + // declaration sépérée de la variable d'instance (jaxx) + protected SimulationServiceListener simulationListener; + + public SensitivitySecondPassHandler(SensitivitySecondPassUI sensitivitySecondPassUI) { + this.sensitivitySecondPassUI = sensitivitySecondPassUI; + } + + protected void afterInit() { + // permet de rafaichir la liste les simulations + // des qu'une simulation se termine + simulationListener = new SimulationServiceListener() { + @Override + public void simulationStart(SimulationService simService, SimulationJob job) { + } + + @Override + public void simulationStop(SimulationService simService, SimulationJob job) { + if (log.isDebugEnabled()) { + log.debug("Refresh second pass UI simulations list"); + } + GenericComboModel<String> model = (GenericComboModel<String>)sensitivitySecondPassUI.fieldSensitivitySimulationSelect.getModel(); + String simulationName = job.getId(); + if (simulationName.startsWith("as_")) { + String masterSensitivityName = simulationName.substring(0, simulationName.lastIndexOf("_")); + if (!model.containsElement(masterSensitivityName)) { + model.addElement(masterSensitivityName); + } + } + } + + @Override + public void clearJobDone(SimulationService simService) { + } + }; + SimulationService.getService().addSimulationServiceListener(simulationListener); + } + + /** + * Model de contenu de la liste des nom de simulations + */ + public GenericComboModel<String> getSensitivitySimulationModel() { + List<String> asNames = new ArrayList<>(); + for (String simulationName : SimulationStorage.getSimulationNames()) { + if (simulationName.startsWith("as_")) { + String masterSensitivityName = simulationName.substring(0, simulationName.lastIndexOf("_")); + if (!asNames.contains(masterSensitivityName)) { + asNames.add(masterSensitivityName); + } + } + } + + GenericComboModel<String> model = new GenericComboModel<>(asNames); + return model; + } + + @Deprecated + protected SimulAction getSimulAction() { + return sensitivitySecondPassUI.getContextValue(SimulAction.class); + } + + protected void launchSecondPass(ActionEvent event) { + if (sensitivitySecondPassUI.fieldSensitivitySimulationSelect.getSelectedIndex() != -1) { + getSimulAction().runSensitivitySecondPass((String)sensitivitySecondPassUI.fieldSensitivitySimulationSelect.getSelectedItem()); + displaySensitivitySecondPass(event); + } + } + + protected void displaySensitivitySecondPass(ActionEvent event) { + if (sensitivitySecondPassUI.fieldSensitivitySimulationSelect.getSelectedIndex() != -1) { + + try { + String selectedSimulationName = (String)sensitivitySecondPassUI.fieldSensitivitySimulationSelect.getSelectedItem(); + List<File> files = getSimulAction().getSensitivitySecondPassResults(selectedSimulationName); + + String content = ""; + for(File file : files) { + content += "Fichier " + file.getName() + "\n"; + content += "------------------------------\n"; + content += FileUtils.readFileToString(file) + "\n"; + content += "\n"; + } + sensitivitySecondPassUI.textAreaSensitivitySecondpassResult.setText(content); + } catch(IOException e) { + if (log.isErrorEnabled()) { + log.error("Can't run second pass", e); + } + } + } + } +} Property changes on: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassHandler.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassUI.jaxx 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassUI.jaxx 2015-05-22 16:10:26 UTC (rev 4233) @@ -23,117 +23,24 @@ #L% --> <Table> - <import> - java.util.ArrayList - java.io.File - java.io.IOException - org.apache.commons.io.FileUtils - fr.ifremer.isisfish.datastore.SimulationStorage - fr.ifremer.isisfish.simulator.launcher.SimulationService - fr.ifremer.isisfish.simulator.launcher.SimulationJob - fr.ifremer.isisfish.simulator.launcher.SimulationServiceListener - fr.ifremer.isisfish.ui.simulator.SimulAction - fr.ifremer.isisfish.ui.models.common.GenericComboModel - </import> + <SensitivitySecondPassHandler id="handler" constructorParams='this' /> -<script><![CDATA[ - // declaration sépérée de la variable d'instance (jaxx) - SimulationServiceListener simulationListener; - + <script><![CDATA[ protected void $afterCompleteSetup() { - // permet de rafaichir la liste les simulations - // des qu'une simulation se termine - simulationListener = new SimulationServiceListener() { - @Override - public void simulationStart(SimulationService simService, SimulationJob job) { - } - - @Override - public void simulationStop(SimulationService simService, SimulationJob job) { - if (log.isDebugEnabled()) { - log.debug("Refresh second pass UI simulations list"); - } - GenericComboModel<String> model = (GenericComboModel)fieldSensitivitySimulationSelect.getModel(); - String simulationName = job.getId(); - if (simulationName.startsWith("as_")) { - String masterSensitivityName = simulationName.substring(0, simulationName.lastIndexOf("_")); - if (!model.containsElement(masterSensitivityName)) { - model.addElement(masterSensitivityName); - } - } - } - - @Override - public void clearJobDone(SimulationService simService) { - } - }; - SimulationService.getService().addSimulationServiceListener(simulationListener); + handler.afterInit(); } + ]]></script> - /** - * Model de contenu de la liste des nom de simulations - */ - public GenericComboModel<String> getSensitivitySimulationModel() { - List<String> asNames = new ArrayList<String>(); - for (String simulationName : SimulationStorage.getSimulationNames()) { - if (simulationName.startsWith("as_")) { - String masterSensitivityName = simulationName.substring(0, simulationName.lastIndexOf("_")); - if (!asNames.contains(masterSensitivityName)) { - asNames.add(masterSensitivityName); - } - } - } - - GenericComboModel<String> model = new GenericComboModel<>(asNames); - return model; - } - - protected SimulAction getSimulAction() { - return getContextValue(SimulAction.class); - } - - protected void launchSecondPass(ActionEvent event) { - if (fieldSensitivitySimulationSelect.getSelectedIndex() != -1) { - getSimulAction().runSensitivitySecondPass((String)fieldSensitivitySimulationSelect.getSelectedItem()); - displaySensitivitySecondPass(event); - } - } - - protected void displaySensitivitySecondPass(ActionEvent event) { - if (fieldSensitivitySimulationSelect.getSelectedIndex() != -1) { - - try { - String selectedSimulationName = (String)fieldSensitivitySimulationSelect.getSelectedItem(); - List<File> files = getSimulAction().getSensitivitySecondPassResults(selectedSimulationName); - - String content = ""; - for(File file : files) { - content += "Fichier " + file.getName() + "\n"; - content += "------------------------------\n"; - content += FileUtils.readFileToString(file) + "\n"; - content += "\n"; - } - textAreaSensitivitySecondpassResult.setText(content); - } catch(IOException e) { - if (log.isErrorEnabled()) { - log.error("Can't run second pass", e); - } - } - } - } - - ]]> - </script> <row> <cell fill="horizontal" weightx="1.0"> - <JComboBox id="fieldSensitivitySimulationSelect" genericType="String" model='{getSensitivitySimulationModel()}' /> + <JComboBox id="fieldSensitivitySimulationSelect" genericType="String" model='{handler.getSensitivitySimulationModel()}' /> </cell> <cell fill="horizontal"> - <JButton id="runSecondPassButton" text='isisfish.sensitivity.secondpass' onActionPerformed='launchSecondPass(event)' + <JButton id="runSecondPassButton" text='isisfish.sensitivity.secondpass' onActionPerformed='handler.launchSecondPass(event)' enabled="{fieldSensitivitySimulationSelect.getSelectedItem() != null}" /> </cell> <cell fill="horizontal"> - <JButton id="displaySecondPassButton" text='isisfish.sensitivity.displaysecondpass' onActionPerformed='displaySensitivitySecondPass(event)' + <JButton id="displaySecondPassButton" text='isisfish.sensitivity.displaysecondpass' onActionPerformed='handler.displaySensitivitySecondPass(event)' enabled="{fieldSensitivitySimulationSelect.getSelectedItem() != null}" /> </cell> </row> Deleted: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx 2015-05-22 16:10:26 UTC (rev 4233) @@ -1,130 +0,0 @@ -<!-- - #%L - IsisFish - - $Id$ - $HeadURL$ - %% - Copyright (C) 2009 - 2012 Ifremer, CodeLutin, Chatellier Eric - %% - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this program. If not, see - <http://www.gnu.org/licenses/gpl-3.0.html>. - #L% - --> -<fr.ifremer.isisfish.ui.NavigationUI> - <import> - javax.swing.tree.DefaultTreeModel - fr.ifremer.isisfish.datastore.RegionStorage - fr.ifremer.isisfish.ui.WelcomePanelUI - fr.ifremer.isisfish.ui.input.InputSaveVerifier - fr.ifremer.isisfish.ui.simulator.SimulAction - fr.ifremer.isisfish.simulator.sensitivity.FactorGroup - fr.ifremer.isisfish.ui.sensitivity.model.FactorTreeModel - fr.ifremer.isisfish.ui.sensitivity.model.FactorTreeCellRenderer - fr.ifremer.isisfish.ui.sensitivity.model.FactorTree - java.awt.event.ActionListener - java.awt.event.ActionEvent - </import> - - <SensitivityInputHandler id="handler" /> - - <fr.ifremer.isisfish.entities.FisheryRegion id='fisheryRegion' javaBean='null'/> - - <script><![CDATA[ -protected SimulAction getSimulAction() { - return getContextValue(SimulAction.class); -} - -protected InputSaveVerifier getVerifier() { - return getContextValue(InputSaveVerifier.class); -} - -protected RegionStorage getRegionStorage() { - return getContextValue(RegionStorage.class); -} - -public void setTreeModel() { - if (getFisheryRegion() != null) { - getCardlayoutPrincipal().show(inputPanePrincipal,"normale"); - setContextValue(getFisheryRegion()); - getHandler().loadFisheryRegionTree(this); - } -} -protected void setInfoText(String s) { - WelcomePanelUI root = getParentContainer(WelcomePanelUI.class); - root.setStatusMessage(s); -} -protected void regionNull() { - getCardlayoutPrincipal().show(inputPanePrincipal,"none"); - DefaultTreeModel model = new DefaultTreeModel(null); - fisheryRegionTree.setModel(model); -} -public void setFactorModel() { - FactorGroup factorGroup = getSimulAction().getFactorGroup(); - FactorTreeModel model = new FactorTreeModel(factorGroup); - factorsTree.setModel(model); - getParentContainer(SensitivityUI.class).getSensitivityChooserUI().setFactorCardinalityTableModel(); -} - ]]> - </script> - <JSplitPane oneTouchExpandable="true" dividerLocation="200" orientation="HORIZONTAL" constraints='BorderLayout.CENTER'> - <JPanel layout='{new BorderLayout()}'> - <JSplitPane oneTouchExpandable="true" dividerLocation="400" orientation="VERTICAL" constraints='BorderLayout.CENTER'> - <JScrollPane> - <javax.swing.tree.DefaultTreeSelectionModel id='fisheryRegionTreeSelectionModel' - selectionMode='{javax.swing.tree.TreeSelectionModel.SINGLE_TREE_SELECTION}'/> - <JTree id="fisheryRegionTree" rootVisible="true" selectionRow='0' - selectionModel='{getFisheryRegionTreeSelectionModel()}' - model='{new DefaultTreeModel(null)}' - onValueChanged="getHandler().nodeSelectionChanged(this, event)" /> - </JScrollPane> - <Table> - <row> - <cell anchor='west'> - <JButton icon="factors/dgroup.png" toolTipText="isisfish.sensitivity.newfactordgroup.tip" - onActionPerformed="getHandler().addNewFactorGroup(this, false)"/> - </cell> - <cell anchor='west'> - <JButton icon="factors/cgroup.png" toolTipText="isisfish.sensitivity.newfactorcgroup.tip" - onActionPerformed="getHandler().addNewFactorGroup(this, true)"/> - </cell> - <cell anchor='west' weightx='1'> - <JButton icon="script_go.png" toolTipText="isisfish.sensitivity.mexico.exporttoxml.tip" - onActionPerformed="getHandler().exportFactorsToMexico(this)"/> - </cell> - </row> - <row> - <cell columns='3' fill="both" weightx='1.0' weighty='1.0'> - <JScrollPane> - <FactorTree id="factorsTree" constructorParams='this' - rootVisible="true" selectionRow='0' - model='{new FactorTreeModel(getSimulAction().getFactorGroup())}' - cellRenderer='{new FactorTreeCellRenderer()}' - onMouseClicked='getHandler().factorsTreeMouseClicked(this, event)'/> - </JScrollPane> - </cell> - </row> - </Table> - </JSplitPane> - </JPanel> - <java.awt.CardLayout id='cardlayoutPrincipal'/> - <JPanel id='inputPanePrincipal' layout='{getCardlayoutPrincipal()}'> - <JPanel layout='{new BorderLayout()}' constraints='"none"'> - <JLabel id='none' horizontalAlignment="0" text="isisfish.input.selectRegion" constraints='BorderLayout.CENTER'/> - </JPanel> - <jaxx.runtime.swing.CardLayout2 id='cardlayout'/> - <JPanel id="inputPane" layout='{getCardlayout()}' constraints='"normale"'/> - </JPanel> - </JSplitPane> -</fr.ifremer.isisfish.ui.NavigationUI> 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-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx 2015-05-22 16:10:26 UTC (rev 4233) @@ -24,14 +24,6 @@ --> <fr.ifremer.isisfish.ui.SimulationUI> - <import> - fr.ifremer.isisfish.ui.sensitivity.SensitivitySaveVerifier - jaxx.runtime.context.JAXXInitialContext - jaxx.runtime.JAXXContext - </import> - - <SensitivityInputHandler id="handler" /> - <script><![CDATA[ /** @@ -72,18 +64,16 @@ @Override public void refreshFactorTree() { - sensitivityTabUI.setFactorModel(); + sensitivityInputUI.getHandler().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)' /> + <fr.ifremer.isisfish.ui.simulator.ParamsUI id='paramsUI' sensitivity='true' regionStorage="{getRegionStorage()}" constructorParams='this' /> </tab> <tab title='isisfish.sensitivity.title' enabled="false"> - <SensitivityTabUI id="sensitivityTabUI" - constructorParams='new JAXXInitialContext().add(new SensitivitySaveVerifier()).add("SimulationUI", this).add(this)' /> + <SensitivityInputUI id="sensitivityInputUI" constructorParams='this' /> </tab> <tab title='isisfish.sensitivityChooser.title' enabled="false"> <SensitivityChooserUI id="sensitivityChooserUI" constructorParams='this'/> Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTransferHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTransferHandler.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTransferHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -40,7 +40,7 @@ import fr.ifremer.isisfish.simulator.sensitivity.Factor; import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup; -import fr.ifremer.isisfish.ui.sensitivity.SensitivityTabUI; +import fr.ifremer.isisfish.ui.sensitivity.SensitivityInputUI; /** * Transfer handler used to transfer tasks in table. @@ -59,15 +59,15 @@ private static Log log = LogFactory.getLog(FactorTransferHandler.class); /** Associated ui */ - protected SensitivityTabUI sensitivityTabUI; + protected SensitivityInputUI sensitivityInputUI; /** * Constructor. * - * @param sensitivityTabUI associated ui + * @param sensitivityInputUI associated ui */ - public FactorTransferHandler(SensitivityTabUI sensitivityTabUI) { - this.sensitivityTabUI = sensitivityTabUI; + public FactorTransferHandler(SensitivityInputUI sensitivityInputUI) { + this.sensitivityInputUI = sensitivityInputUI; } @Override @@ -152,7 +152,7 @@ if (selectedFactorGroup != null) { Object myObject = transferable.getTransferData(FactorTranferable.myData); List<Factor> movedFactors = (List<Factor>) myObject; - sensitivityTabUI.getHandler().moveFactor(sensitivityTabUI, selectedFactorGroup, movedFactors); + sensitivityInputUI.getHandler().moveFactor(selectedFactorGroup, movedFactors); } } catch (IOException e) { if (log.isErrorEnabled()) { Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTree.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTree.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTree.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -31,7 +31,7 @@ import fr.ifremer.isisfish.simulator.sensitivity.Factor; import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup; -import fr.ifremer.isisfish.ui.sensitivity.SensitivityTabUI; +import fr.ifremer.isisfish.ui.sensitivity.SensitivityInputUI; /** * Factor tree. @@ -52,12 +52,12 @@ /** * Constructor (add drag and drop). * - * @param sensitivityTabUI parent ui + * @param sensitivityInputUI parent ui */ - public FactorTree(SensitivityTabUI sensitivityTabUI) { + public FactorTree(SensitivityInputUI sensitivityInputUI) { // enable drag n drop setDragEnabled(true); - setTransferHandler(new FactorTransferHandler(sensitivityTabUI)); + setTransferHandler(new FactorTransferHandler(sensitivityInputUI)); } /** Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/FactorWizardHandler.java (from rev 4231, trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/FactorWizardHandler.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/FactorWizardHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -0,0 +1,882 @@ +/* + * #%L + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 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.sensitivity.wizard; + +import static org.nuiton.i18n.I18n.t; + +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Component; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.ArrayList; +import java.util.List; +import java.util.SortedMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JOptionPane; +import javax.swing.JScrollPane; +import javax.swing.JTextField; +import javax.swing.text.JTextComponent; + +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.math.matrix.MatrixND; +import org.nuiton.math.matrix.gui.MatrixPanelEditor; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.TopiaEntityContextable; + +import fr.ifremer.isisfish.IsisFishDAOHelper; +import fr.ifremer.isisfish.IsisFishRuntimeException; +import fr.ifremer.isisfish.datastore.RegionStorage; +import fr.ifremer.isisfish.datastore.RuleStorage; +import fr.ifremer.isisfish.entities.Equation; +import fr.ifremer.isisfish.entities.Population; +import fr.ifremer.isisfish.rule.Rule; +import fr.ifremer.isisfish.simulator.sensitivity.Domain; +import fr.ifremer.isisfish.simulator.sensitivity.Factor; +import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils; +import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; +import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; +import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; +import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; +import fr.ifremer.isisfish.types.Month; +import fr.ifremer.isisfish.types.RangeOfValues; +import fr.ifremer.isisfish.types.TimeStep; +import fr.ifremer.isisfish.types.TimeUnit; +import fr.ifremer.isisfish.ui.SimulationUI; +import fr.ifremer.isisfish.ui.input.equation.InputOneEquationUI; +import fr.ifremer.isisfish.ui.simulator.RuleChooser; +import fr.ifremer.isisfish.ui.simulator.SimulAction; +import fr.ifremer.isisfish.ui.widget.editor.MonthComponent; +import fr.ifremer.isisfish.ui.widget.editor.StepComponent; + +/** + * Handler for all class in wizard packages. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class FactorWizardHandler { + + /** Class logger. */ + private static Log log = LogFactory.getLog(FactorWizardHandler.class); + + protected FactorWizardUI factorWizardUI; + + public FactorWizardHandler(FactorWizardUI factorWizardUI) { + this.factorWizardUI = factorWizardUI; + } + + protected void afterInit() { + factorWizardUI.addPropertyChangeListener(FactorWizardUI.PROPERTY_CONTINUE_SELECTED, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + if ((Boolean)evt.getNewValue()) { + ((CardLayout)factorWizardUI.hidablePanel.getLayout()).show(factorWizardUI.hidablePanel, "continuousPanelContainer"); + } else { + ((CardLayout)factorWizardUI.hidablePanel.getLayout()).show(factorWizardUI.hidablePanel, "discretePanelContainer"); + } + } + }); + } + + /** + * Return opened topia context that need to be closed. + * + * There is several things in ugly jaxx context: + * <ul> + * <li>opened TopiaContext from SensitivityTabUI that is null in ParamUI + * <li>RegionStorage on SimulAction + * </ul> + * + * Use region storage here. + * + * @return opened topia context + * @throws TopiaException + */ + protected TopiaContext getTopiaContext(FactorWizardUI factorWizardUI) throws TopiaException { + // RegionStorage object is common to ParamsUI + // and SensitivityTabUI and may be valued + RegionStorage regionStorage = factorWizardUI.getContextValue(RegionStorage.class); + TopiaContext context = regionStorage.getStorage().beginTransaction(); + return context; + } + + /** + * Initialize un nouveau wizard avec lorsque l'utilisateur clic sur + * un layer sont le sous composant accepte la mise en facteur. + * + * On recupere des info sur le type correspondant à la proprieté a mettre + * en facteur pour savoir le composant d'edition et s'il peut etre continue + * ou pas. + * + * @param factorWizardUI factorWizardUI + * @param bean bean in current ui + * @param property bean property to edit + */ + public void initNewFactor(FactorWizardUI factorWizardUI, TopiaEntityContextable bean, String property) { + + // path is topiaId#property + // ex : fwn#fsd#0.3425345#name + // for JAXX : cOrigine start with upper case + // for commons beanutils : must be lower case + String beanProperty = StringUtils.uncapitalize(property); + String path = bean.getTopiaId() + "#" + beanProperty; + factorWizardUI.setFactorPath(path); + factorWizardUI.getFactorNameField().setText(bean.toString() + "." + beanProperty); + + // get value for pointed path + //TopiaContext topiaContext = factorWizardUI.getContextValue(TopiaContext.class); + //Class<?> classForPath = getPropertyClass(path, topiaContext); + // peut etre pas une bonne idée que ce soit basé sur les valeurs + // au lieu des types (mais pour RangeOfValues, pas evident) + try { + Object valueForPath = PropertyUtils.getProperty(bean, beanProperty); + boolean continuePossible = SensitivityUtils.canBeContinue(valueForPath); + boolean continueSelected = SensitivityUtils.isContinue(valueForPath); + + // init panel + if (continuePossible) { + JComponent comp = getContinuousPanel(valueForPath, bean, property); + factorWizardUI.getContinuousPanelContainer().add(comp, BorderLayout.CENTER); + } + + // after, for binding on continuePossible, continueSelected to work + factorWizardUI.setContinuePossible(continuePossible); + factorWizardUI.setContinueSelected(continueSelected); + factorWizardUI.getContinueRadio().setSelected(continueSelected); + } catch (Exception ex) { + throw new IsisFishRuntimeException("Can't init wizard", ex); + } + } + + /** + * Appelé suite a un double clic sur l'arbre des facteurs pour modifier un + * facteur. + * + * @param factorWizardUI view to init + * @param factor factor factor to edit + */ + public void initExistingFactor(FactorWizardUI factorWizardUI, Factor factor) { + + factorWizardUI.setEditingState(true); + String factorPath = factor.getPath(); + Domain domain = factor.getDomain(); + String factorName = factor.getName(); + factorWizardUI.setFactorPath(factorPath); + factorWizardUI.getComment().setText(factor.getComment()); + + if (domain instanceof ContinuousDomain) { + + ContinuousPanel comp = getNewContinuousComponent(factorWizardUI, factor.getPath()); + comp.initWithFactor(factor); + factorWizardUI.getContinuousPanelContainer().add(comp, BorderLayout.CENTER); + + factorWizardUI.getContinueRadio().setSelected(true); + factorWizardUI.setContinueSelected(true); + factorWizardUI.setContinuePossible(true); + } else { + + // un facteur pour être edité sans domain + // lors de la creation + if (domain != null) { + // restaure discrete domain + DiscreteDomain dDomain = (DiscreteDomain)domain; + + int nb = dDomain.getValues().size(); + factorWizardUI.getDiscretNumber().setText(String.valueOf(nb)); + factorWizardUI.getTabPane().removeAll(); + + SortedMap<Object, Object> values = dDomain.getValues(); + int i = 0; + for (Object o : values.values()) { + i++; + JComponent c = null; + if (o != null) { + c = getEditorWithValue(factorWizardUI, factor, dDomain, o); + } + else { + if (log.isWarnEnabled()) { + log.warn("Null value in factor"); + } + } + JScrollPane js = new JScrollPane(c); + String tabName = t("isisfish.sensitivity.discretevaluelabel", i); + factorWizardUI.getTabPane().addTab(tabName, js); + } + } + + // init non selected continous panel + JComponent comp = getNewContinuousComponent(factorWizardUI, factor.getPath()); + if (comp != null) { + factorWizardUI.setContinuePossible(true); + factorWizardUI.getContinuousPanelContainer().add(comp, BorderLayout.CENTER); + } + } + + factorWizardUI.getFactorNameField().setText(factorName); + } + + /** + * Renvoie un componsant gaphique initialisé avec la valeur + * qui est enregistré dans le domain. + * Pour réédition d'un facteur existant (facteur discret). + * + * @param factorWizardUI context for context value (RegionStorage) + * @param value type to get editor + * @param factor factor for path value + * @param domain domain for domain type + * @return component ui component with value + */ + protected JComponent getEditorWithValue(FactorWizardUI factorWizardUI, Factor factor, Domain domain, Object value) { + + JComponent result = null; + + if (Double.class.isAssignableFrom(value.getClass())) { + result = new JTextField(); + ((JTextField)result).setText(String.valueOf(value)); + } + else if (double.class.isAssignableFrom(value.getClass())) { + result = new JTextField(); + ((JTextField)result).setText(String.valueOf(value)); + } + else if (MatrixND.class.isAssignableFrom(value.getClass())) { + result = new MatrixPanelEditor(); + ((MatrixPanelEditor)result).setMatrix((MatrixND)value); + } + else if (domain instanceof RuleDiscreteDomain) { + result = new RuleChooser(factorWizardUI); + ((RuleChooser)result).setRulesList((List<Rule>)value); + } + else if (domain instanceof EquationDiscreteDomain) { + String factorPath = factor.getPath(); + if (factor.getPath().indexOf('#') != -1) { + String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#')); + String property = factorPath.substring(factorPath.lastIndexOf('#') + 1); + + // get bean in database + try { + TopiaContext topiaContext = getTopiaContext(factorWizardUI); + TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId); + Equation equation = (Equation)PropertyUtils.getProperty(entity, property); + topiaContext.closeContext(); + + // fill component + InputOneEquationUI ui = new InputOneEquationUI(factorWizardUI); + ui.setAutoSaveModification(false); + ui.setFormuleCategory(equation.getCategory()); + ui.setText(t("isisfish.common.equation")); // can't get real name + ui.setClazz(value.getClass()); + ui.setBeanProperty(property); + ui.setBean(entity); // set bean fire content modification event + ui.getEditor().setText((String)value); + ui.setActive(true); + + result = ui; + } catch (Exception ex) { + throw new IsisFishRuntimeException("Can't restore initial factor database property", ex); + } + } + // TODO path with no # (normalement pas possible pour les equations) + } + else if (value instanceof TimeUnit) { + result = new JTextField(); + ((JTextField)result).setText(String.valueOf(((TimeUnit)value).getTime())); + } else if (value instanceof TopiaEntity) { + RegionStorage regionStorage = factorWizardUI.getContextValue(RegionStorage.class); + TopiaContext context = null; + try { + context = regionStorage.getStorage().beginTransaction(); + List list = context.findAll("from " + value.getClass().getName()); + JComboBox c = new JComboBox<>(list.toArray()); + c.setSelectedItem(value); + result = c; + } catch (TopiaException ex) { + throw new IsisFishRuntimeException("Can't get entity list", ex); + } finally { + if (context != null) { + try { + context.closeContext(); + } catch (TopiaException ex) { + throw new IsisFishRuntimeException("Can't get entity list", ex); + } + } + } + } else if (value instanceof TimeStep) { + TimeStep timeStep = (TimeStep)value; + result = new StepComponent(timeStep.getMonth().getMonthNumber(), timeStep.getYear()); + } else if (value instanceof Month) { + Month month = (Month)value; + result = MonthComponent.createMounthCombo(month.getMonthNumber()); + } else if (value instanceof String) { + // valeur non typées ??? + result = new JTextField(); + ((JTextField)result).setText(String.valueOf(value)); + } + + if (log.isDebugEnabled()) { + log.debug("Editor for value " + value + " is " + result); + } + + return result; + } + + /** + * Retourne le componant permettant de mettre en facteur continue + * une valeur. + * + * @param value value (must be continuable) + * @param bean bean (in case of equation) + * @param property bean property (in case of equation) + * @return component initialized + */ + protected ContinuousPanel getContinuousPanel(Object value, TopiaEntityContextable bean, String property) { + ContinuousPanel result; + + if (value instanceof RangeOfValues) { + RangeOfValues rangeOfValues = (RangeOfValues)value; + //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI(); + String values = rangeOfValues.getValues(); + String min = "0"; + //String max = "0"; + if (values.matches("^\\ *[0-9]*\\ *\\-\\ *[0-9]*\\ *$")) { + int first = values.indexOf("-"); + if (first != -1) { + min = values.substring(0, first); + //max = values.substring(first + 1); + } + } + //ui.init(min, max, min, null); + //result = ui; + result = new ContinuousDistributionPanel(min); + } else if (value instanceof Equation) { + Equation equation = (Equation)value; + EquationContinuousPanelUI ui = new EquationContinuousPanelUI(); + ui.setSelectedEquation(equation); + ui.setText(t("isisfish.common.equation")); // can't get real name + ui.setFormuleCategory(equation.getCategory()); + ui.setClazz(equation.getClass()); + ui.setBeanProperty(property); + ui.setBean(bean); + result = ui; + } else if (value instanceof MatrixND) { + MatrixND matrix = (MatrixND)value; + result = new ContinuousDistributionPanel(matrix.clone()); + } else if (value instanceof TimeUnit) { + TimeUnit timeUnit = (TimeUnit)value; + //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI(); + //ui.init(String.valueOf(timeUnit.getTime()), String.valueOf(timeUnit.getTime()), + // String.valueOf(timeUnit.getTime()), null); + //result = ui; + result = new ContinuousDistributionPanel(String.valueOf(timeUnit.getTime())); + } else { + //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI(); + //ui.init(String.valueOf(value), String.valueOf(value), String.valueOf(value), null); + //result = ui; + result = new ContinuousDistributionPanel(String.valueOf(value)); + } + + if (log.isDebugEnabled()) { + log.debug("Component for " + value + " (" + bean + ", " + property + ")"); + log.debug(" > " + result); + } + + return result; + } + + /** + * Rafraichit l'assistant de facteur pour modifier le nombre de valeurs + * (onglet) d'un composant discret. + * + * @param factorWizardUI factorWizardUI + */ + public void addTabs(FactorWizardUI factorWizardUI) { + String discreteNumber = factorWizardUI.getDiscretNumber().getText(); + int nbTab = Integer.parseInt(discreteNumber); + int currentCount = factorWizardUI.getTabPane().getTabCount(); + + // remove useless tab + for (int tab = currentCount - 1; tab > nbTab -1 ; tab--) { + factorWizardUI.getTabPane().remove(tab); + } + + // add new tabs + for (int tab = currentCount ; tab < nbTab ; tab++) { + JComponent c = getNewDiscreteComponent(factorWizardUI); + String tabName = t("isisfish.sensitivity.discretevaluelabel", tab); + factorWizardUI.getTabPane().addTab(tabName, c); + } + + factorWizardUI.pack(); + } + + /** + * Return new discrete component inited with value defined by factor path. + * + * Le composant retourné est inclut dans un jscrollpane (sauf pour les + * matrices qui contient deja un jscrollpane) + * + * @param factorWizardUI factorWizardUI + * @return component copy + */ + protected JComponent getNewDiscreteComponent(FactorWizardUI factorWizardUI) { + + JComponent result = null; + String factorPath = factorWizardUI.getFactorPath(); + + try { + if (factorPath.indexOf('#') != -1) { + String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#')); + String property = factorPath.substring(factorPath.lastIndexOf('#') + 1); + + // get bean in database + TopiaContext topiaContext = getTopiaContext(factorWizardUI); + TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId); + Object value = PropertyUtils.getProperty(entity, property); + + // init new jcomponent for value + if (value instanceof Number) { + result = new JTextField(String.valueOf(value)); + } else if (value instanceof MatrixND) { + result = new MatrixPanelEditor(); + MatrixND matrix = ((MatrixND)value).copy(); + ((MatrixPanelEditor)result).setMatrix(matrix); + } else if (value instanceof RangeOfValues) { + RangeOfValues rangeOfValues = (RangeOfValues)value; + result = new JTextField(rangeOfValues.getValues()); + } else if (value instanceof TimeUnit) { + TimeUnit timeUnit = (TimeUnit)value; + result = new JTextField(String.valueOf(timeUnit.getTime())); + } else if (value instanceof Equation) { + Equation equation = (Equation)value; + // fill component + InputOneEquationUI ui = new InputOneEquationUI(factorWizardUI); + ui.setAutoSaveModification(false); + ui.setText(equation.getContent()); + ui.setFormuleCategory(equation.getCategory()); + ui.setText(t("isisfish.common.equation")); // can't get real name + ui.setClazz(value.getClass()); + ui.setBeanProperty(property); + ui.setBean(entity); + ui.setActive(true); + result = ui; + } + + topiaContext.closeContext(); + + } + else { + // dans ce cas c'est des regles, pop de départ ou parametres de regles + // c'est un peu galere car le code n'a rien a voir avec le reste + // donc, c'est du cas par cas + if (factorPath.equals("parameters.rules")) { + result = new RuleChooser(factorWizardUI); + } else if (factorPath.startsWith("parameters.population.")) { + // la seule facon d'avoir les parametres ici est d'aller + // les chercher dans les parametres de simulation + Pattern pattern = Pattern.compile("^parameters\\.population\\.(\\w+)(\\.(.+)?)$"); + Matcher matcher = pattern.matcher(factorPath); + if (matcher.matches()) { + String populationName = matcher.group(1); + if (log.isDebugEnabled()) { + log.debug("Loading population : " + populationName); + } + TopiaContext topiaContext = getTopiaContext(factorWizardUI); + Population pop = IsisFishDAOHelper.getPopulationDAO(topiaContext).findByName(populationName); + SimulAction action = factorWizardUI.getContextValue(SimulAction.class); + MatrixND N = action.getSimulationParameter().getNumberOf(pop); + result = new MatrixPanelEditor(); + ((MatrixPanelEditor)result).setMatrix(N.clone()); + topiaContext.closeContext(); + } + } else if (factorPath.startsWith("parameters.rule.")) { + Pattern pattern = Pattern.compile("^parameters\\.rule\\.(\\d+)\\.parameter\\.(\\w+)(\\..+)?$"); + Matcher matcher = pattern.matcher(factorPath); + if (matcher.matches()) { + int ruleIndex = Integer.parseInt(matcher.group(1)); + SimulAction action = factorWizardUI.getContextValue(SimulAction.class); + Rule rule = action.getSimulationParameter().getRules().get(ruleIndex); + Class valueClazz = RuleStorage.getParameterType(rule, matcher.group(2)); + Object value = RuleStorage.getParameterValue(rule, matcher.group(2)); + result = getTypeDiscreteComponent(factorWizardUI, valueClazz, value); + + } else { + // double... + result = new JTextField("0.0"); + } + } else { + if (log.isWarnEnabled()) { + log.warn("Can't find component for path " + factorPath); + } + } + } + } catch (Exception ex) { + throw new IsisFishRuntimeException("Can't restore intial factor database property", ex); + } + + if (log.isDebugEnabled()) { + log.debug("Component for path " + factorPath + " is " + result); + } + + // hack : si on met 2 fois un jscrollpane, rien ne s'affiche + if (!(result instanceof MatrixPanelEditor)) { + result = new JScrollPane(result); + } + + return result; + } + + /** + * Return new continuous component inited with value defined by factor path. + * + * @param factorWizardUI (to use topia context) + * @param factorPath factor path + * @return component initialized + */ + protected ContinuousPanel getNewContinuousComponent(FactorWizardUI factorWizardUI, String factorPath) { + ContinuousPanel result = null; + + try { + if (factorPath.indexOf('#') != -1) { + String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#')); + String property = factorPath.substring(factorPath.lastIndexOf('#') + 1); + + // get bean in database + TopiaContext topiaContext = getTopiaContext(factorWizardUI); + TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId); + Object value = PropertyUtils.getProperty(entity, property); + + if (value instanceof RangeOfValues) { + RangeOfValues rangeOfValues = (RangeOfValues)value; + //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI(); + String values = rangeOfValues.getValues(); + String min = "0"; + String max = "0"; + if (values.matches("^\\ *[0-9]*\\ *\\-\\ *[0-9]*\\ *$")) { + int first = values.indexOf("-"); + if (first != -1) { + min = values.substring(0, first); + max = values.substring(first + 1); + } + } + result = new ContinuousDistributionPanel(min); + } else if (value instanceof Equation) { + Equation equation = (Equation)value; + EquationContinuousPanelUI ui = new EquationContinuousPanelUI(); + ui.setSelectedEquation(equation); + ui.setText(t("isisfish.common.equation")); // can't get real name + ui.setFormuleCategory(equation.getCategory()); + ui.setClazz(equation.getClass()); + ui.setBeanProperty(property); + ui.setBean(entity); + result = ui; + } else if (value instanceof MatrixND) { + MatrixND matrix = (MatrixND)value; + result = new ContinuousDistributionPanel(matrix.clone()); + } else if (value instanceof TimeUnit) { + TimeUnit timeUnit = (TimeUnit)value; + //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI(); + //ui.init(String.valueOf(timeUnit.getTime()), String.valueOf(timeUnit.getTime()), + // String.valueOf(timeUnit.getTime()), null); + //result = ui; + result = new ContinuousDistributionPanel(String.valueOf(timeUnit.getTime())); + } else { + //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI(); + //ui.init(String.valueOf(value), String.valueOf(value), String.valueOf(value), null); + //result = ui; + result = new ContinuousDistributionPanel(String.valueOf(value)); + } + + topiaContext.closeContext(); + + } else { + if (factorPath.startsWith("parameters.population.")) { + // la seule facon d'avoir les parametres ici est d'aller + // les chercher dans les parametres de simulation + Pattern pattern = Pattern.compile("^parameters\\.population\\.(\\w+)(\\.(.+)?)$"); + Matcher matcher = pattern.matcher(factorPath); + if (matcher.matches()) { + String populationName = matcher.group(1); + if (log.isDebugEnabled()) { + log.debug("Loading population : " + populationName); + } + TopiaContext topiaContext = getTopiaContext(factorWizardUI); + Population pop = IsisFishDAOHelper.getPopulationDAO(topiaContext).findByName(populationName); + SimulAction action = factorWizardUI.getContextValue(SimulAction.class); + MatrixND N = action.getSimulationParameter().getNumberOf(pop); + result = new ContinuousDistributionPanel(N.clone()); + topiaContext.closeContext(); + } + } else if (factorPath.startsWith("parameters.rule.")) { + Pattern pattern = Pattern.compile("^parameters\\.rule\\.(\\d+)\\.parameter\\.(\\w+)(\\..+)?$"); + Matcher matcher = pattern.matcher(factorPath); + if (matcher.matches()) { + int ruleIndex = Integer.parseInt(matcher.group(1)); + SimulAction action = factorWizardUI.getContextValue(SimulAction.class); + Rule rule = action.getSimulationParameter().getRules().get(ruleIndex); + Class valueClazz = RuleStorage.getParameterType(rule, matcher.group(2)); + Object value = RuleStorage.getParameterValue(rule, matcher.group(2)); + result = getTypeContinousComponent(factorWizardUI, valueClazz, value); + + } else { + // double... + result = getContinuousPanel(0.0, null, null); + } + } else { + if (log.isWarnEnabled()) { + log.warn("Can't find component for path " + factorPath); + } + } + } + } catch (Exception ex) { + throw new IsisFishRuntimeException("Can't init wizard", ex); + } + + return result; + } + + /** + * Get new special component for typed parameters. + * + * @param factorWizardUI + * @param type + * @return rule discrete component + */ + protected JComponent getTypeDiscreteComponent(FactorWizardUI factorWizardUI, Class type, Object value) { + + JComponent result = null; + + if (TopiaEntity.class.isAssignableFrom(type)) { + try { + TopiaContext context = getTopiaContext(factorWizardUI); + List list = context.findAll("from " + type.getName()); + JComboBox c = new JComboBox(list.toArray()); + result = c; + context.closeContext(); + } catch (TopiaException ex) { + throw new IsisFishRuntimeException("Can't get entity list", ex); + } + } else if (TimeStep.class.isAssignableFrom(type)) { + result = new StepComponent(0, 0); + } else if (Month.class.isAssignableFrom(type)) { + result = MonthComponent.createMounthCombo(0); + } else { + if (value != null) { + result = new JTextField(value.toString()); + } else { + result = new JTextField(); + } + + } + + return result; + } + + /** + * Get new special component for typed parameters. + * + * @param factorWizardUI + * @param type type to get component + * @return rule discrete component + */ + protected ContinuousPanel getTypeContinousComponent(FactorWizardUI factorWizardUI, Class type, Object value) { + + ContinuousPanel result = null; + + if (Double.class.isAssignableFrom(type) || double.class.isAssignableFrom(type)) { + if (value != null) { + result = new ContinuousDistributionPanel(value.toString()); + } else { + result = new ContinuousDistributionPanel(0.0); + } + } + + return result; + } + + /** + * Save current factor. + * + * @param factorWizardUI factorWizardUI + */ + public void save(FactorWizardUI factorWizardUI) { + + // get continuous component if any + ContinuousPanel continuousPanel = null; + if (factorWizardUI.getContinuousPanelContainer().getComponentCount() > 0) { + continuousPanel = (ContinuousPanel)factorWizardUI.getContinuousPanelContainer().getComponent(0); + } + + // first check is factor is valid + boolean factorValid = true; + if (continuousPanel != null) { + factorValid = continuousPanel.isFactorValid(); + } + if (!factorValid) { + JOptionPane.showMessageDialog(factorWizardUI, t("isisfish.sensitivity.factor.notvalid"), + t("isisfish.sensitivity.title"), JOptionPane.ERROR_MESSAGE); + return; + } + + // call specific method depending on continuous/discrete + if (factorWizardUI.getContinueRadio().isSelected()) { + saveContinue(factorWizardUI.getFactorNameField().getText(), + factorWizardUI.getComment().getText(), factorWizardUI.getFactorPath(), continuousPanel, + factorWizardUI.getContextValue(SimulAction.class), factorWizardUI.isEditingState()); + } else { + Component[] discreteComponents = factorWizardUI.getTabPane().getComponents(); + saveDiscret(factorWizardUI.getFactorNameField().getText(), + factorWizardUI.getComment().getText(), factorWizardUI.getFactorPath(), discreteComponents, + factorWizardUI.getContextValue(SimulAction.class), factorWizardUI.isEditingState()); + } + + // refresh factor list + factorWizardUI.getContextValue(SimulationUI.class, "SimulationUI").refreshFactorTree(); + + // close window + factorWizardUI.dispose(); + } + + /** + * Save a continous factor. + * + * @param name factor name + * @param comment comment + * @param path factor path + * @param panel panel + * @param action action + * @param exist exist + */ + protected void saveContinue(String name, + String comment, String path, ContinuousPanel panel, + SimulAction action, boolean exist) { + if (panel instanceof EquationContinuousPanelUI) { + try { + EquationContinuousPanelUI equationPanel = (EquationContinuousPanelUI) panel; + String property = StringUtils.uncapitalize(equationPanel.getBeanProperty()) + "Content"; + TopiaEntityContextable bean = equationPanel.getBean(); + TopiaContext topiaContext = bean.getTopiaContext(); + PropertyUtils.setProperty(bean, property, equationPanel.getEditor().getEditor().getText()); + + // Save equation + bean.update(); + topiaContext.commitTransaction(); + + List<Factor> factors = equationPanel.getFactors(); + for (Factor factor : factors) { + factor.setName(name); + factor.setComment(comment); + factor.setPath(path); + action.addContinuousEquationFactor(factor, exist); + } + } catch (Exception ex) { + if (log.isErrorEnabled()) { + log.error("Can't call method : ", ex); + } + } + } else if (panel instanceof ContinuousDistributionPanel) { + ContinuousDistributionPanel defaultPanel = (ContinuousDistributionPanel) panel; + ContinuousDomain domain = defaultPanel.generateDomain(); + action.addContinuousFactor(name, comment, path, domain, exist); + } + } + + /** + * Save a discret factor. + * + * @param name + * @param comment + * @param path + * @param components + * @param action + * @param exist + */ + protected void saveDiscret(String name, + String comment, String path, Component[] components, + SimulAction action, boolean exist) { + List<Object> values = new ArrayList<Object>(); + + boolean ruleFactor = false; + boolean equationFactor = false; + for (Component component : components) { + + if (component instanceof JScrollPane) { + component = ((JScrollPane) component).getViewport().getView(); + } + + // get internat component value + Object result = null; + if (component instanceof JTextComponent) { + result = ((JTextComponent) component).getText(); + } else if (component instanceof MatrixPanelEditor) { + result = ((MatrixPanelEditor) component).getMatrix(); + } else if (component instanceof InputOneEquationUI) { + result = ((InputOneEquationUI) component).getEditor().getText(); + equationFactor = true; + } else if (component instanceof RuleChooser) { + result = ((RuleChooser)component).getRulesList(); + ruleFactor = true; + } else if (component instanceof StepComponent) { + result = new TimeStep(((StepComponent)component).getSelectedValue()); + } else if (component instanceof MonthComponent) { + result = new Month(((MonthComponent)component).getSelectedValue()); + } else if (component instanceof JComboBox) { + // on suppose qu'il y a dedans des TopiaEntity + result = ((JComboBox)component).getSelectedItem(); + } + + values.add(result); + } + + if (ruleFactor) { + action.addDiscreteRuleFactor(name, comment, path, values, exist); + } else if (equationFactor) { + action.addDiscreteEquationFactor(name, comment, path, values, exist); + } else { + action.addDiscreteFactor(name, comment, path, values, exist); + } + } + + /** + * Remove current factor. + * + * @param factorWizardUI factorWizardUI + */ + public void remove(FactorWizardUI factorWizardUI) { + factorWizardUI.getContextValue(SimulAction.class).removeFactor(factorWizardUI.getFactorPath()); + factorWizardUI.getContextValue(SimulationUI.class, "SimulationUI").refreshFactorTree(); + factorWizardUI.dispose(); + } +} Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/FactorWizardUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/FactorWizardUI.jaxx 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/FactorWizardUI.jaxx 2015-05-22 16:10:26 UTC (rev 4233) @@ -30,7 +30,7 @@ java.awt.CardLayout </import> - <SensitivityWizardHandler id="handler" /> + <FactorWizardHandler id="handler" constructorParams='this' /> <Boolean id='continuePossible' javaBean='false'/> @@ -41,19 +41,9 @@ <String id="factorPath" javaBean="null"/> <script><![CDATA[ -protected void $afterCompleteSetup() { - addPropertyChangeListener(PROPERTY_CONTINUE_SELECTED, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if ((Boolean)evt.getNewValue()) { - ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "continuousPanelContainer"); - } else { - ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "discretePanelContainer"); - } - } - }); -} - + protected void $afterCompleteSetup() { + handler.afterInit(); + } ]]></script> <Table constraints='BorderLayout.CENTER'> <row> Deleted: 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-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -1,860 +0,0 @@ -/* - * #%L - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 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.sensitivity.wizard; - -import static org.nuiton.i18n.I18n.t; - -import java.awt.BorderLayout; -import java.awt.Component; -import java.util.ArrayList; -import java.util.List; -import java.util.SortedMap; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.JOptionPane; -import javax.swing.JScrollPane; -import javax.swing.JTextField; -import javax.swing.text.JTextComponent; - -import org.apache.commons.beanutils.PropertyUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.math.matrix.MatrixND; -import org.nuiton.math.matrix.gui.MatrixPanelEditor; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; -import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.topia.persistence.TopiaEntityContextable; - -import fr.ifremer.isisfish.IsisFishDAOHelper; -import fr.ifremer.isisfish.IsisFishRuntimeException; -import fr.ifremer.isisfish.datastore.RegionStorage; -import fr.ifremer.isisfish.datastore.RuleStorage; -import fr.ifremer.isisfish.entities.Equation; -import fr.ifremer.isisfish.entities.Population; -import fr.ifremer.isisfish.rule.Rule; -import fr.ifremer.isisfish.simulator.sensitivity.Domain; -import fr.ifremer.isisfish.simulator.sensitivity.Factor; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils; -import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; -import fr.ifremer.isisfish.types.Month; -import fr.ifremer.isisfish.types.RangeOfValues; -import fr.ifremer.isisfish.types.TimeStep; -import fr.ifremer.isisfish.types.TimeUnit; -import fr.ifremer.isisfish.ui.SimulationUI; -import fr.ifremer.isisfish.ui.input.equation.InputOneEquationUI; -import fr.ifremer.isisfish.ui.simulator.RuleChooser; -import fr.ifremer.isisfish.ui.simulator.SimulAction; -import fr.ifremer.isisfish.ui.widget.editor.MonthComponent; -import fr.ifremer.isisfish.ui.widget.editor.StepComponent; - -/** - * Handler for all class in wizard packages. - * - * @author chatellier - * @version $Revision$ - * - * Last update : $Date$ - * By : $Author$ - */ -public class SensitivityWizardHandler { - - /** Class logger. */ - private static Log log = LogFactory.getLog(SensitivityWizardHandler.class); - - /** - * Return opened topia context that need to be closed. - * - * There is several things in ugly jaxx context: - * <ul> - * <li>opened TopiaContext from SensitivityTabUI that is null in ParamUI - * <li>RegionStorage on SimulAction - * </ul> - * - * Use region storage here. - * - * @return opened topia context - * @throws TopiaException - */ - protected TopiaContext getTopiaContext(FactorWizardUI factorWizardUI) throws TopiaException { - // RegionStorage object is common to ParamsUI - // and SensitivityTabUI and may be valued - RegionStorage regionStorage = factorWizardUI.getContextValue(RegionStorage.class); - TopiaContext context = regionStorage.getStorage().beginTransaction(); - return context; - } - - /** - * Initialize un nouveau wizard avec lorsque l'utilisateur clic sur - * un layer sont le sous composant accepte la mise en facteur. - * - * On recupere des info sur le type correspondant à la proprieté a mettre - * en facteur pour savoir le composant d'edition et s'il peut etre continue - * ou pas. - * - * @param factorWizardUI factorWizardUI - * @param bean bean in current ui - * @param property bean property to edit - */ - public void initNewFactor(FactorWizardUI factorWizardUI, TopiaEntityContextable bean, String property) { - - // path is topiaId#property - // ex : fwn#fsd#0.3425345#name - // for JAXX : cOrigine start with upper case - // for commons beanutils : must be lower case - String beanProperty = StringUtils.uncapitalize(property); - String path = bean.getTopiaId() + "#" + beanProperty; - factorWizardUI.setFactorPath(path); - factorWizardUI.getFactorNameField().setText(bean.toString() + "." + beanProperty); - - // get value for pointed path - //TopiaContext topiaContext = factorWizardUI.getContextValue(TopiaContext.class); - //Class<?> classForPath = getPropertyClass(path, topiaContext); - // peut etre pas une bonne idée que ce soit basé sur les valeurs - // au lieu des types (mais pour RangeOfValues, pas evident) - try { - Object valueForPath = PropertyUtils.getProperty(bean, beanProperty); - boolean continuePossible = SensitivityUtils.canBeContinue(valueForPath); - boolean continueSelected = SensitivityUtils.isContinue(valueForPath); - - // init panel - if (continuePossible) { - JComponent comp = getContinuousPanel(valueForPath, bean, property); - factorWizardUI.getContinuousPanelContainer().add(comp, BorderLayout.CENTER); - } - - // after, for binding on continuePossible, continueSelected to work - factorWizardUI.setContinuePossible(continuePossible); - factorWizardUI.setContinueSelected(continueSelected); - factorWizardUI.getContinueRadio().setSelected(continueSelected); - } catch (Exception ex) { - throw new IsisFishRuntimeException("Can't init wizard", ex); - } - } - - /** - * Appelé suite a un double clic sur l'arbre des facteurs pour modifier un - * facteur. - * - * @param factorWizardUI view to init - * @param factor factor factor to edit - */ - public void initExistingFactor(FactorWizardUI factorWizardUI, Factor factor) { - - factorWizardUI.setEditingState(true); - String factorPath = factor.getPath(); - Domain domain = factor.getDomain(); - String factorName = factor.getName(); - factorWizardUI.setFactorPath(factorPath); - factorWizardUI.getComment().setText(factor.getComment()); - - if (domain instanceof ContinuousDomain) { - - ContinuousPanel comp = getNewContinuousComponent(factorWizardUI, factor.getPath()); - comp.initWithFactor(factor); - factorWizardUI.getContinuousPanelContainer().add(comp, BorderLayout.CENTER); - - factorWizardUI.getContinueRadio().setSelected(true); - factorWizardUI.setContinueSelected(true); - factorWizardUI.setContinuePossible(true); - } else { - - // un facteur pour être edité sans domain - // lors de la creation - if (domain != null) { - // restaure discrete domain - DiscreteDomain dDomain = (DiscreteDomain)domain; - - int nb = dDomain.getValues().size(); - factorWizardUI.getDiscretNumber().setText(String.valueOf(nb)); - factorWizardUI.getTabPane().removeAll(); - - SortedMap<Object, Object> values = dDomain.getValues(); - int i = 0; - for (Object o : values.values()) { - i++; - JComponent c = null; - if (o != null) { - c = getEditorWithValue(factorWizardUI, factor, dDomain, o); - } - else { - if (log.isWarnEnabled()) { - log.warn("Null value in factor"); - } - } - JScrollPane js = new JScrollPane(c); - String tabName = t("isisfish.sensitivity.discretevaluelabel", i); - factorWizardUI.getTabPane().addTab(tabName, js); - } - } - - // init non selected continous panel - JComponent comp = getNewContinuousComponent(factorWizardUI, factor.getPath()); - if (comp != null) { - factorWizardUI.setContinuePossible(true); - factorWizardUI.getContinuousPanelContainer().add(comp, BorderLayout.CENTER); - } - } - - factorWizardUI.getFactorNameField().setText(factorName); - } - - /** - * Renvoie un componsant gaphique initialisé avec la valeur - * qui est enregistré dans le domain. - * Pour réédition d'un facteur existant (facteur discret). - * - * @param factorWizardUI context for context value (RegionStorage) - * @param value type to get editor - * @param factor factor for path value - * @param domain domain for domain type - * @return component ui component with value - */ - protected JComponent getEditorWithValue(FactorWizardUI factorWizardUI, Factor factor, Domain domain, Object value) { - - JComponent result = null; - - if (Double.class.isAssignableFrom(value.getClass())) { - result = new JTextField(); - ((JTextField)result).setText(String.valueOf(value)); - } - else if (double.class.isAssignableFrom(value.getClass())) { - result = new JTextField(); - ((JTextField)result).setText(String.valueOf(value)); - } - else if (MatrixND.class.isAssignableFrom(value.getClass())) { - result = new MatrixPanelEditor(); - ((MatrixPanelEditor)result).setMatrix((MatrixND)value); - } - else if (domain instanceof RuleDiscreteDomain) { - result = new RuleChooser(factorWizardUI); - ((RuleChooser)result).setRulesList((List<Rule>)value); - } - else if (domain instanceof EquationDiscreteDomain) { - String factorPath = factor.getPath(); - if (factor.getPath().indexOf('#') != -1) { - String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#')); - String property = factorPath.substring(factorPath.lastIndexOf('#') + 1); - - // get bean in database - try { - TopiaContext topiaContext = getTopiaContext(factorWizardUI); - TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId); - Equation equation = (Equation)PropertyUtils.getProperty(entity, property); - topiaContext.closeContext(); - - // fill component - InputOneEquationUI ui = new InputOneEquationUI(factorWizardUI); - ui.setAutoSaveModification(false); - ui.setFormuleCategory(equation.getCategory()); - ui.setText(t("isisfish.common.equation")); // can't get real name - ui.setClazz(value.getClass()); - ui.setBeanProperty(property); - ui.setBean(entity); // set bean fire content modification event - ui.getEditor().setText((String)value); - ui.setActive(true); - - result = ui; - } catch (Exception ex) { - throw new IsisFishRuntimeException("Can't restore initial factor database property", ex); - } - } - // TODO path with no # (normalement pas possible pour les equations) - } - else if (value instanceof TimeUnit) { - result = new JTextField(); - ((JTextField)result).setText(String.valueOf(((TimeUnit)value).getTime())); - } else if (value instanceof TopiaEntity) { - RegionStorage regionStorage = factorWizardUI.getContextValue(RegionStorage.class); - TopiaContext context = null; - try { - context = regionStorage.getStorage().beginTransaction(); - List list = context.findAll("from " + value.getClass().getName()); - JComboBox c = new JComboBox<>(list.toArray()); - c.setSelectedItem(value); - result = c; - } catch (TopiaException ex) { - throw new IsisFishRuntimeException("Can't get entity list", ex); - } finally { - if (context != null) { - try { - context.closeContext(); - } catch (TopiaException ex) { - throw new IsisFishRuntimeException("Can't get entity list", ex); - } - } - } - } else if (value instanceof TimeStep) { - TimeStep timeStep = (TimeStep)value; - result = new StepComponent(timeStep.getMonth().getMonthNumber(), timeStep.getYear()); - } else if (value instanceof Month) { - Month month = (Month)value; - result = MonthComponent.createMounthCombo(month.getMonthNumber()); - } else if (value instanceof String) { - // valeur non typées ??? - result = new JTextField(); - ((JTextField)result).setText(String.valueOf(value)); - } - - if (log.isDebugEnabled()) { - log.debug("Editor for value " + value + " is " + result); - } - - return result; - } - - /** - * Retourne le componant permettant de mettre en facteur continue - * une valeur. - * - * @param value value (must be continuable) - * @param bean bean (in case of equation) - * @param property bean property (in case of equation) - * @return component initialized - */ - protected ContinuousPanel getContinuousPanel(Object value, TopiaEntityContextable bean, String property) { - ContinuousPanel result; - - if (value instanceof RangeOfValues) { - RangeOfValues rangeOfValues = (RangeOfValues)value; - //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI(); - String values = rangeOfValues.getValues(); - String min = "0"; - //String max = "0"; - if (values.matches("^\\ *[0-9]*\\ *\\-\\ *[0-9]*\\ *$")) { - int first = values.indexOf("-"); - if (first != -1) { - min = values.substring(0, first); - //max = values.substring(first + 1); - } - } - //ui.init(min, max, min, null); - //result = ui; - result = new ContinuousDistributionPanel(min); - } else if (value instanceof Equation) { - Equation equation = (Equation)value; - EquationContinuousPanelUI ui = new EquationContinuousPanelUI(); - ui.setSelectedEquation(equation); - ui.setText(t("isisfish.common.equation")); // can't get real name - ui.setFormuleCategory(equation.getCategory()); - ui.setClazz(equation.getClass()); - ui.setBeanProperty(property); - ui.setBean(bean); - result = ui; - } else if (value instanceof MatrixND) { - MatrixND matrix = (MatrixND)value; - result = new ContinuousDistributionPanel(matrix.clone()); - } else if (value instanceof TimeUnit) { - TimeUnit timeUnit = (TimeUnit)value; - //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI(); - //ui.init(String.valueOf(timeUnit.getTime()), String.valueOf(timeUnit.getTime()), - // String.valueOf(timeUnit.getTime()), null); - //result = ui; - result = new ContinuousDistributionPanel(String.valueOf(timeUnit.getTime())); - } else { - //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI(); - //ui.init(String.valueOf(value), String.valueOf(value), String.valueOf(value), null); - //result = ui; - result = new ContinuousDistributionPanel(String.valueOf(value)); - } - - if (log.isDebugEnabled()) { - log.debug("Component for " + value + " (" + bean + ", " + property + ")"); - log.debug(" > " + result); - } - - return result; - } - - /** - * Rafraichit l'assistant de facteur pour modifier le nombre de valeurs - * (onglet) d'un composant discret. - * - * @param factorWizardUI factorWizardUI - */ - public void addTabs(FactorWizardUI factorWizardUI) { - String discreteNumber = factorWizardUI.getDiscretNumber().getText(); - int nbTab = Integer.parseInt(discreteNumber); - int currentCount = factorWizardUI.getTabPane().getTabCount(); - - // remove useless tab - for (int tab = currentCount - 1; tab > nbTab -1 ; tab--) { - factorWizardUI.getTabPane().remove(tab); - } - - // add new tabs - for (int tab = currentCount ; tab < nbTab ; tab++) { - JComponent c = getNewDiscreteComponent(factorWizardUI); - String tabName = t("isisfish.sensitivity.discretevaluelabel", tab); - factorWizardUI.getTabPane().addTab(tabName, c); - } - - factorWizardUI.pack(); - } - - /** - * Return new discrete component inited with value defined by factor path. - * - * Le composant retourné est inclut dans un jscrollpane (sauf pour les - * matrices qui contient deja un jscrollpane) - * - * @param factorWizardUI factorWizardUI - * @return component copy - */ - protected JComponent getNewDiscreteComponent(FactorWizardUI factorWizardUI) { - - JComponent result = null; - String factorPath = factorWizardUI.getFactorPath(); - - try { - if (factorPath.indexOf('#') != -1) { - String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#')); - String property = factorPath.substring(factorPath.lastIndexOf('#') + 1); - - // get bean in database - TopiaContext topiaContext = getTopiaContext(factorWizardUI); - TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId); - Object value = PropertyUtils.getProperty(entity, property); - - // init new jcomponent for value - if (value instanceof Number) { - result = new JTextField(String.valueOf(value)); - } else if (value instanceof MatrixND) { - result = new MatrixPanelEditor(); - MatrixND matrix = ((MatrixND)value).copy(); - ((MatrixPanelEditor)result).setMatrix(matrix); - } else if (value instanceof RangeOfValues) { - RangeOfValues rangeOfValues = (RangeOfValues)value; - result = new JTextField(rangeOfValues.getValues()); - } else if (value instanceof TimeUnit) { - TimeUnit timeUnit = (TimeUnit)value; - result = new JTextField(String.valueOf(timeUnit.getTime())); - } else if (value instanceof Equation) { - Equation equation = (Equation)value; - // fill component - InputOneEquationUI ui = new InputOneEquationUI(factorWizardUI); - ui.setAutoSaveModification(false); - ui.setText(equation.getContent()); - ui.setFormuleCategory(equation.getCategory()); - ui.setText(t("isisfish.common.equation")); // can't get real name - ui.setClazz(value.getClass()); - ui.setBeanProperty(property); - ui.setBean(entity); - ui.setActive(true); - result = ui; - } - - topiaContext.closeContext(); - - } - else { - // dans ce cas c'est des regles, pop de départ ou parametres de regles - // c'est un peu galere car le code n'a rien a voir avec le reste - // donc, c'est du cas par cas - if (factorPath.equals("parameters.rules")) { - result = new RuleChooser(factorWizardUI); - } else if (factorPath.startsWith("parameters.population.")) { - // la seule facon d'avoir les parametres ici est d'aller - // les chercher dans les parametres de simulation - Pattern pattern = Pattern.compile("^parameters\\.population\\.(\\w+)(\\.(.+)?)$"); - Matcher matcher = pattern.matcher(factorPath); - if (matcher.matches()) { - String populationName = matcher.group(1); - if (log.isDebugEnabled()) { - log.debug("Loading population : " + populationName); - } - TopiaContext topiaContext = getTopiaContext(factorWizardUI); - Population pop = IsisFishDAOHelper.getPopulationDAO(topiaContext).findByName(populationName); - SimulAction action = factorWizardUI.getContextValue(SimulAction.class); - MatrixND N = action.getSimulationParameter().getNumberOf(pop); - result = new MatrixPanelEditor(); - ((MatrixPanelEditor)result).setMatrix(N.clone()); - topiaContext.closeContext(); - } - } else if (factorPath.startsWith("parameters.rule.")) { - Pattern pattern = Pattern.compile("^parameters\\.rule\\.(\\d+)\\.parameter\\.(\\w+)(\\..+)?$"); - Matcher matcher = pattern.matcher(factorPath); - if (matcher.matches()) { - int ruleIndex = Integer.parseInt(matcher.group(1)); - SimulAction action = factorWizardUI.getContextValue(SimulAction.class); - Rule rule = action.getSimulationParameter().getRules().get(ruleIndex); - Class valueClazz = RuleStorage.getParameterType(rule, matcher.group(2)); - Object value = RuleStorage.getParameterValue(rule, matcher.group(2)); - result = getTypeDiscreteComponent(factorWizardUI, valueClazz, value); - - } else { - // double... - result = new JTextField("0.0"); - } - } else { - if (log.isWarnEnabled()) { - log.warn("Can't find component for path " + factorPath); - } - } - } - } catch (Exception ex) { - throw new IsisFishRuntimeException("Can't restore intial factor database property", ex); - } - - if (log.isDebugEnabled()) { - log.debug("Component for path " + factorPath + " is " + result); - } - - // hack : si on met 2 fois un jscrollpane, rien ne s'affiche - if (!(result instanceof MatrixPanelEditor)) { - result = new JScrollPane(result); - } - - return result; - } - - /** - * Return new continuous component inited with value defined by factor path. - * - * @param factorWizardUI (to use topia context) - * @param factorPath factor path - * @return component initialized - */ - protected ContinuousPanel getNewContinuousComponent(FactorWizardUI factorWizardUI, String factorPath) { - ContinuousPanel result = null; - - try { - if (factorPath.indexOf('#') != -1) { - String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#')); - String property = factorPath.substring(factorPath.lastIndexOf('#') + 1); - - // get bean in database - TopiaContext topiaContext = getTopiaContext(factorWizardUI); - TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId); - Object value = PropertyUtils.getProperty(entity, property); - - if (value instanceof RangeOfValues) { - RangeOfValues rangeOfValues = (RangeOfValues)value; - //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI(); - String values = rangeOfValues.getValues(); - String min = "0"; - String max = "0"; - if (values.matches("^\\ *[0-9]*\\ *\\-\\ *[0-9]*\\ *$")) { - int first = values.indexOf("-"); - if (first != -1) { - min = values.substring(0, first); - max = values.substring(first + 1); - } - } - result = new ContinuousDistributionPanel(min); - } else if (value instanceof Equation) { - Equation equation = (Equation)value; - EquationContinuousPanelUI ui = new EquationContinuousPanelUI(); - ui.setSelectedEquation(equation); - ui.setText(t("isisfish.common.equation")); // can't get real name - ui.setFormuleCategory(equation.getCategory()); - ui.setClazz(equation.getClass()); - ui.setBeanProperty(property); - ui.setBean(entity); - result = ui; - } else if (value instanceof MatrixND) { - MatrixND matrix = (MatrixND)value; - result = new ContinuousDistributionPanel(matrix.clone()); - } else if (value instanceof TimeUnit) { - TimeUnit timeUnit = (TimeUnit)value; - //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI(); - //ui.init(String.valueOf(timeUnit.getTime()), String.valueOf(timeUnit.getTime()), - // String.valueOf(timeUnit.getTime()), null); - //result = ui; - result = new ContinuousDistributionPanel(String.valueOf(timeUnit.getTime())); - } else { - //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI(); - //ui.init(String.valueOf(value), String.valueOf(value), String.valueOf(value), null); - //result = ui; - result = new ContinuousDistributionPanel(String.valueOf(value)); - } - - topiaContext.closeContext(); - - } else { - if (factorPath.startsWith("parameters.population.")) { - // la seule facon d'avoir les parametres ici est d'aller - // les chercher dans les parametres de simulation - Pattern pattern = Pattern.compile("^parameters\\.population\\.(\\w+)(\\.(.+)?)$"); - Matcher matcher = pattern.matcher(factorPath); - if (matcher.matches()) { - String populationName = matcher.group(1); - if (log.isDebugEnabled()) { - log.debug("Loading population : " + populationName); - } - TopiaContext topiaContext = getTopiaContext(factorWizardUI); - Population pop = IsisFishDAOHelper.getPopulationDAO(topiaContext).findByName(populationName); - SimulAction action = factorWizardUI.getContextValue(SimulAction.class); - MatrixND N = action.getSimulationParameter().getNumberOf(pop); - result = new ContinuousDistributionPanel(N.clone()); - topiaContext.closeContext(); - } - } else if (factorPath.startsWith("parameters.rule.")) { - Pattern pattern = Pattern.compile("^parameters\\.rule\\.(\\d+)\\.parameter\\.(\\w+)(\\..+)?$"); - Matcher matcher = pattern.matcher(factorPath); - if (matcher.matches()) { - int ruleIndex = Integer.parseInt(matcher.group(1)); - SimulAction action = factorWizardUI.getContextValue(SimulAction.class); - Rule rule = action.getSimulationParameter().getRules().get(ruleIndex); - Class valueClazz = RuleStorage.getParameterType(rule, matcher.group(2)); - Object value = RuleStorage.getParameterValue(rule, matcher.group(2)); - result = getTypeContinousComponent(factorWizardUI, valueClazz, value); - - } else { - // double... - result = getContinuousPanel(0.0, null, null); - } - } else { - if (log.isWarnEnabled()) { - log.warn("Can't find component for path " + factorPath); - } - } - } - } catch (Exception ex) { - throw new IsisFishRuntimeException("Can't init wizard", ex); - } - - return result; - } - - /** - * Get new special component for typed parameters. - * - * @param factorWizardUI - * @param type - * @return rule discrete component - */ - protected JComponent getTypeDiscreteComponent(FactorWizardUI factorWizardUI, Class type, Object value) { - - JComponent result = null; - - if (TopiaEntity.class.isAssignableFrom(type)) { - try { - TopiaContext context = getTopiaContext(factorWizardUI); - List list = context.findAll("from " + type.getName()); - JComboBox c = new JComboBox(list.toArray()); - result = c; - context.closeContext(); - } catch (TopiaException ex) { - throw new IsisFishRuntimeException("Can't get entity list", ex); - } - } else if (TimeStep.class.isAssignableFrom(type)) { - result = new StepComponent(0, 0); - } else if (Month.class.isAssignableFrom(type)) { - result = MonthComponent.createMounthCombo(0); - } else { - if (value != null) { - result = new JTextField(value.toString()); - } else { - result = new JTextField(); - } - - } - - return result; - } - - /** - * Get new special component for typed parameters. - * - * @param factorWizardUI - * @param type type to get component - * @return rule discrete component - */ - protected ContinuousPanel getTypeContinousComponent(FactorWizardUI factorWizardUI, Class type, Object value) { - - ContinuousPanel result = null; - - if (Double.class.isAssignableFrom(type) || double.class.isAssignableFrom(type)) { - if (value != null) { - result = new ContinuousDistributionPanel(value.toString()); - } else { - result = new ContinuousDistributionPanel(0.0); - } - } - - return result; - } - - /** - * Save current factor. - * - * @param factorWizardUI factorWizardUI - */ - public void save(FactorWizardUI factorWizardUI) { - - // get continuous component if any - ContinuousPanel continuousPanel = null; - if (factorWizardUI.getContinuousPanelContainer().getComponentCount() > 0) { - continuousPanel = (ContinuousPanel)factorWizardUI.getContinuousPanelContainer().getComponent(0); - } - - // first check is factor is valid - boolean factorValid = true; - if (continuousPanel != null) { - factorValid = continuousPanel.isFactorValid(); - } - if (!factorValid) { - JOptionPane.showMessageDialog(factorWizardUI, t("isisfish.sensitivity.factor.notvalid"), - t("isisfish.sensitivity.title"), JOptionPane.ERROR_MESSAGE); - return; - } - - // call specific method depending on continuous/discrete - if (factorWizardUI.getContinueRadio().isSelected()) { - saveContinue(factorWizardUI.getFactorNameField().getText(), - factorWizardUI.getComment().getText(), factorWizardUI.getFactorPath(), continuousPanel, - factorWizardUI.getContextValue(SimulAction.class), factorWizardUI.isEditingState()); - } else { - Component[] discreteComponents = factorWizardUI.getTabPane().getComponents(); - saveDiscret(factorWizardUI.getFactorNameField().getText(), - factorWizardUI.getComment().getText(), factorWizardUI.getFactorPath(), discreteComponents, - factorWizardUI.getContextValue(SimulAction.class), factorWizardUI.isEditingState()); - } - - // refresh factor list - factorWizardUI.getContextValue(SimulationUI.class, "SimulationUI").refreshFactorTree(); - - // close window - factorWizardUI.dispose(); - } - - /** - * Save a continous factor. - * - * @param name factor name - * @param comment comment - * @param path factor path - * @param panel panel - * @param action action - * @param exist exist - */ - protected void saveContinue(String name, - String comment, String path, ContinuousPanel panel, - SimulAction action, boolean exist) { - if (panel instanceof EquationContinuousPanelUI) { - try { - EquationContinuousPanelUI equationPanel = (EquationContinuousPanelUI) panel; - String property = StringUtils.uncapitalize(equationPanel.getBeanProperty()) + "Content"; - TopiaEntityContextable bean = equationPanel.getBean(); - TopiaContext topiaContext = bean.getTopiaContext(); - PropertyUtils.setProperty(bean, property, equationPanel.getEditor().getEditor().getText()); - - // Save equation - bean.update(); - topiaContext.commitTransaction(); - - List<Factor> factors = equationPanel.getFactors(); - for (Factor factor : factors) { - factor.setName(name); - factor.setComment(comment); - factor.setPath(path); - action.addContinuousEquationFactor(factor, exist); - } - } catch (Exception ex) { - if (log.isErrorEnabled()) { - log.error("Can't call method : ", ex); - } - } - } else if (panel instanceof ContinuousDistributionPanel) { - ContinuousDistributionPanel defaultPanel = (ContinuousDistributionPanel) panel; - ContinuousDomain domain = defaultPanel.generateDomain(); - action.addContinuousFactor(name, comment, path, domain, exist); - } - } - - /** - * Save a discret factor. - * - * @param name - * @param comment - * @param path - * @param components - * @param action - * @param exist - */ - protected void saveDiscret(String name, - String comment, String path, Component[] components, - SimulAction action, boolean exist) { - List<Object> values = new ArrayList<Object>(); - - boolean ruleFactor = false; - boolean equationFactor = false; - for (Component component : components) { - - if (component instanceof JScrollPane) { - component = ((JScrollPane) component).getViewport().getView(); - } - - // get internat component value - Object result = null; - if (component instanceof JTextComponent) { - result = ((JTextComponent) component).getText(); - } else if (component instanceof MatrixPanelEditor) { - result = ((MatrixPanelEditor) component).getMatrix(); - } else if (component instanceof InputOneEquationUI) { - result = ((InputOneEquationUI) component).getEditor().getText(); - equationFactor = true; - } else if (component instanceof RuleChooser) { - result = ((RuleChooser)component).getRulesList(); - ruleFactor = true; - } else if (component instanceof StepComponent) { - result = new TimeStep(((StepComponent)component).getSelectedValue()); - } else if (component instanceof MonthComponent) { - result = new Month(((MonthComponent)component).getSelectedValue()); - } else if (component instanceof JComboBox) { - // on suppose qu'il y a dedans des TopiaEntity - result = ((JComboBox)component).getSelectedItem(); - } - - values.add(result); - } - - if (ruleFactor) { - action.addDiscreteRuleFactor(name, comment, path, values, exist); - } else if (equationFactor) { - action.addDiscreteEquationFactor(name, comment, path, values, exist); - } else { - action.addDiscreteFactor(name, comment, path, values, exist); - } - } - - /** - * Remove current factor. - * - * @param factorWizardUI factorWizardUI - */ - public void remove(FactorWizardUI factorWizardUI) { - factorWizardUI.getContextValue(SimulAction.class).removeFactor(factorWizardUI.getFactorPath()); - factorWizardUI.getContextValue(SimulationUI.class, "SimulationUI").refreshFactorTree(); - factorWizardUI.dispose(); - } -} Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/AdvancedParamsHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/AdvancedParamsHandler.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/AdvancedParamsHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -39,7 +39,7 @@ * * @author Eric Chatellier */ -public class AdvancedParamsHandler extends SimulationTabHandler { +public class AdvancedParamsHandler extends SimulatorTabHandler { /** Class logger. */ private static final Log log = LogFactory.getLog(AdvancedParamsHandler.class); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ExportHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ExportHandler.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ExportHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -40,7 +40,7 @@ * * @author Eric Chatellier */ -public class ExportHandler extends SimulationTabHandler { +public class ExportHandler extends SimulatorTabHandler { /** Class logger. */ private static final Log log = LogFactory.getLog(ExportHandler.class); 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-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -59,11 +59,11 @@ import fr.ifremer.isisfish.ui.models.optimization.ExportObservationTableModel; import fr.ifremer.isisfish.ui.models.optimization.ExportTableCellEditor; import fr.ifremer.isisfish.ui.models.optimization.ExportTableCellRenderer; +import fr.ifremer.isisfish.ui.sensitivity.SensitivityInputUI; import fr.ifremer.isisfish.ui.sensitivity.SensitivitySaveVerifier; -import fr.ifremer.isisfish.ui.sensitivity.SensitivityTabUI; import fr.ifremer.isisfish.ui.widget.editor.FactorEditorListener; -public class OptimizationHandler extends SimulationTabHandler { +public class OptimizationHandler extends SimulatorTabHandler { private static final Log log = LogFactory.getLog(OptimizationHandler.class); @@ -184,7 +184,7 @@ public void actionPerformed(ActionEvent event) { // init new sensitivity tav ui hierarchy - final SensitivityTabUI sensitivityTabUI = new SensitivityTabUI(tabUI); + final SensitivityInputUI sensitivityTabUI = new SensitivityInputUI(tabUI); sensitivityTabUI.setContextValue(new SensitivitySaveVerifier()); // prevent NPE sensitivityTabUI.setContextValue(tabUI.getParentContainer(SimulationUI.class), "SimulationUI"); // prevent NPE @@ -196,7 +196,7 @@ TopiaContext tx = regionStorage.getStorage().beginTransaction(); FisheryRegion fisheryRegion = RegionStorage.getFisheryRegion(tx); sensitivityTabUI.setFisheryRegion(fisheryRegion); - sensitivityTabUI.setTreeModel(); + sensitivityTabUI.getHandler().setTreeModel(); } catch (Exception ex) { throw new IsisFishRuntimeException("Can't init dialog tree", ex); } Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsHandler.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -60,7 +60,7 @@ * * @author Eric Chatellier */ -public class ParamsHandler extends SimulationTabHandler { +public class ParamsHandler extends SimulatorTabHandler { /** Class logger. */ private static final Log log = LogFactory.getLog(ParamsHandler.class); @@ -178,8 +178,8 @@ // 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(); + tabUI.getParentContainer(SensitivityUI.class).getSensitivityInputUI().setFisheryRegion(fisheryRegion); + tabUI.getParentContainer(SensitivityUI.class).getSensitivityInputUI().getHandler().setTreeModel(); } catch (StorageException ex) { if (log.isErrorEnabled()) { log.error("Can't reload factors", ex); @@ -193,9 +193,9 @@ } 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.getParentContainer(SensitivityUI.class).getSensitivityChooserUI().getHandler().refreshSelectedSensitivityAnalysis(); + tabUI.getParentContainer(SensitivityUI.class).getSensitivityInputUI().getHandler().setFactorModel(); + tabUI.getParentContainer(SensitivityUI.class).getSensitivityChooserUI().getHandler().setSensitivityExportListModel(); tabUI.sensitivityOnlyKeepFirstResultCheckBox.setSelected(getSimulAction().getSimulationParameter().isSensitivityAnalysisOnlyKeepFirst()); } } @@ -276,7 +276,7 @@ protected void setListSimulParamsStrategiesItems() { List<Strategy> strategiesSelected = getSimulAction().getSimulationParameter().getStrategies(); - DefaultListModel listSimulParamsStrategiesModel = new DefaultListModel(); + DefaultListModel<Strategy> listSimulParamsStrategiesModel = new DefaultListModel<Strategy>(); List<Strategy> strategies = getSimulAction().getStrategies(); for (Strategy s : strategies){ listSimulParamsStrategiesModel.addElement(s); @@ -292,7 +292,7 @@ } protected void setListSimulParamsPopulationsItems(){ List<Population> populationsSelected = getSimulAction().getSimulationParameter().getPopulations(); - DefaultListModel listSimulParamsPopulationsModel = new DefaultListModel(); + DefaultListModel<Population> listSimulParamsPopulationsModel = new DefaultListModel<Population>(); List<Population> populations = getSimulAction().getPopulations(); for (Population p : populations){ listSimulParamsPopulationsModel.addElement(p); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PlanHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PlanHandler.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PlanHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -42,7 +42,7 @@ * * @author Eric Chatellier */ -public class PlanHandler extends SimulationTabHandler { +public class PlanHandler extends SimulatorTabHandler { protected PlanUI tabUI; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PreScriptsHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PreScriptsHandler.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/PreScriptsHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -27,7 +27,7 @@ * * @author Eric Chatellier */ -public class PreScriptsHandler extends SimulationTabHandler { +public class PreScriptsHandler extends SimulatorTabHandler { protected PreScriptsUI tabUI; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ResultChoiceHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ResultChoiceHandler.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ResultChoiceHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -36,7 +36,7 @@ * * @author Eric Chatellier */ -public class ResultChoiceHandler extends SimulationTabHandler { +public class ResultChoiceHandler extends SimulatorTabHandler { protected ResultChoiceUI tabUI; 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-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -102,8 +102,8 @@ import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; import fr.ifremer.isisfish.ui.SimulationUI; import fr.ifremer.isisfish.ui.sensitivity.SensitivityChooserUI; +import fr.ifremer.isisfish.ui.sensitivity.wizard.FactorWizardHandler; import fr.ifremer.isisfish.ui.sensitivity.wizard.FactorWizardUI; -import fr.ifremer.isisfish.ui.sensitivity.wizard.SensitivityWizardHandler; import fr.ifremer.isisfish.ui.util.ErrorHelper; import fr.ifremer.isisfish.ui.widget.editor.ScriptParameterDialog; import jaxx.runtime.SwingUtil; @@ -1233,7 +1233,7 @@ if (selectedFactor != null) { FactorWizardUI wizard = new FactorWizardUI(paramsUI); - SensitivityWizardHandler handler = wizard.getHandler(); + FactorWizardHandler handler = wizard.getHandler(); handler.initExistingFactor(wizard, selectedFactor); wizard.pack(); wizard.setLocationRelativeTo(paramsUI); @@ -1288,7 +1288,7 @@ rule.getClass().getSimpleName(), paramName)); factor.setPath(factorPath); FactorWizardUI factorWizardUI = new FactorWizardUI(ruleChooser); - SensitivityWizardHandler handler = factorWizardUI.getHandler(); + FactorWizardHandler handler = factorWizardUI.getHandler(); handler.initExistingFactor(factorWizardUI, factor); factorWizardUI.pack(); factorWizardUI.setLocationRelativeTo(ruleChooser); Deleted: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulationTabHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulationTabHandler.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulationTabHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -1,44 +0,0 @@ -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); - } -} Copied: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulatorTabHandler.java (from rev 4231, trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulationTabHandler.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulatorTabHandler.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulatorTabHandler.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -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 SimulatorTabHandler extends CommonHandler { + + // TODO might be something else, like SimulatorTabUI ? + protected JAXXContext simulationUI; + + protected SimulatorTabHandler(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); + } +} Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/Interval.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/Interval.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/Interval.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -213,18 +213,6 @@ } /** - * Retourne une chaine XML qui represente l'objet. - * - * @deprecated since 20090414 (unused) - * @return interval representation as xml - */ - public String toXML() { - return "<Interval min=\"" + getMin() + "\" max=\"" + getMax() - + "\" first=\"" + getFirst() + "\" last=\"" + getLast() - + "\"/>"; - } - - /** * @return une iteration */ public Iterator<Integer> iterator() { Modified: trunk/src/test/java/fr/ifremer/isisfish/ui/AbstractFestIT.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/ui/AbstractFestIT.java 2015-05-22 15:56:58 UTC (rev 4232) +++ trunk/src/test/java/fr/ifremer/isisfish/ui/AbstractFestIT.java 2015-05-22 16:10:26 UTC (rev 4233) @@ -56,7 +56,7 @@ public void setUp() { WelcomeUI frame = GuiActionRunner.execute(new GuiQuery<WelcomeUI>() { protected WelcomeUI executeInEDT() { - return new WelcomeUI(); + return new WelcomeUI(new WelcomeContext()); } }); mainWindow = new FrameFixture(frame);
participants (1)
-
echatellier@users.forge.codelutin.com