X-Git-Url: http://git.phpeclipse.com
diff --git a/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/model/ToolUtil.java b/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/model/ToolUtil.java
index 13d90a6..88002f5 100644
--- a/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/model/ToolUtil.java
+++ b/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/model/ToolUtil.java
@@ -1,13 +1,13 @@
package net.sourceforge.phpdt.externaltools.model;
/**********************************************************************
-Copyright (c) 2002 IBM Corp. and others. All rights reserved.
-This file is made available under the terms of the Common Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/cpl-v10.html
-�
-Contributors:
-**********************************************************************/
+ Copyright (c) 2002 IBM Corp. and others. All rights reserved.
+ This file is made available under the terms of the Common Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/cpl-v10.html
+ �
+ Contributors:
+ **********************************************************************/
import java.util.ArrayList;
@@ -30,16 +30,22 @@ public final class ToolUtil {
* Argument parsing constants
*/
private static final char ARG_DELIMITER = ' '; //$NON-NLS-1$
+
private static final char ARG_DBL_QUOTE = '"'; //$NON-NLS-1$
-
+
/**
* Variable tag indentifiers
*/
private static final char VAR_TAG_START_CHAR1 = '$'; //$NON-NLS-1$
+
private static final char VAR_TAG_START_CHAR2 = '{'; //$NON-NLS-1$
+
private static final char VAR_TAG_END_CHAR1 = '}'; //$NON-NLS-1$
+
private static final String VAR_TAG_START = "${"; //$NON-NLS-1$
+
private static final String VAR_TAG_END = "}"; //$NON-NLS-1$
+
private static final String VAR_TAG_SEP = ":"; //$NON-NLS-1$
/**
@@ -50,27 +56,35 @@ public final class ToolUtil {
}
/**
- * Builds a variable tag that will be auto-expanded before
- * the tool is run.
+ * Builds a variable tag that will be auto-expanded before the tool is run.
*
- * @param varName the name of a known variable (one of the VAR_* constants for instance)
- * @param varArgument an optional argument for the variable, null
if none
+ * @param varName
+ * the name of a known variable (one of the VAR_* constants for
+ * instance)
+ * @param varArgument
+ * an optional argument for the variable, null
if
+ * none
*/
public static String buildVariableTag(String varName, String varArgument) {
StringBuffer buf = new StringBuffer();
- buildVariableTag(varName,varArgument, buf);
+ buildVariableTag(varName, varArgument, buf);
return buf.toString();
}
-
+
/**
- * Builds a variable tag that will be auto-expanded before
- * the tool is run.
+ * Builds a variable tag that will be auto-expanded before the tool is run.
*
- * @param varName the name of a known variable (one of the VAR_* constants for instance)
- * @param varArgument an optional argument for the variable, null
if none
- * @param buffer the buffer to write the constructed variable tag
+ * @param varName
+ * the name of a known variable (one of the VAR_* constants for
+ * instance)
+ * @param varArgument
+ * an optional argument for the variable, null
if
+ * none
+ * @param buffer
+ * the buffer to write the constructed variable tag
*/
- public static void buildVariableTag(String varName, String varArgument, StringBuffer buffer) {
+ public static void buildVariableTag(String varName, String varArgument,
+ StringBuffer buffer) {
buffer.append(VAR_TAG_START);
buffer.append(varName);
if (varArgument != null && varArgument.length() > 0) {
@@ -79,23 +93,27 @@ public final class ToolUtil {
}
buffer.append(VAR_TAG_END);
}
-
+
/**
- * Expands all the variables found in an individual
- * argument text.
+ * Expands all the variables found in an individual argument text.
*
- * @param argument one of the argument text in the list of arguments
- * @param context the context to use for expanding variables
- * @param status multi status to report any problems expanding variables
- * @return the argument text with all variables expanded, or null
if not possible
+ * @param argument
+ * one of the argument text in the list of arguments
+ * @param context
+ * the context to use for expanding variables
+ * @param status
+ * multi status to report any problems expanding variables
+ * @return the argument text with all variables expanded, or
+ * null
if not possible
*/
- public static String expandArgument(String argument, ExpandVariableContext context, MultiStatus status) {
+ public static String expandArgument(String argument,
+ ExpandVariableContext context, MultiStatus status) {
StringBuffer buffer = new StringBuffer();
-
+
int start = 0;
while (true) {
VariableDefinition varDef = extractVariableTag(argument, start);
-
+
// No more variables found...
if (varDef.start == -1) {
if (start == 0)
@@ -106,74 +124,92 @@ public final class ToolUtil {
}
// Invalid variable format
- if (varDef.end == -1 || varDef.name == null || varDef.name.length() == 0) {
- String msg = ExternalToolsModelMessages.getString("ToolUtil.argumentVarFormatWrong"); //$NON-NLS-1$
+ if (varDef.end == -1 || varDef.name == null
+ || varDef.name.length() == 0) {
+ String msg = ExternalToolsModelMessages
+ .getString("ToolUtil.argumentVarFormatWrong"); //$NON-NLS-1$
status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
return null;
}
- // Copy text between start and variable.
+ // Copy text between start and variable.
if (varDef.start > start)
buffer.append(argument.substring(start, varDef.start));
start = varDef.end;
-
+
// Lookup the variable if it exist
ArgumentVariableRegistry registry;
- registry = ExternalToolsPlugin.getDefault().getArgumentVariableRegistry();
- ArgumentVariable variable = registry.getArgumentVariable(varDef.name);
+ registry = ExternalToolsPlugin.getDefault()
+ .getArgumentVariableRegistry();
+ ArgumentVariable variable = registry
+ .getArgumentVariable(varDef.name);
if (variable == null) {
- String msg = ExternalToolsModelMessages.format("ToolUtil.argumentVarMissing", new Object[] {varDef.name}); //$NON-NLS-1$
+ String msg = ExternalToolsModelMessages
+ .format(
+ "ToolUtil.argumentVarMissing", new Object[] { varDef.name }); //$NON-NLS-1$
status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
return null;
}
-
+
// Expand the variable as text if possible
- String text = variable.getExpander().getText(varDef.name, varDef.argument, context);
+ String text = variable.getExpander().getText(varDef.name,
+ varDef.argument, context);
if (text == null) {
- String msg = ExternalToolsModelMessages.format("ToolUtil.argumentVarExpandFailed", new Object[] {varDef.name}); //$NON-NLS-1$
+ String msg = ExternalToolsModelMessages
+ .format(
+ "ToolUtil.argumentVarExpandFailed", new Object[] { varDef.name }); //$NON-NLS-1$
status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
return null;
}
buffer.append(text);
}
-
+
return buffer.toString();
}
-
+
/**
- * Returns a list of individual arguments where all
- * variables have been expanded.
+ * Returns a list of individual arguments where all variables have been
+ * expanded.
*
- * @param arguments the arguments with leading and trailing
- * spaces already removed.
- * @param context the context used to expand the variable(s)
- * @param status multi status to report any problems expanding variables
- * @return the list of individual arguments where some elements in the
- * list maybe null
if problems expanding variable(s).
+ * @param arguments
+ * the arguments with leading and trailing spaces already
+ * removed.
+ * @param context
+ * the context used to expand the variable(s)
+ * @param status
+ * multi status to report any problems expanding variables
+ * @return the list of individual arguments where some elements in the list
+ * maybe null
if problems expanding variable(s).
*/
- public static String[] expandArguments(String arguments, ExpandVariableContext context, MultiStatus status) {
+ public static String[] expandArguments(String arguments,
+ ExpandVariableContext context, MultiStatus status) {
if (arguments == null || arguments.length() == 0)
return new String[0];
String[] argList = parseArgumentsIntoList(arguments);
for (int i = 0; i < argList.length; i++)
argList[i] = expandArgument(argList[i], context, status);
-
+
return argList;
}
-
+
/**
- * Returns the expanded directory location if represented by a
- * directory variable. Otherwise, the directory location given is
- * return unless an unknown variable was detected.
+ * Returns the expanded directory location if represented by a directory
+ * variable. Otherwise, the directory location given is return unless an
+ * unknown variable was detected.
*
- * @param dirLocation a directory location either as a path or a variable
- * with leading and trailing spaces already removed.
- * @param context the context used to expand the variable
- * @param status multi status to report any problems expanding variables
- * @return the directory location as a string or null
if not possible
+ * @param dirLocation
+ * a directory location either as a path or a variable with
+ * leading and trailing spaces already removed.
+ * @param context
+ * the context used to expand the variable
+ * @param status
+ * multi status to report any problems expanding variables
+ * @return the directory location as a string or null
if not
+ * possible
*/
- public static String expandDirectoryLocation(String dirLocation, ExpandVariableContext context, MultiStatus status) {
+ public static String expandDirectoryLocation(String dirLocation,
+ ExpandVariableContext context, MultiStatus status) {
if (dirLocation == null || dirLocation.length() == 0)
return ""; //$NON-NLS-1$
@@ -181,54 +217,69 @@ public final class ToolUtil {
// Return if no variable found
if (varDef.start < 0)
return dirLocation;
-
+
// Disallow text before/after variable
- if (varDef.start != 0 || (varDef.end < dirLocation.length() && varDef.end != -1)) {
- String msg = ExternalToolsModelMessages.getString("ToolUtil.dirLocVarBetweenText"); //$NON-NLS-1$
+ if (varDef.start != 0
+ || (varDef.end < dirLocation.length() && varDef.end != -1)) {
+ String msg = ExternalToolsModelMessages
+ .getString("ToolUtil.dirLocVarBetweenText"); //$NON-NLS-1$
status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
return null;
}
-
+
// Invalid variable format
- if (varDef.name == null || varDef.name.length() == 0 || varDef.end == -1) {
- String msg = ExternalToolsModelMessages.getString("ToolUtil.dirLocVarFormatWrong"); //$NON-NLS-1$
+ if (varDef.name == null || varDef.name.length() == 0
+ || varDef.end == -1) {
+ String msg = ExternalToolsModelMessages
+ .getString("ToolUtil.dirLocVarFormatWrong"); //$NON-NLS-1$
status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
return null;
}
-
+
// Lookup the variable if it exist
PathLocationVariableRegistry registry;
- registry = ExternalToolsPlugin.getDefault().getDirectoryLocationVariableRegistry();
- PathLocationVariable variable = registry.getPathLocationVariable(varDef.name);
+ registry = ExternalToolsPlugin.getDefault()
+ .getDirectoryLocationVariableRegistry();
+ PathLocationVariable variable = registry
+ .getPathLocationVariable(varDef.name);
if (variable == null) {
- String msg = ExternalToolsModelMessages.format("ToolUtil.dirLocVarMissing", new Object[] {varDef.name}); //$NON-NLS-1$
+ String msg = ExternalToolsModelMessages.format(
+ "ToolUtil.dirLocVarMissing", new Object[] { varDef.name }); //$NON-NLS-1$
status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
return null;
}
-
+
// Expand the variable into a IPath if possible
- IPath path = variable.getExpander().getPath(varDef.name, varDef.argument, context);
+ IPath path = variable.getExpander().getPath(varDef.name,
+ varDef.argument, context);
if (path == null) {
- String msg = ExternalToolsModelMessages.format("ToolUtil.dirLocVarExpandFailed", new Object[] {varDef.name}); //$NON-NLS-1$
+ String msg = ExternalToolsModelMessages
+ .format(
+ "ToolUtil.dirLocVarExpandFailed", new Object[] { varDef.name }); //$NON-NLS-1$
status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
return null;
}
-
+
return path.toOSString();
}
-
+
/**
- * Returns the expanded file location if represented by a
- * file variable. Otherwise, the file location given is
- * return unless an unknown variable was detected.
+ * Returns the expanded file location if represented by a file variable.
+ * Otherwise, the file location given is return unless an unknown variable
+ * was detected.
*
- * @param fileLocation a file location either as a path or a variable
- * with leading and trailing spaces already removed.
- * @param context the context used to expand the variable
- * @param status multi status to report any problems expanding variables
- * @return the file location as a string or null
if not possible
+ * @param fileLocation
+ * a file location either as a path or a variable with leading
+ * and trailing spaces already removed.
+ * @param context
+ * the context used to expand the variable
+ * @param status
+ * multi status to report any problems expanding variables
+ * @return the file location as a string or null
if not
+ * possible
*/
- public static String expandFileLocation(String fileLocation, ExpandVariableContext context, MultiStatus status) {
+ public static String expandFileLocation(String fileLocation,
+ ExpandVariableContext context, MultiStatus status) {
if (fileLocation == null || fileLocation.length() == 0)
return ""; //$NON-NLS-1$
@@ -236,65 +287,77 @@ public final class ToolUtil {
// Return if no variable found
if (varDef.start < 0)
return fileLocation;
-
+
// Disallow text before/after variable
- if (varDef.start != 0 || (varDef.end < fileLocation.length() && varDef.end != -1)) {
- String msg = ExternalToolsModelMessages.getString("ToolUtil.fileLocVarBetweenText"); //$NON-NLS-1$
+ if (varDef.start != 0
+ || (varDef.end < fileLocation.length() && varDef.end != -1)) {
+ String msg = ExternalToolsModelMessages
+ .getString("ToolUtil.fileLocVarBetweenText"); //$NON-NLS-1$
status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
return null;
}
-
+
// Invalid variable format
- if (varDef.name == null || varDef.name.length() == 0 || varDef.end == -1) {
- String msg = ExternalToolsModelMessages.getString("ToolUtil.fileLocVarFormatWrong"); //$NON-NLS-1$
+ if (varDef.name == null || varDef.name.length() == 0
+ || varDef.end == -1) {
+ String msg = ExternalToolsModelMessages
+ .getString("ToolUtil.fileLocVarFormatWrong"); //$NON-NLS-1$
status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
return null;
}
-
+
// Lookup the variable if it exist
PathLocationVariableRegistry registry;
- registry = ExternalToolsPlugin.getDefault().getFileLocationVariableRegistry();
- PathLocationVariable variable = registry.getPathLocationVariable(varDef.name);
+ registry = ExternalToolsPlugin.getDefault()
+ .getFileLocationVariableRegistry();
+ PathLocationVariable variable = registry
+ .getPathLocationVariable(varDef.name);
if (variable == null) {
- String msg = ExternalToolsModelMessages.format("ToolUtil.fileLocVarMissing", new Object[] {varDef.name}); //$NON-NLS-1$
+ String msg = ExternalToolsModelMessages.format(
+ "ToolUtil.fileLocVarMissing", new Object[] { varDef.name }); //$NON-NLS-1$
status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
return null;
}
-
+
// Expand the variable into a IPath if possible
- IPath path = variable.getExpander().getPath(varDef.name, varDef.argument, context);
+ IPath path = variable.getExpander().getPath(varDef.name,
+ varDef.argument, context);
if (path == null) {
- String msg = ExternalToolsModelMessages.format("The variable {0} with argument {1} could not be expanded to a valid path.", new Object[] {varDef.name, varDef.argument});
+ String msg = ExternalToolsModelMessages
+ .format(
+ "The variable {0} with argument {1} could not be expanded to a valid path.",
+ new Object[] { varDef.name, varDef.argument });
status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
return null;
}
-
+
return path.toString();
}
-
+
/**
- * Extracts from the source text the variable tag's name
- * and argument.
+ * Extracts from the source text the variable tag's name and argument.
*
- * @param text the source text to parse for a variable tag
- * @param start the index in the string to start the search
+ * @param text
+ * the source text to parse for a variable tag
+ * @param start
+ * the index in the string to start the search
* @return the variable definition
*/
public static VariableDefinition extractVariableTag(String text, int start) {
VariableDefinition varDef = new VariableDefinition();
-
+
varDef.start = text.indexOf(VAR_TAG_START, start);
if (varDef.start < 0)
return varDef;
start = varDef.start + VAR_TAG_START.length();
-
+
int end = text.indexOf(VAR_TAG_END, start);
if (end < 0)
return varDef;
varDef.end = end + VAR_TAG_END.length();
if (end == start)
return varDef;
-
+
int mid = text.indexOf(VAR_TAG_SEP, start);
if (mid < 0 || mid > end) {
varDef.name = text.substring(start, end);
@@ -305,140 +368,135 @@ public final class ToolUtil {
if (mid < end)
varDef.argument = text.substring(mid, end);
}
-
+
return varDef;
}
-
+
/**
- * Parses the argument text into an array of individual
- * arguments using the space character as the delimiter.
- * An individual argument containing spaces must have a
- * double quote (") at the start and end. Two double
- * quotes together is taken to mean an embedded double
- * quote in the argument text. Variables are treated as
- * a single unit and therefore spaces and double quotes
- * inside a variable are copied as is and not parsed.
+ * Parses the argument text into an array of individual arguments using the
+ * space character as the delimiter. An individual argument containing
+ * spaces must have a double quote (") at the start and end. Two double
+ * quotes together is taken to mean an embedded double quote in the argument
+ * text. Variables are treated as a single unit and therefore spaces and
+ * double quotes inside a variable are copied as is and not parsed.
*
- * @param arguments the arguments as one string
+ * @param arguments
+ * the arguments as one string
* @return the array of arguments
*/
public static String[] parseArgumentsIntoList(String arguments) {
if (arguments == null || arguments.length() == 0)
return new String[0];
-
+
ArrayList list = new ArrayList(10);
boolean inQuotes = false;
boolean inVar = false;
int start = 0;
int end = arguments.length();
StringBuffer buffer = new StringBuffer(end);
-
+
while (start < end) {
char ch = arguments.charAt(start);
start++;
-
+
switch (ch) {
- case ARG_DELIMITER :
- if (inQuotes || inVar) {
- buffer.append(ch);
- } else {
- if (buffer.length() > 0) {
- list.add(buffer.toString());
- buffer.setLength(0);
- }
+ case ARG_DELIMITER:
+ if (inQuotes || inVar) {
+ buffer.append(ch);
+ } else {
+ if (buffer.length() > 0) {
+ list.add(buffer.toString());
+ buffer.setLength(0);
}
- break;
+ }
+ break;
- case ARG_DBL_QUOTE :
- if (inVar) {
- buffer.append(ch);
- } else {
- if (start < end) {
- if (arguments.charAt(start) == ARG_DBL_QUOTE) {
- // Two quotes together represents one quote
- buffer.append(ch);
- start++;
- } else {
- inQuotes = !inQuotes;
- }
- } else {
- // A lone quote at the end, just drop it.
- inQuotes = false;
- }
- }
- break;
-
- case VAR_TAG_START_CHAR1 :
+ case ARG_DBL_QUOTE:
+ if (inVar) {
buffer.append(ch);
- if (!inVar && start < end) {
- if (arguments.charAt(start) == VAR_TAG_START_CHAR2) {
- buffer.append(VAR_TAG_START_CHAR2);
- inVar = true;
+ } else {
+ if (start < end) {
+ if (arguments.charAt(start) == ARG_DBL_QUOTE) {
+ // Two quotes together represents one quote
+ buffer.append(ch);
start++;
+ } else {
+ inQuotes = !inQuotes;
}
+ } else {
+ // A lone quote at the end, just drop it.
+ inQuotes = false;
+ }
+ }
+ break;
+
+ case VAR_TAG_START_CHAR1:
+ buffer.append(ch);
+ if (!inVar && start < end) {
+ if (arguments.charAt(start) == VAR_TAG_START_CHAR2) {
+ buffer.append(VAR_TAG_START_CHAR2);
+ inVar = true;
+ start++;
}
- break;
+ }
+ break;
- case VAR_TAG_END_CHAR1 :
- buffer.append(ch);
- inVar = false;
- break;
+ case VAR_TAG_END_CHAR1:
+ buffer.append(ch);
+ inVar = false;
+ break;
- default :
- buffer.append(ch);
- break;
+ default:
+ buffer.append(ch);
+ break;
}
-
+
}
-
+
if (buffer.length() > 0)
list.add(buffer.toString());
-
+
String[] results = new String[list.size()];
list.toArray(results);
return results;
}
-
/**
- * Structure to represent a variable definition within a
- * source string.
+ * Structure to represent a variable definition within a source string.
*/
public static final class VariableDefinition {
/**
- * Index in the source text where the variable started
- * or -1
if no valid variable start tag
- * identifier found.
+ * Index in the source text where the variable started or
+ * -1
if no valid variable start tag identifier found.
*/
public int start = -1;
-
+
/**
- * Index in the source text of the character following
- * the end of the variable or -1
if no
- * valid variable end tag found.
+ * Index in the source text of the character following the end of the
+ * variable or -1
if no valid variable end tag found.
*/
public int end = -1;
-
+
/**
- * The variable's name found in the source text, or
- * null
if no valid variable found.
+ * The variable's name found in the source text, or null
+ * if no valid variable found.
*/
public String name = null;
-
+
/**
* The variable's argument found in the source text, or
- * null
if no valid variable found or if
- * the variable did not specify an argument
+ * null
if no valid variable found or if the variable did
+ * not specify an argument
*/
public String argument = null;
-
+
/**
* Create an initialized variable definition.
*/
private VariableDefinition() {
super();
}
-
+
/**
* Create an initialized variable definition.
*/