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]