Author: bago
Date: Mon Apr 16 06:11:55 2007
New Revision: 529232

URL: http://svn.apache.org/viewvc?view=rev&rev=529232
Log:
First step of refactoring to make MacroExpand a service (thread-safety)

Modified:
    james/jspf/trunk/src/main/java/org/apache/james/jspf/macro/MacroExpand.java
    
james/jspf/trunk/src/main/java/org/apache/james/jspf/policies/local/DefaultExplanationPolicy.java
    james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/ExpModifier.java
    
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/GenericMechanism.java
    
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/IncludeMechanism.java
    
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/RedirectModifier.java
    
james/jspf/trunk/src/test/java/org/apache/james/jspf/macro/MacroExpandTest.java

Modified: 
james/jspf/trunk/src/main/java/org/apache/james/jspf/macro/MacroExpand.java
URL: 
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/macro/MacroExpand.java?view=diff&rev=529232&r1=529231&r2=529232
==============================================================================
--- james/jspf/trunk/src/main/java/org/apache/james/jspf/macro/MacroExpand.java 
(original)
+++ james/jspf/trunk/src/main/java/org/apache/james/jspf/macro/MacroExpand.java 
Mon Apr 16 06:11:55 2007
@@ -38,8 +38,6 @@
 
 public class MacroExpand {
 
-    private MacroData macroData;
-
     private Pattern domainSpecPattern;
 
     private Pattern macroStringPattern;
@@ -52,24 +50,34 @@
 
     private Logger log;
 
+    public static final boolean EXPLANATION = true;
+    
+    public static final boolean DOMAIN = false;
+
     /**
      * Construct MacroExpand
      * 
      * @param spfData the MacroData to use
      * @param logger the logget to use
      */
-    public MacroExpand(MacroData macroData, Logger logger) {
-        this.macroData = macroData;
+    public MacroExpand(Logger logger) {
         // This matches 2 groups
         domainSpecPattern = 
Pattern.compile(SPFTermsRegexps.DOMAIN_SPEC_REGEX_R);
         // The real pattern replacer
         macroStringPattern = 
Pattern.compile(SPFTermsRegexps.MACRO_STRING_REGEX_TOKEN);
         // The macro letters pattern
-        macroLettersPattern = 
Pattern.compile(SPFTermsRegexps.MACRO_LETTER_PATTERN);
-        // The macro letters pattern for explanation
         macroLettersExpPattern = 
Pattern.compile(SPFTermsRegexps.MACRO_LETTER_PATTERN_EXP);
+        macroLettersPattern = 
Pattern.compile(SPFTermsRegexps.MACRO_LETTER_PATTERN);
         log = logger;
     }
+    
+    public String expand(String input, MacroData macroData, boolean 
isExplanation) throws PermErrorException {
+        if (isExplanation) {
+            return expandExplanation(input, macroData);
+        } else {
+            return expandDomain(input, macroData);
+        }
+    }
 
     /**
      * This method expand the given a explanation
@@ -80,7 +88,7 @@
      * @throws PermErrorException
      *             Get thrown if invalid macros are used
      */
-    public String expandExplanation(String input) throws PermErrorException {
+    private String expandExplanation(String input, MacroData macroData) throws 
PermErrorException {
 
         log.debug("Start do expand explanation: " + input);
 
@@ -88,7 +96,7 @@
         StringBuffer res = new StringBuffer();
         for (int i = 0; i < parts.length; i++) {
             if (i > 0) res.append(" ");
-            res.append(expandMacroString(parts[i], true));
+            res.append(expandMacroString(parts[i], macroData, true));
         }
         log.debug("Done expand explanation: " + res);
         
@@ -104,7 +112,7 @@
      * @throws PermErrorException
      *             This get thrown if invalid macros are used
      */
-    public String expandDomain(String input) throws PermErrorException {
+    private String expandDomain(String input, MacroData macroData) throws 
PermErrorException {
 
         log.debug("Start expand domain: " + input);
 
@@ -115,17 +123,17 @@
 
         StringBuffer res = new StringBuffer();
         if (inputMatcher.group(1) != null && inputMatcher.group(1).length() > 
0) {
-            res.append(expandMacroString(inputMatcher.group(1), false));
+            res.append(expandMacroString(inputMatcher.group(1), macroData, 
false));
         }
         if (inputMatcher.group(2) != null && inputMatcher.group(2).length() > 
0) {
             if (inputMatcher.group(2).startsWith(".")) {
                 res.append(inputMatcher.group(2));
             } else {
-                res.append(expandMacroString(inputMatcher.group(2), false));
+                res.append(expandMacroString(inputMatcher.group(2), macroData, 
false));
             }
         }
         
-        String domainName = expandMacroString(input, false);
+        String domainName = expandMacroString(input, macroData, false);
         // reduce to less than 255 characters, deleting subdomains from left
         int split = 0;
         while (domainName.length() > 255 && split > -1) {
@@ -147,7 +155,7 @@
      * @throws PermErrorException
      *             This get thrown if invalid macros are used
      */
-    private String expandMacroString(String input, boolean isExplanation) 
throws PermErrorException {
+    private String expandMacroString(String input, MacroData macroData, 
boolean isExplanation) throws PermErrorException {
 
         StringBuffer decodedValue = new StringBuffer();
         Matcher inputMatcher = macroStringPattern.matcher(input);
@@ -164,7 +172,7 @@
                     macroCell = input.substring(inputMatcher.start() + 2, 
inputMatcher
                             .end() - 1);
                     inputMatcher
-                            .appendReplacement(decodedValue, 
replaceCell(macroCell, isExplanation));
+                            .appendReplacement(decodedValue, 
replaceCell(macroCell, macroData, isExplanation));
                 } else if (match2.length() == 2 && match2.startsWith("%")) {
                     // handle the % escaping
                     inputMatcher.appendReplacement(decodedValue, 
match2.substring(1));
@@ -192,7 +200,7 @@
      * @throws PermErrorException
      *             Get thrown if an error in processing happen
      */
-    private String replaceCell(String replaceValue, boolean isExplanation) 
throws PermErrorException {
+    private String replaceCell(String replaceValue, MacroData macroData, 
boolean isExplanation) throws PermErrorException {
 
         String variable = "";
         String domainNumber = "";
@@ -212,9 +220,9 @@
         }
         if (cellMatcher.find()) {
             if (cellMatcher.group().toUpperCase().equals(cellMatcher.group())) 
{
-                variable = encodeURL(matchMacro(cellMatcher.group()));
+                variable = encodeURL(matchMacro(cellMatcher.group(), 
macroData));
             } else {
-                variable = matchMacro(cellMatcher.group());
+                variable = matchMacro(cellMatcher.group(), macroData);
             }
             // Remove Macro code so that r macro code does not clash with r the
             // reverse modifier
@@ -275,7 +283,7 @@
      *             Get thrown if the given variable is an unknown macro
      * 
      */
-    private String matchMacro(String macro) throws PermErrorException {
+    private String matchMacro(String macro, MacroData macroData) throws 
PermErrorException {
 
         String rValue = null;
 

Modified: 
james/jspf/trunk/src/main/java/org/apache/james/jspf/policies/local/DefaultExplanationPolicy.java
URL: 
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/policies/local/DefaultExplanationPolicy.java?view=diff&rev=529232&r1=529231&r2=529232
==============================================================================
--- 
james/jspf/trunk/src/main/java/org/apache/james/jspf/policies/local/DefaultExplanationPolicy.java
 (original)
+++ 
james/jspf/trunk/src/main/java/org/apache/james/jspf/policies/local/DefaultExplanationPolicy.java
 Mon Apr 16 06:11:55 2007
@@ -70,8 +70,10 @@
                             explanation = defExplanation;
                         }
                         try {
-                            spfData.setExplanation(new MacroExpand(spfData, 
log)
-                                    .expandExplanation(explanation));
+                            explanation = new MacroExpand(log)
+                                    .expand(explanation, spfData, 
MacroExpand.EXPLANATION);
+                            
+                            spfData.setExplanation(explanation);
                         } catch (PermErrorException e) {
                             // Should never happen !
                             log.debug("Invalid defaulfExplanation: " + 
explanation);

Modified: 
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/ExpModifier.java
URL: 
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/ExpModifier.java?view=diff&rev=529232&r1=529231&r2=529232
==============================================================================
--- james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/ExpModifier.java 
(original)
+++ james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/ExpModifier.java 
Mon Apr 16 06:11:55 2007
@@ -75,7 +75,7 @@
         if (spfData.getCurrentResult()== null || 
!spfData.getCurrentResult().equals(SPF1Constants.FAIL))
             return;
 
-        host = new MacroExpand(spfData, log).expandDomain(host);
+        host = new MacroExpand(log).expand(host, spfData, MacroExpand.DOMAIN);
 
         try {
             try {
@@ -86,8 +86,8 @@
             }
 
             if ((exp != null) && (!exp.equals(""))) {
-                spfData.setExplanation(new MacroExpand(spfData, log)
-                        .expandExplanation(exp));
+                spfData.setExplanation(new MacroExpand(log)
+                        .expand(exp, spfData, MacroExpand.EXPLANATION));
             } 
         } catch (PermErrorException e) {
             // TODO add logging here!

Modified: 
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/GenericMechanism.java
URL: 
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/GenericMechanism.java?view=diff&rev=529232&r1=529231&r2=529232
==============================================================================
--- 
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/GenericMechanism.java
 (original)
+++ 
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/GenericMechanism.java
 Mon Apr 16 06:11:55 2007
@@ -68,7 +68,7 @@
             host = spfData.getCurrentDomain();
         } else {
             // throws a PermErrorException that we cat pass through
-            host = new MacroExpand(spfData, log).expandDomain(host);
+            host = new MacroExpand(log).expand(host, spfData, 
MacroExpand.DOMAIN);
         }
         return host;
     }

Modified: 
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/IncludeMechanism.java
URL: 
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/IncludeMechanism.java?view=diff&rev=529232&r1=529231&r2=529232
==============================================================================
--- 
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/IncludeMechanism.java
 (original)
+++ 
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/IncludeMechanism.java
 Mon Apr 16 06:11:55 2007
@@ -72,7 +72,7 @@
         spfData.increaseCurrentDepth();      
         
         // throws a PermErrorException that we can pass through
-        host = new MacroExpand(spfData, log).expandDomain(host);
+        host = new MacroExpand(log).expand(host, spfData, MacroExpand.DOMAIN);
 
         String prevRes = spfData.getCurrentResult();
         String prevHost = spfData.getCurrentDomain();

Modified: 
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/RedirectModifier.java
URL: 
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/RedirectModifier.java?view=diff&rev=529232&r1=529231&r2=529232
==============================================================================
--- 
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/RedirectModifier.java
 (original)
+++ 
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/RedirectModifier.java
 Mon Apr 16 06:11:55 2007
@@ -67,7 +67,7 @@
             spfData.increaseCurrentDepth();
 
             // throws a PermErrorException that we can pass through
-            host = new MacroExpand(spfData, log).expandDomain(host);
+            host = new MacroExpand(log).expand(host, spfData, 
MacroExpand.DOMAIN);
 
             spfData.setCurrentDomain(host);
 

Modified: 
james/jspf/trunk/src/test/java/org/apache/james/jspf/macro/MacroExpandTest.java
URL: 
http://svn.apache.org/viewvc/james/jspf/trunk/src/test/java/org/apache/james/jspf/macro/MacroExpandTest.java?view=diff&rev=529232&r1=529231&r2=529232
==============================================================================
--- 
james/jspf/trunk/src/test/java/org/apache/james/jspf/macro/MacroExpandTest.java 
(original)
+++ 
james/jspf/trunk/src/test/java/org/apache/james/jspf/macro/MacroExpandTest.java 
Mon Apr 16 06:11:55 2007
@@ -103,18 +103,18 @@
 
     protected void setUp() throws Exception {
         super.setUp();
-        defIp4me = new MacroExpand(new rfcIP4MacroData(), new ConsoleLogger());
-        defIp6me = new MacroExpand(new rfcIP6MacroData(), new ConsoleLogger());
+        defIp4me = new MacroExpand(new ConsoleLogger());
+        defIp6me = new MacroExpand(new ConsoleLogger());
     }
 
     public void testPercS() throws PermErrorException {
         assertEquals("[EMAIL PROTECTED]", defIp4me
-                .expandDomain("%{s}"));
+                .expand("%{s}", new rfcIP4MacroData(), MacroExpand.DOMAIN));
     }
 
     public void testPercK() throws PermErrorException {
         try {
-            defIp4me.expandDomain("%{k}");
+            defIp4me.expand("%{k}", new rfcIP4MacroData(), MacroExpand.DOMAIN);
             fail("%{k} is not a valid expansion");
         } catch (PermErrorException e) {
         }
@@ -122,67 +122,67 @@
 
     public void testPercentAloneIsError() throws PermErrorException {
         try {
-            defIp4me.expandDomain("%{s}%");
+            defIp4me.expand("%{s}%", new rfcIP4MacroData(), 
MacroExpand.DOMAIN);
             fail("invalid percent at end of line");
         } catch (PermErrorException e) {
         }
     }
 
     public void testDoublePercent() throws PermErrorException {
-        assertEquals("%", defIp4me.expandDomain("%%"));
+        assertEquals("%", defIp4me.expand("%%", new rfcIP4MacroData(), 
MacroExpand.DOMAIN));
     }
 
     public void testPercO() throws PermErrorException {
-        assertEquals("email.example.com", defIp4me.expandDomain("%{o}"));
+        assertEquals("email.example.com", defIp4me.expand("%{o}", new 
rfcIP4MacroData(), MacroExpand.DOMAIN));
     }
 
     public void testPercD() throws PermErrorException {
-        assertEquals("email.example.com", defIp4me.expandDomain("%{d}"));
-        assertEquals("email.example.com", defIp4me.expandDomain("%{d4}"));
-        assertEquals("email.example.com", defIp4me.expandDomain("%{d3}"));
-        assertEquals("example.com", defIp4me.expandDomain("%{d2}"));
-        assertEquals("com", defIp4me.expandDomain("%{d1}"));
-        assertEquals("com.example.email", defIp4me.expandDomain("%{dr}"));
-        assertEquals("example.email", defIp4me.expandDomain("%{d2r}"));
+        assertEquals("email.example.com", defIp4me.expand("%{d}", new 
rfcIP4MacroData(), MacroExpand.DOMAIN));
+        assertEquals("email.example.com", defIp4me.expand("%{d4}", new 
rfcIP4MacroData(), MacroExpand.DOMAIN));
+        assertEquals("email.example.com", defIp4me.expand("%{d3}", new 
rfcIP4MacroData(), MacroExpand.DOMAIN));
+        assertEquals("example.com", defIp4me.expand("%{d2}", new 
rfcIP4MacroData(), MacroExpand.DOMAIN));
+        assertEquals("com", defIp4me.expand("%{d1}", new rfcIP4MacroData(), 
MacroExpand.DOMAIN));
+        assertEquals("com.example.email", defIp4me.expand("%{dr}", new 
rfcIP4MacroData(), MacroExpand.DOMAIN));
+        assertEquals("example.email", defIp4me.expand("%{d2r}", new 
rfcIP4MacroData(), MacroExpand.DOMAIN));
     }
 
     public void testPercL() throws PermErrorException {
-        assertEquals("strong-bad", defIp4me.expandDomain("%{l}"));
-        assertEquals("strong.bad", defIp4me.expandDomain("%{l-}"));
-        assertEquals("strong-bad", defIp4me.expandDomain("%{lr}"));
-        assertEquals("bad.strong", defIp4me.expandDomain("%{lr-}"));
-        assertEquals("strong", defIp4me.expandDomain("%{l1r-}"));
+        assertEquals("strong-bad", defIp4me.expand("%{l}", new 
rfcIP4MacroData(), MacroExpand.DOMAIN));
+        assertEquals("strong.bad", defIp4me.expand("%{l-}", new 
rfcIP4MacroData(), MacroExpand.DOMAIN));
+        assertEquals("strong-bad", defIp4me.expand("%{lr}", new 
rfcIP4MacroData(), MacroExpand.DOMAIN));
+        assertEquals("bad.strong", defIp4me.expand("%{lr-}", new 
rfcIP4MacroData(), MacroExpand.DOMAIN));
+        assertEquals("strong", defIp4me.expand("%{l1r-}", new 
rfcIP4MacroData(), MacroExpand.DOMAIN));
     }
 
     public void testExample1() throws PermErrorException {
         assertEquals("3.2.0.192.in-addr._spf.example.com", defIp4me
-                .expandDomain("%{ir}.%{v}._spf.%{d2}"));
+                .expand("%{ir}.%{v}._spf.%{d2}", new rfcIP4MacroData(), 
MacroExpand.DOMAIN));
     }
 
     public void testExample2() throws PermErrorException {
         assertEquals("bad.strong.lp._spf.example.com", defIp4me
-                .expandDomain("%{lr-}.lp._spf.%{d2}"));
+                .expand("%{lr-}.lp._spf.%{d2}", new rfcIP4MacroData(), 
MacroExpand.DOMAIN));
     }
 
     public void testExample3() throws PermErrorException {
         assertEquals("bad.strong.lp.3.2.0.192.in-addr._spf.example.com",
-                defIp4me.expandDomain("%{lr-}.lp.%{ir}.%{v}._spf.%{d2}"));
+                defIp4me.expand("%{lr-}.lp.%{ir}.%{v}._spf.%{d2}", new 
rfcIP4MacroData(), MacroExpand.DOMAIN));
     }
 
     public void testExample4() throws PermErrorException {
         assertEquals("3.2.0.192.in-addr.strong.lp._spf.example.com", defIp4me
-                .expandDomain("%{ir}.%{v}.%{l1r-}.lp._spf.%{d2}"));
+                .expand("%{ir}.%{v}.%{l1r-}.lp._spf.%{d2}", new 
rfcIP4MacroData(), MacroExpand.DOMAIN));
     }
 
     public void testExample5() throws PermErrorException {
         assertEquals("example.com.trusted-domains.example.net", defIp4me
-                .expandDomain("%{d2}.trusted-domains.example.net"));
+                .expand("%{d2}.trusted-domains.example.net", new 
rfcIP4MacroData(), MacroExpand.DOMAIN));
     }
 
     public void testExample6_ipv6() throws PermErrorException {
         assertEquals(
                 
"1.0.B.C.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.B.D.0.1.0.0.2.ip6._spf.example.com",
-                defIp6me.expandDomain("%{ir}.%{v}._spf.%{d2}"));
+                defIp6me.expand("%{ir}.%{v}._spf.%{d2}", new 
rfcIP6MacroData(), MacroExpand.DOMAIN));
     }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to