00001 #!/usr/bin/env python 00002 # -*- coding: euc-jp -*- 00003 00004 ## 00005 # @file SdoOrganization.py 00006 # @brief SDO Organization implementation class 00007 # @date $Date: 2007/09/12 $ 00008 # @author Noriaki Ando <n-ando@aist.go.jp> and Shinji Kurihara 00009 # 00010 # Copyright (C) 2006 00011 # Task-intelligence Research Group, 00012 # Intelligent Systems Research Institute, 00013 # National Institute of 00014 # Advanced Industrial Science and Technology (AIST), Japan 00015 # All rights reserved. 00016 00017 import sys 00018 import omniORB.any 00019 from omniORB import CORBA 00020 import threading 00021 00022 import OpenRTM_aist 00023 import SDOPackage, SDOPackage__POA 00024 00025 00026 ## 00027 # @if jp 00028 # 00029 # @class Organization_impl 00030 # @brief SDO Organization 実装クラス 00031 # 00032 # Organization interface は Resource Data Model で定義されたデータの 00033 # 追加、削除等の操作を行うためのインターフェースである。 00034 # 00035 # @since 0.4.0 00036 # 00037 # @else 00038 # 00039 # @class Organization_impl 00040 # @brief Organization implementation class 00041 # 00042 # The Organization interface is used to manage the Organization attribute. 00043 # 00044 # @since 0.4.0 00045 # 00046 # @endif 00047 class Organization_impl(SDOPackage__POA.Organization): 00048 """ 00049 """ 00050 00051 ## 00052 # @if jp 00053 # 00054 # @brief コンストラクタ 00055 # 00056 # コンストラクタ 00057 # 00058 # @else 00059 # 00060 # @endif 00061 def __init__(self, sdo): 00062 self._pId = str(OpenRTM_aist.uuid1()) 00063 self._org_mutex = threading.RLock() 00064 00065 self._orgProperty = SDOPackage.OrganizationProperty([]) 00066 self._varOwner = sdo 00067 self._memberList = [] 00068 self._dependency = SDOPackage.OWN 00069 self._objref = self._this() 00070 self.__rtcout = OpenRTM_aist.Manager.instance().getLogbuf("rtobject.sdo_organization") 00071 00072 00073 #============================================================ 00074 # 00075 # <<< CORBA interfaces >>> 00076 # 00077 #============================================================ 00078 ## 00079 # @if jp 00080 # 00081 # @brief [CORBA interface] Organization ID を取得する 00082 # 00083 # Organization の ID を返すオペレーション。 00084 # 00085 # @param self 00086 # 00087 # @return Resource Data Model で定義された Organization ID。 00088 # 00089 # @exception SDONotExists ターゲットのSDOが存在しない。(本例外は、CORBA標準 00090 # システム例外のOBJECT_NOT_EXISTにマッピングされる) 00091 # @exception NotAvailable SDOは存在するが応答がない。 00092 # @exception InternalError 内部的エラーが発生した。 00093 # @else 00094 # 00095 # @brief [CORBA interface] Get Organization Id 00096 # 00097 # This operation returns the 'id' of the Organization. 00098 # 00099 # @param self 00100 # 00101 # @return The id of the Organization defined in the resource data model. 00102 # 00103 # @exception SDONotExists if the target SDO does not exist.(This exception 00104 # is mapped to CORBA standard system exception 00105 # OBJECT_NOT_EXIST.) 00106 # @exception NotAvailable The target SDO is reachable but cannot respond. 00107 # @exception InternalError The target SDO cannot execute the operation 00108 # completely due to some internal error. 00109 # @endif 00110 def get_organization_id(self): 00111 self.__rtcout.RTC_TRACE("get_organization_id() = %s", self._pId) 00112 return self._pId 00113 00114 00115 ## 00116 # @if jp 00117 # 00118 # @brief [CORBA interface] OrganizationProperty の取得 00119 # 00120 # Organization が所有する OrganizationProperty を返すオペレーション。 00121 # Organization がプロパティを持たなければ空のリストを返す。 00122 # 00123 # @param self 00124 # 00125 # @return Organization のプロパティのリスト。 00126 # 00127 # @exception SDONotExists ターゲットのSDOが存在しない。(本例外は、CORBA標準 00128 # システム例外のOBJECT_NOT_EXISTにマッピングされる) 00129 # @exception NotAvailable SDOは存在するが応答がない。 00130 # @exception InternalError 内部的エラーが発生した。 00131 # @else 00132 # 00133 # @brief [CORBA interface] Get OrganizationProperty 00134 # 00135 # This operation returns the OrganizationProperty that an Organization 00136 # has. An empty OrganizationProperty is returned if the Organization does 00137 # not have any properties. 00138 # 00139 # @param self 00140 # 00141 # @return The list with properties of the organization. 00142 # 00143 # @exception SDONotExists if the target SDO does not exist.(This exception 00144 # is mapped to CORBA standard system exception 00145 # OBJECT_NOT_EXIST.) 00146 # @exception NotAvailable The target SDO is reachable but cannot respond. 00147 # @exception InternalError The target SDO cannot execute the operation 00148 # completely due to some internal error. 00149 # @endif 00150 def get_organization_property(self): 00151 self.__rtcout.RTC_TRACE("get_organization_property()") 00152 guard = OpenRTM_aist.ScopedLock(self._org_mutex) 00153 prop = SDOPackage.OrganizationProperty(self._orgProperty.properties) 00154 return prop 00155 00156 00157 ## 00158 # @if jp 00159 # 00160 # @brief [CORBA interface] OrganizationProperty の特定の値の取得 00161 # 00162 # OrganizationProperty の指定された値を返すオペレーション。 00163 # 引数 "name" で指定されたプロパティの値を返す。 00164 # 00165 # @param self 00166 # @param name 値を返すプロパティの名前。 00167 # 00168 # @return 引数 "name" で指定されたプロパティの値。 00169 # 00170 # @exception SDONotExists ターゲットのSDOが存在しない。(本例外は、CORBA標準 00171 # システム例外のOBJECT_NOT_EXISTにマッピングされる) 00172 # @exception InvalidParameter 引数 "namne" で指定されたプロパティが 00173 # 存在しない。 00174 # @exception NotAvailable SDOは存在するが応答がない。 00175 # @exception InternalError 内部的エラーが発生した。 00176 # @else 00177 # 00178 # @brief [CORBA interface] Get specified value of OrganizationProperty 00179 # 00180 # This operation returns a value in the OrganizationProperty. 00181 # The value to be returned is specified by argument "name." 00182 # 00183 # @param self 00184 # @param name The name of the value to be returned. 00185 # 00186 # @return The value of property which is specified by argument "name". 00187 # 00188 # @exception SDONotExists if the target SDO does not exist.(This exception 00189 # is mapped to CORBA standard system exception 00190 # OBJECT_NOT_EXIST.) 00191 # @exception InvalidParameter If there are no Property stored with argument 00192 # "name". 00193 # @exception NotAvailable The target SDO is reachable but cannot respond. 00194 # @exception InternalError The target SDO cannot execute the operation 00195 # completely due to some internal error. 00196 # @endif 00197 def get_organization_property_value(self, name): 00198 self.__rtcout.RTC_TRACE("get_organization_property_value(%s)", name) 00199 if not name: 00200 raise SDOPackage.InvalidParameter("Empty name.") 00201 00202 index = OpenRTM_aist.CORBA_SeqUtil.find(self._orgProperty.properties, self.nv_name(name)) 00203 00204 if index < 0: 00205 raise SDOPackage.InvalidParameter("Not found.") 00206 00207 try: 00208 value = omniORB.any.to_any(self._orgProperty.properties[index].value) 00209 return value 00210 except: 00211 self.__rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception()) 00212 raise SDOPackage.InternalError("get_organization_property_value()") 00213 00214 # never reach here 00215 return None 00216 00217 00218 ## 00219 # @if jp 00220 # 00221 # @brief [CORBA interface] OrganizationProperty のセット 00222 # 00223 # ※ SDO Specification の PIM 記述とオペレーション名が異なる。 00224 # ※ addOrganizationProperty に対応か?<BR> 00225 # OrganizationProperty を Organization に追加するオペレーション。 00226 # OrganizationProperty は Organization のプロパティ記述である。 00227 # 00228 # @param self 00229 # @param org_property セットする OrganizationProperty 00230 # 00231 # @return オペレーションが成功したかどうかを返す。 00232 # 00233 # @exception SDONotExists ターゲットのSDOが存在しない。(本例外は、CORBA標準 00234 # システム例外のOBJECT_NOT_EXISTにマッピングされる) 00235 # @exception InvalidParameter "org_property" が null。 00236 # @exception NotAvailable SDOは存在するが応答がない。 00237 # @exception InternalError 内部的エラーが発生した。 00238 # @else 00239 # 00240 # @brief [CORBA interface] Set OrganizationProperty 00241 # 00242 # This operation adds the OrganizationProperty to an Organization. The 00243 # OrganizationProperty is the property description of an Organization. 00244 # 00245 # @param self 00246 # @param org_property The type of organization to be added. 00247 # 00248 # @return If the operation was successfully completed. 00249 # 00250 # @exception SDONotExists if the target SDO does not exist.(This exception 00251 # is mapped to CORBA standard system exception 00252 # OBJECT_NOT_EXIST.) 00253 # @exception InvalidParameter The argument "organizationProperty" is null. 00254 # @exception NotAvailable The target SDO is reachable but cannot respond. 00255 # @exception InternalError The target SDO cannot execute the operation 00256 # completely due to some internal error. 00257 # @endif 00258 def add_organization_property(self, org_property): 00259 self.__rtcout.RTC_TRACE("add_organization_property()") 00260 if org_property is None: 00261 raise SDOPackage.InvalidParameter("org_property is Empty.") 00262 00263 try: 00264 guard = OpenRTM_aist.ScopedLock(self._org_mutex) 00265 self._orgProperty = org_property 00266 return True 00267 except: 00268 self.__rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception()) 00269 raise SDOPackage.InternalError("add_organization_property()") 00270 00271 return False 00272 00273 00274 ## 00275 # @if jp 00276 # 00277 # @brief [CORBA interface] OrganizationProperty の値のセット 00278 # 00279 # OrganizationProperty の NVList に name と value のセットを追加もしくは 00280 # 更新するオペレーション。name と value は引数 "name" と "value" により 00281 # 指定する。 00282 # 00283 # @param self 00284 # @param name 追加・更新されるプロパティの名前。 00285 # @param value 追加・更新されるプロパティの値。 00286 # 00287 # @return オペレーションが成功したかどうかを返す。 00288 # 00289 # @exception SDONotExists ターゲットのSDOが存在しない。(本例外は、CORBA標準 00290 # システム例外のOBJECT_NOT_EXISTにマッピングされる) 00291 # @exception InvalidParameter 引数 "name" で指定されたプロパティは 00292 # 存在しない。 00293 # @exception NotAvailable SDOは存在するが応答がない。 00294 # @exception InternalError 内部的エラーが発生した。 00295 # @else 00296 # 00297 # @brief [CORBA interface] Set specified value of OrganizationProperty 00298 # 00299 # This operation adds or updates a pair of name and value as a property 00300 # of Organization to/in NVList of the OrganizationProperty. The name and 00301 # the value to be added/updated are specified by argument "name" and 00302 # "value." 00303 # 00304 # @param self 00305 # @param name The name of the property to be added/updated. 00306 # @param value The value of the property to be added/updated. 00307 # 00308 # @return If the operation was successfully completed. 00309 # 00310 # @exception SDONotExists if the target SDO does not exist.(This exception 00311 # is mapped to CORBA standard system exception 00312 # OBJECT_NOT_EXIST.) 00313 # @exception NotAvailable The target SDO is reachable but cannot respond. 00314 # @exception InvalidParameter The property that is specified by argument 00315 # "name" does not exist. 00316 # @exception InternalError The target SDO cannot execute the operation 00317 # completely due to some internal error. 00318 # @endif 00319 def set_organization_property_value(self, name, value): 00320 self.__rtcout.RTC_TRACE("set_organization_property_value(name=%s)", name) 00321 if not name: 00322 raise SDOPackage.InvalidParameter("set_organization_property_value(): Enpty name.") 00323 00324 index = OpenRTM_aist.CORBA_SeqUtil.find(self._orgProperty.properties, self.nv_name(name)) 00325 00326 if index < 0: 00327 nv = SDOPackage.NameValue(name, value) 00328 OpenRTM_aist.CORBA_SeqUtil.push_back(self._orgProperty.properties, nv) 00329 else: 00330 self._orgProperty.properties[index].value = value 00331 00332 return True 00333 00334 00335 ## 00336 # @if jp 00337 # 00338 # @brief [CORBA interface] OrganizationProperty の削除 00339 # 00340 # OrganizationProperty の NVList から特定のプロパティを削除する。 00341 # 削除されるプロパティの名前は引数 "name" により指定される。 00342 # 00343 # @param self 00344 # @param name 削除するプロパティの名前。 00345 # 00346 # @return オペレーションが成功したかどうかを返す。 00347 # 00348 # @exception SDONotExists ターゲットのSDOが存在しない。(本例外は、CORBA標準 00349 # システム例外のOBJECT_NOT_EXISTにマッピングされる) 00350 # @exception InvalidParameter 引数 "name" で指定されたプロパティは 00351 # 存在しない。 00352 # @exception NotAvailable SDOは存在するが応答がない。 00353 # @exception InternalError 内部的エラーが発生した。 00354 # @else 00355 # 00356 # @brief [CORBA interface] Remove specified OrganizationProperty 00357 # 00358 # This operation removes a property of Organization from NVList of the 00359 # OrganizationProperty. The property to be removed is specified by 00360 # argument "name." 00361 # 00362 # @param self 00363 # @param name The name of the property to be removed. 00364 # 00365 # @return If the operation was successfully completed. 00366 # 00367 # @exception SDONotExists if the target SDO does not exist.(This exception 00368 # is mapped to CORBA standard system exception 00369 # OBJECT_NOT_EXIST.) 00370 # @exception NotAvailable The target SDO is reachable but cannot respond. 00371 # @exception InvalidParameter The property that is specified by argument 00372 # "name" does not exist. 00373 # @exception InternalError The target SDO cannot execute the operation 00374 # completely due to some internal error. 00375 # @endif 00376 def remove_organization_property(self, name): 00377 self.__rtcout.RTC_TRACE("remove_organization_property(%s)", name) 00378 if not name: 00379 raise SDOPackage.InvalidParameter("remove_organization_property_value(): Enpty name.") 00380 00381 index = OpenRTM_aist.CORBA_SeqUtil.find(self._orgProperty.properties, self.nv_name(name)) 00382 00383 if index < 0: 00384 raise SDOPackage.InvalidParameter("remove_organization_property_value(): Not found.") 00385 00386 try: 00387 OpenRTM_aist.CORBA_SeqUtil.erase(self._orgProperty.properties, index) 00388 return True 00389 except: 00390 self.__rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception()) 00391 raise SDOPackage.InternalError("remove_organization_property_value()") 00392 00393 return False 00394 00395 00396 ## 00397 # @if jp 00398 # 00399 # @brief [CORBA interface] Organization のオーナーを取得する 00400 # 00401 # この Organization のオーナーへの参照を返す。 00402 # 00403 # @param self 00404 # 00405 # @return オーナーオブジェクトへの参照。 00406 # 00407 # @exception SDONotExists ターゲットのSDOが存在しない。(本例外は、CORBA標準 00408 # システム例外のOBJECT_NOT_EXISTにマッピングされる) 00409 # @exception NotAvailable SDOは存在するが応答がない。 00410 # @exception InternalError 内部的エラーが発生した。 00411 # @else 00412 # 00413 # @brief [CORBA interface] Get the owner of the SDO 00414 # 00415 # This operation returns the SDOSystemElement that is owner of 00416 # the Organization. 00417 # 00418 # @param self 00419 # 00420 # @return Reference of owner object. 00421 # 00422 # @exception SDONotExists if the target SDO does not exist.(This exception 00423 # is mapped to CORBA standard system exception 00424 # OBJECT_NOT_EXIST.) 00425 # @exception NotAvailable The target SDO is reachable but cannot respond. 00426 # @exception InternalError The target SDO cannot execute the operation 00427 # completely due to some internal error. 00428 # @endif 00429 def get_owner(self): 00430 self.__rtcout.RTC_TRACE("get_owner()") 00431 return self._varOwner 00432 00433 00434 ## 00435 # @if jp 00436 # 00437 # @brief [CORBA interface] Organization にオーナーをセットする 00438 # 00439 # Organization に対して SDOSystemElement をオーナーとしてセットする。 00440 # 引数 "sdo" にセットする SDOSystemElement を指定する。 00441 # 00442 # @param self 00443 # @param sdo オーナーオブジェクトの参照。 00444 # 00445 # @return オペレーションが成功したかどうかを返す。 00446 # 00447 # @exception SDONotExists ターゲットのSDOが存在しない。(本例外は、CORBA標準 00448 # システム例外のOBJECT_NOT_EXISTにマッピングされる) 00449 # @exception InvalidParameter 引数 "sdo" が nullである、もしくは、 00450 # "sdo" が存在しない。 00451 # @exception NotAvailable SDOは存在するが応答がない。 00452 # @exception InternalError 内部的エラーが発生した。 00453 # @else 00454 # 00455 # @brief [CORBA interface] Set the orner of the Organization 00456 # 00457 # This operation sets an SDOSystemElement to the owner of the 00458 # Organization. The SDOSystemElement to be set is specified by argument 00459 # "sdo." 00460 # 00461 # @param self 00462 # @param sdo Reference of owner object. 00463 # 00464 # @return If the operation was successfully completed. 00465 # 00466 # @exception SDONotExists if the target SDO does not exist.(This exception 00467 # is mapped to CORBA standard system exception 00468 # OBJECT_NOT_EXIST.) 00469 # @exception NotAvailable The target SDO is reachable but cannot respond. 00470 # @exception InvalidParameter The argument "sdo" is null, or the object 00471 # that is specified by "sdo" in argument "sdo" does not exist. 00472 # @exception InternalError The target SDO cannot execute the operation 00473 # completely due to some internal error. 00474 # @endif 00475 def set_owner(self, sdo): 00476 self.__rtcout.RTC_TRACE("set_owner()") 00477 if CORBA.is_nil(sdo): 00478 raise SDOPackage.InvalidParameter("set_owner()") 00479 00480 try: 00481 self._varOwner = sdo 00482 return True 00483 except: 00484 self.__rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception()) 00485 raise SDOPackage.InternalError("set_owner()") 00486 00487 return True 00488 00489 00490 ## 00491 # @if jp 00492 # 00493 # @brief [CORBA interface] Organization のメンバーを取得する 00494 # 00495 # Organization のメンバーの SDO のリストを返す。 00496 # メンバーが存在しなければ空のリストを返す。 00497 # 00498 # @param self 00499 # 00500 # @return Organization に含まれるメンバー SDO のリスト。 00501 # 00502 # @exception SDONotExists ターゲットのSDOが存在しない。(本例外は、CORBA標準 00503 # システム例外のOBJECT_NOT_EXISTにマッピングされる) 00504 # @exception NotAvailable SDOは存在するが応答がない。 00505 # @exception InternalError 内部的エラーが発生した。 00506 # @else 00507 # 00508 # @brief [CORBA interface] Get a menber list of the Organization 00509 # 00510 # This operation returns a list of SDOs that are members of an 00511 # Organization. An empty list is returned if the Organization does not 00512 # have any members. 00513 # 00514 # @param self 00515 # 00516 # @return Member SDOs that are contained in the Organization object. 00517 # 00518 # @exception SDONotExists if the target SDO does not exist.(This exception 00519 # is mapped to CORBA standard system exception 00520 # OBJECT_NOT_EXIST.) 00521 # @exception NotAvailable The target SDO is reachable but cannot respond. 00522 # @exception InternalError The target SDO cannot execute the operation 00523 # completely due to some internal error. 00524 # @endif 00525 def get_members(self): 00526 self.__rtcout.RTC_TRACE("get_members()") 00527 try: 00528 return self._memberList 00529 except: 00530 self.__rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception()) 00531 raise SDOPackage.InternalError("get_members()") 00532 00533 00534 ## 00535 # @if jp 00536 # 00537 # @brief [CORBA interface] SDO の セット 00538 # 00539 # SDO のリストを Organization のメンバーとしてセットする。 00540 # Organization がすでにメンバーの SDO を管理している場合は、 00541 # 与えられた SDO のリストに置き換える。 00542 # 00543 # @param self 00544 # @param sdos メンバーの SDO。 00545 # 00546 # @return オペレーションが成功したかどうかを返す。 00547 # 00548 # @exception SDONotExists ターゲットのSDOが存在しない。(本例外は、CORBA標準 00549 # システム例外のOBJECT_NOT_EXISTにマッピングされる) 00550 # @exception InvalidParameter 引数 "SDOList" が nullである、もしくは 00551 # 引数に指定された "SDOList" が存在しない。 00552 # @exception NotAvailable SDOは存在するが応答がない。 00553 # @exception InternalError 内部的エラーが発生した。 00554 # @else 00555 # 00556 # @brief [CORBA interface] Set SDO's ServiceProfile 00557 # 00558 # This operation assigns a list of SDOs to an Organization as its members. 00559 # If the Organization has already maintained a member SDO(s) when it is 00560 # called, the operation replaces the member(s) with specified list of 00561 # SDOs. 00562 # 00563 # @param self 00564 # @param sdos Member SDOs to be assigned. 00565 # 00566 # @return If the operation was successfully completed. 00567 # 00568 # @exception SDONotExists if the target SDO does not exist.(This exception 00569 # is mapped to CORBA standard system exception 00570 # OBJECT_NOT_EXIST.) 00571 # @exception NotAvailable The target SDO is reachable but cannot respond. 00572 # @exception InvalidParameter The argument "SDOList" is null, or if the 00573 # object that is specified by the argument "sdos" does not 00574 # exist. 00575 # @exception InternalError The target SDO cannot execute the operation 00576 # completely due to some internal error. 00577 # @endif 00578 def set_members(self, sdos): 00579 self.__rtcout.RTC_TRACE("set_members()") 00580 if sdos is None: 00581 raise SDOPackage.InvalidParameter("set_members(): SDOList is empty.") 00582 00583 try: 00584 self._memberList = sdos 00585 return True 00586 except: 00587 self.__rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception()) 00588 raise SDOPackage.InternalError("set_members()") 00589 00590 return True 00591 00592 00593 ## 00594 # @if jp 00595 # 00596 # @brief [CORBA interface] SDO メンバーの追加 00597 # 00598 # Organization にメンバーとして SDO を追加する。 00599 # 引数 "sdo" に追加するメンバー SDO を指定する。 00600 # 00601 # @param self 00602 # @param sdo_list Organization に追加される SDO のリスト。 00603 # 00604 # @return オペレーションが成功したかどうかを返す。 00605 # 00606 # @exception SDONotExists ターゲットのSDOが存在しない。(本例外は、CORBA標準 00607 # システム例外のOBJECT_NOT_EXISTにマッピングされる) 00608 # @exception InvalidParameter 引数 "sdo" が nullである。 00609 # @exception NotAvailable SDOは存在するが応答がない。 00610 # @exception InternalError 内部的エラーが発生した。 00611 # @else 00612 # 00613 # @brief [CORBA interface] Add the menebr SDOs 00614 # 00615 # This operation adds a member that is an SDO to the organization. 00616 # The member to be added is specified by argument "sdo." 00617 # 00618 # @param self 00619 # @param sdo The member to be added to the organization. 00620 # 00621 # @return If the operation was successfully completed. 00622 # 00623 # @exception SDONotExists if the target SDO does not exist.(This exception 00624 # is mapped to CORBA standard system exception 00625 # OBJECT_NOT_EXIST.) 00626 # @exception NotAvailable The target SDO is reachable but cannot respond. 00627 # @exception InvalidParameter The argument "sdo" is null. 00628 # @exception InternalError The target SDO cannot execute the operation 00629 # completely due to some internal error. 00630 # @endif 00631 def add_members(self, sdo_list): 00632 self.__rtcout.RTC_TRACE("add_members()") 00633 if not sdo_list: 00634 raise SDOPackage.InvalidParameter("add_members(): SDOList is empty.") 00635 00636 try: 00637 OpenRTM_aist.CORBA_SeqUtil.push_back_list(self._memberList, sdo_list) 00638 return True 00639 except: 00640 self.__rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception()) 00641 raise SDOPackage.InternalError("add_members()") 00642 00643 return False 00644 00645 00646 ## 00647 # @if jp 00648 # 00649 # @brief [CORBA interface] SDO メンバーの削除 00650 # 00651 # Organization から引数で指定された "id" の SDO を削除する。 00652 # 00653 # @param self 00654 # @param id 削除する SDO の id。 00655 # 00656 # @return オペレーションが成功したかどうかを返す。 00657 # 00658 # @exception SDONotExists ターゲットのSDOが存在しない。(本例外は、CORBA標準 00659 # システム例外のOBJECT_NOT_EXISTにマッピングされる) 00660 # @exception InvalidParameter 引数 "id" が null もしくは存在しない。 00661 # @exception NotAvailable SDOは存在するが応答がない。 00662 # @exception InternalError 内部的エラーが発生した。 00663 # @else 00664 # 00665 # @brief [CORBA interface] Remove menber SDO from Organization 00666 # 00667 # This operation removes a member from the organization. The member to be 00668 # removed is specified by argument "id." 00669 # 00670 # @param self 00671 # @param id Id of the SDO to be removed from the organization. 00672 # 00673 # @return If the operation was successfully completed. 00674 # 00675 # @exception SDONotExists if the target SDO does not exist.(This exception 00676 # is mapped to CORBA standard system exception 00677 # OBJECT_NOT_EXIST.) 00678 # @exception NotAvailable The target SDO is reachable but cannot respond. 00679 # @exception InvalidParameter The argument "id" is null or does not exist. 00680 # @exception InternalError The target SDO cannot execute the operation 00681 # completely due to some internal error. 00682 # @endif 00683 def remove_member(self, id): 00684 self.__rtcout.RTC_TRACE("remove_member(%s)", id) 00685 if not id: 00686 self.__rtcout.RTC_ERROR("remove_member(): Enpty name.") 00687 raise SDOPackage.InvalidParameter("remove_member(): Empty name.") 00688 00689 index = OpenRTM_aist.CORBA_SeqUtil.find(self._memberList, self.sdo_id(id)) 00690 00691 if index < 0: 00692 self.__rtcout.RTC_ERROR("remove_member(): Not found.") 00693 raise SDOPackage.InvalidParameter("remove_member(): Not found.") 00694 00695 try: 00696 OpenRTM_aist.CORBA_SeqUtil.erase(self._memberList, index) 00697 return True 00698 except: 00699 self.__rtcout.RTC_ERROR("unknown exception") 00700 raise SDOPackage.InternalError("remove_member(): Not found.") 00701 00702 return False 00703 00704 00705 ## 00706 # @if jp 00707 # 00708 # @brief [CORBA interface] Organization の DependencyType を取得 00709 # 00710 # Organization の関係を表す "DependencyType" を返す。 00711 # 00712 # @param self 00713 # 00714 # @return Organizaton の依存関係 DependencyType を返す。 00715 # DependencyType は OMG SDO 仕様の Section 2.2.2 2-3 ページの 00716 # "Data Structures Used by Resource Data Model" を参照。 00717 # 00718 # @exception SDONotExists ターゲットのSDOが存在しない。(本例外は、CORBA標準 00719 # システム例外のOBJECT_NOT_EXISTにマッピングされる) 00720 # @exception NotAvailable SDOは存在するが応答がない。 00721 # @exception InternalError 内部的エラーが発生した。 00722 # @else 00723 # 00724 # @brief [CORBA interface] Get the DependencyType of the Organization 00725 # 00726 # This operation gets the relationship "DependencyType" of the 00727 # Organization. 00728 # 00729 # @param self 00730 # 00731 # @return The relationship of the Organization as DependencyType. 00732 # DependencyType is defined in Section 2.2.2, "Data Structures 00733 # Used by Resource Data Model," on page 2-3 00734 # of OMG SDO Specification. 00735 # 00736 # @exception SDONotExists if the target SDO does not exist.(This exception 00737 # is mapped to CORBA standard system exception 00738 # OBJECT_NOT_EXIST.) 00739 # @exception NotAvailable The target SDO is reachable but cannot respond. 00740 # @exception InternalError The target SDO cannot execute the operation 00741 # completely due to some internal error. 00742 # @endif 00743 def get_dependency(self): 00744 self.__rtcout.RTC_TRACE("get_dependency()") 00745 return self._dependency 00746 00747 00748 ## 00749 # @if jp 00750 # 00751 # @brief [CORBA interface] Organization の DependencyType をセットする 00752 # 00753 # Organization の依存関係 "DependencyType" をセットする。 00754 # 引数 "dependencty" により依存関係を与える。 00755 # 00756 # @param self 00757 # @param dependency Organization の依存関係を表す DependencyType。 00758 # DependencyType は OMG SDO 仕様の Section 2.2.2、2-3 ページの 00759 # "Data Structures Used by Resource Data Model" を参照。 00760 # 00761 # @return オペレーションが成功したかどうかを返す。 00762 # 00763 # @exception SDONotExists ターゲットのSDOが存在しない。(本例外は、CORBA標準 00764 # システム例外のOBJECT_NOT_EXISTにマッピングされる) 00765 # @exception InvalidParameter 引数 "sProfile" が nullである。 00766 # @exception NotAvailable SDOは存在するが応答がない。 00767 # @exception InternalError 内部的エラーが発生した。 00768 # @else 00769 # 00770 # @brief [CORBA interface] Set the DependencyType of the Organization 00771 # 00772 # This operation sets the relationship "DependencyType" of the 00773 # Organization. The value to be set is specified by argument "dependency." 00774 # 00775 # @param self 00776 # @param dependency The relationship of the Organization as 00777 # DependencyType. DependencyType is defined in Section 00778 # 2.2.2, "Data Structures Used by Resource Data Model," 00779 # on page 2-3. 00780 # 00781 # @return If the operation was successfully completed. 00782 # 00783 # @exception SDONotExists if the target SDO does not exist.(This exception 00784 # is mapped to CORBA standard system exception 00785 # OBJECT_NOT_EXIST.) 00786 # @exception NotAvailable The target SDO is reachable but cannot respond. 00787 # @exception InvalidParameter The argument "dependency" is null. 00788 # @exception InternalError The target SDO cannot execute the operation 00789 # completely due to some internal error. 00790 # @endif 00791 def set_dependency(self, dependency): 00792 self.__rtcout.RTC_TRACE("set_dependency()") 00793 if dependency is None: 00794 raise SDOPackage.InvalidParameter("set_dependency(): Empty dependency.") 00795 00796 try: 00797 self._dependency = dependency 00798 return True 00799 except: 00800 self.__rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception()) 00801 raise SDOPackage.InternalError("set_dependency(): Unknown.") 00802 00803 return False 00804 00805 00806 def getObjRef(self): 00807 return self._objref 00808 00809 00810 00811 # end of CORBA interface definition 00812 #============================================================ 00813 00814 00815 ## 00816 # @if jp 00817 # @class nv_name 00818 # @brief NVList検索用functor 00819 # @else 00820 # 00821 # @endif 00822 class nv_name: 00823 def __init__(self, name): 00824 self._name = name 00825 00826 def __call__(self, nv): 00827 return str(self._name) == str(nv.name) 00828 00829 ## 00830 # @if jp 00831 # @class sdo_id 00832 # @brief SDO検索用functor 00833 # @else 00834 # 00835 # @endif 00836 class sdo_id: 00837 def __init__(self, id_): 00838 self._id = id_ 00839 00840 def __call__(self, sdo): 00841 id_ = sdo.get_sdo_id() 00842 return str(self._id) == str(id_) 00843