/*
* 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
* trunk/opends/resource/legal-notices/OpenDS.LICENSE
* or https://OpenDS.dev.java.net/OpenDS.LICENSE.
* 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
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. 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 2007-2010 Sun Microsystems, Inc.
*/
package org.opends.server.tools;
import static org.opends.messages.ToolMessages.*;
import static org.opends.server.tools.ToolConstants.*;
import java.io.File;
import java.util.LinkedHashSet;
import org.opends.messages.Message;
import org.opends.quicksetup.Constants;
import org.opends.quicksetup.Installation;
import org.opends.quicksetup.util.Utils;
import org.opends.server.util.args.ArgumentException;
import org.opends.server.util.args.ArgumentParser;
import org.opends.server.util.args.BooleanArgument;
import org.opends.server.util.args.StringArgument;
/**
* Class used to parse the arguments of the java properties tool command-line.
*/
public class JavaPropertiesToolArgumentParser extends ArgumentParser
{
// Usage argument
BooleanArgument showUsageArg;
// Quiet argument
BooleanArgument quietArg;
// The file containing the properties
StringArgument propertiesFileArg;
// The file that is generated
StringArgument destinationFileArg;
/**
* The default constructor for this class.
* @param mainClassName the class name of the main class for the command-line
* that is being used.
*/
public JavaPropertiesToolArgumentParser(String mainClassName)
{
super(mainClassName,
INFO_JAVAPROPERTIES_TOOL_DESCRIPTION.get(getDefaultPropertiesValue()),
false);
}
/**
* Initializes the arguments without parsing them.
* @throws ArgumentException if there was an error creating or adding the
* arguments. If this occurs is likely to be a bug.
*/
public void initializeArguments() throws ArgumentException
{
quietArg = new BooleanArgument(
"quiet", OPTION_SHORT_QUIET,
OPTION_LONG_QUIET,
INFO_JAVAPROPERTIES_DESCRIPTION_SILENT.get());
quietArg.setPropertyName(OPTION_LONG_QUIET);
addArgument(quietArg);
propertiesFileArg = new StringArgument("propertiesFile",
'p', "propertiesFile", false,
false, true, INFO_PATH_PLACEHOLDER.get(), getDefaultPropertiesValue(),
"propertiesFile",
INFO_JAVAPROPERTIES_DESCRIPTION_PROPERTIES_FILE.get(
getDefaultPropertiesValue()));
propertiesFileArg.setHidden(true);
addArgument(propertiesFileArg);
destinationFileArg = new StringArgument("destinationFile",
'd', "destinationFile", false,
false, true, INFO_PATH_PLACEHOLDER.get(), getDefaultDestinationValue(),
"destinationFile",
INFO_JAVAPROPERTIES_DESCRIPTION_DESTINATION_FILE.get(
getDefaultDestinationValue()));
destinationFileArg.setHidden(true);
addArgument(destinationFileArg);
showUsageArg = new BooleanArgument("help", OPTION_SHORT_HELP,
OPTION_LONG_HELP,
INFO_JAVAPROPERTIES_DESCRIPTION_HELP.get());
addArgument(showUsageArg);
setUsageArgument(showUsageArg);
}
/**
* {@inheritDoc}
*/
@Override()
public void parseArguments(String[] args) throws ArgumentException
{
LinkedHashSet<Message> errorMessages = new LinkedHashSet<Message>();
try
{
super.parseArguments(args);
}
catch (ArgumentException ae)
{
errorMessages.add(ae.getMessageObject());
}
if (!isUsageArgumentPresent() && !isVersionArgumentPresent())
{
String value = propertiesFileArg.getValue();
if (value != null)
{
File f = new File(value);
if (!f.exists() || !f.isFile() || !f.canRead())
{
errorMessages.add(ERR_JAVAPROPERTIES_WITH_PROPERTIES_FILE.get(value));
}
}
value = destinationFileArg.getValue();
if (value != null)
{
File f = new File(value);
if (f.isDirectory() || !Utils.canWrite(value))
{
errorMessages.add(
ERR_JAVAPROPERTIES_WITH_DESTINATION_FILE.get(value));
}
}
if (errorMessages.size() > 0)
{
Message message = ERR_CANNOT_INITIALIZE_ARGS.get(
Utils.getMessageFromCollection(errorMessages,
Constants.LINE_SEPARATOR));
throw new ArgumentException(message);
}
}
}
/**
* Returns the default destination file by inspecting the class loader.
* @return the default destination file retrieved by inspecting the class
* loader.
*/
private String getDefaultDestinationValue()
{
String value;
// Use this instead of Installation.getLocal() because making that call
// starts a new JVM and the command-line becomes less responsive.
String installPath = Utils.getInstallPathFromClasspath();
String root = Utils.getInstancePathFromInstallPath(installPath);
if (root != null)
{
String libDir = Utils.getPath(root, Installation.LIBRARIES_PATH_RELATIVE);
if (Utils.isWindows())
{
value = Utils.getPath(libDir,
Installation.SET_JAVA_PROPERTIES_FILE_WINDOWS);
}
else
{
value = Utils.getPath(libDir,
Installation.SET_JAVA_PROPERTIES_FILE_UNIX);
}
}
else
{
// This can happen when we are not launched using the command-line (for
// instance from the WebInstaller).
if (Utils.isWindows())
{
value = Utils.getPath(Installation.LIBRARIES_PATH_RELATIVE,
Installation.SET_JAVA_PROPERTIES_FILE_WINDOWS);
}
else
{
value = Utils.getPath(Installation.LIBRARIES_PATH_RELATIVE,
Installation.SET_JAVA_PROPERTIES_FILE_UNIX);
}
}
return value;
}
/**
* Returns the default java properties file by inspecting the class loader.
* @return the default java properties file retrieved by inspecting the class
* loader.
*/
private static String getDefaultPropertiesValue()
{
String defaultPropertiesValue;
// Use this instead of Installation.getLocal() because making that call
// starts a new JVM and the command-line becomes less responsive.
String installPath = Utils.getInstallPathFromClasspath();
String root = Utils.getInstancePathFromInstallPath(installPath);
if (root != null)
{
String configDir = Utils.getPath(root, Installation.CONFIG_PATH_RELATIVE);
defaultPropertiesValue = Utils.getPath(configDir,
Installation.DEFAULT_JAVA_PROPERTIES_FILE);
}
else
{
// This can happen when we are not launched using the command-line (for
// instance from the WebInstaller).
defaultPropertiesValue = Installation.DEFAULT_JAVA_PROPERTIES_FILE;
}
return defaultPropertiesValue;
}
}