You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by gg...@apache.org on 2003/09/04 20:18:18 UTC
cvs commit: jakarta-commons/lang/src/java/org/apache/commons/lang StringUtils.java
ggregory 2003/09/04 11:18:18
Modified: lang/src/test/org/apache/commons/lang
StringUtilsEqualsIndexOfTest.java
lang/src/java/org/apache/commons/lang StringUtils.java
Log:
Added ordinalIndexOf() and associated unit tests.
Revision Changes Path
1.9 +63 -1 jakarta-commons/lang/src/test/org/apache/commons/lang/StringUtilsEqualsIndexOfTest.java
Index: StringUtilsEqualsIndexOfTest.java
===================================================================
RCS file: /home/cvs/jakarta-commons/lang/src/test/org/apache/commons/lang/StringUtilsEqualsIndexOfTest.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- StringUtilsEqualsIndexOfTest.java 18 Aug 2003 02:22:25 -0000 1.8
+++ StringUtilsEqualsIndexOfTest.java 4 Sep 2003 18:18:18 -0000 1.9
@@ -146,6 +146,68 @@
assertEquals(0, StringUtils.indexOf("aabaabaa", ""));
}
+ public void testOrdinalIndexOf() {
+ assertEquals(-1, StringUtils.ordinalIndexOf(null, null, Integer.MIN_VALUE));
+ assertEquals(-1, StringUtils.ordinalIndexOf("", null, Integer.MIN_VALUE));
+ assertEquals(-1, StringUtils.ordinalIndexOf("", "", Integer.MIN_VALUE));
+ assertEquals(-1, StringUtils.ordinalIndexOf("aabaabaa", "a", Integer.MIN_VALUE));
+ assertEquals(-1, StringUtils.ordinalIndexOf("aabaabaa", "b", Integer.MIN_VALUE));
+ assertEquals(-1, StringUtils.ordinalIndexOf("aabaabaa", "ab", Integer.MIN_VALUE));
+ assertEquals(-1, StringUtils.ordinalIndexOf("aabaabaa", "", Integer.MIN_VALUE));
+
+ assertEquals(-1, StringUtils.ordinalIndexOf(null, null, -1));
+ assertEquals(-1, StringUtils.ordinalIndexOf("", null, -1));
+ assertEquals(-1, StringUtils.ordinalIndexOf("", "", -1));
+ assertEquals(-1, StringUtils.ordinalIndexOf("aabaabaa", "a", -1));
+ assertEquals(-1, StringUtils.ordinalIndexOf("aabaabaa", "b", -1));
+ assertEquals(-1, StringUtils.ordinalIndexOf("aabaabaa", "ab", -1));
+ assertEquals(-1, StringUtils.ordinalIndexOf("aabaabaa", "", -1));
+
+ assertEquals(-1, StringUtils.ordinalIndexOf(null, null, 0));
+ assertEquals(-1, StringUtils.ordinalIndexOf("", null, 0));
+ assertEquals(-1, StringUtils.ordinalIndexOf("", "", 0));
+ assertEquals(-1, StringUtils.ordinalIndexOf("aabaabaa", "a", 0));
+ assertEquals(-1, StringUtils.ordinalIndexOf("aabaabaa", "b", 0));
+ assertEquals(-1, StringUtils.ordinalIndexOf("aabaabaa", "ab", 0));
+ assertEquals(-1, StringUtils.ordinalIndexOf("aabaabaa", "", 0));
+
+ assertEquals(-1, StringUtils.ordinalIndexOf(null, null, 1));
+ assertEquals(-1, StringUtils.ordinalIndexOf("", null, 1));
+ assertEquals(0, StringUtils.ordinalIndexOf("", "", 1));
+ assertEquals(0, StringUtils.ordinalIndexOf("aabaabaa", "a", 1));
+ assertEquals(2, StringUtils.ordinalIndexOf("aabaabaa", "b", 1));
+ assertEquals(1, StringUtils.ordinalIndexOf("aabaabaa", "ab", 1));
+ assertEquals(0, StringUtils.ordinalIndexOf("aabaabaa", "", 1));
+
+ assertEquals(-1, StringUtils.ordinalIndexOf(null, null, 2));
+ assertEquals(-1, StringUtils.ordinalIndexOf("", null, 2));
+ assertEquals(0, StringUtils.ordinalIndexOf("", "", 2));
+ assertEquals(1, StringUtils.ordinalIndexOf("aabaabaa", "a", 2));
+ assertEquals(5, StringUtils.ordinalIndexOf("aabaabaa", "b", 2));
+ assertEquals(4, StringUtils.ordinalIndexOf("aabaabaa", "ab", 2));
+ assertEquals(0, StringUtils.ordinalIndexOf("aabaabaa", "", 2));
+
+ assertEquals(-1, StringUtils.ordinalIndexOf(null, null, Integer.MAX_VALUE));
+ assertEquals(-1, StringUtils.ordinalIndexOf("", null, Integer.MAX_VALUE));
+ assertEquals(0, StringUtils.ordinalIndexOf("", "", Integer.MAX_VALUE));
+ assertEquals(-1, StringUtils.ordinalIndexOf("aabaabaa", "a", Integer.MAX_VALUE));
+ assertEquals(-1, StringUtils.ordinalIndexOf("aabaabaa", "b", Integer.MAX_VALUE));
+ assertEquals(-1, StringUtils.ordinalIndexOf("aabaabaa", "ab", Integer.MAX_VALUE));
+ assertEquals(0, StringUtils.ordinalIndexOf("aabaabaa", "", Integer.MAX_VALUE));
+
+ assertEquals(-1, StringUtils.ordinalIndexOf("aaaaaaaaa", "a", 0));
+ assertEquals(0, StringUtils.ordinalIndexOf("aaaaaaaaa", "a", 1));
+ assertEquals(1, StringUtils.ordinalIndexOf("aaaaaaaaa", "a", 2));
+ assertEquals(2, StringUtils.ordinalIndexOf("aaaaaaaaa", "a", 3));
+ assertEquals(3, StringUtils.ordinalIndexOf("aaaaaaaaa", "a", 4));
+ assertEquals(4, StringUtils.ordinalIndexOf("aaaaaaaaa", "a", 5));
+ assertEquals(5, StringUtils.ordinalIndexOf("aaaaaaaaa", "a", 6));
+ assertEquals(6, StringUtils.ordinalIndexOf("aaaaaaaaa", "a", 7));
+ assertEquals(7, StringUtils.ordinalIndexOf("aaaaaaaaa", "a", 8));
+ assertEquals(8, StringUtils.ordinalIndexOf("aaaaaaaaa", "a", 9));
+ assertEquals(-1, StringUtils.ordinalIndexOf("aaaaaaaaa", "a", 10));
+ }
+
public void testIndexOf_StringInt() {
assertEquals(-1, StringUtils.indexOf(null, null, 0));
assertEquals(-1, StringUtils.indexOf(null, null, -1));
1.108 +142 -94 jakarta-commons/lang/src/java/org/apache/commons/lang/StringUtils.java
Index: StringUtils.java
===================================================================
RCS file: /home/cvs/jakarta-commons/lang/src/java/org/apache/commons/lang/StringUtils.java,v
retrieving revision 1.107
retrieving revision 1.108
diff -u -r1.107 -r1.108
--- StringUtils.java 23 Aug 2003 10:39:20 -0000 1.107
+++ StringUtils.java 4 Sep 2003 18:18:18 -0000 1.108
@@ -163,13 +163,19 @@
// Append:
// String.concat about twice as fast as StringBuffer.append
// (not sure who tested this)
-
+
/**
* The empty String <code>""</code>.
* @since 2.0
*/
public static final String EMPTY = "";
-
+
+ /**
+ * Represents a failed index search.
+ * @since 2.?.?
+ */
+ public static final int INDEX_NOT_FOUND = -1;
+
/**
* <p>The maximum size to which the padding constant(s) can expand.</p>
*/
@@ -181,7 +187,7 @@
* <p>Used for efficient space padding. The length of each String expands as needed.</p>
*/
private static final String[] PADDING = new String[Character.MAX_VALUE];
-
+
static {
// space padding is most common, start with 64 chars
PADDING[32] = " ";
@@ -261,7 +267,7 @@
return true;
}
for (int i = 0; i < strLen; i++) {
- if ((Character.isWhitespace(str.charAt(i)) == false) ) {
+ if ((Character.isWhitespace(str.charAt(i)) == false)) {
return false;
}
}
@@ -290,7 +296,7 @@
return false;
}
for (int i = 0; i < strLen; i++) {
- if ((Character.isWhitespace(str.charAt(i)) == false) ) {
+ if ((Character.isWhitespace(str.charAt(i)) == false)) {
return true;
}
}
@@ -400,7 +406,7 @@
public static String trimToEmpty(String str) {
return (str == null ? EMPTY : str.trim());
}
-
+
// Stripping
//-----------------------------------------------------------------------
/**
@@ -428,7 +434,7 @@
public static String strip(String str) {
return strip(str, null);
}
-
+
/**
* <p>Strips whitespace from the start and end of a String returning
* <code>null</code> if the String is empty ("") after the strip.</p>
@@ -485,7 +491,7 @@
public static String stripToEmpty(String str) {
return (str == null ? EMPTY : strip(str, null));
}
-
+
/**
* <p>Strips any of a set of characters from the start and end of a String.
* This is similar to {@link String#trim()} but allows the characters
@@ -593,7 +599,7 @@
if (str == null || (end = str.length()) == 0) {
return str;
}
-
+
if (stripChars == null) {
while ((end != 0) && Character.isWhitespace(str.charAt(end - 1))) {
end--;
@@ -632,7 +638,7 @@
public static String[] stripAll(String[] strs) {
return stripAll(strs, null);
}
-
+
/**
* <p>Strips any of a set of characters from the start and end of every
* String in an array.</p>
@@ -668,7 +674,7 @@
newArr[i] = strip(strs[i], stripChars);
}
return newArr;
- }
+ }
// Equals
//-----------------------------------------------------------------------
@@ -748,7 +754,7 @@
}
return str.indexOf(searchChar);
}
-
+
/**
* <p>Finds the first index within a String from a start position,
* handling <code>null</code>.
@@ -780,7 +786,7 @@
}
return str.indexOf(searchChar, startPos);
}
-
+
/**
* <p>Finds the first index within a String, handling <code>null</code>.
* This method uses {@link String#indexOf(String)}.</p>
@@ -809,7 +815,53 @@
}
return str.indexOf(searchStr);
}
-
+
+ /**
+ * <p>Finds the n-th index within a String, handling <code>null</code>.
+ * This method uses {@link String#indexOf(String)}.</p>
+ *
+ * <p>A <code>null</code> String will return <code>-1</code>.</p>
+ *
+ * <pre>
+ * StringUtils.ordinalIndexOf(null, *, *) = -1
+ * StringUtils.ordinalIndexOf(*, null, *) = -1
+ * StringUtils.ordinalIndexOf("", "", *) = 0
+ * StringUtils.ordinalIndexOf("aabaabaa", "a", 1) = 0
+ * StringUtils.ordinalIndexOf("aabaabaa", "a", 2) = 1
+ * StringUtils.ordinalIndexOf("aabaabaa", "b", 1) = 2
+ * StringUtils.ordinalIndexOf("aabaabaa", "b", 2) = 5
+ * StringUtils.ordinalIndexOf("aabaabaa", "ab", 1) = 1
+ * StringUtils.ordinalIndexOf("aabaabaa", "ab", 2) = 4
+ * StringUtils.ordinalIndexOf("aabaabaa", "", 1) = 0
+ * StringUtils.ordinalIndexOf("aabaabaa", "", 2) = 0
+ * </pre>
+ *
+ * @param str the String to check, may be null
+ * @param searchStr the String to find, may be null
+ * @param ordinal the n-th <code>searchStr</code> to find
+ * @return the n-th index of the search String,
+ * <code>-1</code> (<code>INDEX_NOT_FOUND</code>) if no match or <code>null</code> string input
+ * @since 2.?.?
+ */
+ public static int ordinalIndexOf(String str, String searchStr, int ordinal) {
+ if (str == null || searchStr == null || ordinal <= 0) {
+ return INDEX_NOT_FOUND;
+ }
+ if (searchStr.length() == 0) {
+ return 0;
+ }
+ int found = 0;
+ int index = INDEX_NOT_FOUND;
+ do {
+ index = str.indexOf(searchStr, index + 1);
+ if (index < 0) {
+ return index;
+ }
+ found++;
+ } while (found < ordinal);
+ return index;
+ }
+
/**
* <p>Finds the first index within a String, handling <code>null</code>.
* This method uses {@link String#indexOf(String, int)}.</p>
@@ -851,7 +903,7 @@
}
return str.indexOf(searchStr, startPos);
}
-
+
// LastIndexOf
//-----------------------------------------------------------------------
/**
@@ -879,7 +931,7 @@
}
return str.lastIndexOf(searchChar);
}
-
+
/**
* <p>Finds the last index within a String from a start position,
* handling <code>null</code>.
@@ -913,7 +965,7 @@
}
return str.lastIndexOf(searchChar, startPos);
}
-
+
/**
* <p>Finds the last index within a String, handling <code>null</code>.
* This method uses {@link String#lastIndexOf(String)}.</p>
@@ -942,7 +994,7 @@
}
return str.lastIndexOf(searchStr);
}
-
+
/**
* <p>Finds the first index within a String, handling <code>null</code>.
* This method uses {@link String#lastIndexOf(String, int)}.</p>
@@ -977,7 +1029,7 @@
}
return str.lastIndexOf(searchStr, startPos);
}
-
+
// Contains
//-----------------------------------------------------------------------
/**
@@ -1005,7 +1057,7 @@
}
return (str.indexOf(searchChar) >= 0);
}
-
+
/**
* <p>Find the first index within a String, handling <code>null</code>.
* This method uses {@link String#indexOf(int)}.</p>
@@ -1033,7 +1085,7 @@
}
return (str.indexOf(searchStr) >= 0);
}
-
+
// IndexOfAny chars
//-----------------------------------------------------------------------
/**
@@ -1058,20 +1110,20 @@
* @return the index of any of the chars, -1 if no match or null input
* @since 2.0
*/
- public static int indexOfAny(String str, char[] searchChars) {
- if (str == null || str.length() == 0 || searchChars == null || searchChars.length == 0) {
- return -1;
- }
- for (int i = 0; i < str.length(); i ++) {
- char ch = str.charAt(i);
- for (int j = 0; j < searchChars.length; j++) {
- if (searchChars[j] == ch) {
- return i;
- }
- }
- }
- return -1;
- }
+ public static int indexOfAny(String str, char[] searchChars) {
+ if (str == null || str.length() == 0 || searchChars == null || searchChars.length == 0) {
+ return -1;
+ }
+ for (int i = 0; i < str.length(); i++) {
+ char ch = str.charAt(i);
+ for (int j = 0; j < searchChars.length; j++) {
+ if (searchChars[j] == ch) {
+ return i;
+ }
+ }
+ }
+ return -1;
+ }
/**
* <p>Search a String to find the first index of any
@@ -1126,21 +1178,21 @@
* @return the index of any of the chars, -1 if no match or null input
* @since 2.0
*/
- public static int indexOfAnyBut(String str, char[] searchChars) {
- if (str == null || str.length() == 0 || searchChars == null || searchChars.length == 0) {
- return -1;
- }
- outer: for (int i = 0; i < str.length(); i ++) {
- char ch = str.charAt(i);
- for (int j = 0; j < searchChars.length; j++) {
- if (searchChars[j] == ch) {
- continue outer;
- }
- }
- return i;
- }
- return -1;
- }
+ public static int indexOfAnyBut(String str, char[] searchChars) {
+ if (str == null || str.length() == 0 || searchChars == null || searchChars.length == 0) {
+ return -1;
+ }
+ outer : for (int i = 0; i < str.length(); i++) {
+ char ch = str.charAt(i);
+ for (int j = 0; j < searchChars.length; j++) {
+ if (searchChars[j] == ch) {
+ continue outer;
+ }
+ }
+ return i;
+ }
+ return -1;
+ }
/**
* <p>Search a String to find the first index of any
@@ -1201,7 +1253,7 @@
*/
public static boolean containsOnly(String str, char[] valid) {
// All these pre-checks are to maintain API with an older version
- if ( (valid == null) || (str == null) ) {
+ if ((valid == null) || (str == null)) {
return false;
}
if (str.length() == 0) {
@@ -1241,7 +1293,7 @@
}
return containsOnly(str, validChars.toCharArray());
}
-
+
// ContainsNone
//-----------------------------------------------------------------------
/**
@@ -1311,7 +1363,7 @@
}
return containsNone(str, invalidChars.toCharArray());
}
-
+
// IndexOfAny strings
//-----------------------------------------------------------------------
/**
@@ -1458,7 +1510,7 @@
return str.substring(start);
}
-
+
/**
* <p>Gets a substring from the specified String avoiding exceptions.</p>
*
@@ -1822,7 +1874,7 @@
public static String substringBetween(String str, String tag) {
return substringBetween(str, tag, tag);
}
-
+
/**
* <p>Gets the String that is nested in between two Strings.
* Only the first match is returned.</p>
@@ -1889,7 +1941,7 @@
public static String getNestedString(String str, String tag) {
return substringBetween(str, tag, tag);
}
-
+
/**
* <p>Gets the String that is nested in between two Strings.
* Only the first match is returned.</p>
@@ -1974,7 +2026,7 @@
*/
public static String[] split(String str, char separatorChar) {
// Performance tuned for 2.0 (JDK1.4)
-
+
if (str == null) {
return null;
}
@@ -1983,7 +2035,7 @@
return ArrayUtils.EMPTY_STRING_ARRAY;
}
List list = new ArrayList();
- int i =0, start = 0;
+ int i = 0, start = 0;
boolean match = false;
while (i < len) {
if (str.charAt(i) == separatorChar) {
@@ -2061,7 +2113,7 @@
// Performance tuned for 2.0 (JDK1.4)
// Direct code is quicker than StringTokenizer.
// Also, StringTokenizer uses isSpace() not isWhitespace()
-
+
if (str == null) {
return null;
}
@@ -2071,7 +2123,7 @@
}
List list = new ArrayList();
int sizePlus1 = 1;
- int i =0, start = 0;
+ int i = 0, start = 0;
boolean match = false;
if (separatorChars == null) {
// Null separator means use whitespace
@@ -2155,7 +2207,7 @@
public static String concatenate(Object[] array) {
return join(array, null);
}
-
+
/**
* <p>Joins the elements of the provided array into a single String
* containing the provided list of elements.</p>
@@ -2179,7 +2231,7 @@
public static String join(Object[] array) {
return join(array, null);
}
-
+
/**
* <p>Joins the elements of the provided array into a single String
* containing the provided list of elements.</p>
@@ -2256,10 +2308,12 @@
// ArraySize == 0: Len = 0
// ArraySize > 0: Len = NofStrings *(len(firstString) + len(separator))
// (Assuming that all Strings are roughly equally long)
- int bufSize
- = ((arraySize == 0) ? 0
- : arraySize * ((array[0] == null ? 16 : array[0].toString().length())
- + ((separator != null) ? separator.length(): 0)));
+ int bufSize =
+ ((arraySize == 0)
+ ? 0
+ : arraySize
+ * ((array[0] == null ? 16 : array[0].toString().length())
+ + ((separator != null) ? separator.length() : 0)));
StringBuffer buf = new StringBuffer(bufSize);
@@ -2292,7 +2346,7 @@
if (iterator == null) {
return null;
}
- StringBuffer buf = new StringBuffer(256); // Java default is 16, probably too small
+ StringBuffer buf = new StringBuffer(256); // Java default is 16, probably too small
while (iterator.hasNext()) {
Object obj = iterator.next();
if (obj != null) {
@@ -2322,7 +2376,7 @@
if (iterator == null) {
return null;
}
- StringBuffer buf = new StringBuffer(256); // Java default is 16, probably too small
+ StringBuffer buf = new StringBuffer(256); // Java default is 16, probably too small
while (iterator.hasNext()) {
Object obj = iterator.next();
if (obj != null) {
@@ -2331,7 +2385,7 @@
if ((separator != null) && iterator.hasNext()) {
buf.append(separator);
}
- }
+ }
return buf.toString();
}
@@ -2496,7 +2550,7 @@
buf.append(text.substring(start));
return buf.toString();
}
-
+
// Replace, character based
//-----------------------------------------------------------------------
/**
@@ -2525,7 +2579,7 @@
}
return str.replace(searchChar, replaceChar);
}
-
+
/**
* <p>Replaces multiple characters in a String in one go.
* This method can also be used to delete characters.</p>
@@ -2563,7 +2617,7 @@
* @since 2.0
*/
public static String replaceChars(String str, String searchChars, String replaceChars) {
- if (str == null || str.length() == 0 || searchChars == null || searchChars.length()== 0) {
+ if (str == null || str.length() == 0 || searchChars == null || searchChars.length() == 0) {
return str;
}
char[] chars = str.toCharArray();
@@ -2799,7 +2853,7 @@
public static String chompLast(String str) {
return chompLast(str, "\n");
}
-
+
/**
* <p>Remove a value if and only if the String ends with that value.</p>
*
@@ -2956,7 +3010,6 @@
return str.substring(0, lastIdx);
}
-
// Conversion
//-----------------------------------------------------------------------
/**
@@ -3001,7 +3054,7 @@
*/
public static String repeat(String str, int repeat) {
// Performance tuned for 2.0 (JDK1.4)
-
+
if (str == null) {
return null;
}
@@ -3013,32 +3066,32 @@
return str;
}
if (inputLength == 1 && repeat <= PAD_LIMIT) {
- return padding(repeat, str.charAt(0));
+ return padding(repeat, str.charAt(0));
}
int outputLength = inputLength * repeat;
switch (inputLength) {
- case 1:
+ case 1 :
char ch = str.charAt(0);
char[] output1 = new char[outputLength];
for (int i = repeat - 1; i >= 0; i--) {
output1[i] = ch;
}
return new String(output1);
- case 2:
+ case 2 :
char ch0 = str.charAt(0);
char ch1 = str.charAt(1);
char[] output2 = new char[outputLength];
- for (int i = repeat * 2 - 2; i >= 0; i--,i--) {
+ for (int i = repeat * 2 - 2; i >= 0; i--, i--) {
output2[i] = ch0;
output2[i + 1] = ch1;
}
return new String(output2);
- default:
+ default :
StringBuffer buf = new StringBuffer(outputLength);
for (int i = 0; i < repeat; i++) {
buf.append(str);
- }
+ }
return buf.toString();
}
}
@@ -3169,7 +3222,7 @@
if (padLen == 1 && pads <= PAD_LIMIT) {
return rightPad(str, size, padStr.charAt(0));
}
-
+
if (pads == padLen) {
return str.concat(padStr);
} else if (pads < padLen) {
@@ -3204,7 +3257,7 @@
* <code>null</code> if null String input
*/
public static String leftPad(String str, int size) {
- return leftPad(str, size, ' ');
+ return leftPad(str, size, ' ');
}
/**
@@ -3281,7 +3334,7 @@
if (padLen == 1 && pads <= PAD_LIMIT) {
return leftPad(str, size, padStr.charAt(0));
}
-
+
if (pads == padLen) {
return padStr.concat(str);
} else if (pads < padLen) {
@@ -3697,8 +3750,7 @@
}
int sz = str.length();
for (int i = 0; i < sz; i++) {
- if ((Character.isLetter(str.charAt(i)) == false) &&
- (str.charAt(i) != ' ')) {
+ if ((Character.isLetter(str.charAt(i)) == false) && (str.charAt(i) != ' ')) {
return false;
}
}
@@ -3765,8 +3817,7 @@
}
int sz = str.length();
for (int i = 0; i < sz; i++) {
- if ((Character.isLetterOrDigit(str.charAt(i)) == false) &&
- (str.charAt(i) != ' ')) {
+ if ((Character.isLetterOrDigit(str.charAt(i)) == false) && (str.charAt(i) != ' ')) {
return false;
}
}
@@ -3836,8 +3887,7 @@
}
int sz = str.length();
for (int i = 0; i < sz; i++) {
- if ((Character.isDigit(str.charAt(i)) == false) &&
- (str.charAt(i) != ' ')) {
+ if ((Character.isDigit(str.charAt(i)) == false) && (str.charAt(i) != ' ')) {
return false;
}
}
@@ -3869,7 +3919,7 @@
}
int sz = str.length();
for (int i = 0; i < sz; i++) {
- if ((Character.isWhitespace(str.charAt(i)) == false) ) {
+ if ((Character.isWhitespace(str.charAt(i)) == false)) {
return false;
}
}
@@ -4192,7 +4242,6 @@
return -1;
}
-
// Misc
//-----------------------------------------------------------------------
/**
@@ -4301,4 +4350,3 @@
}
}
-