001: /*=============================================================================
002: * Copyright Texas Instruments 2000. All Rights Reserved.
003: *
004: * This program is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License as published by the Free Software Foundation; either
007: * version 2 of the License, or (at your option) any later version.
008: *
009: * This program is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * Lesser General Public License for more details.
013: *
014: * You should have received a copy of the GNU Lesser General Public
015: * License along with this library; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017: *
018: * $ProjectHeader: OSCRIPT 0.155 Fri, 20 Dec 2002 18:34:22 -0800 rclark $
019: */
020:
021: package oscript.data;
022:
023: import oscript.exceptions.*;
024:
025: /**
026: * This class wraps a java exception object. At some point, we could perhaps
027: * make this a script type...
028: *
029: * @author Rob Clark (rob@ti.com)
030: * <!--$Format: " * @version $Revision$"$-->
031: * @version 1.7
032: */
033: public class OJavaException extends OException {
034: /**
035: * The type object for an instance of <i>JavaException</i>.
036: */
037: public final static Value TYPE = BuiltinType
038: .makeBuiltinType("oscript.data.OJavaException");
039: public final static String PARENT_TYPE_NAME = "oscript.data.OException";
040: public final static String TYPE_NAME = "JavaException";
041: public final static String[] MEMBER_NAMES = new String[] { "getJavaException" };
042:
043: // XXX should this be in PackagedScriptObjectException???
044: public static final PackagedScriptObjectException makeJavaExceptionWrapper(
045: Throwable t) {
046: if (t instanceof PackagedScriptObjectException)
047: return (PackagedScriptObjectException) t;
048: else
049: return PackagedScriptObjectException
050: .makeExceptionWrapper(new OJavaException(t));
051: }
052:
053: /**
054: * The java exception.
055: */
056: private Throwable t;
057:
058: /**
059: * The java exception as a script object (JavaObjectWrapper)
060: */
061: private Value ot;
062:
063: /**
064: * Class Constructor.
065: *
066: * @param t a java exception
067: */
068: public OJavaException(Throwable t) {
069: this (t, JavaBridge.convertToScriptObject(t));
070: }
071:
072: public OJavaException(Throwable t, Value ot) {
073: super (TYPE, t.getMessage());
074:
075: this .t = t;
076: this .ot = ot;
077:
078: if (DEBUG)
079: if (t instanceof PackagedScriptObjectException)
080: Thread.dumpStack();
081: }
082:
083: private static final String _toStr(Throwable t) {
084: java.io.StringWriter sw = new java.io.StringWriter();
085: t.printStackTrace(new java.io.PrintWriter(sw));
086: return sw.toString();
087: }
088:
089: /**
090: * Class Constructor. This is the constructor that is called via a
091: * <code>BuiltinType</code> instance.
092: *
093: * @param args arguments to this constructor
094: * @throws PackagedScriptObjectException(Exception) if wrong number of args
095: */
096: public OJavaException(oscript.util.MemberTable args) {
097: this ((Throwable) (args.referenceAt(0).castToJavaObject()));
098: }
099:
100: /* For better java integration we actually pretend to be a java object
101: * by forwarding all these to ot...
102: */
103:
104: public Object getMonitor() {
105: return ot.getMonitor();
106: }
107:
108: // XXX castToXYZ, bopXYZ
109:
110: public Object castToJavaObject() {
111: return ot.castToJavaObject();
112: }
113:
114: public Value getMember(int id, boolean exception)
115: throws PackagedScriptObjectException {
116: return ot.getMember(id, exception);
117: }
118:
119: public Value getType() {
120: return ot.getType();
121: }
122:
123: public final java.util.Set memberSet() {
124: return ot.memberSet();
125: }
126:
127: /**
128: */
129: public Value getJavaException() {
130: return ot;
131: }
132: }
133:
134: /*
135: * Local Variables:
136: * tab-width: 2
137: * indent-tabs-mode: nil
138: * mode: java
139: * c-indentation-style: java
140: * c-basic-offset: 2
141: * eval: (c-set-offset 'substatement-open '0)
142: * eval: (c-set-offset 'case-label '+)
143: * eval: (c-set-offset 'inclass '+)
144: * eval: (c-set-offset 'inline-open '0)
145: * End:
146: */
|