aboutsummaryrefslogtreecommitdiffstats
path: root/netx/net/sourceforge
diff options
context:
space:
mode:
authorJiri Vanek <[email protected]>2013-04-12 13:31:49 +0200
committerJiri Vanek <[email protected]>2013-04-12 13:31:49 +0200
commit2f1248e599ff30dc01d6d1d7361fc0f4331a1b68 (patch)
tree84e64629330eda098b217309ccc2af14b30a16db /netx/net/sourceforge
parentd72aa240b794c81d4ec9aea24158564e696173a9 (diff)
Added dialogue to allow setting of custom JRE
Diffstat (limited to 'netx/net/sourceforge')
-rw-r--r--netx/net/sourceforge/jnlp/config/Defaults.java6
-rw-r--r--netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java29
-rw-r--r--netx/net/sourceforge/jnlp/controlpanel/ControlPanel.java34
-rw-r--r--netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java236
-rw-r--r--netx/net/sourceforge/jnlp/resources/Messages.properties24
-rw-r--r--netx/net/sourceforge/jnlp/util/FileUtils.java37
-rw-r--r--netx/net/sourceforge/jnlp/util/StreamUtils.java19
7 files changed, 374 insertions, 11 deletions
diff --git a/netx/net/sourceforge/jnlp/config/Defaults.java b/netx/net/sourceforge/jnlp/config/Defaults.java
index 9e51d78..1191e9e 100644
--- a/netx/net/sourceforge/jnlp/config/Defaults.java
+++ b/netx/net/sourceforge/jnlp/config/Defaults.java
@@ -391,6 +391,12 @@ public class Defaults {
DeploymentConfiguration.KEY_SECURITY_LEVEL,
new SecurityValueValidator(),
null
+ },
+ //JVM executable for itw
+ {
+ DeploymentConfiguration.KEY_JRE_DIR,
+ null,
+ null
}
};
diff --git a/netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java b/netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java
index 98dc88b..61061d2 100644
--- a/netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java
+++ b/netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java
@@ -166,6 +166,7 @@ public final class DeploymentConfiguration {
* 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 @@ public final class DeploymentConfiguration {
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 final class DeploymentConfiguration {
*/
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 @@ public final class DeploymentConfiguration {
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 --git a/netx/net/sourceforge/jnlp/controlpanel/ControlPanel.java b/netx/net/sourceforge/jnlp/controlpanel/ControlPanel.java
index d56cfba..7def7b5 100644
--- a/netx/net/sourceforge/jnlp/controlpanel/ControlPanel.java
+++ b/netx/net/sourceforge/jnlp/controlpanel/ControlPanel.java
@@ -53,6 +53,7 @@ import javax.swing.event.ListSelectionEvent;
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 @@ import net.sourceforge.jnlp.util.ImageResources;
*
*/
public class ControlPanel extends JFrame {
+ private JVMPanel jvmPanel;
/**
* Class for keeping track of the panels and their associated text.
@@ -157,6 +159,21 @@ public class ControlPanel extends JFrame {
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 @@ public class ControlPanel extends JFrame {
@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 @@ public class ControlPanel extends JFrame {
@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 @@ public class ControlPanel extends JFrame {
* @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 @@ public class ControlPanel extends JFrame {
// 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 --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>";
+ }
}
diff --git a/netx/net/sourceforge/jnlp/resources/Messages.properties b/netx/net/sourceforge/jnlp/resources/Messages.properties
index f20277a..38d6334 100644
--- a/netx/net/sourceforge/jnlp/resources/Messages.properties
+++ b/netx/net/sourceforge/jnlp/resources/Messages.properties
@@ -312,6 +312,30 @@ CPSecurityDescription=Use this to configure security settings.
CPDebuggingDescription=Enable options here to help with debugging
CPDesktopIntegrationDescription=Set whether or not to allow creation of desktop shortcut.
CPJVMPluginArguments=Set JVM arguments for plugin.
+CPJVMitwExec=Set JVM for icedtea-web - working best with OpenJDK
+CPJVMitwExecValidation=Validate JVM for icedtea-web
+CPJVMPluginSelectExec=Select JVM for icedtea-web
+CPJVMnone=No validation result for
+CPJVMvalidated=Validation result for
+CPJVMvalueNotSet=Value is not set. Hardcoded JVM will be used.
+CPJVMnotLaunched=Error, process was not launched, see console output for more info.
+CPJVMnoSuccess=Error, process have not ended successfully, see output for details, but your java is not set correctly.
+CPJVMopenJdkFound=Excellent, OpenJDK detected
+CPJVMoracleFound=Great, Oracle java detected
+CPJVMibmFound=Good, IBM java detected
+CPJVMgijFound=Warning, gij detected
+CPJVMstrangeProcess=Your path had an executable process, but it was not recognized. Verify the Java version in the console output.
+CPJVMnotDir=Error, The path you chose is not a directory.
+CPJVMisDir=Ok, the path you chose is a directory.
+CPJVMnoJava=Error, the directory you chose does not contain bin/java.
+CPJVMjava=Ok, the directory you chose contains bin/java.
+CPJVMnoRtJar=Error, the directory you chose does not contain lib/rt.jar
+CPJVMrtJar=Ok, the directory you chose contains lib/rt.jar.
+CPJVMPluginAllowTTValidation=Allow type-time validation
+CPJVMNotokMessage1=You have entered invalid JDK value <u>({0})</u> with following error message:
+CPJVMNotokMessage2=You might be seeing this message because: <blockquote> * Some validation has not been passed<br> * Non-OpenJDK is detected</blockquote>With invalid JDK IcedTea-Web will probably not be able to start.<br>You will have to modify or remove <u>{0}</u> property in your configuration file <u>{1}</u>. <br>You should try to search for OpenJDK in your system or be sure you know what you are doing.
+CPJVMconfirmInvalidJdkTitle=Confirm invalid JDK
+CPJVMconfirmReset=Reset to default?
# Control Panel - Buttons
CPButAbout=About...
diff --git a/netx/net/sourceforge/jnlp/util/FileUtils.java b/netx/net/sourceforge/jnlp/util/FileUtils.java
index 80a303a..804983d 100644
--- a/netx/net/sourceforge/jnlp/util/FileUtils.java
+++ b/netx/net/sourceforge/jnlp/util/FileUtils.java
@@ -176,6 +176,39 @@ public final class FileUtils {
}
}
+ if (JNLPRuntime.isWindows()) {
+ // remove all permissions
+ if (!tempFile.setExecutable(false, false)) {
+ System.err.println(R("RRemoveXPermFailed", tempFile));
+ }
+ if (!tempFile.setReadable(false, false)) {
+ System.err.println(R("RRemoveRPermFailed", tempFile));
+ }
+ if (!tempFile.setWritable(false, false)) {
+ System.err.println(R("RRemoveWPermFailed", tempFile));
+ }
+
+ // allow owner to read
+ if (!tempFile.setReadable(true, true)) {
+ System.err.println(R("RGetRPermFailed", tempFile));
+ }
+
+ // allow owner to write
+ if (writableByOwner && !tempFile.setWritable(true, true)) {
+ System.err.println(R("RGetWPermFailed", tempFile));
+ }
+
+ // allow owner to enter directories
+ if (isDir && !tempFile.setExecutable(true, true)) {
+ System.err.println(R("RGetXPermFailed", tempFile));
+ }
+ // rename this file. Unless the file is moved/renamed, any program that
+ // opened the file right after it was created might still be able to
+ // read the data.
+ if (!tempFile.renameTo(file)) {
+ System.err.println(R("RCantRename", tempFile, file));
+ }
+ } else {
// remove all permissions
if (!tempFile.setExecutable(false, false)) {
throw new IOException(R("RRemoveXPermFailed", tempFile));
@@ -201,13 +234,15 @@ public final class FileUtils {
if (isDir && !tempFile.setExecutable(true, true)) {
throw new IOException(R("RGetXPermFailed", tempFile));
}
-
+
// rename this file. Unless the file is moved/renamed, any program that
// opened the file right after it was created might still be able to
// read the data.
if (!tempFile.renameTo(file)) {
throw new IOException(R("RCantRename", tempFile, file));
}
+ }
+
}
diff --git a/netx/net/sourceforge/jnlp/util/StreamUtils.java b/netx/net/sourceforge/jnlp/util/StreamUtils.java
index 3a179d5..7dd7a92 100644
--- a/netx/net/sourceforge/jnlp/util/StreamUtils.java
+++ b/netx/net/sourceforge/jnlp/util/StreamUtils.java
@@ -37,9 +37,11 @@ exception statement from your version.
package net.sourceforge.jnlp.util;
+import java.io.BufferedReader;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
public class StreamUtils {
@@ -71,4 +73,21 @@ public class StreamUtils {
}
}
}
+
+
+ public static String readStreamAsString(InputStream stream) throws IOException {
+ InputStreamReader is = new InputStreamReader(stream);
+ StringBuilder sb = new StringBuilder();
+ BufferedReader br = new BufferedReader(is);
+ while (true) {
+ String read = br.readLine();
+ if (read == null) {
+ break;
+ }
+ sb.append(read);
+
+ }
+
+ return sb.toString();
+ }
}