/*
* 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-2013 ForgeRock AS
*/
package org.opends.server.tools;
import static org.opends.messages.ToolMessages.*;
import static org.opends.server.util.ServerConstants.EOL;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.Enumeration;
import java.util.Properties;
import org.opends.messages.Message;
import org.opends.messages.ToolMessages;
import org.opends.quicksetup.Constants;
import org.opends.quicksetup.util.Utils;
import org.opends.server.types.NullOutputStream;
import org.opends.server.util.args.ArgumentException;
import org.opends.server.util.cli.ConsoleApplication;
/**
* 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);
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(in, 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);
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)
{
Message 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)
{
Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
println(message);
println();
println(Message.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))
{
printProgress(INFO_JAVAPROPERTIES_SUCCESSFUL.get(
argParser.propertiesFileArg.getValue()));
}
else
{
printProgress(INFO_JAVAPROPERTIES_SUCCESSFUL_NON_DEFAULT.get(
argParser.destinationFileArg.getValue(),
argParser.propertiesFileArg.getValue(),
argParser.destinationFileArg.getDefaultValue()));
}
printlnProgress();
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}
*/
public boolean isQuiet()
{
return argParser.quietArg.isPresent();
}
/**
* {@inheritDoc}
*/
public boolean isInteractive()
{
return false;
}
/**
* {@inheritDoc}
*/
@Override
public boolean isMenuDrivenMode() {
return true;
}
/**
* {@inheritDoc}
*/
public boolean isScriptFriendly() {
return false;
}
/**
* {@inheritDoc}
*/
public boolean isAdvancedMode() {
return false;
}
/**
* {@inheritDoc}
*/
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();
}
}