00001 #!/usr/bin/env python 00002 # -*- coding: euc-jp -*- 00003 00004 00005 ## 00006 # 00007 # @file CorbaConsumer.py 00008 # @brief CORBA Consumer class 00009 # @date $Date: 2007/09/20 $ 00010 # @author Noriaki Ando <n-ando@aist.go.jp> and Shinji Kurihara 00011 # 00012 # Copyright (C) 2006-2008 00013 # Noriaki Ando 00014 # Task-intelligence Research Group, 00015 # Intelligent Systems Research Institute, 00016 # National Institute of 00017 # Advanced Industrial Science and Technology (AIST), Japan 00018 # All rights reserved. 00019 00020 00021 from omniORB import CORBA 00022 00023 ## 00024 # @if jp 00025 # @class CorbaConsumerBase 00026 # 00027 # @brief オブジェクトリファレンスを保持するプレースホルダ基底クラス 00028 # 00029 # 通信手段として CORBA を選択した場合のコンシューマ実装のための基底クラス 00030 # 00031 # @since 0.4.0 00032 # 00033 # @else 00034 # @class ConsumerBase 00035 # @brief Placeholder base class to hold remote object reference. 00036 # @endif 00037 class CorbaConsumerBase: 00038 """ 00039 """ 00040 00041 00042 00043 ## 00044 # @if jp 00045 # 00046 # @brief コンストラクタ 00047 # 00048 # @param self 00049 # @param consumer コピー元のCorbaConsumerBaseオブジェクト 00050 # 00051 # @else 00052 # 00053 # @brief Consructor 00054 # 00055 # @param self 00056 # 00057 # @endif 00058 def __init__(self, consumer=None): 00059 if consumer: 00060 self._objref = consumer._objref 00061 else: 00062 self._objref = None 00063 00064 00065 ## 00066 # @if jp 00067 # 00068 # @brief 代入演算子 00069 # 00070 # @param self 00071 # @param consumer 代入元 00072 # 00073 # @return 代入結果 00074 # 00075 # @else 00076 # 00077 # @brief Assignment operator 00078 # 00079 # @param self 00080 # @param consumer Copy source. 00081 # 00082 # @endif 00083 def equal(self, consumer): 00084 self._objref = consumer._objref 00085 return self 00086 00087 00088 ## 00089 # @if jp 00090 # 00091 # @brief CORBAオブジェクトをセットする 00092 # 00093 # 与えられたオブジェクトリファレンスは、ConsumerBase オブジェクト内に 00094 # CORBA::Object_var 型として保持される。 00095 # 00096 # @param self 00097 # @param obj CORBA オブジェクトのリファレンス 00098 # 00099 # @return obj が nil リファレンスの場合 false を返す。 00100 # 00101 # @else 00102 # 00103 # @brief Set CORBA Object 00104 # 00105 # The given CORBA Object is held as CORBA::Object_var type 00106 # 00107 # @param self 00108 # @param obj Object reference of CORBA object 00109 # 00110 # @return If obj is nil reference, it returns false. 00111 # 00112 # @endif 00113 def setObject(self, obj): 00114 if CORBA.is_nil(obj): 00115 return False 00116 00117 self._objref = obj 00118 return True 00119 00120 00121 ## 00122 # @if jp 00123 # 00124 # @brief CORBAオブジェクトを取得する 00125 # 00126 # ConsumerBase オブジェクト内に CORBA::Object_var 型として保持されている 00127 # オブジェクトリファレンスを取得する。 00128 # 00129 # @param self 00130 # 00131 # @return obj CORBA オブジェクトのリファレンス 00132 # 00133 # @else 00134 # 00135 # @brief Get CORBA Object 00136 # 00137 # @param self 00138 # 00139 # @return Object reference of CORBA object 00140 # 00141 # @endif 00142 def getObject(self): 00143 return self._objref 00144 00145 00146 ## 00147 # @if jp 00148 # 00149 # @brief CORBAオブジェクトの設定をクリアする 00150 # 00151 # 設定されている CORBA オブジェクトをクリアする。 00152 # CORBAオブジェクトそのものに対しては何も操作しない。 00153 # 00154 # @param self 00155 # 00156 # @else 00157 # 00158 # @endif 00159 def releaseObject(self): 00160 self._objref = CORBA.Object._nil 00161 00162 00163 00164 ## 00165 # @if jp 00166 # 00167 # @class CorbaConsumer 00168 # @brief オブジェクトリファレンスを保持するプレースホルダクラス 00169 # 00170 # 引数で与えられた型のCORBAオブジェクトを保持する。 00171 # オブジェクトがセットされたときに、与えられた型で narrow されるので、 00172 # _ptr() で取得するリファレンスは、narrow 済みのリファレンスである。 00173 # 00174 # @since 0.4.0 00175 # 00176 # @else 00177 # 00178 # @class Consumer.CorbaConsumer 00179 # @brief Placeholder class to hold remote object reference. 00180 # 00181 # This class holds a type of object that given by parameter. 00182 # For internal use, _ptr type and _var type should be given as parameter. 00183 # 00184 # @since 0.4.0 00185 # 00186 # @endif 00187 class CorbaConsumer(CorbaConsumerBase): 00188 """ 00189 """ 00190 00191 00192 00193 ## 00194 # @if jp 00195 # 00196 # @brief コンストラクタ 00197 # 00198 # @param self 00199 # @param interfaceType このホルダが保持するオブジェクトの型 00200 # (デフォルト値;None) 00201 # @param consumer このホルダが保持するオブジェクト(デフォルト値;None) 00202 # 00203 # @else 00204 # 00205 # @brief Consructor 00206 # 00207 # @endif 00208 def __init__(self, interfaceType=None, consumer=None): 00209 if interfaceType: 00210 self._interfaceType = interfaceType 00211 else: 00212 self._interfaceType = None 00213 00214 if consumer: 00215 CorbaConsumerBase.__init__(self, consumer) 00216 self._var = consumer._var 00217 else: 00218 CorbaConsumerBase.__init__(self) 00219 self._var = None 00220 00221 00222 ## 00223 # @if jp 00224 # 00225 # @brief 代入演算子 00226 # 00227 # @param self 00228 # @param consumer 代入元 00229 # 00230 # @return 代入結果 00231 # 00232 # @else 00233 # 00234 # @brief Assignment operator 00235 # 00236 # @param self 00237 # @param consumer Copy source. 00238 # 00239 # @endif 00240 def equal(self, consumer): 00241 self._var = consumer._var 00242 00243 00244 def __del__(self): 00245 self.releaseObject() 00246 00247 00248 ## 00249 # @if jp 00250 # @brief オブジェクトをセットする 00251 # 00252 # ConsumerBase のオーバーライド。CORBA::Object_var にオブジェクトをセット 00253 # するとともに、パラメータの型で narrow したオブジェクトを保持する。 00254 # 00255 # @param self 00256 # @param obj CORBA Objecct 00257 # 00258 # @return オブジェクト設定結果 00259 # 設定対象オブジェクトが null の場合は false が返ってくる 00260 # 00261 # @else 00262 # @brief Set Object 00263 # 00264 # Override function of ConsumerBase. This operation set an Object to 00265 # CORBA:Object_var in the class, and this object is narrowed to 00266 # given parameter and stored in. 00267 # 00268 # @param self 00269 # @param obj CORBA Objecct 00270 # 00271 # @endif 00272 def setObject(self, obj): 00273 if not CorbaConsumerBase.setObject(self, obj): 00274 self.releaseObject() 00275 return False 00276 00277 if self._interfaceType: 00278 self._var = obj._narrow(self._interfaceType) 00279 else: 00280 self._var = self._objref 00281 00282 if not CORBA.is_nil(self._var): 00283 return True 00284 00285 self.releaseObject() 00286 return False 00287 00288 00289 ## 00290 # @if jp 00291 # @brief ObjectType 型のオブジェクトのリファレンスを取得 00292 # 00293 # ObjectType に narrow済みのオブジェクトのリファレンスを取得する。 00294 # オブジェクトリファレンスを使用するには、setObject() でセット済みで 00295 # なければならない。 00296 # オブジェクトがセットされていなければ nil オブジェクトリファレンスが 00297 # 返される。 00298 # 00299 # @param self 00300 # 00301 # @return ObjectType に narrow 済みのオブジェクトのリファレンス 00302 # 00303 # @else 00304 # @brief Get Object reference narrowed as ObjectType 00305 # 00306 # This operation returns object reference narrowed as ObjectType. 00307 # To use the returned object reference, reference have to be set by 00308 # setObject(). 00309 # If object is not set, this operation returns nil object reference. 00310 # 00311 # @return The object reference narrowed as ObjectType 00312 # 00313 # @endif 00314 def _ptr(self): 00315 return self._var 00316 00317 00318 ## 00319 # @if jp 00320 # 00321 # @brief CORBAオブジェクトの設定をクリアする 00322 # 00323 # 設定されている CORBA オブジェクトをクリアする。 00324 # CORBAオブジェクトそのものに対しては何も操作しない。 00325 # 00326 # @param self 00327 # 00328 # @else 00329 # 00330 # @endif 00331 def releaseObject(self): 00332 CorbaConsumerBase.releaseObject(self) 00333 self._var = CORBA.Object._nil