KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mr > api > jms > selector > syntax > TypeCaster


1 /*
2  * Copyright 2002 by
3  * <a HREF="http://www.coridan.com">Coridan</a>
4  * <a HREF="mailto: support@coridan.com ">support@coridan.com</a>
5  *
6  * The contents of this file are subject to the Mozilla Public License Version
7  * 1.1 (the "License"); you may not use this file except in compliance with the
8  * License. You may obtain a copy of the License at
9  * http://www.mozilla.org/MPL/
10  *
11  * Software distributed under the License is distributed on an "AS IS" basis,
12  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13  * for the specific language governing rights and limitations under the
14  * License.
15  *
16  * The Original Code is "MantaRay" (TM).
17  *
18  * The Initial Developer of the Original Code is Coridan.
19  * Portions created by the Initial Developer are Copyright (C) 2006
20  * Coridan Inc. All Rights Reserved.
21  *
22  * Contributor(s): all the names of the contributors are added in the source
23  * code where applicable.
24  *
25  * Alternatively, the contents of this file may be used under the terms of the
26  * LGPL license (the "GNU LESSER GENERAL PUBLIC LICENSE"), in which case the
27  * provisions of LGPL are applicable instead of those above. If you wish to
28  * allow use of your version of this file only under the terms of the LGPL
29  * License and not to allow others to use your version of this file under
30  * the MPL, indicate your decision by deleting the provisions above and
31  * replace them with the notice and other provisions required by the LGPL.
32  * If you do not delete the provisions above, a recipient may use your version
33  * of this file under either the MPL or the GNU LESSER GENERAL PUBLIC LICENSE.
34  
35  *
36  * This library is free software; you can redistribute it and/or modify it
37  * under the terms of the MPL as stated above or under the terms of the GNU
38  * Lesser General Public License as published by the Free Software Foundation;
39  * either version 2.1 of the License, or any later version.
40  *
41  * This library is distributed in the hope that it will be useful, but WITHOUT
42  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
43  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
44  * License for more details.
45  */

46 package org.mr.api.jms.selector.syntax;
47
48
49 /**
50  * This class represents a utility class for casting from an MantaObject to a derived class,
51  * raising a TypeMismatchException if the operation is invalid.
52  *
53  */

54 final class TypeCaster {
55
56     /**
57      * Private constructor, we don't anyone to create this object
58      */

59     private TypeCaster() {
60     }//TypeCaster
61

62     /**
63      * This method is used to cast an object to boolean type
64      *
65      * @param obj the object to cast
66      * @param context the context where the object was created
67      * @return the cast object
68      * @throws TypeMismatchException if obj can't be cast
69      */

70     public static MantaBoolean castToBool(final MantaObject obj, final String JavaDoc context) throws TypeMismatchException {
71
72         MantaBoolean result = null;
73         
74         if (obj instanceof MantaBoolean) {
75             result = (MantaBoolean) obj;
76         }//if
77
else if (obj != null) {
78             throwNewTypeMismatchException(Type.BOOLEAN, obj, context);
79         }//elseif
80
return result;
81     }//castToBool
82

83     
84     /**
85      * This method is used to cast an object to numeric type
86      *
87      * @param obj the object to cast
88      * @param context the context where the object was created
89      * @return the cast object
90      * @throws TypeMismatchException if obj can't be cast
91      */

92     public static MantaNumber castToNumber(final MantaObject obj, final String JavaDoc context) throws TypeMismatchException {
93
94         MantaNumber result = null;
95         if (obj instanceof MantaNumber) {
96             result = (MantaNumber) obj;
97         }//if
98
else if (obj != null) {
99             throwNewTypeMismatchException(Type.NUMERIC, obj, context);
100         }//else if
101
return result;
102     }//castToNumber
103

104     
105     /**
106      * This method is used to cast an object to String type
107      *
108      * @param obj the object to cast
109      * @param context the context where the object was created
110      * @return the cast object
111      * @throws TypeMismatchException if obj can't be cast
112      */

113     public static MantaString castToString(final MantaObject obj, final String JavaDoc context) throws TypeMismatchException {
114
115         MantaString result = null;
116         if (obj instanceof MantaString) {
117             result = (MantaString) obj;
118         }//if
119
else if (obj != null) {
120             throwNewTypeMismatchException(Type.STRING, obj, context);
121         }//else if
122
return result;
123     }//castToString
124

125     
126     /**
127      * This method thorws a new type mismatch exception
128      *
129      * @param expected the expected type
130      * @param value the actual value
131      * @param context the context where value was created
132      * @throws TypeMismatchException corresponding to the expected and actual values
133      */

134     private static void throwNewTypeMismatchException(final Type expected, final MantaObject value, final String JavaDoc context) throws TypeMismatchException {
135
136         StringBuffer JavaDoc msg = new StringBuffer JavaDoc();
137         msg.append("expecting a ");
138         msg.append(expected);
139         msg.append(" expression");
140     
141         if (context != null) {
142             msg.append(" for ");
143             msg.append(context);
144         } //if
145
msg.append(", found a ");
146         msg.append(value.type());
147         throw new TypeMismatchException(msg.toString());
148     }//throwNewTypeMismatchException
149

150 }//TypeCaster
151
Popular Tags