[logback-dev] svn commit: r708 - in logback/trunk/logback-core/src: main/java/ch/qos/logback/core/joran/spi test/java/ch/qos/logback/core test/java/ch/qos/logback/core/joran test/java/ch/qos/logback/core/joran/action
noreply.ceki at qos.ch
noreply.ceki at qos.ch
Wed Oct 18 12:33:40 CEST 2006
Author: ceki
Date: Wed Oct 18 12:33:40 2006
New Revision: 708
Modified:
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/Interpreter.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/AllTest.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/SkippingInInterpreterTest.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/TrivialConfigurator.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/TrivialcConfiguratorTest.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/HelloAction.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/TouchAction.java
Log:
Interpreter no longer extends DefaultHandler. This change ensures that project as a whole
stops accessing Interpreter directly and always goes through a Configurator which
goes about its business of configuring in two steps, a event registration step and a replay
(and interpret) step.
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/Interpreter.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/Interpreter.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/Interpreter.java Wed Oct 18 12:33:40 2006
@@ -18,9 +18,6 @@
import org.xml.sax.Attributes;
import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.helpers.DefaultHandler;
import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.action.ImplicitAction;
@@ -58,7 +55,7 @@
* @author Ceki Gülcuü
*
*/
-public class Interpreter extends DefaultHandler {
+public class Interpreter {
private static List EMPTY_LIST = new Vector(0);
private RuleStore ruleStore;
private ExecutionContext ec;
@@ -102,7 +99,7 @@
startElement(se.namespaceURI, se.localName, se.qName, se.attributes);
}
- public void startElement(String namespaceURI, String localName, String qName,
+ private void startElement(String namespaceURI, String localName, String qName,
Attributes atts) {
String tagName = getTagName(localName, qName);
@@ -146,7 +143,7 @@
endElement(endEvent.namespaceURI, endEvent.localName, endEvent.qName);
}
- public void endElement(String namespaceURI, String localName, String qName) {
+ private void endElement(String namespaceURI, String localName, String qName) {
List applicableActionList = (List) actionListStack.pop();
// System.out.println("endElement ["+getTagName(localName, qName)+"]");
@@ -270,7 +267,7 @@
}
}
- void callBodyAction(List applicableActionList, String body) {
+ private void callBodyAction(List applicableActionList, String body) {
if (applicableActionList == null) {
return;
}
@@ -287,7 +284,7 @@
}
}
- void callEndAction(List applicableActionList, String tagName) {
+ private void callEndAction(List applicableActionList, String tagName) {
if (applicableActionList == null) {
return;
}
@@ -329,95 +326,5 @@
this.ruleStore = ruleStore;
}
- // /**
- // * Call the finish methods for all actions. Unfortunately, the endDocument
- // * method is not called in case of errors in the XML document, which
- // * makes endDocument() pretty damn useless.
- // */
- // public void endDocument() {
- // Set arrayListSet = ruleStore.getActionSet();
- // Iterator iterator = arrayListSet.iterator();
- // while(iterator.hasNext()) {
- // ArrayList al = (ArrayList) iterator.next();
- // for(int i = 0; i < al.size(); i++) {
- // Action a = (Action) al.get(i);
- // a.endDocument(ec);
- // }
- // }
- // }
- public void error(SAXParseException spe) throws SAXException {
- ec.addError("Parsing error", this, spe);
- ec.addError("Parsing problem on line " + spe.getLineNumber()
- + " and column " + spe.getColumnNumber(), this, spe);
- }
-
- public void fatalError(SAXParseException spe) throws SAXException {
- ec.addError("Parsing fatal error", this, spe);
- ec.addError("Parsing problem on line " + spe.getLineNumber()
- + " and column " + spe.getColumnNumber(), this, spe);
- }
-
- public void warning(SAXParseException spe) throws SAXException {
- ec.addWarn("Parsing warning", this, spe);
- ec.addWarn("Parsing problem on line " + spe.getLineNumber()
- + " and column " + spe.getColumnNumber(), this, spe);
- }
-
- public void endPrefixMapping(java.lang.String prefix) {
- }
-
- public void ignorableWhitespace(char[] ch, int start, int length) {
- }
-
- public void processingInstruction(java.lang.String target,
- java.lang.String data) {
- }
-
- public void skippedEntity(java.lang.String name) {
- }
-
- public void startPrefixMapping(java.lang.String prefix, java.lang.String uri) {
- }
-
- // public EntityResolver getEntityResolver() {
- // return entityResolver;
- // }
- //
- // public void setEntityResolver(EntityResolver entityResolver) {
- // this.entityResolver = entityResolver;
- // }
-
- /**
- * If a specific entityResolver is set for this Interpreter instance, then we
- * use it to resolve entities. Otherwise, we use the default implementation
- * offered by the super class.
- *
- * <p>
- * Due to inexplicable voodoo, the original resolveEntity method in
- * org.xml.sax.helpers.DefaultHandler declares throwing an IOException,
- * whereas the org.xml.sax.helpers.DefaultHandler class included in JDK 1.4
- * masks this exception.
- *
- * <p>
- * In order to compile under JDK 1.4, we are forced to mask the IOException as
- * well. Since its signatures varies, we cannot call our super class'
- * resolveEntity method. We are forced to implement the default behavior
- * ourselves, which in this case, is just returning null.
- *
- */
- // public InputSource resolveEntity(String publicId, String systemId) throws
- // SAXException {
- // if(entityResolver == null) {
- // // the default implementation is to return null
- // return null;
- // } else {
- // try {
- // return entityResolver.resolveEntity(publicId, systemId);
- // } catch(IOException ioe) {
- // // fall back to the default "implementation"
- // return null;
- // }
- // }
- // }
}
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/AllTest.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/AllTest.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/AllTest.java Wed Oct 18 12:33:40 2006
@@ -1,14 +1,12 @@
package ch.qos.logback.core;
-
-
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class AllTest extends TestCase {
- public static Test suite() {
+ public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(ch.qos.logback.core.util.PackageTest.suite());
suite.addTest(ch.qos.logback.core.pattern.AllTest.suite());
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/SkippingInInterpreterTest.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/SkippingInInterpreterTest.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/SkippingInInterpreterTest.java Wed Oct 18 12:33:40 2006
@@ -9,22 +9,22 @@
*/
package ch.qos.logback.core.joran;
+import java.util.HashMap;
+
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
+import ch.qos.logback.core.Context;
import ch.qos.logback.core.ContextBase;
+import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.action.BadBeginAction;
import ch.qos.logback.core.joran.action.BadEndAction;
import ch.qos.logback.core.joran.action.HelloAction;
import ch.qos.logback.core.joran.action.TouchAction;
-import ch.qos.logback.core.joran.spi.ExecutionContext;
-import ch.qos.logback.core.joran.spi.Interpreter;
import ch.qos.logback.core.joran.spi.Pattern;
-import ch.qos.logback.core.joran.spi.RuleStore;
-import ch.qos.logback.core.joran.spi.SimpleRuleStore;
import ch.qos.logback.core.util.Constants;
@@ -36,8 +36,12 @@
*/
public class SkippingInInterpreterTest extends TestCase {
+ HashMap<Pattern, Action> rulesMap = new HashMap<Pattern, Action>();
+ Context context = new ContextBase();
+
public SkippingInInterpreterTest(String name) {
super(name);
+
}
protected void setUp() throws Exception {
@@ -63,22 +67,21 @@
* @throws Exception
*/
public void testChildrenSkipping() throws Exception {
- RuleStore rs = new SimpleRuleStore(new ContextBase());
- rs.addRule(new Pattern("test"), new NOPAction());
- rs.addRule(new Pattern("test/badBegin"), new BadBeginAction());
- rs.addRule(new Pattern("test/badBegin/touch"), new TouchAction());
- rs.addRule(new Pattern("test/hello"), new HelloAction());
-
- Interpreter jp = new Interpreter(rs);
- ExecutionContext ec = jp.getExecutionContext();
- ec.setContext(new ContextBase());
-
- SAXParser saxParser = createParser();
- saxParser.parse("file:" + Constants.TEST_DIR_PREFIX + "input/joran/exception1.xml", jp);
- String str = (String) ec.getObjectMap().get("hello");
+
+ rulesMap.put(new Pattern("test"), new NOPAction());
+ rulesMap.put(new Pattern("test/badBegin"), new BadBeginAction());
+ rulesMap.put(new Pattern("test/badBegin/touch"), new TouchAction());
+ rulesMap.put(new Pattern("test/hello"), new HelloAction());
+
+ TrivialConfigurator tc = new TrivialConfigurator(rulesMap);
+ tc.setContext(context);
+
+ tc.doConfigure(Constants.TEST_DIR_PREFIX + "input/joran/exception1.xml");
+
+ String str = context.getProperty("hello");
assertEquals("Hello John Doe.", str);
- Object i = ec.getObjectMap().get(TouchAction.KEY);
+ Object i = (String) context.getObject(TouchAction.KEY);
assertNull(i);
}
@@ -90,43 +93,38 @@
*/
public void testSkipSiblings() throws Exception {
- RuleStore rs = new SimpleRuleStore(new ContextBase());
- rs.addRule(new Pattern("test"), new NOPAction());
- rs.addRule(new Pattern("test/badEnd"), new BadEndAction());
- rs.addRule(new Pattern("test/badEnd/touch"), new TouchAction());
- rs.addRule(new Pattern("test/hello"), new HelloAction());
-
- Interpreter jp = new Interpreter(rs);
- ExecutionContext ec = jp.getExecutionContext();
- ec.setContext(new ContextBase());
+ rulesMap.put(new Pattern("test"), new NOPAction());
+ rulesMap.put(new Pattern("test/badEnd"), new BadEndAction());
+ rulesMap.put(new Pattern("test/badEnd/touch"), new TouchAction());
+ rulesMap.put(new Pattern("test/hello"), new HelloAction());
+
+ TrivialConfigurator tc = new TrivialConfigurator(rulesMap);
+ tc.setContext(context);
- SAXParser saxParser = createParser();
- saxParser.parse("file:" + Constants.TEST_DIR_PREFIX + "input/joran/badEnd1.xml", jp);
+ tc.doConfigure(Constants.TEST_DIR_PREFIX + "input/joran/badEnd1.xml");
+
- String str = (String) ec.getObjectMap().get("hello");
+ String str = context.getProperty("hello");
assertNull(str);
- Integer i = (Integer) ec.getObjectMap().get(TouchAction.KEY);
+ Integer i = (Integer) context.getObject(TouchAction.KEY);
assertEquals(2, i.intValue());
}
public void testSkipSiblings2() throws Exception {
- RuleStore rs = new SimpleRuleStore(new ContextBase());
- rs.addRule(new Pattern("test"), new NOPAction());
- rs.addRule(new Pattern("test/isolate/badEnd"), new BadEndAction());
- rs.addRule(new Pattern("*/touch"), new TouchAction());
- rs.addRule(new Pattern("test/hello"), new HelloAction());
-
- Interpreter jp = new Interpreter(rs);
- ExecutionContext ec = jp.getExecutionContext();
- ec.setContext(new ContextBase());
+ rulesMap.put(new Pattern("test"), new NOPAction());
+ rulesMap.put(new Pattern("test/isolate/badEnd"), new BadEndAction());
+ rulesMap.put(new Pattern("*/touch"), new TouchAction());
+ rulesMap.put(new Pattern("test/hello"), new HelloAction());
+
+ TrivialConfigurator tc = new TrivialConfigurator(rulesMap);
+ tc.setContext(context);
- SAXParser saxParser = createParser();
- saxParser.parse("file:" + Constants.TEST_DIR_PREFIX + "input/joran/badEnd2.xml", jp);
+ tc.doConfigure(Constants.TEST_DIR_PREFIX + "input/joran/badEnd2.xml");
- String str = (String) ec.getObjectMap().get("hello");
+ String str = context.getProperty("hello");
assertEquals("Hello John Doe.", str);
- Integer i = (Integer) ec.getObjectMap().get(TouchAction.KEY);
+ Integer i = (Integer) context.getObject(TouchAction.KEY);
assertEquals(1, i.intValue());
}
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/TrivialConfigurator.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/TrivialConfigurator.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/TrivialConfigurator.java Wed Oct 18 12:33:40 2006
@@ -1,20 +1,30 @@
package ch.qos.logback.core.joran;
-import ch.qos.logback.core.joran.action.IncAction;
+import java.util.HashMap;
+
+import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.spi.Interpreter;
import ch.qos.logback.core.joran.spi.Pattern;
import ch.qos.logback.core.joran.spi.RuleStore;
public class TrivialConfigurator extends GenericConfigurator {
+ HashMap<Pattern, Action> rulesMap;
+
+ TrivialConfigurator(HashMap<Pattern, Action> rules) {
+ this.rulesMap = rules;
+ }
+
@Override
protected void addImplicitRules(Interpreter interpreter) {
}
@Override
protected void addInstanceRules(RuleStore rs) {
- rs.addRule(new Pattern("x/inc"), new IncAction());
-
+ for(Pattern pattern : rulesMap.keySet()) {
+ Action action = rulesMap.get(pattern);
+ rs.addRule(pattern, action);
+ }
}
}
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/TrivialcConfiguratorTest.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/TrivialcConfiguratorTest.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/TrivialcConfiguratorTest.java Wed Oct 18 12:33:40 2006
@@ -1,9 +1,13 @@
package ch.qos.logback.core.joran;
+import java.util.HashMap;
+
import junit.framework.TestCase;
import ch.qos.logback.core.Context;
import ch.qos.logback.core.ContextBase;
+import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.action.IncAction;
+import ch.qos.logback.core.joran.spi.Pattern;
import ch.qos.logback.core.util.Constants;
public class TrivialcConfiguratorTest extends TestCase {
@@ -24,7 +28,11 @@
public void doTest(String filename) throws Exception {
- TrivialConfigurator gc = new TrivialConfigurator();
+ HashMap<Pattern, Action> rulesMap = new HashMap<Pattern, Action>();
+ rulesMap.put(new Pattern("x/inc"), new IncAction());
+
+ TrivialConfigurator gc = new TrivialConfigurator(rulesMap);
+
gc.setContext(context);
gc.doConfigure(Constants.TEST_DIR_PREFIX
+ "input/joran/"+ filename);
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/HelloAction.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/HelloAction.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/HelloAction.java Wed Oct 18 12:33:40 2006
@@ -27,7 +27,7 @@
*/
public void begin(ExecutionContext ec, String name, Attributes attributes) {
String str = "Hello "+attributes.getValue("name")+".";
- ec.getObjectMap().put("hello", str);
+ ec.getContext().setProperty("hello", str);
}
/**
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/TouchAction.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/TouchAction.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/TouchAction.java Wed Oct 18 12:33:40 2006
@@ -29,11 +29,11 @@
*
*/
public void begin(ExecutionContext ec, String name, Attributes attributes) {
- Integer i = (Integer) ec.getObjectMap().get(KEY);
+ Integer i = (Integer) ec.getContext().getObject(KEY);
if(i == null) {
- ec.getObjectMap().put(KEY, new Integer(1));
+ ec.getContext().putObject(KEY, new Integer(1));
} else {
- ec.getObjectMap().put(KEY, new Integer(i.intValue()+1));
+ ec.getContext().putObject(KEY, new Integer(i.intValue()+1));
}
}
More information about the logback-dev
mailing list