1 package org.jacorb.ir; 2 3 22 23 import org.omg.CORBA.TypeCode ; 24 import org.omg.CORBA.TCKind ; 25 import org.omg.PortableServer.POA ; 26 27 import org.apache.avalon.framework.logger.Logger; 28 29 35 36 public class IDLType 37 extends IRObject 38 implements org.omg.CORBA.IDLTypeOperations ![JavaDoc](../../../../cmn/javadoc.gif) 39 { 40 protected org.omg.CORBA.TypeCode type; 41 42 public org.omg.CORBA.TypeCode 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 tc, 58 org.omg.CORBA.Repository ir ) 59 { 60 type = tc; 61 } 62 63 66 public static org.omg.CORBA.IDLType create( TypeCode tc, 67 org.omg.CORBA.Repository ir, 68 Logger logger, 69 POA poa ) 70 { 71 return create( tc, ir, false, logger, poa ); 72 } 73 74 75 public static org.omg.CORBA.IDLType create( TypeCode tc, 76 org.omg.CORBA.Repository ir, 77 boolean define, 78 Logger logger, 79 POA 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 ) 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 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 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 e ) 149 { 150 logger.error("Caught Exception", e); 151 } 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 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 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 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 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 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 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 |