diff options
author | Jiri Vanek <[email protected]> | 2013-04-12 13:31:49 +0200 |
---|---|---|
committer | Jiri Vanek <[email protected]> | 2013-04-12 13:31:49 +0200 |
commit | 2f1248e599ff30dc01d6d1d7361fc0f4331a1b68 (patch) | |
tree | 84e64629330eda098b217309ccc2af14b30a16db /netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java | |
parent | d72aa240b794c81d4ec9aea24158564e696173a9 (diff) |
Added dialogue to allow setting of custom JRE
Diffstat (limited to 'netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java')
-rw-r--r-- | netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java | 236 |
1 files changed, 232 insertions, 4 deletions
diff --git a/netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java b/netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java index 91f5b1c..9f1dd52 100644 --- a/netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java +++ b/netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java @@ -40,17 +40,43 @@ import java.awt.Component; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; - +import java.awt.Insets; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; import javax.swing.Box; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JTextField; - +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.text.Document; import net.sourceforge.jnlp.config.DeploymentConfiguration; import net.sourceforge.jnlp.runtime.Translator; +import net.sourceforge.jnlp.util.StreamUtils; @SuppressWarnings("serial") public class JVMPanel extends NamedBorderPanel { + + public static class JvmValidationResult { + + public static enum STATE { + + EMPTY, NOT_DIR, NOT_VALID_DIR, NOT_VALID_JDK, VALID_JDK; + } + public final String formattedText; + public final STATE id; + + public JvmValidationResult(String formattedText, STATE id) { + this.id = id; + this.formattedText = formattedText; + } + } private DeploymentConfiguration config; + private File lastPath = new File("/usr/lib/jvm/java/jre/"); + JTextField testFieldArgumentsExec; JVMPanel(DeploymentConfiguration config) { super(Translator.R("CPHeadJVMSettings"), new GridBagLayout()); @@ -58,23 +84,125 @@ public class JVMPanel extends NamedBorderPanel { addComponents(); } + + void resetTestFieldArgumentsExec(){ + testFieldArgumentsExec.setText(""); + } private void addComponents() { - JLabel description = new JLabel("<html>" + Translator.R("CPJVMPluginArguments") + "<hr /></html>"); - JTextField testFieldArguments = new JTextField(25); + final JLabel description = new JLabel("<html>" + Translator.R("CPJVMPluginArguments") + "<hr /></html>"); + final JTextField testFieldArguments = new JTextField(25); testFieldArguments.getDocument().addDocumentListener(new DocumentAdapter(config, DeploymentConfiguration.KEY_PLUGIN_JVM_ARGUMENTS)); testFieldArguments.setText(config.getProperty(DeploymentConfiguration.KEY_PLUGIN_JVM_ARGUMENTS)); + + final JLabel descriptionExec = new JLabel("<html>" + Translator.R("CPJVMitwExec") + "<hr /></html>"); + testFieldArgumentsExec = new JTextField(100); + final JLabel validationResult = new JLabel(resetValidationResult(testFieldArgumentsExec.getText(), "", "CPJVMnone")); + final JCheckBox allowTypoTimeValidation = new JCheckBox(Translator.R("CPJVMPluginAllowTTValidation"), true); + allowTypoTimeValidation.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + validationResult.setText(resetValidationResult(testFieldArgumentsExec.getText(), "", "CPJVMnone")); + } + }); + testFieldArgumentsExec.getDocument().addDocumentListener(new DocumentListener() { + + @Override + public void insertUpdate(DocumentEvent e) { + if (allowTypoTimeValidation.isSelected()) { + JvmValidationResult s = validateJvm(testFieldArgumentsExec.getText()); + validationResult.setText(resetValidationResult(testFieldArgumentsExec.getText(), s.formattedText, "CPJVMvalidated")); + } + } + + @Override + public void removeUpdate(DocumentEvent e) { + if (allowTypoTimeValidation.isSelected()) { + JvmValidationResult s = validateJvm(testFieldArgumentsExec.getText()); + validationResult.setText(resetValidationResult(testFieldArgumentsExec.getText(), s.formattedText, "CPJVMvalidated")); + } + } + + @Override + public void changedUpdate(DocumentEvent e) { + if (allowTypoTimeValidation.isSelected()) { + JvmValidationResult s = validateJvm(testFieldArgumentsExec.getText()); + validationResult.setText(resetValidationResult(testFieldArgumentsExec.getText(), s.formattedText, "CPJVMvalidated")); + } + } + }); + + testFieldArgumentsExec.getDocument().addDocumentListener(new DocumentAdapter(config, DeploymentConfiguration.KEY_JRE_DIR)); + testFieldArgumentsExec.setText(config.getProperty(DeploymentConfiguration.KEY_JRE_DIR)); + + final JButton selectJvm = new JButton(Translator.R("CPJVMPluginSelectExec")); + selectJvm.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser jfch; + if (lastPath != null && lastPath.exists()) { + jfch = new JFileChooser(lastPath); + } else { + jfch = new JFileChooser(); + } + jfch.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + int i = jfch.showOpenDialog(JVMPanel.this); + if (i == JFileChooser.APPROVE_OPTION && jfch.getSelectedFile() != null) { + lastPath = jfch.getSelectedFile().getParentFile(); + String nws = jfch.getSelectedFile().getAbsolutePath(); + String olds = testFieldArgumentsExec.getText(); + if (!nws.equals(olds)) { + validationResult.setText(resetValidationResult(testFieldArgumentsExec.getText(), "", "CPJVMnone")); + } + testFieldArgumentsExec.setText(nws); + } + + } + }); + final JButton validateJvm = new JButton(Translator.R("CPJVMitwExecValidation")); + validateJvm.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JvmValidationResult s = validateJvm(testFieldArgumentsExec.getText()); + validationResult.setText(resetValidationResult(testFieldArgumentsExec.getText(), s.formattedText, "CPJVMvalidated")); + + } + }); + // Filler to pack the bottom of the panel. GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; c.weightx = 1; + c.gridwidth = 4; c.gridx = 0; c.gridy = 0; + c.insets = new Insets(2, 2, 4, 4); this.add(description, c); c.gridy++; this.add(testFieldArguments, c); + c.gridy++; + this.add(descriptionExec, c); + c.gridy++; + this.add(testFieldArgumentsExec, c); + c.gridy++; + GridBagConstraints cb1 = (GridBagConstraints) c.clone(); + cb1.fill = GridBagConstraints.NONE; + cb1.gridwidth = 1; + this.add(selectJvm, cb1); + GridBagConstraints cb3 = (GridBagConstraints) c.clone(); + cb3.fill = GridBagConstraints.NONE; + cb3.gridx = 2; + cb3.gridwidth = 1; + this.add(allowTypoTimeValidation, cb3); + GridBagConstraints cb2 = (GridBagConstraints) c.clone(); + cb2.fill = GridBagConstraints.NONE; + cb2.gridx = 3; + cb2.gridwidth = 1; + this.add(validateJvm, cb2); + c.gridy++; + this.add(validationResult, c); // This is to keep it from expanding vertically if resized. Component filler = Box.createRigidArea(new Dimension(1, 1)); @@ -82,4 +210,104 @@ public class JVMPanel extends NamedBorderPanel { c.weighty++; this.add(filler, c); } + + public static JvmValidationResult validateJvm(String cmd) { + if (cmd == null || cmd.trim().equals("")) { + return new JvmValidationResult("<span color=\"orange\">" + Translator.R("CPJVMvalueNotSet") + "</span>", + JvmValidationResult.STATE.EMPTY); + } + String validationResult = ""; + File jreDirFile = new File(cmd); + JvmValidationResult.STATE latestOne = JvmValidationResult.STATE.EMPTY; + if (jreDirFile.isDirectory()) { + validationResult += "<span color=\"green\">" + Translator.R("CPJVMisDir") + "</span><br />"; + } else { + validationResult += "<span color=\"red\">" + Translator.R("CPJVMnotDir") + "</span><br />"; + latestOne = JvmValidationResult.STATE.NOT_DIR; + } + File javaFile = new File(cmd + File.separator + "bin" + File.separator + "java"); + if (javaFile.isFile()) { + validationResult += "<span color=\"green\">" + Translator.R("CPJVMjava") + "</span><br />"; + } else { + validationResult += "<span color=\"red\">" + Translator.R("CPJVMnoJava") + "</span><br />"; + if (latestOne != JvmValidationResult.STATE.NOT_DIR) { + latestOne = JvmValidationResult.STATE.NOT_VALID_JDK; + } + } + File rtFile = new File(cmd + File.separator + "lib" + File.separator + "rt.jar"); + if (rtFile.isFile()) { + validationResult += "<span color=\"green\">" + Translator.R("CPJVMrtJar") + "</span><br />"; + } else { + validationResult += "<span color=\"red\">" + Translator.R("CPJVMnoRtJar") + "</span><br />"; + if (latestOne != JvmValidationResult.STATE.NOT_DIR) { + latestOne = JvmValidationResult.STATE.NOT_VALID_JDK; + } + } + ProcessBuilder sb = new ProcessBuilder(javaFile.getAbsolutePath(), "-version"); + Process p = null; + String processErrorStream = ""; + String processStdOutStream = ""; + Integer r = null; + try { + p = sb.start(); + p.waitFor(); + processErrorStream = StreamUtils.readStreamAsString(p.getErrorStream()); + processStdOutStream = StreamUtils.readStreamAsString(p.getInputStream()); + r = p.exitValue(); + System.err.println(processErrorStream); + System.out.println(processStdOutStream); + processErrorStream = processErrorStream.toLowerCase(); + processStdOutStream = processStdOutStream.toLowerCase(); + } catch (Exception ex) {; + ex.printStackTrace(); + + } + if (r == null) { + validationResult += "<span color=\"red\">" + Translator.R("CPJVMnotLaunched") + "</span>"; + if (latestOne != JvmValidationResult.STATE.NOT_DIR) { + latestOne = JvmValidationResult.STATE.NOT_VALID_JDK; + } + return new JvmValidationResult(validationResult, latestOne); + } + if (r.intValue() != 0) { + validationResult += "<span color=\"red\">" + Translator.R("CPJVMnoSuccess") + "</span>"; + if (latestOne != JvmValidationResult.STATE.NOT_DIR) { + latestOne = JvmValidationResult.STATE.NOT_VALID_JDK; + } + return new JvmValidationResult(validationResult, latestOne); + } + if (processErrorStream.contains("openjdk") || processStdOutStream.contains("openjdk")) { + validationResult += "<span color=\"#00EE00\">" + Translator.R("CPJVMopenJdkFound") + "</span>"; + return new JvmValidationResult(validationResult, JvmValidationResult.STATE.VALID_JDK); + } + if (processErrorStream.contains("ibm") || processStdOutStream.contains("ibm")) { + validationResult += "<span color=\"green\">" + Translator.R("CPJVMibmFound") + "</span>"; + if (latestOne != JvmValidationResult.STATE.NOT_DIR) { + latestOne = JvmValidationResult.STATE.NOT_VALID_JDK; + } + return new JvmValidationResult(validationResult, latestOne); + } + if (processErrorStream.contains("gij") || processStdOutStream.contains("gij")) { + validationResult += "<span color=\"orange\">" + Translator.R("CPJVMgijFound") + "</span>"; + if (latestOne != JvmValidationResult.STATE.NOT_DIR) { + latestOne = JvmValidationResult.STATE.NOT_VALID_JDK; + } + return new JvmValidationResult(validationResult, latestOne); + } + if (processErrorStream.contains("oracle") || processStdOutStream.contains("oracle") + || processErrorStream.contains("java(tm)") || processStdOutStream.contains("java(tm)")) { + validationResult += "<span color=\"green\">" + Translator.R("CPJVMoracleFound") + "</span>"; + if (latestOne != JvmValidationResult.STATE.NOT_DIR) { + latestOne = JvmValidationResult.STATE.NOT_VALID_JDK; + } + return new JvmValidationResult(validationResult, latestOne); + } + validationResult += "<span color=\"orange\">" + Translator.R("CPJVMstrangeProcess") + "</span>"; + return new JvmValidationResult(validationResult, JvmValidationResult.STATE.NOT_VALID_JDK); + + } + + private String resetValidationResult(final String value, String result, String headerKey) { + return "<html>" + Translator.R(headerKey) + ": <br />" + value + " <br />" + result + "<hr /></html>"; + } } |