KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jacorb > ir > IDLType


1 package org.jacorb.ir;
2
3 /*
4  * JacORB - a free Java ORB
5  *
6  * Copyright (C) 1997-2004 Gerald Brose.
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public
19  * License along with this library; if not, write to the Free
20  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21  */

22
23 import org.omg.CORBA.TypeCode JavaDoc;
24 import org.omg.CORBA.TCKind JavaDoc;
25 import org.omg.PortableServer.POA JavaDoc;
26
27 import org.apache.avalon.framework.logger.Logger;
28
29 /**
30  * Base class and factory for anonymous IDLType objects
31  *
32  * Direct instances of this class are only used as place holders
33  * in recursive types
34  */

35
36 public class IDLType
37     extends IRObject
38     implements org.omg.CORBA.IDLTypeOperations JavaDoc
39 {
40     protected org.omg.CORBA.TypeCode JavaDoc type;
41
42     public org.omg.CORBA.TypeCode JavaDoc type()
43     {
44         return type;
45     }
46
47     public void define()
48     {}
49
50     public void destroy()
51     {}
52
53     protected IDLType()
54     {
55     }
56
57     private IDLType( TypeCode JavaDoc tc,
58                      org.omg.CORBA.Repository JavaDoc ir )
59     {
60         type = tc;
61     }
62
63     /**
64      * Factory method for IDLType objects
65      */

66     public static org.omg.CORBA.IDLType JavaDoc create( TypeCode JavaDoc tc,
67                                                 org.omg.CORBA.Repository JavaDoc ir,
68                                                 Logger logger,
69                                                 POA JavaDoc poa )
70     {
71         return create( tc, ir, false, logger, poa );
72     }
73
74
75     public static org.omg.CORBA.IDLType JavaDoc create( TypeCode JavaDoc tc,
76                                                 org.omg.CORBA.Repository JavaDoc ir,
77                                                 boolean define,
78                                                 Logger logger,
79                                                 POA JavaDoc poa)
80     {
81         if (logger.isDebugEnabled())
82         {
83             logger.debug("IDLType create for tc kind " +
84                          tc.kind().value());
85         }
86
87         if( tc == null ) // PIDLs
88
return null;
89
90         if( org.jacorb.orb.TypeCode.isRecursive(tc) )
91         {
92             logger.debug("Placeholder for recursive sequence");
93
94             try
95             {
96                 return org.omg.CORBA.IDLTypeHelper.narrow(
97                     poa.servant_to_reference(
98                         new org.omg.CORBA.IDLTypePOATie( new IDLType( tc,ir ))));
99             }
100             catch( Exception JavaDoc e )
101             {
102                 logger.error("Caught Exception", e);
103             }
104         }
105
106         int kind = tc.kind().value();
107
108         switch (kind)
109         {
110             case TCKind._tk_null:
111             case TCKind._tk_void:
112             case TCKind._tk_short:
113             case TCKind._tk_long:
114             case TCKind._tk_ushort:
115             case TCKind._tk_ulong:
116             case TCKind._tk_float:
117             case TCKind._tk_double:
118             case TCKind._tk_boolean:
119             case TCKind._tk_char:
120             case TCKind._tk_longlong:
121             case TCKind._tk_ulonglong:
122             case TCKind._tk_longdouble:
123             case TCKind._tk_wchar:
124             case TCKind._tk_octet:
125             case TCKind._tk_any:
126             case TCKind._tk_TypeCode:
127             case TCKind._tk_Principal:
128                 try
129                 {
130                     PrimitiveDef pd = new PrimitiveDef( tc );
131                     return org.omg.CORBA.PrimitiveDefHelper.narrow(
132                         poa.servant_to_reference(
133                             new org.omg.CORBA.PrimitiveDefPOATie( pd )));
134                 }
135                 catch( Exception JavaDoc e )
136                 {
137                     logger.error("Caught Exception", e);
138                 }
139             case TCKind._tk_alias:
140             case TCKind._tk_struct:
141             case TCKind._tk_except:
142             case TCKind._tk_union:
143             case TCKind._tk_enum:
144                 try
145                 {
146                     return org.omg.CORBA.IDLTypeHelper.narrow( ir.lookup_id( tc.id() ));
147                 }
148                 catch( Exception JavaDoc e )
149                 {
150                     logger.error("Caught Exception", e);
151                     // does not happen here
152
}
153             case TCKind._tk_string:
154                 try
155                 {
156                     if( tc.length() == 0)
157                     {
158                         return org.omg.CORBA.PrimitiveDefHelper.narrow(
159                             poa.servant_to_reference(
160                                 new org.omg.CORBA.PrimitiveDefPOATie( new PrimitiveDef( tc ))));
161                     }
162                     else
163                     {
164                         return org.omg.CORBA.StringDefHelper.narrow(
165                             poa.servant_to_reference(
166                                 new org.omg.CORBA.StringDefPOATie( new StringDef( tc ))));
167                     }
168                 }
169                 catch( Exception JavaDoc e )
170                 {
171                     logger.error("Caught Exception", e);
172                     return null;
173                 }
174             case TCKind._tk_wstring:
175                 try
176                 {
177                     if( tc.length() == 0)
178                     {
179                         return org.omg.CORBA.PrimitiveDefHelper.narrow(
180                             poa.servant_to_reference(
181                                 new org.omg.CORBA.PrimitiveDefPOATie( new PrimitiveDef( tc ))));
182                     }
183                     else
184                     {
185                         return org.omg.CORBA.WstringDefHelper.narrow(
186                             poa.servant_to_reference(
187                                 new org.omg.CORBA.WstringDefPOATie( new WstringDef( tc ))));
188                     }
189                 }
190                 catch( Exception JavaDoc e )
191                 {
192                     logger.error("Caught Exception", e);
193                     return null;
194                 }
195             case TCKind._tk_fixed:
196                 try
197                 {
198                     return org.omg.CORBA.FixedDefHelper.narrow(
199                         poa.servant_to_reference(
200                             new org.omg.CORBA.FixedDefPOATie( new FixedDef( tc ))));
201                 }
202                 catch( Exception JavaDoc e )
203                 {
204                     logger.error("Caught Exception", e);
205                     return null;
206                 }
207             case TCKind._tk_objref:
208             {
209                 try
210                 {
211                     if (logger.isDebugEnabled())
212                     {
213                         logger.debug("IDLType create for " + tc.id());
214                     }
215
216                     if( tc.id().equals("IDL:omg.org/CORBA/Object:1.0"))
217                     {
218                         return org.omg.CORBA.PrimitiveDefHelper.narrow(
219                             poa.servant_to_reference(
220                                 new org.omg.CORBA.PrimitiveDefPOATie( new PrimitiveDef( tc ))));
221                     }
222                     else
223                     {
224                         return org.omg.CORBA.IDLTypeHelper.narrow( ir.lookup_id( tc.id() ) );
225                     }
226                 }
227                 catch( Exception JavaDoc e )
228                 {
229                     logger.error("Caught Exception", e);
230                     return null;
231                 }
232             }
233             case TCKind._tk_sequence:
234                 try
235                 {
236                     SequenceDef sd = new SequenceDef( tc, ir, logger, poa );
237                     if( define )
238                         sd.define();
239                     return org.omg.CORBA.SequenceDefHelper.narrow(
240                         poa.servant_to_reference(
241                             new org.omg.CORBA.SequenceDefPOATie( sd )));
242                 }
243                 catch( Exception JavaDoc e )
244                 {
245                     logger.error("Caught Exception", e);
246                     return null;
247                 }
248             case TCKind._tk_array:
249                 try
250                 {
251                     ArrayDef ad = new ArrayDef( tc, ir, logger, poa );
252                     if( define )
253                         ad.define();
254                     return org.omg.CORBA.ArrayDefHelper.narrow(
255                         poa.servant_to_reference(
256                             new org.omg.CORBA.ArrayDefPOATie( ad )));
257                 }
258                 catch( Exception JavaDoc e )
259                 {
260                     logger.error("Caught Exception", e);
261                     return null;
262                 }
263             default:
264                 logger.warn("IDL type returns null for tc kind " + kind );
265                 return null;
266         }
267     }
268 }
269
270
271
272
Popular Tags