1 27 28 package org.objectweb.openccm.descriptor.componentassembly.ccm.deployer.registrar; 29 30 import org.objectweb.openccm.descriptor.componentassembly.*; 32 33 import org.objectweb.openccm.corba.TheTradingService; 34 import org.objectweb.openccm.corba.trader.TraderTypeCodeUtils; 35 36 49 public class RegisterwithtraderDeployer extends RegisterwithtraderDeployerContext 50 { 51 52 private static final String header = "Trading Service problem: "; 53 54 60 61 protected String _oid; 62 63 69 72 public 73 RegisterwithtraderDeployer () 74 { 75 super(); 77 78 this._oid = null; 80 } 81 82 88 102 protected org.omg.CosTrading.Register 103 resolveExternalTrader(String name) 104 throws org.omg.CosTrading.RegisterPackage.IllegalTraderName, 105 org.omg.CosTrading.RegisterPackage.UnknownTraderName, 106 org.omg.CosTrading.RegisterPackage.RegisterNotSupported 107 { 108 org.omg.CosTrading.Register iRegister = null; 110 iRegister = TheTradingService.getRegister(); 111 if (iRegister == null) return null; 112 113 if (name != null && !name.trim().equals("")) 114 { 115 java.util.LinkedList path_list = new java.util.LinkedList (); 117 int idx = 0; 118 int prev_idx = 0; 119 idx = name.indexOf("/"); 120 while (idx != -1) { 121 String current = name.substring(prev_idx, idx); 122 if (! current.trim().equals("")) path_list.add(current); 123 prev_idx = idx+1; 124 idx = name.indexOf("/", prev_idx); 125 } 126 String current = name.substring(prev_idx); 127 if (! current.trim().equals("")) path_list.add(current); 128 String [] path = (String [])path_list.toArray(new String [0]); 129 130 iRegister = iRegister.resolve(path); 132 } 133 return iRegister; 134 } 135 136 154 protected org.omg.CosTrading.Property 155 constructProperty(String name, String value, String servicetype) 156 throws org.omg.CosTrading.IllegalServiceType, 157 org.omg.CosTrading.UnknownServiceType 158 { 159 org.omg.CORBA.TypeCode tc = null; 160 161 org.omg.CosTradingRepos.ServiceTypeRepositoryPackage.TypeStruct desc; 164 desc = TheTradingService.getRepository().fully_describe_type(servicetype); 165 for (int i=0 ; i<desc.props.length ; i++) 166 { 167 if (desc.props[i].name.equals(name)) 168 { 169 tc = desc.props[i].value_type; 170 break; 171 } 172 } 173 if (tc == null) return null; 174 175 org.omg.CORBA.Any the_any = TraderTypeCodeUtils.insertInAny(tc, value); 177 if (the_any == null) { 178 return null; 179 } 180 181 org.omg.CosTrading.Property prop = new org.omg.CosTrading.Property(); 182 prop.name = name; 183 prop.value = the_any; 184 return prop; 185 } 186 187 192 protected void 193 remove_from_trader(String offerId) 194 { 195 try { 196 TheTradingService.getRegister().withdraw(offerId); 197 } catch (org.omg.CosTrading.IllegalOfferId ex) { 198 System.err.println(RegisterwithtraderDeployer.header + 199 "cannot withdraw offer '" + offerId + "'."); 200 } catch (org.omg.CosTrading.UnknownOfferId ex) { 201 System.err.println(RegisterwithtraderDeployer.header + 202 "cannot withdraw offer '" + offerId + "'."); 203 } catch (org.omg.CosTrading.RegisterPackage.ProxyOfferId ex) { 204 System.err.println(RegisterwithtraderDeployer.header + 205 "cannot withdraw offer '" + offerId + "'."); 206 } 207 } 208 209 215 protected String 216 register_in_trader(Registerwithtrader desc, 217 org.omg.CORBA.Object to_register) 218 { 219 String trader_name = desc.getTradername(); 220 org.omg.CosTrading.Register registerer = null; 221 try { 222 registerer = resolveExternalTrader(trader_name); 223 } catch (org.omg.CosTrading.RegisterPackage.IllegalTraderName ex) { 224 System.err.println(RegisterwithtraderDeployer.header + 225 "cannot register in trader " + trader_name + "."); 226 return null; 227 } catch (org.omg.CosTrading.RegisterPackage.UnknownTraderName ex) { 228 System.err.println(RegisterwithtraderDeployer.header + 229 "cannot register in trader " + trader_name + "."); 230 return null; 231 } catch (org.omg.CosTrading.RegisterPackage.RegisterNotSupported ex) { 232 System.err.println(RegisterwithtraderDeployer.header + 233 "cannot register in trader " + trader_name + "."); 234 return null; 235 } 236 if (registerer == null) { 237 System.err.println(RegisterwithtraderDeployer.header + 238 "no trading service found."); 239 return null; 240 } 241 242 Traderexport export_desc = desc.getTraderexport(); 244 String st = export_desc.getTraderservicetypename().getValue(); 245 246 java.util.List properties_desc = export_desc.getTraderproperties().getTraderpropertyList(); 248 org.omg.CosTrading.Property[] corba_props = new org.omg.CosTrading.Property[properties_desc.size()]; 249 int i = 0; 250 for (java.util.Iterator iter = properties_desc.iterator() ; 251 iter.hasNext() ; i++) 252 { 253 Traderproperty xml_prop = (Traderproperty)iter.next(); 255 String p_name = xml_prop.getTraderpropertyname().getValue(); 256 String p_value = xml_prop.getTraderpropertyvalue().getValue(); 257 258 org.omg.CosTrading.Property the_prop = null; 260 try { 261 the_prop = constructProperty(p_name, p_value, st); 262 } catch (org.omg.CosTrading.IllegalServiceType ex) { 263 System.err.println(RegisterwithtraderDeployer.header + 264 "invalid service type."); 265 return null; 266 } catch (org.omg.CosTrading.UnknownServiceType ex) { 267 System.err.println(RegisterwithtraderDeployer.header + 268 "invalid service type."); 269 return null; 270 } 271 if (the_prop == null) { 272 System.err.println(RegisterwithtraderDeployer.header + 273 "cannot construct property."); 274 return null; 275 } 276 corba_props[i] = the_prop; 277 } 278 279 try { 281 return registerer.export(to_register,st,corba_props); 282 } catch (org.omg.CosTrading.RegisterPackage.InvalidObjectRef ex) { 283 System.err.println(RegisterwithtraderDeployer.header + 284 "Invalid CORBA Object reference."); 285 return null; 286 } catch (org.omg.CosTrading.IllegalServiceType ex) { 287 System.err.println(RegisterwithtraderDeployer.header + 288 "Bad service type \"" + ex.type + "\"." ); 289 return null; 290 } catch (org.omg.CosTrading.UnknownServiceType ex) { 291 System.err.println(RegisterwithtraderDeployer.header + 292 "Bad service type \"" + ex.type + "\"." ); 293 return null; 294 } catch (org.omg.CosTrading.RegisterPackage.InterfaceTypeMismatch ex) { 295 System.err.println(RegisterwithtraderDeployer.header + 296 "Object interface " + 297 "mismatch with service type \"" + 298 ex.type + 299 "\"." ); 300 return null; 301 } catch (org.omg.CosTrading.IllegalPropertyName ex) { 302 System.err.println(RegisterwithtraderDeployer.header + 303 "Bad property name \"" + ex.name + "\"." ); 304 return null; 305 } catch (org.omg.CosTrading.PropertyTypeMismatch ex) { 306 System.err.println(RegisterwithtraderDeployer.header + 307 "Bad property type of \"" + 308 ex.prop.name + 309 "\" in service type \"" + 310 ex.type + 311 "\"." ); 312 return null; 313 } catch (org.omg.CosTrading.ReadonlyDynamicProperty ex) { 314 System.err.println(RegisterwithtraderDeployer.header + 315 "Bad property of \"" + 316 ex.name + 317 "\" in service type \"" + 318 ex.type + 319 "\"." ); 320 return null; 321 } catch (org.omg.CosTrading.MissingMandatoryProperty ex) { 322 System.err.println(RegisterwithtraderDeployer.header + 323 "Require property \"" + 324 ex.name + 325 "\" in service type \"" + 326 ex.type + 327 "\"." ); 328 return null; 329 } catch (org.omg.CosTrading.DuplicatePropertyName ex) { 330 System.err.println(RegisterwithtraderDeployer.header + 331 "Duplicate property \"" + 332 ex.name + 333 "\"." ); 334 return null; 335 } 336 } 337 338 344 public void 345 deploy(org.omg.CORBA.Object objRef) 346 { 347 this._oid = register_in_trader(getRegisterwithtrader(), objRef); 348 } 349 350 public void 351 tearDown() 352 { 353 if (this._oid != null) remove_from_trader(this._oid); 354 this._oid = null; 355 } 356 } 357 | Popular Tags |