/*
|
* CDDL HEADER START
|
*
|
* The contents of this file are subject to the terms of the
|
* Common Development and Distribution License, Version 1.0 only
|
* (the "License"). You may not use this file except in compliance
|
* with the License.
|
*
|
* You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
|
* or http://forgerock.org/license/CDDLv1.0.html.
|
* See the License for the specific language governing permissions
|
* and limitations under the License.
|
*
|
* When distributing Covered Code, include this CDDL HEADER in each
|
* file and include the License file at legal-notices/CDDLv1_0.txt.
|
* If applicable, add the following below this CDDL HEADER, with the
|
* fields enclosed by brackets "[]" replaced with your own identifying
|
* information:
|
* Portions Copyright [yyyy] [name of copyright owner]
|
*
|
* CDDL HEADER END
|
*
|
*
|
* Copyright 2008-2009 Sun Microsystems, Inc.
|
* Portions Copyright 2011-2014 ForgeRock AS
|
*/
|
|
package org.opends.server.tools;
|
|
import java.io.*;
|
import java.util.Enumeration;
|
import java.util.Properties;
|
|
import org.forgerock.i18n.LocalizableMessage;
|
import org.opends.messages.ToolMessages;
|
import org.opends.quicksetup.Constants;
|
import org.opends.quicksetup.util.Utils;
|
import org.opends.server.loggers.JDKLogging;
|
import org.opends.server.types.NullOutputStream;
|
import com.forgerock.opendj.cli.ConsoleApplication;
|
|
import com.forgerock.opendj.cli.ArgumentException;
|
|
import static org.opends.messages.ToolMessages.*;
|
import static org.opends.server.util.ServerConstants.*;
|
|
/**
|
* This class is used to update the scripts that are used to launch the command
|
* lines. We read the contents of a given properties file and we update the
|
* scripts setting the arguments and JVM to be used by the different scripts.
|
*
|
*/
|
public class JavaPropertiesTool extends ConsoleApplication
|
{
|
// The argument parser
|
private JavaPropertiesToolArgumentParser argParser;
|
|
/**
|
* The enumeration containing the different return codes that the command-line
|
* can have.
|
*
|
*/
|
public enum ErrorReturnCode
|
{
|
/**
|
* Successful setup.
|
*/
|
SUCCESSFUL(0),
|
/**
|
* We did no have an error but the setup was not executed (displayed version
|
* or usage).
|
*/
|
SUCCESSFUL_NOP(0),
|
/**
|
* Unexpected error (potential bug).
|
*/
|
ERROR_UNEXPECTED(1),
|
/**
|
* Cannot parse arguments or data provided by user is not valid.
|
*/
|
ERROR_USER_DATA(2),
|
/**
|
* Error writing to destination file.
|
*/
|
ERROR_WRITING_FILE(3),
|
/**
|
* Conflicting command line arguments.
|
*/
|
CONFLICTING_ARGS(18);
|
|
private int returnCode;
|
private ErrorReturnCode(int returnCode)
|
{
|
this.returnCode = returnCode;
|
}
|
|
/**
|
* Get the corresponding return code value.
|
*
|
* @return The corresponding return code value.
|
*/
|
public int getReturnCode()
|
{
|
return returnCode;
|
}
|
}
|
|
final private static String DEFAULT_JAVA_HOME_PROP_NAME = "default.java-home";
|
final private static String DEFAULT_JAVA_ARGS_PROP_NAME = "default.java-args";
|
final private static String OVERWRITE_ENV_JAVA_HOME_PROP_NAME =
|
"overwrite-env-java-home";
|
final private static String OVERWRITE_ENV_JAVA_ARGS_PROP_NAME =
|
"overwrite-env-java-args";
|
|
/**
|
* Constructor for the JavaPropertiesTool object.
|
*
|
* @param out the print stream to use for standard output.
|
* @param err the print stream to use for standard error.
|
* @param in the input stream to use for standard input.
|
*/
|
public JavaPropertiesTool(PrintStream out, PrintStream err, InputStream in)
|
{
|
super(out, err);
|
}
|
|
/**
|
* The main method for the java properties tool.
|
*
|
* @param args the command-line arguments provided to this program.
|
*/
|
|
public static void main(String[] args)
|
{
|
int retCode = mainCLI(args, System.out, System.err, System.in);
|
|
System.exit(retCode);
|
}
|
|
/**
|
* Parses the provided command-line arguments and uses that information to
|
* run the java properties tool.
|
*
|
* @param args the command-line arguments provided to this program.
|
*
|
* @return The error code.
|
*/
|
|
public static int mainCLI(String[] args)
|
{
|
return mainCLI(args, System.out, System.err, System.in);
|
}
|
|
/**
|
* Parses the provided command-line arguments and uses that information to
|
* run the java properties tool.
|
*
|
* @param args The command-line arguments provided to this
|
* program.
|
* @param outStream The output stream to use for standard output, or
|
* <CODE>null</CODE> if standard output is not
|
* needed.
|
* @param errStream The output stream to use for standard error, or
|
* <CODE>null</CODE> if standard error is not
|
* needed.
|
* @param inStream The input stream to use for standard input.
|
* @return The error code.
|
*/
|
|
public static int mainCLI(String[] args, OutputStream outStream,
|
OutputStream errStream, InputStream inStream)
|
{
|
PrintStream out = NullOutputStream.wrapOrNullStream(outStream);
|
|
System.setProperty(Constants.CLI_JAVA_PROPERTY, "true");
|
|
PrintStream err = NullOutputStream.wrapOrNullStream(errStream);
|
|
JDKLogging.disableLogging();
|
|
JavaPropertiesTool tool = new JavaPropertiesTool(out, err, inStream);
|
|
return tool.execute(args);
|
}
|
|
/**
|
* Parses the provided command-line arguments and uses that information to
|
* run the java properties tool.
|
*
|
* @param args the command-line arguments provided to this program.
|
*
|
* @return the return code (SUCCESSFUL, USER_DATA_ERROR or BUG).
|
*/
|
public int execute(String[] args)
|
{
|
argParser = new JavaPropertiesToolArgumentParser(
|
JavaPropertiesTool.class.getName());
|
try
|
{
|
argParser.initializeArguments();
|
}
|
catch (ArgumentException ae)
|
{
|
LocalizableMessage message =
|
ToolMessages.ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
|
println(message);
|
return ErrorReturnCode.ERROR_UNEXPECTED.getReturnCode();
|
}
|
|
// Validate user provided data
|
try
|
{
|
argParser.parseArguments(args);
|
}
|
catch (ArgumentException ae)
|
{
|
LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
|
println(message);
|
println();
|
println(LocalizableMessage.raw(argParser.getUsage()));
|
|
return ErrorReturnCode.ERROR_USER_DATA.getReturnCode();
|
}
|
|
if (argParser.usageOrVersionDisplayed())
|
{
|
return ErrorReturnCode.SUCCESSFUL_NOP.getReturnCode();
|
}
|
|
Properties properties = new Properties();
|
BufferedReader reader;
|
String propertiesFile = argParser.propertiesFileArg.getValue();
|
try
|
{
|
reader = new BufferedReader(new FileReader(propertiesFile));
|
}
|
catch (FileNotFoundException fnfe)
|
{
|
println(ERR_JAVAPROPERTIES_WITH_PROPERTIES_FILE.get(propertiesFile));
|
return ErrorReturnCode.ERROR_USER_DATA.getReturnCode();
|
}
|
try
|
{
|
updateProperties(reader, properties);
|
}
|
catch (IOException ioe)
|
{
|
println(ERR_JAVAPROPERTIES_WITH_PROPERTIES_FILE.get(propertiesFile));
|
return ErrorReturnCode.ERROR_USER_DATA.getReturnCode();
|
}
|
|
String destinationFile = argParser.destinationFileArg.getValue();
|
|
BufferedWriter writer;
|
try
|
{
|
File f = new File(destinationFile);
|
writer = new BufferedWriter(new FileWriter(f));
|
f.setReadable(true, false);
|
}
|
catch (IOException ioe)
|
{
|
println(ERR_JAVAPROPERTIES_WITH_DESTINATION_FILE.get(destinationFile));
|
return ErrorReturnCode.ERROR_USER_DATA.getReturnCode();
|
}
|
|
Enumeration<?> propertyNames = properties.propertyNames();
|
|
boolean overwriteEnvJavaHome = true;
|
boolean overwriteEnvJavaArgs = true;
|
String defaultJavaHome = null;
|
String defaultJavaArgs = null;
|
|
while (propertyNames.hasMoreElements())
|
{
|
String name = propertyNames.nextElement().toString();
|
String value = properties.getProperty(name);
|
|
if (value != null)
|
{
|
if (name.equalsIgnoreCase(DEFAULT_JAVA_HOME_PROP_NAME))
|
{
|
defaultJavaHome = value;
|
}
|
else if (name.equalsIgnoreCase(DEFAULT_JAVA_ARGS_PROP_NAME))
|
{
|
defaultJavaArgs = value;
|
}
|
else if (name.equalsIgnoreCase(OVERWRITE_ENV_JAVA_HOME_PROP_NAME))
|
{
|
if ("false".equalsIgnoreCase(value))
|
{
|
overwriteEnvJavaHome = false;
|
}
|
}
|
else if (name.equalsIgnoreCase(OVERWRITE_ENV_JAVA_ARGS_PROP_NAME))
|
{
|
if ("false".equalsIgnoreCase(value))
|
{
|
overwriteEnvJavaArgs = false;
|
}
|
}
|
}
|
}
|
|
try
|
{
|
String value;
|
if (Utils.isWindows())
|
{
|
value = getWindowsContents(overwriteEnvJavaHome, overwriteEnvJavaArgs,
|
defaultJavaHome, defaultJavaArgs, properties);
|
}
|
else
|
{
|
value = getUnixContents(overwriteEnvJavaHome, overwriteEnvJavaArgs,
|
defaultJavaHome, defaultJavaArgs, properties);
|
}
|
|
writer.write(value);
|
writer.newLine();
|
writer.close();
|
}
|
catch (IOException ioe)
|
{
|
println(Utils.getThrowableMsg(
|
ERR_JAVAPROPERTIES_WRITING_DESTINATION_FILE.get(destinationFile),
|
ioe));
|
return ErrorReturnCode.ERROR_WRITING_FILE.getReturnCode();
|
}
|
|
// Add some information if we are not in quiet mode about
|
// what is going to happen.
|
File f1 = new File(argParser.destinationFileArg.getValue());
|
File f2 = new File(argParser.destinationFileArg.getDefaultValue());
|
if (f1.equals(f2))
|
{
|
print(INFO_JAVAPROPERTIES_SUCCESSFUL.get(
|
argParser.propertiesFileArg.getValue()));
|
}
|
else
|
{
|
print(INFO_JAVAPROPERTIES_SUCCESSFUL_NON_DEFAULT.get(
|
argParser.destinationFileArg.getValue(),
|
argParser.propertiesFileArg.getValue(),
|
argParser.destinationFileArg.getDefaultValue()));
|
}
|
println();
|
|
|
return ErrorReturnCode.SUCCESSFUL.getReturnCode();
|
}
|
|
/**
|
* Reads the contents of the provided reader and updates the provided
|
* Properties object with it. This is required because '\' characters in
|
* windows paths generates problems.
|
* @param reader the buffered reader.
|
* @param properties the properties.
|
* @throws IOException if there is an error reading the buffered reader.
|
*/
|
public static void updateProperties(
|
BufferedReader reader, Properties properties)
|
throws IOException
|
{
|
String line;
|
boolean slashInLastLine = false;
|
String key = null;
|
StringBuilder sbValue = null;
|
while ((line = reader.readLine()) != null)
|
{
|
line = line.trim();
|
if (!line.startsWith("#"))
|
{
|
if (!slashInLastLine)
|
{
|
key = null;
|
sbValue = new StringBuilder();
|
int index = line.indexOf('=');
|
if (index > 0)
|
{
|
key = line.substring(0, index);
|
if (key.indexOf(' ') != -1)
|
{
|
key = null;
|
}
|
}
|
}
|
|
// Consider the space: in windows the user might add a path ending
|
// with '\'. With this approach we minimize the possibilities of
|
// error.
|
boolean hasSlash = line.endsWith(" \\");
|
|
if (hasSlash)
|
{
|
line = line.substring(0, line.length() - 1);
|
}
|
|
String lineValue = null;
|
|
if (slashInLastLine)
|
{
|
lineValue = line;
|
}
|
else if (key != null)
|
{
|
int index = line.indexOf('=');
|
if ((index != -1) && ((index + 1) < line.length()))
|
{
|
lineValue = line.substring(index+1);
|
}
|
}
|
if ((lineValue != null) && (lineValue.length() > 0))
|
{
|
if (sbValue == null)
|
{
|
sbValue = new StringBuilder();
|
}
|
sbValue.append(lineValue);
|
}
|
if (!hasSlash && (key != null) && (sbValue != null))
|
{
|
properties.put(key, sbValue.toString());
|
}
|
slashInLastLine = hasSlash;
|
}
|
}
|
}
|
|
/**
|
* {@inheritDoc}
|
*/
|
@Override
|
public boolean isQuiet()
|
{
|
return argParser.quietArg.isPresent();
|
}
|
|
/**
|
* {@inheritDoc}
|
*/
|
@Override
|
public boolean isInteractive()
|
{
|
return false;
|
}
|
|
/**
|
* {@inheritDoc}
|
*/
|
@Override
|
public boolean isMenuDrivenMode() {
|
return true;
|
}
|
|
/**
|
* {@inheritDoc}
|
*/
|
@Override
|
public boolean isScriptFriendly() {
|
return false;
|
}
|
|
/**
|
* {@inheritDoc}
|
*/
|
@Override
|
public boolean isAdvancedMode() {
|
return false;
|
}
|
|
|
/**
|
* {@inheritDoc}
|
*/
|
@Override
|
public boolean isVerbose() {
|
return true;
|
}
|
|
private String getUnixContents(boolean overwriteJavaHome,
|
boolean overwriteJavaArgs, String defaultJavaHome, String defaultJavaArgs,
|
Properties properties)
|
{
|
StringBuilder buf = new StringBuilder();
|
buf.append("#!/bin/sh"+EOL+EOL);
|
|
if (!overwriteJavaHome)
|
{
|
buf.append(
|
"# See if the environment variables for java home are set"+EOL+
|
"# in the path and try to figure it out."+EOL+
|
"if test ! -f \"${OPENDJ_JAVA_BIN}\""+EOL+
|
"then"+EOL+
|
" if test ! -d \"${OPENDJ_JAVA_HOME}\""+EOL+
|
" then"+EOL+
|
" if test ! -f \"${OPENDS_JAVA_BIN}\""+EOL+
|
" then"+EOL+
|
" if test ! -d \"${OPENDS_JAVA_HOME}\""+EOL);
|
}
|
|
boolean propertiesAdded = false;
|
|
Enumeration<?> propertyNames = properties.propertyNames();
|
int nIfs = 0;
|
while (propertyNames.hasMoreElements())
|
{
|
String name = propertyNames.nextElement().toString();
|
String value = properties.getProperty(name);
|
|
if (value != null)
|
{
|
if (name.equalsIgnoreCase(DEFAULT_JAVA_HOME_PROP_NAME) ||
|
name.equalsIgnoreCase(DEFAULT_JAVA_ARGS_PROP_NAME) ||
|
name.equalsIgnoreCase(OVERWRITE_ENV_JAVA_HOME_PROP_NAME) ||
|
name.equalsIgnoreCase(OVERWRITE_ENV_JAVA_ARGS_PROP_NAME))
|
{
|
// Already handled
|
}
|
else if (name.endsWith(".java-home"))
|
{
|
propertiesAdded = true;
|
String s;
|
if (nIfs > 0)
|
{
|
if (!overwriteJavaHome)
|
{
|
s = " ";
|
}
|
else
|
{
|
s = "";
|
}
|
buf.append(
|
s+"elif test \"${SCRIPT_NAME}.java-home\" = \""+name+"\""+EOL);
|
}
|
else if (!overwriteJavaHome)
|
{
|
buf.append(
|
" then"+EOL+
|
" if test \"${SCRIPT_NAME}.java-home\" = \""+name+"\""+EOL);
|
s = " ";
|
}
|
else
|
{
|
buf.append(
|
"if test \"${SCRIPT_NAME}.java-home\" = \""+name+"\""+EOL);
|
s = "";
|
}
|
|
buf.append(
|
s+"then"+EOL+
|
s+" TEMP=\""+value+"/bin/java\""+EOL+
|
s+" if test -f \"${TEMP}\""+EOL+
|
s+" then"+EOL+
|
s+" OPENDJ_JAVA_BIN=\""+value+"/bin/java\""+EOL+
|
s+" export OPENDJ_JAVA_BIN"+EOL+
|
s+" fi"+EOL);
|
nIfs++;
|
}
|
}
|
}
|
if (defaultJavaHome != null)
|
{
|
if (propertiesAdded)
|
{
|
String s;
|
if (!overwriteJavaHome)
|
{
|
s = " ";
|
}
|
else
|
{
|
s = "";
|
}
|
buf.append(
|
s+"else"+EOL+
|
s+" OPENDJ_JAVA_BIN=\""+defaultJavaHome+"/bin/java\""+EOL+
|
s+" export OPENDJ_JAVA_BIN"+EOL);
|
}
|
else
|
{
|
if (!overwriteJavaHome)
|
{
|
buf.append(
|
" then"+EOL+
|
" TEMP=\""+defaultJavaHome+"/bin/java\""+EOL+
|
" if test -f \"${TEMP}\""+EOL+
|
" then"+EOL+
|
" OPENDJ_JAVA_BIN=\"${TEMP}\""+EOL+
|
" export OPENDJ_JAVA_BIN"+EOL+
|
" fi"+EOL);
|
}
|
else
|
{
|
buf.append(
|
"OPENDJ_JAVA_BIN=\""+defaultJavaHome+"/bin/java\""+EOL+
|
"export OPENDJ_JAVA_BIN"+EOL);
|
}
|
}
|
propertiesAdded = true;
|
}
|
|
if (nIfs > 0)
|
{
|
String s;
|
if (!overwriteJavaHome)
|
{
|
s = " ";
|
}
|
else
|
{
|
s = "";
|
}
|
buf.append(
|
s+"fi"+EOL);
|
}
|
|
|
if (!overwriteJavaHome)
|
{
|
if (!propertiesAdded)
|
{
|
// No properties added: this is required not to break the script
|
buf.append(
|
" then"+EOL+
|
" OPENDJ_JAVA_BIN=\"${OPENDJ_JAVA_BIN}\""+EOL);
|
}
|
buf.append(
|
" else"+EOL+
|
" OPENDJ_JAVA_BIN=\"${OPENDS_JAVA_HOME}/bin/java\""+EOL+
|
" export OPENDJ_JAVA_BIN"+EOL+
|
" fi"+EOL+
|
" else"+EOL+
|
" OPENDJ_JAVA_BIN=\"${OPENDS_JAVA_BIN}\""+EOL+
|
" export OPENDJ_JAVA_BIN"+EOL+
|
" fi"+EOL+
|
" else"+EOL+
|
" OPENDJ_JAVA_BIN=\"${OPENDJ_JAVA_HOME}/bin/java\""+EOL+
|
" export OPENDJ_JAVA_BIN"+EOL+
|
" fi"+EOL+
|
|
"fi"+EOL+EOL);
|
}
|
else if (defaultJavaHome == null)
|
{
|
buf.append(
|
EOL+
|
"if test ! -f \"${OPENDJ_JAVA_BIN}\""+EOL+
|
"then"+EOL+
|
" if test ! -d \"${OPENDJ_JAVA_HOME}\""+EOL+
|
" then"+EOL+
|
" if test ! -f \"${OPENDS_JAVA_BIN}\""+EOL+
|
" then"+EOL+
|
" if test ! -d \"${OPENDS_JAVA_HOME}\""+EOL+
|
" then"+EOL+
|
" if test ! -f \"${JAVA_BIN}\""+EOL+
|
" then"+EOL+
|
" if test ! -d \"${JAVA_HOME}\""+EOL+
|
" then"+EOL+
|
" OPENDJ_JAVA_BIN=`which java 2> /dev/null`"+EOL+
|
" if test ${?} -eq 0"+EOL+
|
" then"+EOL+
|
" export OPENDJ_JAVA_BIN"+EOL+
|
" else"+EOL+
|
" echo \"You must specify the path to a valid Java 6.0 "+
|
"or higher version in the\""+EOL+
|
" echo \"properties file and then run the "+
|
"dsjavaproperties tool. \""+EOL+
|
" echo \"The procedure to follow is:\""+EOL+
|
" echo \"You must specify the path to a valid Java 6.0 "+
|
"or higher version. The \""+EOL+
|
" echo \"procedure to follow is:\""+EOL+
|
" echo \"1. Delete the file "+
|
"${INSTANCE_ROOT}/lib/set-java-home\""+EOL+
|
" echo \"2. Set the environment variable "+
|
"OPENDJ_JAVA_HOME to the root of a valid \""+EOL+
|
" echo \"Java 6.0 installation.\""+EOL+
|
" echo \"If you want to have specificjava settings for"+
|
" each command line you must\""+EOL+
|
" echo \"follow the steps 3 and 4\""+EOL+
|
" echo \"3. Edit the properties file specifying the "+
|
"java binary and the java arguments\""+EOL+
|
" echo \"for each command line. The java properties "+
|
"file is located in:\""+EOL+
|
" echo \"${INSTANCE_ROOT}/config/java.properties.\""+EOL+
|
" echo \"4. Run the command-line "+
|
"${INSTANCE_ROOT}/bin/dsjavaproperties\""+EOL+
|
" exit 1"+EOL+
|
" fi"+EOL+
|
" else"+EOL+
|
" OPENDJ_JAVA_BIN=\"${JAVA_HOME}/bin/java\""+EOL+
|
" export OPENDJ_JAVA_BIN"+EOL+
|
" fi"+EOL+
|
" else"+EOL+
|
" OPENDJ_JAVA_BIN=\"${JAVA_BIN}\""+EOL+
|
" export OPENDJ_JAVA_BIN"+EOL+
|
" fi"+EOL+
|
" else"+EOL+
|
" OPENDJ_JAVA_BIN=\"${OPENDS_JAVA_HOME}/bin/java\""+EOL+
|
" export OPENDJ_JAVA_BIN"+EOL+
|
" fi"+EOL+
|
" else"+EOL+
|
" OPENDJ_JAVA_BIN=\"${OPENDS_JAVA_BIN}\""+EOL+
|
" export OPENDJ_JAVA_BIN"+EOL+
|
" fi"+EOL+
|
" else"+EOL+
|
" OPENDJ_JAVA_BIN=\"${OPENDJ_JAVA_HOME}/bin/java\""+EOL+
|
" export OPENDJ_JAVA_BIN"+EOL+
|
" fi"+EOL+
|
"fi"+EOL+EOL);
|
}
|
|
|
if (!overwriteJavaArgs)
|
{
|
buf.append(
|
EOL+
|
"# See if the environment variables for arguments are set."+EOL+
|
"if test -z \"${OPENDJ_JAVA_ARGS}\""+EOL+
|
"then"+EOL+
|
" if test -z \"${OPENDS_JAVA_ARGS}\""+EOL);
|
}
|
|
propertiesAdded = false;
|
|
propertyNames = properties.propertyNames();
|
nIfs = 0;
|
while (propertyNames.hasMoreElements())
|
{
|
String name = propertyNames.nextElement().toString();
|
String value = properties.getProperty(name);
|
|
String s = overwriteJavaArgs? "":" ";
|
|
if (value != null)
|
{
|
if (name.equalsIgnoreCase(DEFAULT_JAVA_HOME_PROP_NAME) ||
|
name.equalsIgnoreCase(DEFAULT_JAVA_ARGS_PROP_NAME) ||
|
name.equalsIgnoreCase(OVERWRITE_ENV_JAVA_HOME_PROP_NAME) ||
|
name.equalsIgnoreCase(OVERWRITE_ENV_JAVA_ARGS_PROP_NAME))
|
{
|
// Already handled
|
}
|
else if (name.endsWith(".java-args"))
|
{
|
propertiesAdded = true;
|
if (nIfs > 0)
|
{
|
buf.append(
|
s+" elif test \"${SCRIPT_NAME}.java-args\" = \""+name+"\""+EOL);
|
}
|
else if (!overwriteJavaArgs)
|
{
|
buf.append(
|
" then"+EOL+
|
" if test \"${SCRIPT_NAME}.java-args\" = \""+name+"\""+EOL);
|
}
|
else
|
{
|
buf.append(
|
" if test \"${SCRIPT_NAME}.java-args\" = \""+name+"\""+EOL);
|
}
|
buf.append(
|
s+" then"+EOL+
|
s+" OPENDJ_JAVA_ARGS=\""+value+"\""+EOL+
|
s+" export OPENDJ_JAVA_ARGS"+EOL);
|
nIfs++;
|
}
|
}
|
}
|
if (defaultJavaArgs != null)
|
{
|
String s = overwriteJavaArgs? "":" ";
|
if (propertiesAdded)
|
{
|
buf.append(
|
s+" else"+EOL+
|
s+" OPENDJ_JAVA_ARGS=\""+defaultJavaArgs+"\""+EOL+
|
s+" export OPENDJ_JAVA_ARGS"+EOL);
|
}
|
else
|
{
|
if (!overwriteJavaArgs)
|
{
|
buf.append(
|
" then"+EOL+
|
" OPENDJ_JAVA_ARGS=\""+defaultJavaArgs+"\""+EOL+
|
" export OPENDJ_JAVA_ARGS"+EOL);
|
}
|
else
|
{
|
buf.append(
|
EOL+
|
" OPENDJ_JAVA_ARGS=\""+defaultJavaArgs+"\""+EOL+
|
" export OPENDJ_JAVA_ARGS"+EOL);
|
}
|
}
|
propertiesAdded = true;
|
}
|
if (nIfs > 0)
|
{
|
String s = overwriteJavaArgs? "":" ";
|
buf.append(s+"fi"+EOL);
|
}
|
|
if (!overwriteJavaArgs)
|
{
|
if (!propertiesAdded)
|
{
|
// No properties added: this is required not to break the script
|
buf.append(
|
" then"+EOL+
|
" OPENDJ_JAVA_ARGS=${OPENDJ_JAVA_ARGS}"+EOL);
|
}
|
buf.append(
|
" else"+EOL+
|
" OPENDJ_JAVA_ARGS=${OPENDS_JAVA_ARGS}"+EOL+
|
" export OPENDJ_JAVA_ARGS"+EOL+
|
" fi"+EOL+
|
"fi"+EOL);
|
}
|
|
return buf.toString();
|
}
|
|
private String getWindowsContents(boolean overwriteJavaHome,
|
boolean overwriteJavaArgs, String defaultJavaHome, String defaultJavaArgs,
|
Properties properties)
|
{
|
StringBuilder buf = new StringBuilder();
|
|
String javaHomeLabel1;
|
String javaArgsLabel1;
|
String javaHomeLabel2;
|
String javaArgsLabel2;
|
|
final String CHECK_ENV_JAVA_HOME = "checkEnvJavaHome";
|
final String CHECK_ENV_JAVA_ARGS = "checkEnvJavaArgs";
|
final String CHECK_JAVA_HOME = "checkJavaHome";
|
final String CHECK_JAVA_ARGS = "checkJavaArgs";
|
final String CHECK_DEFAULT_JAVA_HOME = "checkDefaultJavaHome";
|
final String CHECK_DEFAULT_JAVA_ARGS = "checkDefaultJavaArgs";
|
final String LEGACY = "Legacy";
|
|
if (!overwriteJavaHome)
|
{
|
javaHomeLabel1 = CHECK_ENV_JAVA_HOME;
|
javaHomeLabel2 = CHECK_JAVA_HOME;
|
}
|
else
|
{
|
javaHomeLabel1 = CHECK_JAVA_HOME;
|
javaHomeLabel2 = CHECK_ENV_JAVA_HOME;
|
}
|
|
if (!overwriteJavaArgs)
|
{
|
javaArgsLabel1 = CHECK_ENV_JAVA_ARGS;
|
javaArgsLabel2 = CHECK_JAVA_ARGS;
|
}
|
else
|
{
|
javaArgsLabel1 = CHECK_JAVA_ARGS;
|
javaArgsLabel2 = CHECK_ENV_JAVA_ARGS;
|
}
|
|
buf.append("goto "+javaHomeLabel1+EOL+EOL);
|
|
buf.append(
|
":"+CHECK_ENV_JAVA_HOME+EOL+
|
"if \"%OPENDJ_JAVA_BIN%\" == \"\" goto checkEnvJavaHome"+LEGACY+EOL+
|
"if not exist \"%OPENDJ_JAVA_BIN%\" goto checkEnvJavaHome"+LEGACY+EOL+
|
"goto "+javaArgsLabel1+EOL+EOL+
|
":checkEnvJavaHome"+LEGACY+EOL+
|
"if \"%OPENDS_JAVA_BIN%\" == \"\" goto checkOpendjJavaHome"+EOL+
|
"if not exist \"%OPENDS_JAVA_BIN%\" goto checkOpendjJavaHome"+EOL+
|
"goto "+javaArgsLabel1+EOL+EOL+
|
":checkOpendjJavaHome"+EOL
|
);
|
|
if (javaHomeLabel1 == CHECK_ENV_JAVA_HOME)
|
{
|
buf.append(
|
"if \"%OPENDJ_JAVA_HOME%\" == \"\" goto "+javaHomeLabel2+LEGACY+EOL+
|
"set TEMP_EXE=%OPENDJ_JAVA_HOME%\\bin\\java.exe"+EOL+
|
"if not exist \"%TEMP_EXE%\" goto "+javaHomeLabel2+LEGACY+EOL+
|
"set OPENDJ_JAVA_BIN=%TEMP_EXE%"+EOL+
|
"goto "+javaArgsLabel1+EOL+EOL+
|
":"+javaHomeLabel2+LEGACY+EOL+
|
"if \"%OPENDS_JAVA_HOME%\" == \"\" goto "+javaHomeLabel2+EOL+
|
"set TEMP_EXE=%OPENDS_JAVA_HOME%\\bin\\java.exe"+EOL+
|
"if not exist \"%TEMP_EXE%\" goto "+javaHomeLabel2+EOL+
|
"set OPENDJ_JAVA_BIN=%TEMP_EXE%"+EOL+
|
"goto "+javaArgsLabel1+EOL+EOL
|
);
|
}
|
else
|
{
|
buf.append(
|
"if \"%OPENDJ_JAVA_HOME%\" == \"\" goto "+javaArgsLabel1+LEGACY+EOL+
|
"set TEMP_EXE=%OPENDJ_JAVA_HOME%\\bin\\java.exe"+EOL+
|
"if not exist \"%TEMP_EXE%\" goto "+javaArgsLabel1+LEGACY+EOL+
|
"set OPENDJ_JAVA_BIN=%TEMP_EXE%"+EOL+
|
"goto "+javaArgsLabel1+EOL+EOL+
|
":"+javaArgsLabel1+LEGACY+EOL+
|
"if \"%OPENDS_JAVA_HOME%\" == \"\" goto "+javaArgsLabel1+EOL+
|
"set TEMP_EXE=%OPENDS_JAVA_HOME%\\bin\\java.exe"+EOL+
|
"if not exist \"%TEMP_EXE%\" goto "+javaArgsLabel1+EOL+
|
"set OPENDJ_JAVA_BIN=%TEMP_EXE%"+EOL+
|
"goto "+javaArgsLabel1+EOL+EOL
|
);
|
}
|
|
if (defaultJavaHome != null)
|
{
|
if (javaHomeLabel1 == CHECK_ENV_JAVA_HOME)
|
{
|
buf.append(
|
":"+CHECK_DEFAULT_JAVA_HOME+EOL+
|
"set TEMP_EXE="+defaultJavaHome+"\\bin\\java.exe"+EOL+
|
"if not exist \"%TEMP_EXE%\" goto "+javaArgsLabel1+EOL+
|
"set OPENDJ_JAVA_BIN=%TEMP_EXE%"+EOL+
|
"goto "+javaArgsLabel1+EOL+EOL
|
);
|
}
|
else
|
{
|
buf.append(
|
":"+CHECK_DEFAULT_JAVA_HOME+EOL+
|
"set TEMP_EXE="+defaultJavaHome+"\\bin\\java.exe"+EOL+
|
"if not exist \"%TEMP_EXE%\" goto "+CHECK_ENV_JAVA_HOME+EOL+
|
"set OPENDJ_JAVA_BIN=%TEMP_EXE%"+EOL+
|
"goto "+javaArgsLabel1+EOL+EOL
|
);
|
}
|
}
|
|
buf.append(
|
":"+CHECK_JAVA_HOME+EOL);
|
Enumeration<?> propertyNames = properties.propertyNames();
|
while (propertyNames.hasMoreElements())
|
{
|
String name = propertyNames.nextElement().toString();
|
if (name.equalsIgnoreCase(DEFAULT_JAVA_HOME_PROP_NAME) ||
|
name.equalsIgnoreCase(DEFAULT_JAVA_ARGS_PROP_NAME) ||
|
name.equalsIgnoreCase(OVERWRITE_ENV_JAVA_HOME_PROP_NAME) ||
|
name.equalsIgnoreCase(OVERWRITE_ENV_JAVA_ARGS_PROP_NAME))
|
{
|
// Already handled
|
}
|
else if (name.endsWith(".java-home"))
|
{
|
String scriptName = name.substring(0,
|
name.length() - ".java-home".length());
|
buf.append(
|
"if \"%SCRIPT_NAME%.java-home\" == \""+name+"\" goto check"+
|
scriptName+"JavaHome"+EOL);
|
}
|
}
|
if (defaultJavaHome != null)
|
{
|
buf.append("goto "+CHECK_DEFAULT_JAVA_HOME+EOL+EOL);
|
}
|
else if (javaHomeLabel1 != CHECK_ENV_JAVA_HOME)
|
{
|
buf.append("goto "+CHECK_ENV_JAVA_HOME+EOL+EOL);
|
}
|
else
|
{
|
buf.append("goto "+javaArgsLabel1+EOL+EOL);
|
}
|
|
propertyNames = properties.propertyNames();
|
while (propertyNames.hasMoreElements())
|
{
|
String name = propertyNames.nextElement().toString();
|
String value = properties.getProperty(name);
|
if (name.equalsIgnoreCase(DEFAULT_JAVA_HOME_PROP_NAME) ||
|
name.equalsIgnoreCase(DEFAULT_JAVA_ARGS_PROP_NAME) ||
|
name.equalsIgnoreCase(OVERWRITE_ENV_JAVA_HOME_PROP_NAME) ||
|
name.equalsIgnoreCase(OVERWRITE_ENV_JAVA_ARGS_PROP_NAME))
|
{
|
// Already handled
|
}
|
else if (name.endsWith(".java-home"))
|
{
|
String scriptName = name.substring(0,
|
name.length() - ".java-home".length());
|
buf.append(
|
":check"+scriptName+"JavaHome"+EOL+
|
"set TEMP_EXE="+value+"\\bin\\java.exe"+EOL);
|
if (defaultJavaHome != null)
|
{
|
buf.append(
|
"if not exist \"%TEMP_EXE%\" goto "+CHECK_DEFAULT_JAVA_HOME+EOL);
|
}
|
else if (javaHomeLabel1 != CHECK_ENV_JAVA_HOME)
|
{
|
buf.append(
|
"if not exist \"%TEMP_EXE%\" goto "+CHECK_ENV_JAVA_HOME+EOL);
|
}
|
buf.append(
|
"set OPENDJ_JAVA_BIN=%TEMP_EXE%"+EOL+
|
"goto "+javaArgsLabel1+EOL+EOL);
|
}
|
}
|
|
buf.append(
|
":"+CHECK_ENV_JAVA_ARGS+EOL);
|
if (javaArgsLabel1 == CHECK_ENV_JAVA_ARGS)
|
{
|
buf.append(
|
"if \"%OPENDJ_JAVA_ARGS%\" == \"\" goto "+javaArgsLabel2+LEGACY+EOL+
|
"goto end"+EOL+EOL+
|
":"+javaArgsLabel2+LEGACY+EOL+
|
"if \"%OPENDS_JAVA_ARGS%\" == \"\" goto "+javaArgsLabel2+EOL+
|
"set OPENDJ_JAVA_ARGS=%OPENDS_JAVA_ARGS%"+EOL+
|
"goto end"+EOL+EOL);
|
}
|
else
|
{
|
buf.append(
|
"goto end"+EOL+EOL);
|
}
|
|
if (defaultJavaArgs != null)
|
{
|
buf.append(
|
":"+CHECK_DEFAULT_JAVA_ARGS+EOL+
|
"set OPENDJ_JAVA_ARGS="+defaultJavaArgs+EOL+
|
"goto end"+EOL+EOL);
|
}
|
|
buf.append(
|
":"+CHECK_JAVA_ARGS+EOL);
|
propertyNames = properties.propertyNames();
|
while (propertyNames.hasMoreElements())
|
{
|
String name = propertyNames.nextElement().toString();
|
if (name.equalsIgnoreCase(DEFAULT_JAVA_HOME_PROP_NAME) ||
|
name.equalsIgnoreCase(DEFAULT_JAVA_ARGS_PROP_NAME) ||
|
name.equalsIgnoreCase(OVERWRITE_ENV_JAVA_HOME_PROP_NAME) ||
|
name.equalsIgnoreCase(OVERWRITE_ENV_JAVA_ARGS_PROP_NAME))
|
{
|
// Already handled
|
}
|
else if (name.endsWith(".java-args"))
|
{
|
String scriptName = name.substring(0,
|
name.length() - ".java-args".length());
|
buf.append(
|
"if \"%SCRIPT_NAME%.java-args\" == \""+name+"\" goto check"+
|
scriptName+"JavaArgs"+EOL);
|
}
|
}
|
if (defaultJavaArgs != null)
|
{
|
buf.append("goto "+CHECK_DEFAULT_JAVA_ARGS+EOL+EOL);
|
}
|
else if (javaArgsLabel1 != CHECK_ENV_JAVA_ARGS)
|
{
|
buf.append("goto "+CHECK_ENV_JAVA_ARGS+EOL+EOL);
|
}
|
else
|
{
|
buf.append("goto end"+EOL+EOL);
|
}
|
|
propertyNames = properties.propertyNames();
|
while (propertyNames.hasMoreElements())
|
{
|
String name = propertyNames.nextElement().toString();
|
String value = properties.getProperty(name);
|
if (name.equalsIgnoreCase(DEFAULT_JAVA_HOME_PROP_NAME) ||
|
name.equalsIgnoreCase(DEFAULT_JAVA_ARGS_PROP_NAME) ||
|
name.equalsIgnoreCase(OVERWRITE_ENV_JAVA_HOME_PROP_NAME) ||
|
name.equalsIgnoreCase(OVERWRITE_ENV_JAVA_ARGS_PROP_NAME))
|
{
|
// Already handled
|
}
|
else if (name.endsWith(".java-args"))
|
{
|
String scriptName = name.substring(0,
|
name.length() - ".java-args".length());
|
buf.append(
|
":check"+scriptName+"JavaArgs"+EOL+
|
"set OPENDJ_JAVA_ARGS="+value+EOL+
|
"goto end"+EOL+EOL);
|
}
|
}
|
|
buf.append(":end"+EOL);
|
|
return buf.toString();
|
}
|
}
|