Author: bago
Date: Mon Apr 16 10:48:02 2007
New Revision: 529341

URL: http://svn.apache.org/viewvc?view=rev&rev=529341
Log:
Removed dns dependency from SPF1Data: now MacroExpand has dns dependency and 
take care of managing this.
Introduced MacroExpandEnabled to declare dependency on MacroExpand services and 
moved it to a singleton service (performance improvement)

Added:
    
james/jspf/trunk/src/main/java/org/apache/james/jspf/wiring/MacroExpandEnabled.java
Modified:
    james/jspf/trunk/src/main/java/org/apache/james/jspf/SPF.java
    james/jspf/trunk/src/main/java/org/apache/james/jspf/core/SPF1Data.java
    james/jspf/trunk/src/main/java/org/apache/james/jspf/macro/MacroExpand.java
    
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultSPF1Parser.java
    
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultTermsFactory.java
    
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/TermsFactory.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/AbstractYamlTest.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/SPF.java
URL: 
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/SPF.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
--- james/jspf/trunk/src/main/java/org/apache/james/jspf/SPF.java (original)
+++ james/jspf/trunk/src/main/java/org/apache/james/jspf/SPF.java Mon Apr 16 
10:48:02 2007
@@ -32,6 +32,7 @@
 import org.apache.james.jspf.exceptions.PermErrorException;
 import org.apache.james.jspf.exceptions.SPFResultException;
 import org.apache.james.jspf.exceptions.TempErrorException;
+import org.apache.james.jspf.macro.MacroExpand;
 import org.apache.james.jspf.parser.DefaultSPF1Parser;
 import org.apache.james.jspf.parser.DefaultTermsFactory;
 import org.apache.james.jspf.policies.ChainPolicy;
@@ -49,6 +50,7 @@
 import org.apache.james.jspf.policies.local.TrustedForwarderPolicy;
 import org.apache.james.jspf.wiring.DNSServiceEnabled;
 import org.apache.james.jspf.wiring.LogEnabled;
+import org.apache.james.jspf.wiring.MacroExpandEnabled;
 import org.apache.james.jspf.wiring.SPFCheckEnabled;
 import org.apache.james.jspf.wiring.WiringServiceTable;
 
@@ -78,6 +80,8 @@
     
     private boolean mustEquals = false;
 
+    private MacroExpand macroExpand;
+
     /**
      * Uses passed logger and passed dnsServicer
      * 
@@ -91,6 +95,8 @@
         WiringServiceTable wiringService = new WiringServiceTable();
         wiringService.put(LogEnabled.class, this.log);
         wiringService.put(DNSServiceEnabled.class, this.dnsProbe);
+        this.macroExpand = new 
MacroExpand(logger.getChildLogger("macroExpand"), this.dnsProbe);
+        wiringService.put(MacroExpandEnabled.class, this.macroExpand);
         this.parser = new DefaultSPF1Parser(logger.getChildLogger("parser"), 
new DefaultTermsFactory(logger.getChildLogger("termsfactory"), wiringService));
         // We add this after the parser creation because services cannot be 
null
         wiringService.put(SPFCheckEnabled.class, this.parser);
@@ -104,11 +110,12 @@
      * @param parser the parser to use
      * @param logger the logger to use
      */
-    public SPF(DNSService dnsProbe, SPFRecordParser parser, Logger logger) {
+    public SPF(DNSService dnsProbe, SPFRecordParser parser, Logger logger, 
MacroExpand macroExpand) {
         super();
         this.dnsProbe = dnsProbe;
         this.parser = parser;
         this.log = logger;
+        this.macroExpand = macroExpand;
     }
 
     /**
@@ -130,7 +137,6 @@
         try {
             // Setup the data
             spfData = new SPF1Data(mailFrom, hostName, ipAddress);
-            spfData.enableDNSService(dnsProbe);
             checkSPF(spfData);
             String resultChar = spfData.getCurrentResult() != null ? 
spfData.getCurrentResult() : "";
             result = SPF1Utils.resultToName(resultChar);
@@ -222,7 +228,7 @@
 
         policies.add(new NeutralIfNotMatchPolicy());
 
-        policies.add(new DefaultExplanationPolicy(log, defaultExplanation));
+        policies.add(new DefaultExplanationPolicy(log, defaultExplanation, 
macroExpand));
         
         policies.add(new InitialChecksPolicy());
         

Modified: 
james/jspf/trunk/src/main/java/org/apache/james/jspf/core/SPF1Data.java
URL: 
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/core/SPF1Data.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
--- james/jspf/trunk/src/main/java/org/apache/james/jspf/core/SPF1Data.java 
(original)
+++ james/jspf/trunk/src/main/java/org/apache/james/jspf/core/SPF1Data.java Mon 
Apr 16 10:48:02 2007
@@ -20,15 +20,9 @@
 
 package org.apache.james.jspf.core;
 
-import org.apache.james.jspf.SPF1Utils;
-import org.apache.james.jspf.core.DNSService.TimeoutException;
 import org.apache.james.jspf.exceptions.NoneException;
 import org.apache.james.jspf.exceptions.PermErrorException;
 import org.apache.james.jspf.macro.MacroData;
-import org.apache.james.jspf.wiring.DNSServiceEnabled;
-
-import java.util.Iterator;
-import java.util.List;
 
 /**
  * 
@@ -37,7 +31,7 @@
  * 
  */
 
-public class SPF1Data implements MacroData, DNSServiceEnabled {
+public class SPF1Data implements MacroData {
 
     private String ipAddress = ""; // also used for (i)<sending-host>
 
@@ -57,7 +51,7 @@
 
     private String readableIP = null; // (c)
 
-    private String receivingDomain = "unknown"; // (r)
+    private String receivingDomain = null; // (r)
 
     private int currentDepth = 0;
 
@@ -72,8 +66,6 @@
 
     private boolean ignoreExplanation = false;
 
-    private DNSService dnsProbe;
-
     /**
      * Build the SPF1Data from the given parameters
      * 
@@ -181,34 +173,16 @@
      * @see org.apache.james.jspf.macro.MacroData#getClientDomain()
      */
     public String getClientDomain() {
-        if (clientDomain == null) {
-            clientDomain = "unknown";
-            try {
-                boolean ip6 = IPAddr.isIPV6(ipAddress);
-                List records = 
dnsProbe.getRecords(IPAddr.getAddress(ipAddress).getReverseIP(), 
DNSService.PTR);
-
-                if (records != null && records.size() > 0) {
-                    String record = (String) records.get(0);
-                    records = dnsProbe.getRecords(record, ip6 ? 
DNSService.AAAA : DNSService.A);
-                    if (records != null && records.size() > 0) {
-                        Iterator i = records.iterator();
-                        while (i.hasNext()) {
-                            String next = (String) i.next();
-                            if 
(IPAddr.getAddress(ipAddress).toString().equals(IPAddr.getAddress(next).toString()))
 {
-                                clientDomain = record;
-                                break;
-                            }
-                        }
-                    }
-                }
-            } catch (TimeoutException e) {
-                // just return the default "unknown".
-            } catch (PermErrorException e) {
-                // just return the default "unknown".
-            }
-        }
         return clientDomain;
     }
+    
+    /**
+     * Sets the calculated clientDomain
+     * @param clientDomain the new clientDomain
+     */
+    public void setClientDomain(String clientDomain) {
+        this.clientDomain = clientDomain;
+    }
 
     /**
      * @see org.apache.james.jspf.macro.MacroData#getSenderDomain()
@@ -217,7 +191,6 @@
         return senderDomain;
     }
 
-
     /**
      * Get the ipAddress which was used to connect
      * 
@@ -264,22 +237,19 @@
      * @see org.apache.james.jspf.macro.MacroData#getReceivingDomain()
      */
     public String getReceivingDomain() {
-
-        if (receivingDomain.equals("unknown")) {
-            List dNames = dnsProbe.getLocalDomainNames();
-
-            for (int i = 0; i < dNames.size(); i++) {
-                // check if the domainname is a FQDN
-                if (SPF1Utils.checkFQDN(dNames.get(i).toString())) {
-                    receivingDomain = dNames.get(i).toString();
-                    return receivingDomain;
-                }
-            }
-        }
         return receivingDomain;
     }
     
     /**
+     * Sets the new receiving domain
+     * 
+     * @param receivingDomain the new receiving domain
+     */
+    public void setReceivingDomain(String receivingDomain) {
+        this.receivingDomain = receivingDomain;
+    }
+    
+    /**
      * Increase the current depth:
      * 
      * if we reach maximum calls we must throw a PermErrorException. See
@@ -356,13 +326,6 @@
      */
     public boolean ignoreExplanation() {
         return ignoreExplanation;
-    }
-
-    /**
-     * @see 
org.apache.james.jspf.wiring.DNSServiceEnabled#enableDNSService(org.apache.james.jspf.core.DNSService)
-     */
-    public void enableDNSService(DNSService service) {
-        this.dnsProbe = service;
     }
     
 }

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=529341&r1=529340&r2=529341
==============================================================================
--- 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 10:48:02 2007
@@ -26,13 +26,20 @@
  * 
  */
 
+import org.apache.james.jspf.SPF1Utils;
+import org.apache.james.jspf.core.DNSService;
+import org.apache.james.jspf.core.IPAddr;
 import org.apache.james.jspf.core.Logger;
+import org.apache.james.jspf.core.SPF1Data;
+import org.apache.james.jspf.core.DNSService.TimeoutException;
 import org.apache.james.jspf.exceptions.PermErrorException;
 import org.apache.james.jspf.util.SPFTermsRegexps;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -50,6 +57,8 @@
 
     private Logger log;
 
+    private DNSService dnsProbe;
+
     public static final boolean EXPLANATION = true;
     
     public static final boolean DOMAIN = false;
@@ -60,7 +69,7 @@
      * @param spfData the MacroData to use
      * @param logger the logget to use
      */
-    public MacroExpand(Logger logger) {
+    public MacroExpand(Logger logger, DNSService dnsProbe) {
         // This matches 2 groups
         domainSpecPattern = 
Pattern.compile(SPFTermsRegexps.DOMAIN_SPEC_REGEX_R);
         // The real pattern replacer
@@ -69,6 +78,7 @@
         macroLettersExpPattern = 
Pattern.compile(SPFTermsRegexps.MACRO_LETTER_PATTERN_EXP);
         macroLettersPattern = 
Pattern.compile(SPFTermsRegexps.MACRO_LETTER_PATTERN);
         log = logger;
+        this.dnsProbe = dnsProbe;
     }
     
     public String expand(String input, MacroData macroData, boolean 
isExplanation) throws PermErrorException {
@@ -306,10 +316,55 @@
             rValue = macroData.getReadableIP();
         } else if (variable.equalsIgnoreCase("p")) {
             rValue = macroData.getClientDomain();
+            if (rValue == null) {
+                rValue = "unknown";
+                if (macroData instanceof SPF1Data) {
+                    SPF1Data spf1data = (SPF1Data) macroData;
+                    try {
+                        boolean ip6 = IPAddr.isIPV6(spf1data.getIpAddress());
+                        List records = 
dnsProbe.getRecords(IPAddr.getAddress(spf1data.getIpAddress()).getReverseIP(), 
DNSService.PTR);
+    
+                        if (records != null && records.size() > 0) {
+                            String record = (String) records.get(0);
+                            records = dnsProbe.getRecords(record, ip6 ? 
DNSService.AAAA : DNSService.A);
+                            if (records != null && records.size() > 0) {
+                                Iterator i = records.iterator();
+                                while (i.hasNext()) {
+                                    String next = (String) i.next();
+                                    if 
(IPAddr.getAddress(spf1data.getIpAddress()).toString().equals(IPAddr.getAddress(next).toString()))
 {
+                                        rValue = record;
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+                    } catch (TimeoutException e) {
+                        // just return the default "unknown".
+                    } catch (PermErrorException e) {
+                        // just return the default "unknown".
+                    }
+                    spf1data.setClientDomain(rValue);
+                }
+            }
         } else if (variable.equalsIgnoreCase("o")) {
             rValue = macroData.getSenderDomain();
         } else if (variable.equalsIgnoreCase("r")) {
             rValue = macroData.getReceivingDomain();
+            if (rValue == null) {
+                rValue = "unknown";
+                List dNames = dnsProbe.getLocalDomainNames();
+
+                for (int i = 0; i < dNames.size(); i++) {
+                    // check if the domainname is a FQDN
+                    if (SPF1Utils.checkFQDN(dNames.get(i).toString())) {
+                        rValue = dNames.get(i).toString();
+                        if (macroData instanceof SPF1Data) {
+                            ((SPF1Data) macroData).setReceivingDomain(rValue);
+                        }
+                        break;
+                    }
+                }
+            }
         }
 
         if (rValue == null) {

Modified: 
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultSPF1Parser.java
URL: 
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultSPF1Parser.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
--- 
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultSPF1Parser.java
 (original)
+++ 
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultSPF1Parser.java
 Mon Apr 16 10:48:02 2007
@@ -336,7 +336,7 @@
                 Configuration subres = new MatcherBasedConfiguration(res, k, c
                         .getMatchSize());
                 try {
-                    return termsFactory.createTerm(c, subres);
+                    return termsFactory.createTerm(c.getTermDef(), subres);
                 } catch (InstantiationException e) {
                     e.printStackTrace();
                     // TODO is it ok to use a Runtime for this? Or should we 
use a PermError here?

Modified: 
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultTermsFactory.java
URL: 
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultTermsFactory.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
--- 
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultTermsFactory.java
 (original)
+++ 
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultTermsFactory.java
 Mon Apr 16 10:48:02 2007
@@ -130,9 +130,9 @@
     /**
      * @see 
org.apache.james.jspf.parser.TermsFactory#createTerm(org.apache.james.jspf.parser.TermDefinition,
 org.apache.james.jspf.core.MatcherBasedConfiguration)
      */
-    public Object createTerm(TermDefinition termDef, Configuration subres) 
throws PermErrorException, InstantiationException {
+    public Object createTerm(Class termDef, Configuration subres) throws 
PermErrorException, InstantiationException {
         try {
-            Object term = termDef.getTermDef().newInstance();
+            Object term = termDef.newInstance();
             
             try {
                 wiringService.wire(term);

Modified: 
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/TermsFactory.java
URL: 
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/TermsFactory.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
--- 
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/TermsFactory.java 
(original)
+++ 
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/TermsFactory.java 
Mon Apr 16 10:48:02 2007
@@ -33,13 +33,13 @@
     /**
      * Create a new term starting from the TermDefinition created by this 
factory
      * 
-     * @param termDef the TermDefinition (returned by this factory)
+     * @param class the TermDefinition.getTermDef (returned by this factory)
      * @param subres (the configuration)
      * @return the generated object
      * @throws PermErrorException if something goes wrong
      * @throws InstantiationException 
      */
-    public Object createTerm(TermDefinition termDef, Configuration subres)
+    public Object createTerm(Class klass, Configuration subres)
             throws PermErrorException, InstantiationException;
 
     /**

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=529341&r1=529340&r2=529341
==============================================================================
--- 
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 10:48:02 2007
@@ -44,20 +44,24 @@
      * the default explanation
      */
     private String defExplanation;
+    
+    private MacroExpand macroExpand;
 
     /**
+     * @param macroExpand 
      * @param spf
      */
-    public DefaultExplanationPolicy(Logger log, String explanation) {
+    public DefaultExplanationPolicy(Logger log, String explanation, 
MacroExpand macroExpand) {
         this.log = log;
         this.defExplanation = explanation;
+        this.macroExpand = macroExpand;
     }
 
     /**
      * @see 
org.apache.james.jspf.policies.AbstractNestedPolicy#getSPFRecordPostFilter(java.lang.String,
 org.apache.james.jspf.core.SPF1Record)
      */
     protected SPF1Record getSPFRecordPostFilter(String currentDomain, 
SPF1Record spfRecord) throws PermErrorException, TempErrorException, 
NoneException, NeutralException {
-        // Default explanation policy
+        // Default explanation policy.
         spfRecord.getModifiers().add(new SPFChecker() {
             public void checkSPF(SPF1Data spfData) throws PermErrorException, 
NoneException, TempErrorException, NeutralException {
                 
@@ -70,8 +74,7 @@
                             explanation = defExplanation;
                         }
                         try {
-                            explanation = new MacroExpand(log)
-                                    .expand(explanation, spfData, 
MacroExpand.EXPLANATION);
+                            explanation = macroExpand.expand(explanation, 
spfData, MacroExpand.EXPLANATION);
                             
                             spfData.setExplanation(explanation);
                         } catch (PermErrorException e) {

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=529341&r1=529340&r2=529341
==============================================================================
--- 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 10:48:02 2007
@@ -28,6 +28,7 @@
 import org.apache.james.jspf.macro.MacroExpand;
 import org.apache.james.jspf.util.SPFTermsRegexps;
 import org.apache.james.jspf.wiring.DNSServiceEnabled;
+import org.apache.james.jspf.wiring.MacroExpandEnabled;
 
 import java.util.List;
 
@@ -35,7 +36,7 @@
  * This class represent the exp modifier
  * 
  */
-public class ExpModifier extends GenericModifier implements DNSServiceEnabled {
+public class ExpModifier extends GenericModifier implements DNSServiceEnabled, 
MacroExpandEnabled {
 
     /**
      * ABNF: explanation = "exp" "=" domain-spec
@@ -48,6 +49,8 @@
             + SPFTermsRegexps.DOMAIN_SPEC_REGEX+"?";
 
     private DNSService dnsService;
+    
+    private MacroExpand macroExpand;
 
     /**
      * Generate the explanation and set it in SPF1Data so it can be accessed
@@ -75,7 +78,7 @@
         if (spfData.getCurrentResult()== null || 
!spfData.getCurrentResult().equals(SPF1Constants.FAIL))
             return;
 
-        host = new MacroExpand(log).expand(host, spfData, MacroExpand.DOMAIN);
+        host = macroExpand.expand(host, spfData, MacroExpand.DOMAIN);
 
         try {
             try {
@@ -86,8 +89,8 @@
             }
 
             if ((exp != null) && (!exp.equals(""))) {
-                spfData.setExplanation(new MacroExpand(log)
-                        .expand(exp, spfData, MacroExpand.EXPLANATION));
+                String expandedExplanation = macroExpand.expand(exp, spfData, 
MacroExpand.EXPLANATION);
+                spfData.setExplanation(expandedExplanation);
             } 
         } catch (PermErrorException e) {
             // TODO add logging here!
@@ -146,6 +149,14 @@
      */
     public void enableDNSService(DNSService service) {
         this.dnsService = service;
+    }
+
+
+    /**
+     * @see 
org.apache.james.jspf.wiring.MacroExpandEnabled#enableMacroExpand(org.apache.james.jspf.macro.MacroExpand)
+     */
+    public void enableMacroExpand(MacroExpand macroExpand) {
+        this.macroExpand = macroExpand;
     }
 
 }

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=529341&r1=529340&r2=529341
==============================================================================
--- 
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 10:48:02 2007
@@ -28,12 +28,13 @@
 import org.apache.james.jspf.exceptions.PermErrorException;
 import org.apache.james.jspf.macro.MacroExpand;
 import org.apache.james.jspf.wiring.LogEnabled;
+import org.apache.james.jspf.wiring.MacroExpandEnabled;
 
 /**
  * This abstract class represent a gerneric mechanism
  *  
  */
-public abstract class GenericMechanism implements Mechanism, Configurable, 
LogEnabled {
+public abstract class GenericMechanism implements Mechanism, Configurable, 
LogEnabled, MacroExpandEnabled {
 
     /**
      * ABNF: ip4-cidr-length = "/" 1*DIGIT
@@ -56,6 +57,8 @@
 
     protected Logger log;
 
+    protected MacroExpand macroExpand;
+
     /**
      * Expand the hostname
      * 
@@ -68,7 +71,7 @@
             host = spfData.getCurrentDomain();
         } else {
             // throws a PermErrorException that we cat pass through
-            host = new MacroExpand(log).expand(host, spfData, 
MacroExpand.DOMAIN);
+            host = macroExpand.expand(host, spfData, MacroExpand.DOMAIN);
         }
         return host;
     }
@@ -98,4 +101,10 @@
         this.log = logger;
     }
 
+    /**
+     * @see 
org.apache.james.jspf.wiring.MacroExpandEnabled#enableMacroExpand(org.apache.james.jspf.macro.MacroExpand)
+     */
+    public void enableMacroExpand(MacroExpand macroExpand) {
+        this.macroExpand = macroExpand;
+    }
 }

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=529341&r1=529340&r2=529341
==============================================================================
--- 
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 10:48:02 2007
@@ -34,13 +34,14 @@
 import org.apache.james.jspf.macro.MacroExpand;
 import org.apache.james.jspf.util.SPFTermsRegexps;
 import org.apache.james.jspf.wiring.LogEnabled;
+import org.apache.james.jspf.wiring.MacroExpandEnabled;
 import org.apache.james.jspf.wiring.SPFCheckEnabled;
 
 /**
  * This class represent the incude mechanism
  * 
  */
-public class IncludeMechanism implements Mechanism, Configurable, LogEnabled, 
SPFCheckEnabled {
+public class IncludeMechanism implements Mechanism, Configurable, LogEnabled, 
SPFCheckEnabled, MacroExpandEnabled {
 
     /**
      * ABNF: include = "include" ":" domain-spec
@@ -54,6 +55,8 @@
 
     private SPFChecker spfChecker;
 
+    private MacroExpand macroExpand;
+
     /**
      * Set the host which should be used for include
      * 
@@ -72,7 +75,7 @@
         spfData.increaseCurrentDepth();      
         
         // throws a PermErrorException that we can pass through
-        host = new MacroExpand(log).expand(host, spfData, MacroExpand.DOMAIN);
+        host = macroExpand.expand(host, spfData, MacroExpand.DOMAIN);
 
         String prevRes = spfData.getCurrentResult();
         String prevHost = spfData.getCurrentDomain();
@@ -149,5 +152,12 @@
      */
     public void enableSPFChecking(SPFChecker checker) {
         this.spfChecker = checker;
+    }
+
+    /**
+     * @see 
org.apache.james.jspf.wiring.MacroExpandEnabled#enableMacroExpand(org.apache.james.jspf.macro.MacroExpand)
+     */
+    public void enableMacroExpand(MacroExpand macroExpand) {
+        this.macroExpand = macroExpand;
     }
 }

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=529341&r1=529340&r2=529341
==============================================================================
--- 
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 10:48:02 2007
@@ -28,13 +28,14 @@
 import org.apache.james.jspf.exceptions.TempErrorException;
 import org.apache.james.jspf.macro.MacroExpand;
 import org.apache.james.jspf.util.SPFTermsRegexps;
+import org.apache.james.jspf.wiring.MacroExpandEnabled;
 import org.apache.james.jspf.wiring.SPFCheckEnabled;
 
 /**
  * This class represent the redirect modifier
  * 
  */
-public class RedirectModifier extends GenericModifier implements 
SPFCheckEnabled {
+public class RedirectModifier extends GenericModifier implements 
SPFCheckEnabled, MacroExpandEnabled {
 
     /**
      * ABNF: redirect = "redirect" "=" domain-spec
@@ -44,6 +45,8 @@
     
     private SPFChecker spfChecker;
 
+    private MacroExpand macroExpand;
+
     /**
      * Set the host which should be used for redirection and set it in SPF1Data
      * so it can be accessed easy later if needed
@@ -67,7 +70,7 @@
             spfData.increaseCurrentDepth();
 
             // throws a PermErrorException that we can pass through
-            host = new MacroExpand(log).expand(host, spfData, 
MacroExpand.DOMAIN);
+            host = macroExpand.expand(host, spfData, MacroExpand.DOMAIN);
 
             spfData.setCurrentDomain(host);
 
@@ -100,6 +103,13 @@
      */
     public void enableSPFChecking(SPFChecker checker) {
         this.spfChecker = checker;
+    }
+
+    /**
+     * @see 
org.apache.james.jspf.wiring.MacroExpandEnabled#enableMacroExpand(org.apache.james.jspf.macro.MacroExpand)
+     */
+    public void enableMacroExpand(MacroExpand macroExpand) {
+        this.macroExpand = macroExpand;
     }
 
 }

Added: 
james/jspf/trunk/src/main/java/org/apache/james/jspf/wiring/MacroExpandEnabled.java
URL: 
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/wiring/MacroExpandEnabled.java?view=auto&rev=529341
==============================================================================
--- 
james/jspf/trunk/src/main/java/org/apache/james/jspf/wiring/MacroExpandEnabled.java
 (added)
+++ 
james/jspf/trunk/src/main/java/org/apache/james/jspf/wiring/MacroExpandEnabled.java
 Mon Apr 16 10:48:02 2007
@@ -0,0 +1,36 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.jspf.wiring;
+
+import org.apache.james.jspf.macro.MacroExpand;
+
+/**
+ * Components that need to log can implement this interface so that
+ * the container will provide the DNSService
+ */
+public interface MacroExpandEnabled {
+    /**
+     * Provide component with a DNSService.
+     * 
+     * @param service
+     *            the dns service. Must not be <code>null</code>.
+     */
+    void enableMacroExpand(MacroExpand macroExpand);
+}
\ No newline at end of file

Modified: 
james/jspf/trunk/src/test/java/org/apache/james/jspf/AbstractYamlTest.java
URL: 
http://svn.apache.org/viewvc/james/jspf/trunk/src/test/java/org/apache/james/jspf/AbstractYamlTest.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
--- james/jspf/trunk/src/test/java/org/apache/james/jspf/AbstractYamlTest.java 
(original)
+++ james/jspf/trunk/src/test/java/org/apache/james/jspf/AbstractYamlTest.java 
Mon Apr 16 10:48:02 2007
@@ -22,10 +22,12 @@
 import org.apache.james.jspf.core.DNSService;
 import org.apache.james.jspf.core.Logger;
 import org.apache.james.jspf.core.SPFRecordParser;
+import org.apache.james.jspf.macro.MacroExpand;
 import org.apache.james.jspf.parser.DefaultSPF1Parser;
 import org.apache.james.jspf.parser.DefaultTermsFactory;
 import org.apache.james.jspf.wiring.DNSServiceEnabled;
 import org.apache.james.jspf.wiring.LogEnabled;
+import org.apache.james.jspf.wiring.MacroExpandEnabled;
 import org.apache.james.jspf.wiring.SPFCheckEnabled;
 import org.apache.james.jspf.wiring.WiringService;
 import org.jvyaml.Constructor;
@@ -51,6 +53,7 @@
     SPFYamlTestSuite data;
     String test;
     protected Logger log;
+    protected static MacroExpand macroExpand;
     protected static SPF spf;
     protected static SPFRecordParser parser;
     private static DNSService dns;
@@ -145,6 +148,9 @@
                         String[] path = 
component.getClass().toString().split("\\.");
                         ((LogEnabled) 
component).enableLogging(log.getChildLogger("dep").getChildLogger(path[path.length-1].toLowerCase()));
                     }
+                    if (component instanceof MacroExpandEnabled) {
+                        ((MacroExpandEnabled) 
component).enableMacroExpand(macroExpand);
+                    }
                     if (component instanceof DNSServiceEnabled) {
                         ((DNSServiceEnabled) component).enableDNSService(dns);
                     }
@@ -156,7 +162,8 @@
             }));
         }
         dns = new LoggingDNSService(getDNSService(), 
log.getChildLogger("dns"));
-        spf = new SPF(dns, parser, log.getChildLogger("spf"));
+        macroExpand = new MacroExpand(log.getChildLogger("macroExpand"), dns);
+        spf = new SPF(dns, parser, log.getChildLogger("spf"), macroExpand);
         /* PREVIOUS SLOW WAY 
         // we add this after the creation because it is a loop reference
         enabledServices.remove(DNSServiceEnabled.class);
@@ -220,7 +227,7 @@
      * @return
      */
     protected DNSService getDNSService() {
-        SPFYamlDNSService yamlDNSService = new SPFYamlDNSService((HashMap) 
data.getZonedata());
+        SPFYamlDNSService yamlDNSService = new 
SPFYamlDNSService(data.getZonedata());
         return yamlDNSService;
     }
 
@@ -300,7 +307,7 @@
                                 Object obj = hm.get(type);
                                 
                                 if (obj instanceof String) {
-                                    res.add((String) obj);
+                                    res.add(obj);
                                 } else if (obj instanceof ArrayList) {
                                     ArrayList a = (ArrayList) obj;
                                     StringBuffer sb = new StringBuffer();

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=529341&r1=529340&r2=529341
==============================================================================
--- 
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 10:48:02 2007
@@ -103,8 +103,8 @@
 
     protected void setUp() throws Exception {
         super.setUp();
-        defIp4me = new MacroExpand(new ConsoleLogger());
-        defIp6me = new MacroExpand(new ConsoleLogger());
+        defIp4me = new MacroExpand(new ConsoleLogger(), null);
+        defIp6me = new MacroExpand(new ConsoleLogger(), null);
     }
 
     public void testPercS() throws PermErrorException {



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

Reply via email to