Author: davsclaus
Date: Thu Jan 19 05:46:03 2012
New Revision: 1233187

URL: http://svn.apache.org/viewvc?rev=1233187&view=rev
Log:
CAMEL-4904: Fixed get thread name to support names with $ signs and other chars.

Modified:
    
camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/concurrent/ExecutorServiceHelper.java
    
camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/util/concurrent/ExecutorServiceHelperTest.java

Modified: 
camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/concurrent/ExecutorServiceHelper.java
URL: 
http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/concurrent/ExecutorServiceHelper.java?rev=1233187&r1=1233186&r2=1233187&view=diff
==============================================================================
--- 
camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/concurrent/ExecutorServiceHelper.java
 (original)
+++ 
camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/concurrent/ExecutorServiceHelper.java
 Thu Jan 19 05:46:03 2012
@@ -29,6 +29,8 @@ import java.util.concurrent.ThreadFactor
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.camel.model.ExecutorServiceAwareDefinition;
 import org.apache.camel.spi.ExecutorServiceStrategy;
@@ -52,6 +54,7 @@ import org.slf4j.LoggerFactory;
 public final class ExecutorServiceHelper {
 
     public static final String DEFAULT_PATTERN = "Camel Thread ${counter} - 
${name}";
+    private static final Pattern INVALID_PATTERN = 
Pattern.compile(".*\\$\\{\\w+\\}.*");
     private static final Logger LOG = 
LoggerFactory.getLogger(ExecutorServiceHelper.class);
     private static AtomicLong threadCounter = new AtomicLong();
 
@@ -74,24 +77,21 @@ public final class ExecutorServiceHelper
             pattern = DEFAULT_PATTERN;
         }
 
-        // the name could potential have a $ sign we want to keep
-        if (name.indexOf("$") > -1) {
-            name = name.replaceAll("\\$", "CAMEL_REPLACE_ME");
-        }
-
         // we support ${longName} and ${name} as name placeholders
         String longName = name;
         String shortName = name.contains("?") ? ObjectHelper.before(name, "?") 
: name;
 
+        // must quote the names to have it work as literal replacement
+        shortName = Matcher.quoteReplacement(shortName);
+        longName = Matcher.quoteReplacement(longName);
+
         String answer = pattern.replaceFirst("\\$\\{counter\\}", "" + 
nextThreadCounter());
         answer = answer.replaceFirst("\\$\\{longName\\}", longName);
         answer = answer.replaceFirst("\\$\\{name\\}", shortName);
-        if (answer.indexOf("$") > -1 || answer.indexOf("${") > -1 || 
answer.indexOf("}") > -1) {
-            throw new IllegalArgumentException("Pattern is invalid: " + 
pattern);
-        }
 
-        if (answer.indexOf("CAMEL_REPLACE_ME") > -1) {
-            answer = answer.replaceAll("CAMEL_REPLACE_ME", "\\$");
+        // are there any ${word} combos left, if so they should be considered 
invalid tokens
+        if (INVALID_PATTERN.matcher(answer).matches()) {
+            throw new IllegalArgumentException("Pattern is invalid: " + 
pattern);
         }
 
         return answer;

Modified: 
camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/util/concurrent/ExecutorServiceHelperTest.java
URL: 
http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/util/concurrent/ExecutorServiceHelperTest.java?rev=1233187&r1=1233186&r2=1233187&view=diff
==============================================================================
--- 
camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/util/concurrent/ExecutorServiceHelperTest.java
 (original)
+++ 
camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/util/concurrent/ExecutorServiceHelperTest.java
 Thu Jan 19 05:46:03 2012
@@ -34,6 +34,13 @@ public class ExecutorServiceHelperTest e
         assertTrue(name.endsWith("foo"));
     }
 
+    public void testGetThreadNameWithDollar() {
+        String name = ExecutorServiceHelper.getThreadName("Camel Thread 
${counter} - ${name}", "foo$bar");
+
+        assertTrue(name.startsWith("Camel Thread"));
+        assertTrue(name.endsWith("foo$bar"));
+    }
+
     public void testNewScheduledThreadPool() {
         ScheduledExecutorService pool = 
ExecutorServiceHelper.newScheduledThreadPool(1, "MyPool ${name}", "foo", true);
         assertNotNull(pool);


Reply via email to