You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ra...@apache.org on 2005/10/09 06:35:05 UTC
svn commit: r307359 - in
/jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env:
LogUtils.java SimpleErrorHandler.java SimpleErrorReporter.java
SimpleSCXMLListener.java
Author: rahul
Date: Sat Oct 8 21:35:01 2005
New Revision: 307359
URL: http://svn.apache.org/viewcvs?rev=307359&view=rev
Log:
Added simple loggers that implement ErrorHandler, ErrorReporter and SCXMLListener.
Added:
jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/LogUtils.java (with props)
jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleErrorHandler.java (with props)
jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleErrorReporter.java (with props)
jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleSCXMLListener.java (with props)
Added: jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/LogUtils.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/LogUtils.java?rev=307359&view=auto
==============================================================================
--- jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/LogUtils.java (added)
+++ jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/LogUtils.java Sat Oct 8 21:35:01 2005
@@ -0,0 +1,79 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.commons.scxml.env;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import org.apache.commons.scxml.model.Transition;
+import org.apache.commons.scxml.model.TransitionTarget;
+
+/**
+ * Helper methods for Commons SCXML logging.
+ *
+ */
+public class LogUtils {
+
+ /**
+ * Create a human readable log view of this transition.
+ *
+ * @param from The source TransitionTarget
+ * @param to The destination TransitionTarget
+ * @param transition The Transition that is taken
+ * @return String The human readable log entry
+ */
+ public static String transToString(final TransitionTarget from,
+ final TransitionTarget to, final Transition transition) {
+ StringBuffer buf = new StringBuffer("transition (");
+ buf.append("event = ").append(transition.getEvent());
+ buf.append(", cond = ").append(transition.getCond());
+ buf.append(", from = ").append(getTTPath(from));
+ buf.append(", to = ").append(getTTPath(to));
+ buf.append(')');
+ return buf.toString();
+ }
+
+ /**
+ * Write out this TransitionTarget location in a XPath style format.
+ *
+ * @param tt The TransitionTarget whose "path" is to needed
+ * @return String The XPath style location of the TransitionTarget within
+ * the SCXML document
+ */
+ public static String getTTPath(final TransitionTarget tt) {
+ TransitionTarget parent = tt.getParent();
+ if (parent == null) {
+ return "/" + tt.getId();
+ } else {
+ LinkedList pathElements = new LinkedList();
+ pathElements.addFirst(tt);
+ while (parent != null) {
+ pathElements.addFirst(parent);
+ parent = parent.getParent();
+ }
+ StringBuffer names = new StringBuffer();
+ for (Iterator i = pathElements.iterator(); i.hasNext();) {
+ TransitionTarget pathElement = (TransitionTarget) i.next();
+ names.append('/').append(pathElement.getId());
+ }
+ return names.toString();
+ }
+ }
+
+}
+
Propchange: jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/LogUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/LogUtils.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleErrorHandler.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleErrorHandler.java?rev=307359&view=auto
==============================================================================
--- jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleErrorHandler.java (added)
+++ jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleErrorHandler.java Sat Oct 8 21:35:01 2005
@@ -0,0 +1,77 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.commons.scxml.env;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.SAXParseException;
+
+/**
+ * Custom error handler that logs the parsing errors in the
+ * SCXML document.
+ */
+public class SimpleErrorHandler implements ErrorHandler {
+
+ /** Message prefix. */
+ private static final String MSG_PREFIX = "SCXML SAX Parsing: ";
+ /** Message postfix. */
+ private static final String MSG_POSTFIX = " Correct the SCXML document.";
+
+ /** Log. */
+ private Log log = LogFactory.getLog(getClass());
+
+ /**
+ * Constructor.
+ */
+ public SimpleErrorHandler() {
+ super();
+ }
+
+ /**
+ * @see ErrorHandler#error(SAXParseException)
+ */
+ public void error(SAXParseException exception) {
+ if (log.isErrorEnabled()) {
+ log.error(MSG_PREFIX + exception.getMessage() + MSG_POSTFIX,
+ exception);
+ }
+ }
+
+ /**
+ * @see ErrorHandler#fatalError(SAXParseException)
+ */
+ public void fatalError(SAXParseException exception) {
+ if (log.isFatalEnabled()) {
+ log.fatal(MSG_PREFIX + exception.getMessage() + MSG_POSTFIX,
+ exception);
+ }
+ }
+
+ /**
+ * @see ErrorHandler#warning(SAXParseException)
+ */
+ public void warning(SAXParseException exception) {
+ if (log.isWarnEnabled()) {
+ log.warn(MSG_PREFIX + exception.getMessage() + MSG_POSTFIX,
+ exception);
+ }
+ }
+}
+
Propchange: jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleErrorHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleErrorHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleErrorReporter.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleErrorReporter.java?rev=307359&view=auto
==============================================================================
--- jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleErrorReporter.java (added)
+++ jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleErrorReporter.java Sat Oct 8 21:35:01 2005
@@ -0,0 +1,120 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.commons.scxml.env;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.commons.scxml.ErrorReporter;
+import org.apache.commons.scxml.model.SCXML;
+import org.apache.commons.scxml.model.State;
+import org.apache.commons.scxml.model.Transition;
+import org.apache.commons.scxml.model.TransitionTarget;
+
+/**
+ * Custom error reporter that log execution errors.
+ */
+public class SimpleErrorReporter implements ErrorReporter {
+
+ /** Log. */
+ private Log log = LogFactory.getLog(getClass());
+
+ /**
+ * Constructor.
+ */
+ public SimpleErrorReporter() {
+ super();
+ }
+
+ /**
+ * @see ErrorReporter#onError(String, String, Object)
+ */
+ public void onError(final String errorCode, final String errDetail,
+ final Object errCtx) {
+ //Note: the if-then-else below is based on the actual usage
+ // (codebase search), it has to be kept up-to-date as the code changes
+ String errCode = errorCode.intern();
+ StringBuffer msg = new StringBuffer();
+ msg.append(errCode).append(" (");
+ msg.append(errDetail).append("): ");
+ if (errCode == ErrorReporter.NO_INITIAL) {
+ if (errCtx instanceof SCXML) {
+ //determineInitialStates
+ msg.append("<SCXML>");
+ } else if (errCtx instanceof State) {
+ //determineInitialStates
+ //determineTargetStates
+ msg.append("State " + LogUtils.getTTPath((State) errCtx));
+ }
+ } else if (errCode == ErrorReporter.UNKNOWN_ACTION) {
+ //executeActionList
+ msg.append("Action: " + errCtx.getClass().getName());
+ } else if (errCode == ErrorReporter.NON_DETERMINISTIC) {
+ //filterTransitionSet
+ msg.append(" [");
+ if (errCtx instanceof HashSet) {
+ for (Iterator i = ((Set) errCtx).iterator(); i.hasNext();) {
+ Transition t = (Transition) i.next();
+ msg.append(LogUtils.transToString(t.getParent(),
+ t.getTarget(), t));
+ if (i.hasNext()) {
+ msg.append(", ");
+ }
+ }
+ }
+ msg.append(']');
+ } else if (errCode == ErrorReporter.ILLEGAL_CONFIG) {
+ //isLegalConfig
+ if (errCtx instanceof Map.Entry) {
+ TransitionTarget tt = (TransitionTarget)
+ (((Map.Entry) errCtx).getKey());
+ Set vals = (Set) (((Map.Entry) errCtx).getValue());
+ msg.append(LogUtils.getTTPath(tt) + " : [");
+ for (Iterator i = vals.iterator(); i.hasNext();) {
+ TransitionTarget tx = (TransitionTarget) i.next();
+ msg.append(LogUtils.getTTPath(tx));
+ if (i.hasNext()) {
+ msg.append(", ");
+ }
+ }
+ msg.append(']');
+ } else if (errCtx instanceof Set) {
+ Set vals = (Set) errCtx;
+ msg.append("<SCXML> : [");
+ for (Iterator i = vals.iterator(); i.hasNext();) {
+ TransitionTarget tx = (TransitionTarget) i.next();
+ msg.append(LogUtils.getTTPath(tx));
+ if (i.hasNext()) {
+ msg.append(", ");
+ }
+ }
+ msg.append(']');
+ }
+ }
+ if (log.isWarnEnabled()) {
+ log.warn(msg.toString());
+ }
+ }
+
+}
+
Propchange: jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleErrorReporter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleErrorReporter.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleSCXMLListener.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleSCXMLListener.java?rev=307359&view=auto
==============================================================================
--- jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleSCXMLListener.java (added)
+++ jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleSCXMLListener.java Sat Oct 8 21:35:01 2005
@@ -0,0 +1,66 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.commons.scxml.env;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.commons.scxml.SCXMLListener;
+import org.apache.commons.scxml.model.Transition;
+import org.apache.commons.scxml.model.TransitionTarget;
+
+
+/**
+ * Simple SCXML Listener that logs execution.
+ */
+public class SimpleSCXMLListener implements SCXMLListener {
+
+ /** Log. */
+ private Log log = LogFactory.getLog(getClass());
+
+
+ /**
+ * @see SCXMLListener#onEntry(TransitionTarget)
+ */
+ public void onEntry(final TransitionTarget state) {
+ if (log.isInfoEnabled()) {
+ log.info(LogUtils.getTTPath(state));
+ }
+ }
+
+ /**
+ * @see SCXMLListener#onExit(TransitionTarget)
+ */
+ public void onExit(final TransitionTarget state) {
+ if (log.isInfoEnabled()) {
+ log.info(LogUtils.getTTPath(state));
+ }
+ }
+
+ /**
+* @see SCXMLListener#onTransition(TransitionTarget,TransitionTarget,Transition)
+ */
+ public void onTransition(final TransitionTarget from,
+ final TransitionTarget to, final Transition transition) {
+ if (log.isInfoEnabled()) {
+ log.info(LogUtils.transToString(from, to, transition));
+ }
+ }
+
+}
+
Propchange: jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleSCXMLListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/scxml/trunk/src/main/java/org/apache/commons/scxml/env/SimpleSCXMLListener.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org