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