1
2
3
4
5
6
7
8
9
10
11 package org.mule.config.spring.parsers.specific;
12
13 import org.mule.config.spring.parsers.assembly.configuration.ValueMap;
14 import org.mule.routing.filters.RegExFilter;
15 import org.mule.util.StringUtils;
16
17 import java.util.HashMap;
18 import java.util.Map;
19 import java.util.regex.Pattern;
20
21 public class RegExFilterDefinitionParser extends FilterDefinitionParser
22 {
23 public RegExFilterDefinitionParser()
24 {
25 super(RegExFilter.class);
26 addMapping("flags", new FlagsMapping());
27 }
28
29
30
31
32
33 public static class FlagsMapping implements ValueMap
34 {
35 private static final Map<String, Integer> FlagsMapping;
36
37 static
38 {
39 FlagsMapping = new HashMap<String, Integer>();
40 FlagsMapping.put("CANON_EQ", Integer.valueOf(Pattern.CANON_EQ));
41 FlagsMapping.put("CASE_INSENSITIVE", Integer.valueOf(Pattern.CASE_INSENSITIVE));
42 FlagsMapping.put("DOTALL", Integer.valueOf(Pattern.DOTALL));
43 FlagsMapping.put("MULTILINE", Integer.valueOf(Pattern.MULTILINE));
44 FlagsMapping.put("UNICODE_CASE", Integer.valueOf(Pattern.UNICODE_CASE));
45 }
46
47 public Object rewrite(String value)
48 {
49 int combinedFlags = 0;
50
51 String[] flagStrings = StringUtils.split(value, ',');
52 for (String flagString : flagStrings)
53 {
54 Integer flag = FlagsMapping.get(flagString);
55 if (flag == null)
56 {
57 String message = String.format("Invalid flag '%1s'. Must be one of %2s", flagString,
58 FlagsMapping.keySet().toString());
59 throw new IllegalArgumentException(message);
60 }
61
62 combinedFlags = combinedFlags | flag.intValue();
63 }
64
65 return Integer.valueOf(combinedFlags);
66 }
67 }
68 }