r2792 - in isis-fish/trunk: . src/main/java/fr/ifremer/isisfish/ui/config src/main/resources/i18n src/main/resources/icons
Author: chatellier Date: 2009-12-04 08:59:00 +0000 (Fri, 04 Dec 2009) New Revision: 2792 Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigAction.java isis-fish/trunk/src/main/resources/icons/accept.png isis-fish/trunk/src/main/resources/icons/add.png isis-fish/trunk/src/main/resources/icons/arrow_undo.png isis-fish/trunk/src/main/resources/icons/cancel.png isis-fish/trunk/src/main/resources/icons/connect.png isis-fish/trunk/src/main/resources/icons/delete.png isis-fish/trunk/src/main/resources/icons/paintbrush.png isis-fish/trunk/src/main/resources/icons/resultset_next.png isis-fish/trunk/src/main/resources/icons/resultset_previous.png isis-fish/trunk/src/main/resources/icons/tick.png isis-fish/trunk/src/main/resources/icons/wrench.png isis-fish/trunk/src/main/resources/icons/wrench_orange.png Modified: isis-fish/trunk/changelog.txt isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigUI.jaxx isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties Log: Add free space actions on caparmor configuration UI Modified: isis-fish/trunk/changelog.txt =================================================================== --- isis-fish/trunk/changelog.txt 2009-12-02 17:32:03 UTC (rev 2791) +++ isis-fish/trunk/changelog.txt 2009-12-04 08:59:00 UTC (rev 2792) @@ -1,5 +1,6 @@ isis-fish (3.3.0.0) stable; urgency=low + * Add free space actions on caparmor configuration UI * Remove "isis-export" directory * Fix editor deactivation in input ui. * Remove deprecated method SimulationStorage#getFisheryRegion() Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigAction.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigAction.java (rev 0) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigAction.java 2009-12-04 08:59:00 UTC (rev 2792) @@ -0,0 +1,513 @@ +/* *##% + * Copyright (C) 2009 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 2 + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%*/ + +package fr.ifremer.isisfish.ui.config; + +import static org.nuiton.i18n.I18n._; + +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.lang.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.ui.input.InputAction; +import fr.ifremer.isisfish.util.ssh.InvalidPassphraseException; +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(InputAction.class); + + protected SSHLauncherConfigUI configUI; + + protected String currentSSHserver; + protected String currentSSHsftpServer; + protected String currentSSHUsername; + protected File currentSSHKey; + protected String currentSSHUserhome; + protected String currentSSHDatapath; + protected String currentSSHIsisHome; + protected String currentSSHTempPath; + protected String currentSSHPbsBinPath; + 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.getSshSftpServerField().setText(IsisFish.config.getSimulatorSshSftpServer()); + 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.getSshPbsBinPathField().setText(IsisFish.config.getSimulatorSshPbsBinPath()); + configUI.getSshControlIntervalField().setText(String.valueOf(IsisFish.config.getSimulatorSshControlCheckInterval())); + + doCheck(); + } + + /** + * Reset display. + */ + protected void configurationChanged() { + + configUI.setConnected(false); + configUI.getMessageLabel().setText(""); + configUI.getStatusFreeDatabaseLabel().setText(_("isisfish.simulator.ssh.configuration.freespace.label", "isis-database", "0")); + configUI.getStatusFreeTempLabel().setText(_("isisfish.simulator.ssh.configuration.freespace.label", "isis-tmp", "0")); + + } + + /** + * 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()); + } + + currentSSHPbsBinPath = configUI.getSshPbsBinPathField().getText() + .trim(); + if (currentSSHPbsBinPath.isEmpty()) { + setColor(true, configUI.getSshPbsBinPathField()); + } else { + setColor(false, configUI.getSshPbsBinPathField()); + } + + 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.setSimulatorSshPbsBinPath(currentSSHPbsBinPath); + IsisFish.config.setSimulatorSshControlCheckInterval(Long.parseLong(currentSSHControlInterval)); + + 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(_("Ssh key found '%s' will be used to connect to", + currentSSHKey.getAbsoluteFile(), host)); + } + jsch.addIdentity(currentSSHKey.getAbsolutePath()); + sshKeyUsed = true; + } else { + if (log.isInfoEnabled()) { + log.info(_("Can't read ssh key : %s", currentSSHKey)); + } + } + + Session session = jsch.getSession(currentSSHUsername, host, port); + + // username and password will be given via UserInfo interface. + SSHUserInfo ui = new SSHUserInfo(); + if (sshKeyUsed) { + String passphrase = null; + passphrase = SSHAgent.getAgent().getPassphrase(currentSSHKey); + ui.setPassphrase(passphrase); + setTestMessage(_("isisfish.simulator.ssh.configuration.connectingpk"), false); + } else { + setTestMessage(_("isisfish.simulator.ssh.configuration.connecting"), false); + } + session.setUserInfo(ui); + session.connect(10000); // timeout + + setTestMessage(_("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(_("isisfish.simulator.ssh.configuration.freespace.label", currentSSHDatapath, databaseSize)); + configUI.getStatusFreeTempLabel().setText(_("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(_("isisfish.error.simulation.remote.wrongportvalue", + sPort), true); + } catch (JSchException e) { + if (log.isErrorEnabled()) { + log.error("Can't connect", e); + } + setTestMessage(_( + "isisfish.simulator.ssh.configuration.connectionerror", e + .getMessage()), true); + } catch (SSHException e) { + if (log.isErrorEnabled()) { + log.error("Can't connect", e); + } + setTestMessage(_( + "isisfish.simulator.ssh.configuration.connectionerror", e + .getMessage()), true); + } catch (InvalidPassphraseException e) { + if (log.isErrorEnabled()) { + log.error("Can't connect", e); + } + setTestMessage( + _("isisfish.simulator.ssh.configuration.invalidpassphrase"), + true); + } + } + + /** + * Get user home directory with an opened session. + * + * @param session opened session + * @return 'pwd' result + */ + 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(_("Command '%s' fail to execute", command)); + } + + String out = output.toString(); + return out; + } + + /** + * Get user home directory with an opened session. + * + * @param session opened session + * @return 'pwd' result + */ + 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 session opened session + */ + 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, _("isisfish.simulator.ssh.configuration.freespace.confirmdelete", currentSSHDatapath), + _("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(_("Ssh key found '%s' will be used to connect to", + currentSSHKey.getAbsoluteFile(), host)); + } + jsch.addIdentity(currentSSHKey.getAbsolutePath()); + sshKeyUsed = true; + } else { + if (log.isInfoEnabled()) { + log.info(_("Can't read ssh key : %s", currentSSHKey)); + } + } + + Session session = jsch.getSession(currentSSHUsername, host, port); + + // username and password will be given via UserInfo interface. + SSHUserInfo ui = new SSHUserInfo(); + if (sshKeyUsed) { + String passphrase = null; + passphrase = SSHAgent.getAgent().getPassphrase(currentSSHKey); + 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(_("isisfish.simulator.ssh.configuration.freespace.label", currentSSHDatapath, databaseSize)); + configUI.getStatusFreeTempLabel().setText(_("isisfish.simulator.ssh.configuration.freespace.label", currentSSHTempPath, temppathSize)); + session.disconnect(); + + session.disconnect(); + if (exit != 0) { + throw new SSHException(_("Command '%s' fail to execute", command)); + } + } + catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("Can't connect", e); + } + setTestMessage(_("isisfish.simulator.ssh.configuration.connectionerror", e.getMessage()), true); + } + } + 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); + } +} Property changes on: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigAction.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigUI.jaxx 2009-12-02 17:32:03 UTC (rev 2791) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/config/SSHLauncherConfigUI.jaxx 2009-12-04 08:59:00 UTC (rev 2792) @@ -15,304 +15,17 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ##% --> -<JDialog resizable="false" title="isisfish.simulator.ssh.configuration.title" layout="{new BoxLayout(this.getContentPane(), BoxLayout.PAGE_AXIS)}"> +<JDialog resizable="false" title="isisfish.simulator.ssh.configuration.title" + layout="{new BoxLayout(this.getContentPane(), BoxLayout.PAGE_AXIS)}"> + + <SSHLauncherConfigAction id="action" javaBean="new SSHLauncherConfigAction(this)" /> + <Boolean id="connected" javaBean="false" /> + <script><![CDATA[ - import java.io.IOException; - import fr.ifremer.isisfish.IsisFish; - import com.jcraft.jsch.JSch; - import com.jcraft.jsch.JSchException; - import com.jcraft.jsch.KeyPair; - import com.jcraft.jsch.Session; - import fr.ifremer.isisfish.util.ssh.InvalidPassphraseException; - 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; - - protected String currentSSHserver; - protected String currentSSHsftpServer; - protected String currentSSHUsername; - protected File currentSSHKey; - protected String currentSSHUserhome; - protected String currentSSHDatapath; - protected String currentSSHIsisHome; - protected String currentSSHTempPath; - protected String currentSSHPbsBinPath; - protected String currentSSHControlInterval; - // fill default values - resetSSHConfiguration(); - - /** - * Reset values with default configuration values. - */ - protected void resetSSHConfiguration() { - // server config - sshServerField.setText(IsisFish.config.getSimulatorSshServer()); - sshSftpServerField.setText(IsisFish.config.getSimulatorSshSftpServer()); - usernameField.setText(IsisFish.config.getSimulatorSshUsername()); - sshKeyField.setText(IsisFish.config.getSSHPrivateKeyFilePath().getAbsolutePath()); - - // caparmor config - sshUserhomeField.setText(IsisFish.config.getSimulatorSshUserHome()); - sshDatapathField.setText(IsisFish.config.getSimulatorSshDataPath()); - sshIsisHomeField.setText(IsisFish.config.getSimulatorSshIsisHome()); - sshTemppathField.setText(IsisFish.config.getSimulatorSshTmpPath()); - sshPbsBinPathField.setText(IsisFish.config.getSimulatorSshPbsBinPath()); - sshControlIntervalField.setText(String.valueOf(IsisFish.config.getSimulatorSshControlCheckInterval())); - - doCheck(); - } - - protected void doCheck() { - - validButton.setEnabled(false); - messageLabel.setText(""); - - // copy values - currentSSHserver = sshServerField.getText().trim(); - if (currentSSHserver.isEmpty()) { - setColor(true, sshServerField); - } - else { - setColor(false, sshServerField); - } - - // copy values - currentSSHsftpServer = sshSftpServerField.getText().trim(); - // can be empty (optionnal use) - - currentSSHUsername = usernameField.getText().trim(); - if (!currentSSHUsername.matches("\\w+")) { - setColor(true, usernameField); - } - else { - setColor(false, usernameField); - } - - // if ssh key is set, must be a valid file - currentSSHKey = new File(sshKeyField.getText().trim()); - if (!currentSSHKey.isFile()) { - setColor(true, sshKeyField); - } - else { - sshKeyButton.setEnabled(false); - sshKeyField.setEnabled(false); - setColor(false, sshKeyField); - } - - currentSSHDatapath = sshDatapathField.getText().trim(); - if (currentSSHDatapath.isEmpty()) { - setColor(true, sshDatapathField); - } - else { - setColor(false, sshDatapathField); - } - - currentSSHIsisHome = sshIsisHomeField.getText().trim(); - if (currentSSHIsisHome.isEmpty()) { - setColor(true, sshIsisHomeField); - } - else { - setColor(false, sshIsisHomeField); - } - - currentSSHTempPath = sshTemppathField.getText().trim(); - if (currentSSHTempPath.isEmpty()) { - setColor(true, sshTemppathField); - } - else { - setColor(false, sshTemppathField); - } - - currentSSHPbsBinPath = sshPbsBinPathField.getText().trim(); - if (currentSSHPbsBinPath.isEmpty()) { - setColor(true, sshPbsBinPathField); - } - else { - setColor(false, sshPbsBinPathField); - } - - currentSSHControlInterval = sshControlIntervalField.getText().trim(); - if (!currentSSHControlInterval.matches("\\d+")) { - setColor(true, sshControlIntervalField); - } - else { - setColor(false, sshControlIntervalField); - } - } + getAction().resetSSHConfiguration(); - /** - * Set values in config and force configuration save. - */ - protected 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.setSimulatorSshPbsBinPath(currentSSHPbsBinPath); - IsisFish.config.setSimulatorSshControlCheckInterval(Long.parseLong(currentSSHControlInterval)); - - IsisFish.config.saveForUser(); - dispose(); - } - - /** - * Close frame. - */ - protected void cancelSSHConfiguration() { - dispose(); - } - - /** - * Realise une connexion ssh et teste les données. - */ - protected 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(_("Ssh key found '%s' will be used to connect to", - currentSSHKey.getAbsoluteFile(), host)); - } - jsch.addIdentity(currentSSHKey.getAbsolutePath()); - sshKeyUsed = true; - } - else { - if (log.isInfoEnabled()) { - log.info(_("Can't read ssh key : %s", currentSSHKey)); - } - } - - Session session = jsch.getSession(currentSSHUsername, host, port); - - // username and password will be given via UserInfo interface. - SSHUserInfo ui = new SSHUserInfo(); - if (sshKeyUsed) { - String passphrase = null; - passphrase = SSHAgent.getAgent().getPassphrase(currentSSHKey); - ui.setPassphrase(passphrase); - setTestMessage(_("isisfish.simulator.ssh.configuration.connectingpk"), false); - } - else { - setTestMessage(_("isisfish.simulator.ssh.configuration.connecting"), false); - } - session.setUserInfo(ui); - session.connect(10000); // timeout - - setTestMessage(_("isisfish.simulator.ssh.configuration.connectionok"), false); - - // get user home - currentSSHUserhome = getUserHomeDirectory(session); - sshUserhomeField.setText(currentSSHUserhome); - session.disconnect(); - - validButton.setEnabled(true); - } catch (NumberFormatException e) { - if (log.isErrorEnabled()) { - log.error("Can't connect", e); - } - setTestMessage(_("isisfish.error.simulation.remote.wrongportvalue", sPort), true); - } catch (JSchException e) { - if (log.isErrorEnabled()) { - log.error("Can't connect", e); - } - setTestMessage(_("isisfish.simulator.ssh.configuration.connectionerror", e.getMessage()), true); - } catch (SSHException e) { - if (log.isErrorEnabled()) { - log.error("Can't connect", e); - } - setTestMessage(_("isisfish.simulator.ssh.configuration.connectionerror", e.getMessage()), true); - } catch (InvalidPassphraseException e) { - if (log.isErrorEnabled()) { - log.error("Can't connect", e); - } - setTestMessage(_("isisfish.simulator.ssh.configuration.invalidpassphrase"), true); - } - } - - /** - * Get user home directory with an opened session. - */ - 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(_("Command '%s' fail to execute", command)); - } - - String out = output.toString(); - return out; - } - - /** - * 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(); - } - - protected void setColor(boolean invalid, JComponent component) { - component.setForeground(invalid ? Color.RED: Color.BLACK); - } - protected void setTestMessage(String message, boolean error) { - messageLabel.setForeground(error ? Color.RED: Color.GREEN.darker()); - messageLabel.setText(message); - } ]]></script> <Table border='{BorderFactory.createTitledBorder(_("isisfish.simulator.ssh.configuration.connection"))}' @@ -324,7 +37,7 @@ </cell> <cell fill='horizontal' columns="2"> <JTextField id='sshServerField' toolTipText='isisfish.config.main.simulation.ssh.server.description' - onKeyReleased="doCheck()" /> + onKeyReleased="getAction().doCheck()" /> </cell> </row> <row> @@ -334,7 +47,7 @@ </cell> <cell fill='horizontal' columns="2"> <JTextField id='sshSftpServerField' toolTipText='isisfish.config.main.simulation.ssh.sftpserver.description' - onKeyReleased="doCheck()" /> + onKeyReleased="getAction().doCheck()" enabled="false" /> </cell> </row> <row fill='horizontal'> @@ -344,7 +57,7 @@ </cell> <cell columns="2"> <JTextField id='usernameField' toolTipText='isisfish.config.main.simulation.ssh.username.description' - onKeyReleased="doCheck()" /> + onKeyReleased="getAction().doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -353,10 +66,10 @@ </cell> <cell weightx="2.0"> <JTextField id='sshKeyField' toolTipText='isisfish.config.ssh.key.file.description' - onKeyReleased="doCheck()" /> + onKeyReleased="getAction().doCheck()" /> </cell> <cell> - <JButton id='sshKeyButton' text='isisfish.simulator.ssh.configuration.keygenerate' onActionPerformed="generateSSHKey()" /> + <JButton id='sshKeyButton' text='isisfish.simulator.ssh.configuration.keygenerate' onActionPerformed="getAction().generateSSHKey()" /> </cell> </row> </Table> @@ -368,7 +81,7 @@ </cell> <cell weightx="1.0"> <JTextField id='sshUserhomeField' enabled='false' toolTipText='isisfish.config.main.simulation.ssh.userhome.description' - onKeyReleased="doCheck()" /> + onKeyReleased="getAction().doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -378,7 +91,7 @@ </cell> <cell weightx="1.0"> <JTextField id='sshDatapathField' toolTipText='isisfish.config.main.simulation.ssh.datapath.description' - onKeyReleased="doCheck()" /> + onKeyReleased="getAction().doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -388,7 +101,7 @@ </cell> <cell> <JTextField id='sshIsisHomeField' toolTipText='isisfish.config.main.simulation.ssh.isis.home.description' - onKeyReleased="doCheck()" /> + onKeyReleased="getAction().doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -398,7 +111,7 @@ </cell> <cell> <JTextField id='sshTemppathField' toolTipText='isisfish.config.main.simulation.ssh.tmppath.description' - onKeyReleased="doCheck()" /> + onKeyReleased="getAction().doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -409,7 +122,7 @@ <cell> <JTextField id='sshPbsBinPathField' toolTipText='isisfish.config.main.simulation.ssh.pbsbinpath.description' - onKeyReleased="doCheck()" /> + onKeyReleased="getAction().doCheck()" /> </cell> </row> <row fill='horizontal'> @@ -420,29 +133,55 @@ <cell> <JTextField id='sshControlIntervalField' toolTipText='isisfish.config.main.simulation.ssh.control.check.interval.description' - onKeyReleased="doCheck()" /> + onKeyReleased="getAction().doCheck()" /> </cell> </row> </Table> <Table> <row fill='horizontal'> - <cell columns="4" fill='horizontal'> - <JLabel id='messageLabel' text=' ' font-weight='bold' opaque='true' horizontalAlignment='center' minimumSize='{new Dimension(0, 25)}' preferredSize='{new Dimension(0, 25)}'/> + <cell fill='horizontal' weightx="1.0"> + <JButton id='testButton' text='isisfish.simulator.ssh.configuration.test' onActionPerformed="getAction().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()}' /> + </cell> + <cell fill='horizontal' weightx="1.0"> + <JButton id='resetButton' text='isisfish.common.reset' onActionPerformed="getAction().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" /> + </cell> </row> + </Table> + <Table border='{BorderFactory.createTitledBorder(_("isisfish.simulator.ssh.configuration.status"))}'> <row fill='horizontal'> - <cell fill='horizontal'> - <JButton id='testButton' text='isisfish.simulator.ssh.configuration.test' onActionPerformed="testSSHConfiguration()" /> + <cell columns="2" fill='horizontal'> + <JLabel id='messageLabel' text=' ' font-weight='bold' opaque='true' horizontalAlignment='center' + minimumSize='{new Dimension(0, 25)}' preferredSize='{new Dimension(0, 25)}' border='{BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)}' /> </cell> - <cell fill='horizontal'> - <JButton id='validButton' text='isisfish.common.valid' onActionPerformed="saveSSHConfiguration()" /> + </row> + <row fill='horizontal'> + <cell columns="2"> + <JLabel text='isisfish.simulator.ssh.configuration.freespace' enabled='{isConnected()}' /> </cell> - <cell fill='horizontal'> - <JButton id='resetButton' text='isisfish.common.reset' onActionPerformed="resetSSHConfiguration()" /> + </row> + <row fill='horizontal'> + <cell fill="horizontal" weightx="1.0"> + <JLabel id='statusFreeDatabaseLabel' enabled='{isConnected()}' /> </cell> - <cell fill='horizontal'> - <JButton id='cancelButton' text='isisfish.common.cancel' onActionPerformed="cancelSSHConfiguration()" /> + <cell> + <JButton id='clearDatabaseButton' text='isisfish.common.clear' icon="paintbrush.png" + onActionPerformed="getAction().clearDatabase()" enabled='{isConnected()}' /> </cell> </row> + <row fill='horizontal'> + <cell fill="horizontal" weightx="1.0"> + <JLabel id='statusFreeTempLabel' enabled='{isConnected()}' /> + </cell> + <cell> + <JButton id='clearTempButton' text='isisfish.common.clear' icon="paintbrush.png" + onActionPerformed="getAction().clearTempDirectory()" enabled='{isConnected()}' /> + </cell> + </row> </Table> </JDialog> Modified: isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties =================================================================== --- isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties 2009-12-02 17:32:03 UTC (rev 2791) +++ isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties 2009-12-04 08:59:00 UTC (rev 2792) @@ -933,8 +933,12 @@ isisfish.simulator.ssh.configuration.connectionerror=Can't connect isisfish.simulator.ssh.configuration.connectionok=Connection successfull isisfish.simulator.ssh.configuration.environment=Caparmor configuration +isisfish.simulator.ssh.configuration.freespace=Used space disk \: +isisfish.simulator.ssh.configuration.freespace.confirmdelete=Warning, deleting the contents of file '%s' is irreversible.\nDo you confirm the deletion of contents ? +isisfish.simulator.ssh.configuration.freespace.label=Size of %s \: %s isisfish.simulator.ssh.configuration.invalidpassphrase=Invalid passphrase isisfish.simulator.ssh.configuration.keygenerate=Generate +isisfish.simulator.ssh.configuration.status=Status isisfish.simulator.ssh.configuration.test=Test configuration isisfish.simulator.ssh.configuration.title=Caparmor launcher configuration isisfish.simulator.subprocess.readoutput.error= Modified: isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties =================================================================== --- isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties 2009-12-02 17:32:03 UTC (rev 2791) +++ isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties 2009-12-04 08:59:00 UTC (rev 2792) @@ -933,8 +933,12 @@ isisfish.simulator.ssh.configuration.connectionerror=Connexion impossible (%s) isisfish.simulator.ssh.configuration.connectionok=Connect\u00E9 avec succ\u00E8s isisfish.simulator.ssh.configuration.environment=Configuration sur Caparmor +isisfish.simulator.ssh.configuration.freespace=Espace disque utilis\u00E9 \: +isisfish.simulator.ssh.configuration.freespace.confirmdelete=Attention, la suppression du contenu du dossier '%s' est irr\u00E9versible.\nConfirmez-vous la suppression de son contenu ? +isisfish.simulator.ssh.configuration.freespace.label=Taille de %s \: %s isisfish.simulator.ssh.configuration.invalidpassphrase=Passphrase invalide isisfish.simulator.ssh.configuration.keygenerate=G\u00E9n\u00E9rer +isisfish.simulator.ssh.configuration.status=Statut isisfish.simulator.ssh.configuration.test=Tester la configuration isisfish.simulator.ssh.configuration.title=Configuration du lanceur Caparmor isisfish.simulator.subprocess.readoutput.error= Added: isis-fish/trunk/src/main/resources/icons/accept.png =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/main/resources/icons/accept.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: isis-fish/trunk/src/main/resources/icons/add.png =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/main/resources/icons/add.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: isis-fish/trunk/src/main/resources/icons/arrow_undo.png =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/main/resources/icons/arrow_undo.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: isis-fish/trunk/src/main/resources/icons/cancel.png =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/main/resources/icons/cancel.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: isis-fish/trunk/src/main/resources/icons/connect.png =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/main/resources/icons/connect.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: isis-fish/trunk/src/main/resources/icons/delete.png =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/main/resources/icons/delete.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: isis-fish/trunk/src/main/resources/icons/paintbrush.png =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/main/resources/icons/paintbrush.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: isis-fish/trunk/src/main/resources/icons/resultset_next.png =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/main/resources/icons/resultset_next.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: isis-fish/trunk/src/main/resources/icons/resultset_previous.png =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/main/resources/icons/resultset_previous.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: isis-fish/trunk/src/main/resources/icons/tick.png =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/main/resources/icons/tick.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: isis-fish/trunk/src/main/resources/icons/wrench.png =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/main/resources/icons/wrench.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: isis-fish/trunk/src/main/resources/icons/wrench_orange.png =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/main/resources/icons/wrench_orange.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream
participants (1)
-
chatellier@users.labs.libre-entreprise.org