001    /* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 2.1 */
002    package org.activemq.selector;
003    
004    public class TokenMgrError extends Error {
005        /*
006         * Ordinals for various reasons why an Error of this type can be thrown.
007         */
008    
009        /**
010         * Lexical error occured.
011         */
012        static final int LEXICAL_ERROR = 0;
013    
014        /**
015         * An attempt wass made to create a second instance of a static token manager.
016         */
017        static final int STATIC_LEXER_ERROR = 1;
018    
019        /**
020         * Tried to change to an invalid lexical state.
021         */
022        static final int INVALID_LEXICAL_STATE = 2;
023    
024        /**
025         * Detected (and bailed out of) an infinite loop in the token manager.
026         */
027        static final int LOOP_DETECTED = 3;
028    
029        /**
030         * Indicates the reason why the exception is thrown. It will have
031         * one of the above 4 values.
032         */
033        int errorCode;
034    
035        /**
036         * Replaces unprintable characters by their espaced (or unicode escaped)
037         * equivalents in the given string
038         */
039        protected static final String addEscapes(String str) {
040            StringBuffer retval = new StringBuffer();
041            char ch;
042            for (int i = 0; i < str.length(); i++) {
043                switch (str.charAt(i)) {
044                    case 0:
045                        continue;
046                    case '\b':
047                        retval.append("\\b");
048                        continue;
049                    case '\t':
050                        retval.append("\\t");
051                        continue;
052                    case '\n':
053                        retval.append("\\n");
054                        continue;
055                    case '\f':
056                        retval.append("\\f");
057                        continue;
058                    case '\r':
059                        retval.append("\\r");
060                        continue;
061                    case '\"':
062                        retval.append("\\\"");
063                        continue;
064                    case '\'':
065                        retval.append("\\\'");
066                        continue;
067                    case '\\':
068                        retval.append("\\\\");
069                        continue;
070                    default:
071                        if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
072                            String s = "0000" + Integer.toString(ch, 16);
073                            retval.append("\\u" + s.substring(s.length() - 4, s.length()));
074                        }
075                        else {
076                            retval.append(ch);
077                        }
078                        continue;
079                }
080            }
081            return retval.toString();
082        }
083    
084        /**
085         * Returns a detailed message for the Error when it is thrown by the
086         * token manager to indicate a lexical error.
087         * Parameters :
088         * EOFSeen     : indicates if EOF caused the lexicl error
089         * curLexState : lexical state in which this error occured
090         * errorLine   : line number when the error occured
091         * errorColumn : column number when the error occured
092         * errorAfter  : prefix that was seen before this error occured
093         * curchar     : the offending character
094         * Note: You can customize the lexical error message by modifying this method.
095         */
096        private static final String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
097            return ("Lexical error at line " +
098                    errorLine + ", column " +
099                    errorColumn + ".  Encountered: " +
100                    (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int) curChar + "), ") +
101                    "after : \"" + addEscapes(errorAfter) + "\"");
102        }
103    
104        /**
105         * You can also modify the body of this method to customize your error messages.
106         * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
107         * of end-users concern, so you can return something like :
108         * <p/>
109         * "Internal Error : Please file a bug report .... "
110         * <p/>
111         * from this method for such cases in the release version of your parser.
112         */
113        public String getMessage() {
114            return super.getMessage();
115        }
116    
117        /*
118         * Constructors of various flavors follow.
119         */
120    
121        public TokenMgrError() {
122        }
123    
124        public TokenMgrError(String message, int reason) {
125            super(message);
126            errorCode = reason;
127        }
128    
129        public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
130            this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
131        }
132    }