/hg/icedtea-web: Added dialogue to allow setting of custom JRE

jvanek at icedtea.classpath.org jvanek at icedtea.classpath.org
Fri Apr 12 04:31:29 PDT 2013


changeset e6055625cbbf in /hg/icedtea-web
details: http://icedtea.classpath.org/hg/icedtea-web?cmd=changeset;node=e6055625cbbf
author: Jiri Vanek <jvanek at redhat.com>
date: Fri Apr 12 13:31:49 2013 +0200

	Added dialogue to allow setting of custom JRE


diffstat:

 ChangeLog                                                     |   20 +
 NEWS                                                          |    6 +-
 launcher/itweb-settings.in                                    |    2 +-
 launcher/javaws.in                                            |    2 +-
 netx/net/sourceforge/jnlp/config/Defaults.java                |    6 +
 netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java |   29 +-
 netx/net/sourceforge/jnlp/controlpanel/ControlPanel.java      |   34 +-
 netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java          |  236 +++++++++-
 netx/net/sourceforge/jnlp/resources/Messages.properties       |   24 +
 netx/net/sourceforge/jnlp/util/FileUtils.java                 |   37 +-
 netx/net/sourceforge/jnlp/util/StreamUtils.java               |   19 +
 11 files changed, 400 insertions(+), 15 deletions(-)

diffs (truncated from 645 to 500 lines):

diff -r 50863f01bf84 -r e6055625cbbf ChangeLog
--- a/ChangeLog	Thu Apr 11 15:37:32 2013 -0400
+++ b/ChangeLog	Fri Apr 12 13:31:49 2013 +0200
@@ -1,3 +1,23 @@
+2013-04-12  Jiri Vanek <jvanek at redhat.com>
+
+	Added dialogue to allow setting of custom JRE
+	* launcher/itweb-settings.in: and
+	* launcher/javaws.in: check for custom jre less strict
+	* netx/net/sourceforge/jnlp/config/Defaults.java:made aware of 
+	deployment.jre.dir constant
+	* netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java: added\
+	KEY_JRE_DIR= "deployment.jre.dir" constant, user file occurrences extracted
+	to USER_DEPLOYMENT_PROPERTIES_FILE. 
+	* netx/net/sourceforge/jnlp/controlpanel/ControlPanel.java: used validation
+	of jdk when saving properties
+	* netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java: added text-field
+	to set JVM directory, friendly with logic and validation.
+	* netx/net/sourceforge/jnlp/resources/Messages.properties: added messages
+	to JVM selection and validation.
+	* netx/net/sourceforge/jnlp/util/StreamUtils.java: (readStreamAsString)
+	new utility method.
+	* NEWS: mentioned select-able  JVM
+
 2013-04-11  Adam Domurad  <adomurad at redhat.com>
 
 	Remove legacy support for the old version of NPAPI.
diff -r 50863f01bf84 -r e6055625cbbf NEWS
--- a/NEWS	Thu Apr 11 15:37:32 2013 -0400
+++ b/NEWS	Fri Apr 12 13:31:49 2013 +0200
@@ -9,11 +9,13 @@
 CVE-XXXX-YYYY: http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=XXXX-YYYY
 
 New in release 1.4 (2012-XX-XX):
-* Added cs_CZ localisation
-* Added de localisation
+* Added cs_CZ localization
+* Added de localization
 * Splash screen for javaws and plugin
+* Better error reporting for plugin via Error-splash-screen
 * All IcedTea-Web dialogues are centered to middle of active screen
 * Download indicator made compact for more then one jar
+* User can select its own JVM via itw-settings and deploy.properties.
 * Security updates
   - CVE-2012-3422, RH840592: Potential read from an uninitialized memory location
   - CVE-2012-3423, RH841345: Incorrect handling of not 0-terminated strings
diff -r 50863f01bf84 -r e6055625cbbf launcher/itweb-settings.in
--- a/launcher/itweb-settings.in	Thu Apr 11 15:37:32 2013 -0400
+++ b/launcher/itweb-settings.in	Fri Apr 12 13:31:49 2013 +0200
@@ -14,7 +14,7 @@
   CUSTOM_JRE=`grep "$CUSTOM_JRE_REGEX" /etc/.java/.deploy/deployment.properties 2>/dev/null |  sed "s/$CUSTOM_JRE_REGEX//g"`
 fi;
 if [ "x$CUSTOM_JRE" != "x" ] ; then
-  if [ -d  "$CUSTOM_JRE" -a -f "$CUSTOM_JRE/bin/java" ] ; then
+  if [ -e  "$CUSTOM_JRE" -a -e "$CUSTOM_JRE/bin/java" ] ; then
     JAVA=$CUSTOM_JRE/bin/java
   else
     echo "Your custom JRE $CUSTOM_JRE read from deployment.properties under key $PROPERTY_NAME as $CUSTOM_JRE is not valid. Using default ($JAVA) in attempt to start. Please fix this."
diff -r 50863f01bf84 -r e6055625cbbf launcher/javaws.in
--- a/launcher/javaws.in	Thu Apr 11 15:37:32 2013 -0400
+++ b/launcher/javaws.in	Fri Apr 12 13:31:49 2013 +0200
@@ -16,7 +16,7 @@
   CUSTOM_JRE=`grep "$CUSTOM_JRE_REGEX" /etc/.java/.deploy/deployment.properties 2>/dev/null |  sed "s/$CUSTOM_JRE_REGEX//g"`
 fi;
 if [ "x$CUSTOM_JRE" != "x" ] ; then
-  if [ -d  "$CUSTOM_JRE" -a -f "$CUSTOM_JRE/bin/java" -a -f "$CUSTOM_JRE/lib/rt.jar" ] ; then
+  if [ -e  "$CUSTOM_JRE" -a -e "$CUSTOM_JRE/bin/java" -a -e "$CUSTOM_JRE/lib/rt.jar" ] ; then
     JAVA=$CUSTOM_JRE/bin/java
     CP=$CUSTOM_JRE/lib/rt.jar
   else
diff -r 50863f01bf84 -r e6055625cbbf netx/net/sourceforge/jnlp/config/Defaults.java
--- a/netx/net/sourceforge/jnlp/config/Defaults.java	Thu Apr 11 15:37:32 2013 -0400
+++ b/netx/net/sourceforge/jnlp/config/Defaults.java	Fri Apr 12 13:31:49 2013 +0200
@@ -391,6 +391,12 @@
                 DeploymentConfiguration.KEY_SECURITY_LEVEL,
                 new SecurityValueValidator(),
                 null
+                },
+                //JVM executable for itw
+                {
+                        DeploymentConfiguration.KEY_JRE_DIR,
+                        null,
+                        null
                 }
         };
 
diff -r 50863f01bf84 -r e6055625cbbf netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java
--- a/netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java	Thu Apr 11 15:37:32 2013 -0400
+++ b/netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java	Fri Apr 12 13:31:49 2013 +0200
@@ -166,6 +166,7 @@
      * JVM arguments for plugin
      */
     public static final String KEY_PLUGIN_JVM_ARGUMENTS= "deployment.plugin.jvm.arguments";
+    public static final String KEY_JRE_DIR= "deployment.jre.dir";
 
     public enum ConfigType {
         System, User
@@ -178,6 +179,10 @@
     private File systemPropertiesFile = null;
     /** The user's deployment.config file */
     private File userPropertiesFile = null;
+    
+    /*default user file*/
+    public static final  File USER_DEPLOYMENT_PROPERTIES_FILE = new File(System.getProperty("user.home") + File.separator + DEPLOYMENT_DIR
+                + File.separator + DEPLOYMENT_PROPERTIES);
 
     /** the current deployment properties */
     private Map<String, Setting<String>> currentConfiguration;
@@ -221,8 +226,7 @@
      */
     public void load(boolean fixIssues) throws ConfigurationException {
         // make sure no state leaks if security check fails later on
-        File userFile = new File(System.getProperty("user.home") + File.separator + DEPLOYMENT_DIR
-                + File.separator + DEPLOYMENT_PROPERTIES);
+        File userFile = new File(USER_DEPLOYMENT_PROPERTIES_FILE.getAbsolutePath());
 
         SecurityManager sm = System.getSecurityManager();
         if (sm != null) {
@@ -415,8 +419,25 @@
             return etcFile;
         }
 
-        File jreFile = new File(System.getProperty("java.home") + File.separator + "lib"
-                + File.separator + DEPLOYMENT_CONFIG);
+        String jrePath = null;
+        try {
+            Map<String, Setting<String>> tmpProperties = parsePropertiesFile(USER_DEPLOYMENT_PROPERTIES_FILE);
+            Setting<String> jreSetting = tmpProperties.get(KEY_JRE_DIR);
+            if (jreSetting != null) {
+                jrePath = jreSetting.getValue();
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+
+        File jreFile;
+        if (jrePath != null) {
+            jreFile = new File(jrePath + File.separator + "lib"
+                    + File.separator + DEPLOYMENT_CONFIG);
+        } else {
+            jreFile = new File(System.getProperty("java.home") + File.separator + "lib"
+                    + File.separator + DEPLOYMENT_CONFIG);
+        }
         if (jreFile.isFile()) {
             return jreFile;
         }
diff -r 50863f01bf84 -r e6055625cbbf netx/net/sourceforge/jnlp/controlpanel/ControlPanel.java
--- a/netx/net/sourceforge/jnlp/controlpanel/ControlPanel.java	Thu Apr 11 15:37:32 2013 -0400
+++ b/netx/net/sourceforge/jnlp/controlpanel/ControlPanel.java	Fri Apr 12 13:31:49 2013 +0200
@@ -53,6 +53,7 @@
 import javax.swing.event.ListSelectionListener;
 
 import net.sourceforge.jnlp.config.DeploymentConfiguration;
+import net.sourceforge.jnlp.controlpanel.JVMPanel.JvmValidationResult;
 import net.sourceforge.jnlp.runtime.Translator;
 import net.sourceforge.jnlp.security.KeyStores;
 import net.sourceforge.jnlp.security.viewer.CertificatePane;
@@ -66,6 +67,7 @@
  * 
  */
 public class ControlPanel extends JFrame {
+    private JVMPanel jvmPanel;
 
     /**
      * Class for keeping track of the panels and their associated text.
@@ -157,6 +159,21 @@
         topPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
         return topPanel;
     }
+    
+    private int validateJdk() {
+        String s = ControlPanel.this.config.getProperty(DeploymentConfiguration.KEY_JRE_DIR);
+        JvmValidationResult validationResult = JVMPanel.validateJvm(s);
+        if (validationResult.id == JvmValidationResult.STATE.NOT_DIR
+                || validationResult.id == JvmValidationResult.STATE.NOT_VALID_DIR
+                || validationResult.id == JvmValidationResult.STATE.NOT_VALID_JDK) {
+            return JOptionPane.showConfirmDialog(ControlPanel.this,
+                    "<html>"+Translator.R("CPJVMNotokMessage1", s)+"<br>"
+                    + validationResult.formattedText+"<br>"
+                    + Translator.R("CPJVMNotokMessage2", DeploymentConfiguration.KEY_JRE_DIR, DeploymentConfiguration.USER_DEPLOYMENT_PROPERTIES_FILE)+"</html>",
+                    Translator.R("CPJVMconfirmInvalidJdkTitle"),JOptionPane.OK_CANCEL_OPTION);
+        }
+        return JOptionPane.OK_OPTION;
+    }
 
     /**
      * Creates the "ok" "apply" and "cancel" buttons.
@@ -173,6 +190,10 @@
             @Override
             public void actionPerformed(ActionEvent e) {
                 ControlPanel.this.saveConfiguration();
+                int validationResult = validateJdk();
+                if (validationResult!= JOptionPane.OK_OPTION){
+                    return;
+                }
                 ControlPanel.this.dispose();
             }
         });
@@ -183,6 +204,15 @@
             @Override
             public void actionPerformed(ActionEvent e) {
                 ControlPanel.this.saveConfiguration();
+                int validationResult = validateJdk();
+                if (validationResult != JOptionPane.OK_OPTION) {
+                    int i = JOptionPane.showConfirmDialog(ControlPanel.this,
+                            Translator.R("CPJVMconfirmReset"),
+                            Translator.R("CPJVMconfirmReset"), JOptionPane.OK_CANCEL_OPTION);
+                    if (i == JOptionPane.OK_OPTION) {
+                        jvmPanel.resetTestFieldArgumentsExec();
+                    }
+                }
             }
         });
         buttons.add(applyButton);
@@ -219,7 +249,7 @@
      * @return A panel with all the components in place.
      */
     private JPanel createMainSettingsPanel() {
-
+        jvmPanel =  (JVMPanel) createJVMSettingsPanel();
         SettingsPanel[] panels = new SettingsPanel[] { new SettingsPanel(Translator.R("CPTabAbout"), createAboutPanel()),
                 new SettingsPanel(Translator.R("CPTabCache"), createCacheSettingsPanel()),
                 new SettingsPanel(Translator.R("CPTabCertificate"), createCertificatesSettingsPanel()),
@@ -227,7 +257,7 @@
                 // new SettingsPanel(Translator.R("CPTabClassLoader"), createClassLoaderSettingsPanel()),
                 new SettingsPanel(Translator.R("CPTabDebugging"), createDebugSettingsPanel()),
                 new SettingsPanel(Translator.R("CPTabDesktopIntegration"), createDesktopSettingsPanel()),
-                new SettingsPanel(Translator.R("CPTabJVMSettings"), createJVMSettingsPanel()),
+                new SettingsPanel(Translator.R("CPTabJVMSettings"),jvmPanel),
                 new SettingsPanel(Translator.R("CPTabNetwork"), createNetworkSettingsPanel()),
                 // TODO: This is commented out since this is not implemented yet
                 // new SettingsPanel(Translator.R("CPTabRuntimes"), createRuntimesSettingsPanel()),
diff -r 50863f01bf84 -r e6055625cbbf netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java
--- a/netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java	Thu Apr 11 15:37:32 2013 -0400
+++ b/netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java	Fri Apr 12 13:31:49 2013 +0200
@@ -40,17 +40,43 @@
 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 @@
         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 @@
         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>";



More information about the distro-pkg-dev mailing list