[openrtm-commit:00310] r436 - in branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist: . ext ext/sdo ext/sdo/observer ext/sdo/observer/test

openrtm @ openrtm.org openrtm @ openrtm.org
2011年 8月 4日 (木) 16:19:11 JST


Author: kurihara
Date: 2011-08-04 16:19:10 +0900 (Thu, 04 Aug 2011)
New Revision: 436

Added:
   branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/
   branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/
   branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/
   branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/ComponentObserver.idl
   branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py
   branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/RTC.idl
   branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/SDOPackage.idl
   branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/doxygen_idlref.conf
   branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/
   branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/BasicDataType.idl
   branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/ComponentObserver.idl
   branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/DataPort.idl
   branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/OpenRTM.idl
   branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/RTC.idl
   branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/SDOPackage.idl
   branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/test_ComponentObserverConsumer.py
Log:
ComponentObserver SDO service consumer has been implemented. refs #2050

Added: branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/ComponentObserver.idl
===================================================================
--- branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/ComponentObserver.idl	                        (rev 0)
+++ branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/ComponentObserver.idl	2011-08-04 07:19:10 UTC (rev 436)
@@ -0,0 +1,512 @@
+// -*- IDL -*-
+/*!
+ * @file ComponentObserver.idl
+ * @brief Component observer SDO service
+ * @date $Date$
+ * @author Noriaki Ando <n-ando at aist.go.jp>
+ *
+ * Copyright (C) 2011
+ *     Noriaki Ando
+ *     Intelligent Systems Research Institute,
+ *     National Institute of
+ *         Advanced Industrial Science and Technology (AIST), Japan
+ *     All rights reserved.
+ *
+ * $Id$
+ *
+ */
+
+#include <SDOPackage.idl>
+#include <RTC.idl>
+
+/*!
+ * @if jp
+ * @brief コンポーネント状態オブザーバインターフェース
+ *
+ * コンポーネントの状態を監視するためのオブザーバインターフェース。オブ
+ * ザーバパターンに従い、外部ツールがコンポーネントにオブザーバオブジェ
+ * クトをセットし、コンポーネントは各種内部状態変更時にをオブザーバオブ
+ * ジェクトをコールし、オブザーバに対して変更を通知する。
+ *
+ * @since 1.1
+ *
+ * @else
+ * @brief Component state observer interface
+ *
+ * This interface defines observer interface for component states.
+ * According to the observer pattern, tools which want to observe
+ * component state set observer objects to the RT-Component, and weh
+ * RT-Component changes its status, the observer object is called and
+ * notice the changes to tools.
+ *
+ *
+ * @since 1.1
+ * @endif
+ */
+module OpenRTM
+{
+  /*!
+   * @if jp
+   *
+   * @brief 更新された状態の種類
+   * 
+   * ターゲットRTCで更新された状態の種類を分類する列挙型。
+   * 
+   * @else
+   *
+   * @brief A kind of updated status
+   * 
+   * This is a enumeration type to classify updated status in target RTC.
+   *
+   * @endif
+   */
+  enum StatusKind
+  {
+    /*!
+     * @if jp
+     *
+     * @brief コンポーネントプロファイル
+     * 
+     * コンポーネントプロファイル RTC::ComponentProfile が更新されたこ
+     * とを示す列挙型。
+     *
+     * RTC::ComponentProfile のメンバーのうち、instance_name,
+     * type_name, description, version, vendor, category はRTC動作中に
+     * 変更されることはない。これらが変更された場合には、
+     * ComponentObserver::updatestatus() の hint には、それぞれのメンバー
+     * 名が文字列で指定される。また、parent に対する変更は通知されない。
+     * さらに、properties に対する変更は、hint に "<key0>, <key1>,
+     * ..." の形で通知される。
+     *
+     * port_profiles に対する変更は、後述の PORT_PROFILE によって通知さ
+     * れるため、COMPONENT_PROFILE では通知されない。
+     *
+     * @else
+     *
+     * @brief Component profile
+     * 
+     * This is enumeration member to specify that the target
+     * component's RTC::componentProfile has been changed.
+     *
+     * In the member of RTC::ComponentProfile, instance_name,
+     * type_name, description, version, vendor, category are not
+     * modified during RTC running. If these members are changed, each
+     * member's name is specified in the
+     * ComponentObserver::updateStatus() 's hint argument. And,
+     * modification to parent is not notified. In the properties, the
+     * modification is notified as "<key0>, <key1>, ..." in the hint
+     * argument.
+     * 
+     * The modification to port_profiles is not notified as
+     * COMPONENT_PROFILE becauase it is notified as PORT_PROFILE.
+     *
+     * @endif
+     */
+    COMPONENT_PROFILE,
+    /*!
+     * @if jp
+     *
+     * @brief コンポーネントの状態
+     * 
+     * コンポーネントの状態が変化したことを示す列挙子。
+     *
+     * RTCにはECの状態として、INACTIVE_STATE, ACTIVE_STATE,
+     * ERROR_STATE があるが、この状態が変化したことを通知するための列挙
+     * 子。
+     *
+     * ComponentObserver::updatestatus() の hint には、状態と、どの実行
+     * コンテキストで変化があったかを知らせる以下の文字列が hint に引数
+     * として与えられる。
+     *
+     * hint: (INACTIVE, ACTIVE, ERROR):<Execution Context ID>
+     * 例:
+     *   ACTIVE:0 (デフォルトコンテキストでRTCがアクティブになった)
+     *   ERROR:1002 (実行コンテキスト1002でRTCがエラーになった)
+     *
+     * @else
+     *
+     * @brief Component status
+     * 
+     * This is INACTIVE_STATE, ACTIVE_STATE,
+     * ERROR_STATE status, and this enumerator specify a status of RTC changed.
+     *
+     * A status and ExecutionContext's id is specified in the argument of 
+     * ComponentObserver::updateStatus() 's hint.
+     *
+     * hint: (INACTIVE, ACTIVE, ERROR):<Execution Context ID>
+     * Example:
+     *   ACTIVE:0 (RTC is activated in the default ExecuionContext)
+     *   ERROR:1002 (RTC go to ERROR state in the EC of id 1002)
+     *
+     * @endif
+     */
+    RTC_STATUS,
+    /*!
+     * @if jp
+     *
+     * @brief ExecutionContextの状態
+     * 
+     * ExecutionContextの状態が変化したことを示す列挙子。
+     *
+     * RTCにECが attach/detach/rate_change/startup/shutdown されたことを
+     * 示す列挙子。
+     *
+     * ComponentObserver::updatestatus() の hint には、
+     * attach/detach/rate_change/startup/shutdow のいずれが行われたかと、
+     * 対象となるECのidが与えられる。
+     *
+     * hint: (ATTACHED, DETACHED, RATE_CHANGED, STARTUP,
+     *        SHUTDOWN):<Execution Context ID>
+     *
+     * 例:
+     *   ATTACHED:1002 (ECがアタッチされ、そのIDは1002)
+     *
+     * @else
+     *
+     * @brief The stauts of ExecutionContext
+     * 
+     * This is enumerator notifies that ExecutionContext is
+     * attach/detach/rate_change/startup/shutdown.  Attach or detach
+     * operation and target ExecutionContext's id is given in the
+     * argument of ComponentObserver::updateStatus() 's hint.
+     *
+     * hint: (ATTACHED, DETACHED, RATE_CHANGED, STARTUP,
+     *        SHUTDOWN):<Execution Context ID>
+     *
+     * Example:
+     *   ATTACHED:1002 (EC is attached and its ID is 1002)
+     *
+     * @endif
+     */
+    EC_STATUS,
+    /*!
+     * @if jp
+     *
+     * @brief Portの状態
+     * 
+     * Portの状態が変化したことを示す列挙子。Portの追加、削除、接続、切
+     * 断が行われたことを示す。ComponentObserver::updatestatus() の
+     * hint には、いずれかのアクションが行われたかと、対象となるポート
+     * の名前が与えられる。
+     *
+     * hint: (ADD, REMOVE, CONNECT, DISCONNECT):<port name>
+     * 例:
+     *   CONNECT:velocity (velocity ポートで接続が確立された)
+     *
+     * @else
+     *
+     * @brief The stauts of ports
+     * 
+     * This is enumerator which notifies that port is added, removed,
+     * connected and/or disconnected.  Which action is performed and
+     * target port's name is given to the hint argument in
+     * ComponentObserver::updateStatus() operation.
+     *
+     * hint: (ADD, REMOVE, CONNECT, DISCONNECT):<port name>
+     * Example:
+     *   CONNECT:velocity (A connection established in the velocity port)
+     *
+     * @endif
+     */
+    PORT_PROFILE,
+    /*!
+     * @if jp
+     *
+     * @brief Configurationの状態
+     * 
+     * Configurationの状態が変化したことを示す列挙子。Configurationに対
+     * して、コンフィギュレーションパラメータが更新された
+     * (UPDATE_CONFIG_PARAM)、コンフィギュレーションがセット(更新)さ
+     * れた (SET_CONFIG_SET)、コンフィギュレーションセットが追加された
+     * (ADD_CONFIG_SET)、コンフィギュレーションが更新された
+     * (UPDATE_CONFIG_SET)、コンフィギュレーションセットが削除された
+     * (REMOVE_CONFIG_SET)、コンフィギュレーションセットがアクティブに
+     * された (ACTIVATE_CONFIG_SET) といったアクションがあったことが通
+     * 知される。
+     *
+     * - UPDATE_CONFIG_PARAM: <config set name>.<config param name>
+     *   - SDOPackage::Configuration::set_configuration_parameter
+     * - SET_CONFIG_SET: <config set name>
+     *   - SDOPackage::Configuration::set_configuration_set_values
+     * - ADD_CONFIG_SET: <config set name>
+     *   - SDOPackage::Configuration::add_configuration_set
+     * - UPDATE_CONFIG_SET: <config set name>
+     *   - 内部のコンフィグセットを実際の変数に反映する
+     * - REMOVE_CONFIG_SET: <config set name>
+     *   - SDOPackage::Configuration::remove_configuration_set
+     * - ACTIVATE_CONFIG_SET:  <config set name>
+     *   - SDOPackage::Configuration::activate_configuration_set
+     * 
+     * @else
+     *
+     * @brief The stauts of ports
+     * 
+     * This is enumerator which notifies that configuration is
+     * changed.  To the configuration, a configuration parameter has
+     * been updated (UPDATE_CONFIG_PARAM), a configuration-set is set
+     * (SET_CONFIG_SET), a configuration set has been updated
+     * (UPDATE_CONFIG_SET), a configuration set has been added
+     * (ADD_CONFIG_SET) or removed (REMOVE_CONFIG_SET), the active
+     * configuration set has been changed (ACTIVATE_CONFIG_SET), these
+     * actions would be notified.
+     *
+     * - UPDATE_CONFIG_PARAM: <config set name>.<config param name>
+     *   - SDOPackage::Configuration::set_configuration_parameter
+     * - SET_CONFIG_SET: <config set name>
+     *   - SDOPackage::Configuration::set_configuration_set_values
+     * - ADD_CONFIG_SET: <config set name>
+     *   - SDOPackage::Configuration::add_configuration_set
+     * - UPDATE_CONFIG_SET: <config set name>
+     *   - Apply configuration-set values into actual variables.
+     * - REMOVE_CONFIG_SET: <config set name>
+     *   - SDOPackage::Configuration::remove_configuration_set
+     * - ACTIVATE_CONFIG_SET:  <config set name>
+     *   - SDOPackage::Configuration::activate_configuration_set
+     *
+     * @endif
+     */
+    CONFIGURATION,
+    /*!
+     * @if jp
+     *
+     * @brief ハートビートイベント
+     * 
+     * 当該RTCが生存していることをオブザーバー側に通知する列挙子。
+     *
+     * ハートビートを利用するかどうか、およびハートビートの周期は、
+     * ServiceProfile::properties の以下のプロパティによって与えられる。
+     *
+     * heartbeat.enable: YES/NO
+     * heartbeat.interval: x [s]
+     * 
+     * @else
+     *
+     * @brief The stauts of ports
+     * 
+     * This enumerator is heart beat notification.
+     *
+     * Whether if the heart-beat function is used is specified in the
+     * ServiceProfile::properties as the following properties.
+     *
+     * heartbeat.enable: YES/NO
+     * heartbeat.interval: x [s]
+     *
+     * @endif
+     */
+    HEARTBEAT,
+
+    STATUS_KIND_NUM
+  };
+
+  /*!
+   * @if jp
+   *
+   * @interface ComponentObserver
+   * 
+   * RTCの各種状態の更新を知らせるためのオブザーバーオブジェクトのため
+   * のインターフェース。SDO Service として、対象となるRTC/SDOに対して
+   * アタッチされ、RTC/SDO内の状態が変更された場合に、変更された状態の
+   * 種類とヒントを同時に通知する。ツールなどで、ポーリングによらずRTC
+   * の状態の変化を知りたい場合などに利用する。
+   *
+   * 想定している利用方法は以下のとおりである。
+   *
+   * -# SDO::get_configuration() により Configuration オブジェクトを取得
+   * -# Configuration::add_service_profile() によりTool側の
+   *     ComponentObserver を ServiceProfile により RTC に与える。
+   *     ServiceProfile のメンバーは以下のように設定すること
+   *   - id: UUID など一意なIDを設定する。削除時にも必要になるので、Tool
+   *     側ではIDを保持しておかなければならない。
+   *   - interface_type: 当該サービスのIFRのIDを文字列として指定。RTC側で
+   *     はこの文字列により当該サービスオブジェクトを受け入れるか決定す
+   *     るため指定は必須となる。
+   *   - properties: RTC側のサービスの受け入れ側に通知するプロパティを設
+   *     定する。このサービスでは、下記の heartbeat 関連のプロパティを
+   *     指定する。
+   *    - service: SDOService オブジェクトの参照を指定する。
+   * -# RTC側で状態の変化があった場合に update_status() オペレーション
+   *     が StatusKind および hint の文字列とともに呼び出される。Tool側
+   *     では、StatusKind と hint に基づき RTC のある部分の状態が変化し
+   *     たことを知り、必要な処理を行う。
+   * -# 最終的にComponentObserverオブジェクトが不要になった場合には、
+   *     Configuration::remove_service_profile() を id とともに呼び出し
+   *     RTC から削除する。
+   *
+   * <pre>
+   * 
+   *   [RTC]    [Configuration]           [Observer]    [Tool]
+   *     |            |                       |            |
+   *     |            | get_configuration()   |            |
+   *     |<------------------------------------------------|
+   *     |            |                       |            |
+   *     |            | add_service_profile(prof)          |
+   *     |            |<-----------------------------------|
+   *     |            |                       |            |
+   *     |            | update_status(kind, hint)          |
+   *     |----------------------------------->|            |
+   *     |            | update_status(kind, hint)          |
+   *     |----------------------------------->|            |
+   *     |            |       :               |            |
+   *     |            |                       |            |
+   *     |            | remove_service_profile(id)         |
+   *     |            |<-----------------------------------|
+   *     |            |                       |            |
+   *     |            |                       x            x
+   *
+   * </pre>
+   *
+   * なお、ServiceProfile::properties に指定するプロパティとしては、
+   *
+   * - observed_status: ALL or kind of status
+   * - heartbeat.enable: YES/NO
+   * - heartbeat.interval: x [s]
+   * 
+   * がある。
+   * 
+   * - observed_staus: ALL または状態の種類をカンマ区切りで指定
+   *   監視する状態を指定する。指定可能な状態を表す文字列は、
+   *   COMPONENT_PROFILE, RTC_STATUS, EC_STATUS, PORT_PROFILE,
+   *   CONFIGURATION 5種類である。監視したい対象をカンマで区切り複数指
+   *   定することができる。また、すべての状態を監視する場合、ALL を指定
+   *   することができる。指定文字列は大文字、小文字を問わない。
+   *
+   * - heartbeat.interval: 秒単位で数値で指定
+   *   ハートビートを送信する周期を秒単位で指定する。なお、指定した秒数
+   *   でハートビートが必ず送信される保証はない。したがって、RTCが死ん
+   *   だかどうかを確認するには、heartbeat.interval 数回分の時間を待つ
+   *   必要がある。
+   *
+   * - heartbeat.enable: YES または NOで指定
+   *   Tool側では、状態に変化があるまで RTC が生存しているかどうか知る
+   *   ことはできないため、突然RTCが死んだ場合には、これを知ることがで
+   *   きない。そこで、HEART_BEAT イベントを周期的にRTC側から送らせるこ
+   *   とができる。ハートビートを有効にするか否かをこのオプションで指定
+   *   する。
+   * 
+   * 
+   * @else
+   *
+   * @interface ComponentObserver
+   * 
+   * This is an interface to notify various status changed in RTC to
+   * others.  This is attached into a target RTC/SDO as a SDO service,
+   * and if an RTC/SDO's status change, a kind of changed status and
+   * its hints are notified to observers.  For example, it can be used
+   * to notify RTC's status changed without polling in certain tools.
+   *
+   * An assumed usage is as follows.
+   *
+   * -# SDO::get_configuration() is called to get a Configuration object
+   *
+   * -# Configuration::add_service_profile() is called by Tool.
+   *     A ComponentObserver in a ServiceProfile is given to RTC.
+   *     ServiceProfile members should be set as follows.
+   *
+   *    - id: UUID and other unique ID should be specified. Since this ID
+   *      is used when the service is removed, tools should remember
+   *      this ID.
+   *
+   *    - interface_type: IFR ID should be specified here. Since the RTC
+   *      decides if the given SDO service object can be accepted by
+   *      using the interface_type string, this member is mandatory.
+   * 
+   *    - properties: This member specifies properties to be notified to
+   *      RTC side. In this service, the following heartbeat related
+   *      properties should be specified.
+   *
+   *    - service: SDOService object reference should be specified.
+   * 
+   * -# If some changes happen in RTC, the update_status() operation
+   *    is called with StatusKind and hint string. RTC's status change
+   *    is notified to tool and some processes would be performed by
+   *    the tool according to the StatusKind and hint.
+   *
+   * -# Finally, When the ComponentObserver object becomes
+   *     unnecessary, Configuration::remove_service_profile() is called
+   *     with id and it is removed from RTC.
+   *
+   * <pre>
+   * 
+   *   [RTC]    [Configuration]           [Observer]    [Tool]
+   *     |            |                       |            |
+   *     |            | get_configuration()   |            |
+   *     |<------------------------------------------------|
+   *     |            |                       |            |
+   *     |            | add_service_profile(prof)          |
+   *     |            |<-----------------------------------|
+   *     |            |                       |            |
+   *     |            | update_status(kind, hint)          |
+   *     |----------------------------------->|            |
+   *     |            | update_status(kind, hint)          |
+   *     |----------------------------------->|            |
+   *     |            |       :               |            |
+   *     |            |                       |            |
+   *     |            | remove_service_profile(id)         |
+   *     |            |<-----------------------------------|
+   *     |            |                       |            |
+   *     |            |                       x            x
+   *
+   * </pre>
+   *
+   * Properties which is specified in ServiceProfile::properties is as follows.
+   *
+   * - observed_status: ALL or kind of status
+   * - heartbeat.enable: YES/NO
+   * - heartbeat.interval: x [s]
+   * 
+   *
+   * - observed_staus: ALL or comma separated status kinds This
+   *   property specifies kind of status to be observed. Available
+   *   kind of statuses are COMPONENT_PROFILE, RTC_STATUS, EC_STATUS,
+   *   PORT_PROFILE, CONFIGURATION. You can specify comma-separated
+   *   status list to be observed. And if you want to observe all the
+   *   status, you just specify ALL instead of all the status kind
+   *   list. Uppercase, lowercase and mixture are allowed in the
+   *   specified status kind.
+   *
+   * - heartbeat.enable: YES or NO
+   *
+   *   Since tools cannot know whether the RTC is alive or not until
+   *   status change happens, if the RTC suddenly died, the tools
+   *   cannot know it forever. To eliminate this problems, Observer
+   *   object can send periodic heartbeat signals to observers. The
+   *   heartbeat.enable option specifies whether the functionality is
+   *   activated or not.
+   *
+   * - heartbeat.interval: Heartbeat interval should be specified in
+   *   seconds.  This specification does not guarantee that heartbeat
+   *   signals precisely send back to observer. Therefore if you need
+   *   to decide whether an RTC died or not, you have to wait for
+   *   several heartbeat signals.
+   *
+   * @endif
+   */
+  interface ComponentObserver
+    : SDOPackage::SDOService
+  {
+    /*!
+     * @if jp
+     *
+     * @brief 状態が更新されたことを知らせる
+     * 
+     * 状態が更新されたことを知らせるオペレーション。status_kind によっ
+     * て更新された状態の種類、hint によってどのような状態が変更された
+     * かに関するヒントが与えられる。
+     *
+     * @param status_kind: StatusKind 型の状態の種類
+     * @param hint; StatusKind 毎に決まる状態変更に関するヒント
+     *
+     * @else
+     *
+     * @brief Notifies the status updated
+     *
+     * This operation notifies the updated status. The status_kind
+     * notifies kind of updated status, and the hint give some hint
+     * about updated status.
+     *
+     * @endif
+     */
+    oneway void update_status(in StatusKind status_kind, in string hint);
+  };
+
+};

Added: branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py
===================================================================
--- branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py	                        (rev 0)
+++ branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py	2011-08-04 07:19:10 UTC (rev 436)
@@ -0,0 +1,924 @@
+#!/usr/bin/env python
+# -*- coding: euc-jp -*-
+
+##
+# @file ComponentObserverConsumer.py
+# @brief Component observer SDO service consumer implementation
+# @date $Date$
+# @author Noriaki Ando <n-ando at aist.go.jp> and Shinji Kurihara
+#
+# Copyright (C) 2011
+#     Noriaki Ando
+#     Intelligent Systems Research Institute,
+#     National Institute of
+#         Advanced Industrial Science and Technology (AIST), Japan
+#     All rights reserved.
+#
+
+import RTC
+import OpenRTM
+import OpenRTM_aist
+
+
+##
+# @if jp
+# @else
+# @endif
+#
+class ComponentObserverConsumer(OpenRTM_aist.SdoServiceConsumerBase):
+  """
+  """
+
+  ##
+  # @if jp
+  # @brief ctor of ComponentObserverConsumer
+  # @else
+  # @brief ctor of ComponentObserverConsumer
+  # @endif
+  #
+  def __init__(self):
+    self._rtobj = None
+    self._profile = None
+    self._observer = OpenRTM_aist.CorbaConsumer(interfaceType=OpenRTM.ComponentObserver)
+    self._observed = [ False for i in range(OpenRTM.STATUS_KIND_NUM._v)]
+
+    self._compstat = self.CompStatMsg(self)
+    self._portaction = self.PortAction(self)
+    self._ecaction = self.ECAction(self)
+    self._configMsg = self.ConfigAction(self)
+
+    self._interval = OpenRTM_aist.TimeValue(1, 0)
+    self._heartbeat = False
+    self._hblistenerid = None
+
+    # このタイマーはいずれグローバルなタイマにおきかえる
+    self._timer = OpenRTM_aist.Timer(self._interval)
+    return
+
+
+  ##
+  # @if jp
+  # @brief dtor
+  # @else
+  # @brief dtor
+  # @endif
+  #
+  def __del__(self):
+    self.unsetComponentProfileListeners()
+    self.unsetComponentStatusListeners()
+    self.unsetPortProfileListeners()
+    self.unsetExecutionContextListeners()
+    self.unsetConfigurationListeners()
+    self.unsetHeartbeat()
+    del self._timer
+    return
+
+
+  ##
+  # @if jp
+  # @brief 初期化
+  # @else
+  # @brief Initialization
+  # @endif
+  #
+  # virtual bool init(RTObject_impl& rtobj,
+  #                   const SDOPackage::ServiceProfile& profile);
+  def init(self, rtobj, profile):
+    if not self._observer.setObject(profile.service):
+      # narrowing failed
+      return False
+
+    self._rtobj = rtobj
+    self._profile = profile
+    prop = OpenRTM_aist.Properties()
+    OpenRTM_aist.NVUtil.copyToProperties(prop, profile.properties)
+    self.setHeartbeat(prop)
+    self.setListeners(prop)
+    return True
+
+
+  ##
+  # @if jp
+  # @brief 再初期化
+  # @else
+  # @brief Re-initialization
+  # @endif
+  #
+  # virtual bool reinit(const SDOPackage::ServiceProfile& profile);
+  def reinit(self, profile):
+    if not self._observer._ptr()._is_equivalent(profile.service):
+      tmp = OpenRTM_aist.CorbaConsumer(interfaceType=OpenRTM.ComponentObserver)
+      if not tmp.setObject(profile.service):
+        return False
+      self._observer.releaseObject()
+      self._observer.setObject(profile.service)
+
+    self._profile= profile
+    prop = OpenRTM_aist.Properties()
+    OpenRTM_aist.NVUtil.copyToProperties(prop, profile.properties)
+    self.setHeartbeat(prop)
+    self.setListeners(prop)
+    return True
+
+
+  ##
+  # @if jp
+  # @brief ServiceProfile を取得する
+  # @else
+  # @brief getting ServiceProfile
+  # @endif
+  #
+  # virtual const SDOPackage::ServiceProfile& getProfile() const;
+  def getProfile(self):
+    return self._profile
+
+    
+  ##
+  # @if jp
+  # @brief 終了処理
+  # @else
+  # @brief Finalization
+  # @endif
+  #
+  # virtual void finalize();
+  def finalize(self):
+    self.unsetComponentProfileListeners()
+    self.unsetComponentStatusListeners()
+    self.unsetPortProfileListeners()
+    self.unsetExecutionContextListeners()
+    self.unsetConfigurationListeners()
+    self.unsetHeartbeat()
+    return
+
+
+  ##
+  # @if jp
+  # @brief リモートオブジェクトコール
+  # @else
+  # @brief Calling remote object
+  # @endif
+  #
+  # inline void updateStatus(OpenRTM::StatusKind statuskind, const char* msg)
+  def updateStatus(self, statuskind, msg):
+    try:
+      self._observer._ptr().update_status(statuskind, msg)
+    except:
+      self._rtobj.removeSdoServiceConsumer(self._profile.id)
+    return
+
+  ##
+  # @if jp
+  # @brief Kindを文字列へ変換する
+  # @else
+  # @brief Converting kind to string
+  # @endif
+  #
+  # inline const char* toString(OpenRTM::StatusKind kind)
+  def toString(self, kind):
+    kinds = ["COMPONENT_PROFILE",
+             "RTC_STATUS",
+             "EC_STATUS",
+             "PORT_PROFILE",
+             "CONFIGURATION",
+             "HEARTBEAT"]
+    if kind._v < OpenRTM.STATUS_KIND_NUM._v:
+      return kinds[kind._v]
+    return ""
+
+
+  ##
+  # @if jp
+  # @brief RTObjectへのリスナ接続処理
+  # @else
+  # @brief Connectiong listeners to RTObject
+  # @endif
+  #
+  # void setListeners(coil::Properties& prop);
+  def setListeners(self, prop):
+    if not prop.getProperty("observed_status"):
+      prop.setProperty("observed_status", "ALL")
+
+    observed_ = [s.strip() for s in prop.getProperty("observed_status").split(",")]
+    flags_ = [ False for i in range(OpenRTM.STATUS_KIND_NUM._v) ]
+
+    for i in range(len(observed_)):
+      observed_[i] = observed_[i].upper()
+      if observed_[i] == "COMPONENT_PROFILE":
+        flags_[OpenRTM.COMPONENT_PROFILE._v] = True
+      elif observed_[i] == "RTC_STATUS":
+        flags_[OpenRTM.RTC_STATUS._v] = True
+      elif observed_[i] == "EC_STATUS":
+        flags_[OpenRTM.EC_STATUS._v] = True
+      elif observed_[i] == "PORT_PROFILE":
+        flags_[OpenRTM.PORT_PROFILE._v] = True
+      elif observed_[i] == "CONFIGURATION":
+        flags_[OpenRTM.CONFIGURATION._v] = True
+      elif observed_[i] == "ALL":
+        for j in range(OpenRTM.STATUS_KIND_NUM._v):
+          flags_[j] = True
+        break
+  
+    self.switchListeners(flags_[OpenRTM.COMPONENT_PROFILE._v],
+                         self._observed,
+                         OpenRTM.COMPONENT_PROFILE._v,
+                         self.setComponentProfileListeners,
+                         self.unsetComponentProfileListeners)
+
+    self.switchListeners(flags_[OpenRTM.RTC_STATUS._v],
+                         self._observed,
+                         OpenRTM.RTC_STATUS._v,
+                         self.setComponentStatusListeners,
+                         self.unsetComponentStatusListeners)
+
+    self.switchListeners(flags_[OpenRTM.EC_STATUS._v],
+                         self._observed,
+                         OpenRTM.EC_STATUS._v,
+                         self.setExecutionContextListeners,
+                         self.unsetExecutionContextListeners)
+
+    self.switchListeners(flags_[OpenRTM.PORT_PROFILE._v],
+                         self._observed,
+                         OpenRTM.PORT_PROFILE._v,
+                         self.setPortProfileListeners,
+                         self.unsetPortProfileListeners)
+
+    self.switchListeners(flags_[OpenRTM.CONFIGURATION._v],
+                         self._observed,
+                         OpenRTM.CONFIGURATION._v,
+                         self.setConfigurationListeners,
+                         self.unsetConfigurationListeners)
+
+    return
+
+
+  ##
+  # @if jp
+  # @brief リスナ接続・切断スイッチング処理
+  # @else
+  # @brief Switching listeners connecting/disconnecting
+  # @endif
+  #
+  # void switchListeners(bool& next, bool& pre,
+  #                      void (ComponentObserverConsumer::*setfunc)(), 
+  #                      void (ComponentObserverConsumer::*unsetfunc)());
+  def switchListeners(self, next, pre, pre_idx, setfunc, unsetfunc):
+    if (not pre[pre_idx]) and next:
+      setfunc()
+      pre[pre_idx] = True
+    elif pre[pre_idx] and (not next):
+      unsetfunc()
+      pre[pre_idx] = False
+
+    return
+
+
+  #============================================================
+  # Heartbeat related functions
+
+  ##
+  # @if jp
+  # @brief ハートビートをオブザーバに伝える
+  # @else
+  # @brief Sending a heartbeart signal to observer
+  # @endif
+  #
+  # void heartbeat();
+  def heartbeat(self):
+    self.updateStatus(OpenRTM.HEARTBEAT, "")
+    return
+
+
+  ##
+  # @if jp
+  # @brief ハートビートを設定する
+  # @else
+  # @brief Setting heartbeat
+  # @endif
+  #
+  # void setHeartbeat(coil::Properties& prop);
+  def setHeartbeat(self, prop):
+    if OpenRTM_aist.toBool(prop.getProperty("heartbeat.enable"), "YES", "NO", False):
+      interval_ = prop.getProperty("heartbeat.interval")
+      if not interval_:
+        self._interval.set_time(1.0)
+      else:
+        tmp_ = float(interval_)
+        self._interval.set_time(tmp_)
+
+      tm_ = self._interval
+      self._hblistenerid = self._timer.registerListenerObj(self,
+                                                           ComponentObserverConsumer.heartbeat,
+                                                           tm_)
+      if not self._heartbeat:
+        self._timer.start()
+        self._heartbeat = True
+
+    else:
+      if self._heartbeat and self._hblistenerid:
+        self.unsetHeartbeat()
+
+    return
+
+
+  ##
+  # @if jp
+  # @brief ハートビートを解除する
+  # @else
+  # @brief Unsetting heartbeat
+  # @endif
+  #
+  # void unsetHeartbeat();
+  def unsetHeartbeat(self):
+    self._timer.unregisterListener(self._hblistenerid)
+    self._hblistenerid = 0
+    self._timer.stop()
+    self._heartbeat = False
+    return
+
+
+  #============================================================
+  # Component status related functions
+  
+  ##
+  # @if jp
+  # @brief RTC状態変化リスナの設定処理
+  # @else
+  # @brief Setting RTC status listeners
+  # @endif
+  #
+  # void setComponentStatusListeners();
+  def setComponentStatusListeners(self):
+    postclistener_ = OpenRTM_aist.PostComponentActionListenerType
+    if not self._compstat.activatedListener:
+      self._compstat.activatedListener = \
+          self._rtobj.addPostComponentActionListener(postclistener_.POST_ON_ACTIVATED,
+                                                     self._compstat.onActivated)
+    if not self._compstat.deactivatedListener:
+      self._compstat.deactivatedListener = \
+          self._rtobj.addPostComponentActionListener(postclistener_.POST_ON_DEACTIVATED,
+                                                     self._compstat.onDeactivated)
+
+    if not self._compstat.resetListener:
+      self._compstat.resetListener = \
+          self._rtobj.addPostComponentActionListener(postclistener_.POST_ON_RESET,
+                                                     self._compstat.onReset)
+
+    if not self._compstat.abortingListener:
+      self._compstat.abortingListener = \
+          self._rtobj.addPostComponentActionListener(postclistener_.POST_ON_ABORTING,
+                                                     self._compstat.onAborting)
+
+    if not self._compstat.finalizeListener:
+      self._compstat.finalizeListener = \
+          self._rtobj.addPostComponentActionListener(postclistener_.POST_ON_FINALIZE,
+                                                     self._compstat.onFinalize)
+
+    return
+
+  
+  ##
+  # @if jp
+  # @brief RTC状態変化リスナの解除処理
+  # @else
+  # @brief Unsetting RTC status listeners
+  # @endif
+  #
+  # void unsetComponentStatusListeners();
+  def unsetComponentStatusListeners(self):
+    postclistener_ = OpenRTM_aist.PostComponentActionListenerType
+    if self._compstat.activatedListener:
+      self._rtobj.removePostComponentActionListener(postclistener_.POST_ON_ACTIVATED,
+                                                    self._compstat.activatedListener)
+      self._compstat.activatedListener = None
+
+    if self._compstat.deactivatedListener:
+      self._rtobj.removePostComponentActionListener(postclistener_.POST_ON_DEACTIVATED,
+                                                    self._compstat.deactivatedListener)
+      self._compstat.deactivatedListener = None
+
+    if self._compstat.resetListener:
+      self._rtobj.removePostComponentActionListener(postclistener_.POST_ON_RESET,
+                                                    self._compstat.resetListener)
+      self._compstat.resetListener = None
+
+    if self._compstat.abortingListener:
+      self._rtobj.removePostComponentActionListener(postclistener_.POST_ON_ABORTING,
+                                                    self._compstat.abortingListener)
+      self._compstat.abortingListener = None
+
+    if self._compstat.finalizeListener:
+      self._rtobj.removePostComponentActionListener(postclistener_.POST_ON_FINALIZE,
+                                                    self._compstat.finalizeListener)
+      self._compstat.finalizeListener = None
+
+    return
+
+
+  #============================================================
+  # Port profile related functions
+
+  ##
+  # @if jp
+  # @brief Portプロファイル変化リスナの設定処理
+  # @else
+  # @brief Setting port profile listener
+  # @endif
+  #
+  # void setPortProfileListeners();
+  def setPortProfileListeners(self):
+    plistener_ = OpenRTM_aist.PortActionListenerType
+    if not self._portaction.portAddListener:
+      self._portaction.portAddListener = \
+          self._rtobj.addPortActionListener(plistener_.ADD_PORT,
+                                            self._portaction.onAddPort)
+
+    if not self._portaction.portRemoveListener:
+      self._portaction.portRemoveListener = \
+          self._rtobj.addPortActionListener(plistener_.REMOVE_PORT,
+                                            self._portaction.onRemovePort)
+
+    pclistener_ = OpenRTM_aist.PortConnectRetListenerType
+    if not self._portaction.portConnectListener:
+      self._portaction.portConnectListener = \
+          self._rtobj.addPortConnectRetListener(pclistener_.ON_CONNECTED,
+                                                self._portaction.onConnect)
+
+    if not self._portaction.portDisconnectListener:
+      self._portaction.portDisconnectListener = \
+          self._rtobj.addPortConnectRetListener(pclistener_.ON_DISCONNECTED,
+                                                self._portaction.onDisconnect)
+
+    return
+
+  ##
+  # @if jp
+  # @brief Portプロファイル変化リスナの解除処理
+  # @else
+  # @brief Unsetting port profile listener
+  # @endif
+  #
+  # void unsetPortProfileListeners();
+  def unsetPortProfileListeners(self):
+    plistener_ = OpenRTM_aist.PortActionListenerType
+    if self._portaction.portAddListener:
+      self._rtobj.removePortActionListener(plistener_.ADD_PORT,
+                                           self._portaction.portAddListener)
+      self._portaction.portAddListener = None
+
+    if self._portaction.portRemoveListener:
+      self._rtobj.removePortActionListener(plistener_.REMOVE_PORT,
+                                           self._portaction.portRemoveListener)
+      self._portaction.portRemoveListener = None
+
+    pclistener_ = OpenRTM_aist.PortConnectRetListenerType
+    if self._portaction.portConnectListener:
+      self._rtobj.removePortConnectRetListener(pclistener_.ON_CONNECTED,
+                                               self._portaction.portConnectListener)
+      self._portaction.portConnectListener = None
+
+    if self._portaction.portDisconnectListener:
+      self._rtobj.removePortConnectRetListener(pclistener_.ON_DISCONNECTED,
+                                               self._portaction.portDisconnectListener)
+      self._portaction.portDisconnectListener = None
+
+    return
+
+
+  #============================================================
+  # EC profile related functions
+   
+  ##
+  # @if jp
+  # @brief ECの状態変化リスナの設定
+  # @else
+  # @brief Setting EC status listener
+  # @endif
+  #
+  # void setExecutionContextListeners();
+  def setExecutionContextListeners(self):
+    ectype_ = OpenRTM_aist.ExecutionContextActionListenerType
+    if not self._ecaction.ecAttached:
+      self._ecaction.ecAttached = \
+          self._rtobj.addExecutionContextActionListener(ectype_.EC_ATTACHED,
+                                                        self._ecaction.onAttached)
+
+    if not self._ecaction.ecDetached:
+      self._ecaction.ecDetached = \
+          self._rtobj.addExecutionContextActionListener(ectype_.EC_DETACHED,
+                                                        self._ecaction.onDetached)
+
+    pcaltype_ = OpenRTM_aist.PostComponentActionListenerType
+    if not self._ecaction.ecRatechanged:
+      self._ecaction.ecRatechanged = \
+          self._rtobj.addPostComponentActionListener(pcaltype_.POST_ON_RATE_CHANGED,
+                                                     self._ecaction.onRateChanged)
+
+    if not self._ecaction.ecStartup:
+      self._ecaction.ecStartup = \
+          self._rtobj.addPostComponentActionListener(pcaltype_.POST_ON_STARTUP,
+                                                     self._ecaction.onStartup)
+
+    if not self._ecaction.ecShutdown:
+      self._ecaction.ecShutdown = \
+          self._rtobj.addPostComponentActionListener(pcaltype_.POST_ON_SHUTDOWN,
+                                                     self._ecaction.onShutdown)
+
+    return
+
+
+  ##
+  # @if jp
+  # @brief ECの状態変化リスナの解除
+  # @else
+  # @brief Unsetting EC status listener
+  # @endif
+  #
+  # void unsetExecutionContextListeners();
+  def unsetExecutionContextListeners(self):
+    ectype_ = OpenRTM_aist.ExecutionContextActionListenerType
+    if self._ecaction.ecAttached:
+      self._rtobj.removeExecutionContextActionListener(ectype_.EC_ATTACHED,
+                                                       self._ecaction.ecAttached)
+
+    if self._ecaction.ecDetached:
+      self._rtobj.removeExecutionContextActionListener(ectype_.EC_ATTACHED,
+                                                       self._ecaction.ecDetached)
+
+    pcaltype_ = OpenRTM_aist.PostComponentActionListenerType
+    if self._ecaction.ecRatechanged:
+      self._rtobj.removePostComponentActionListener(pcaltype_.POST_ON_RATE_CHANGED,
+                                                    self._ecaction.ecRatechanged)
+
+    if self._ecaction.ecStartup:
+      self._rtobj.removePostComponentActionListener(pcaltype_.POST_ON_STARTUP,
+                                                    self._ecaction.ecStartup)
+
+    if self._ecaction.ecShutdown:
+      self._rtobj.removePostComponentActionListener(pcaltype_.POST_ON_SHUTDOWN,
+                                                    self._ecaction.ecShutdown)
+
+    return
+
+
+  #============================================================
+  # ComponentProfile related functions
+
+  ##
+  # @if jp
+  # @brief ComponentProfile状態変化リスナの設定
+  # @else
+  # @brief Setting ComponentProfile listener
+  # @endif
+  #
+  # void setComponentProfileListeners();
+  def setComponentProfileListeners(self):
+    pass
+
+
+  ##
+  # @if jp
+  # @brief ComponentProfile状態変化リスナの解除
+  # @else
+  # @brief Unsetting ComponentProfile listener
+  # @endif
+  #
+  # void unsetComponentProfileListeners();
+  def unsetComponentProfileListeners(self):
+    pass
+
+
+  #============================================================
+  # Configuration related functions
+
+  ##
+  # @if jp
+  # @brief Configuration状態変化リスナの設定
+  # @else
+  # @brief Setting Configuration listener
+  # @endif
+  #
+  # void setConfigurationListeners();
+  def setConfigurationListeners(self):
+    confprmlistenertype_ = OpenRTM_aist.ConfigurationParamListenerType
+    self._configMsg.updateConfigParamListener = \
+        self._rtobj.addConfigurationParamListener(confprmlistenertype_.ON_UPDATE_CONFIG_PARAM,
+                                                  self._configMsg.updateConfigParam)
+
+    confsetlistenertype_ = OpenRTM_aist.ConfigurationSetListenerType
+    self._configMsg.setConfigSetListener = \
+        self._rtobj.addConfigurationSetListener(confsetlistenertype_.ON_SET_CONFIG_SET,
+                                                self._configMsg.setConfigSet)
+
+    self._configMsg.addConfigSetListener = \
+        self._rtobj.addConfigurationSetListener(confsetlistenertype_.ON_ADD_CONFIG_SET,
+                                                self._configMsg.addConfigSet)
+
+    confsetnamelistenertype_ = OpenRTM_aist.ConfigurationSetNameListenerType
+    self._configMsg.updateConfigSetListener = \
+        self._rtobj.addConfigurationSetNameListener(confsetnamelistenertype_.ON_UPDATE_CONFIG_SET,
+                                                    self._configMsg.updateConfigSet)
+
+    self._configMsg.removeConfigSetListener = \
+        self._rtobj.addConfigurationSetNameListener(confsetnamelistenertype_.ON_REMOVE_CONFIG_SET,
+                                                    self._configMsg.removeConfigSet)
+    self._configMsg.activateConfigSetListener = \
+        self._rtobj.addConfigurationSetNameListener(confsetnamelistenertype_.ON_ACTIVATE_CONFIG_SET,
+                                                    self._configMsg.activateConfigSet)
+    return
+
+
+  ##
+  # @if jp
+  # @brief Configuration状態変化リスナの解除
+  # @else
+  # @brief Unsetting Configurationlistener
+  # @endif
+  #
+  # void unsetConfigurationListeners();
+  def unsetConfigurationListeners(self):
+    confprmlistenertype_ = OpenRTM_aist.ConfigurationParamListenerType
+    if self._configMsg.updateConfigParamListener:
+      self._rtobj.removeConfigurationParamListener(confprmlistenertype_.ON_UPDATE_CONFIG_PARAM,
+                                                   self._configMsg.updateConfigParamListener)
+      self._configMsg.updateConfigParamListener = None
+
+    confsetlistenertype_ = OpenRTM_aist.ConfigurationSetListenerType
+    if self._configMsg.setConfigSetListener:
+      self._rtobj.removeConfigurationSetListener(confsetlistenertype_.ON_SET_CONFIG_SET,
+                                                 self._configMsg.setConfigSetListener)
+      self._configMsg.setConfigSetListener = None
+
+    if self._configMsg.addConfigSetListener:
+      self._rtobj.removeConfigurationSetListener(confsetlistenertype_.ON_ADD_CONFIG_SET,
+                                                 self._configMsg.addConfigSetListener)
+      self._configMsg.addConfigSetListener = None
+
+    confsetnamelistenertype_ = OpenRTM_aist.ConfigurationSetNameListenerType
+    if self._configMsg.updateConfigSetListener:
+      self._rtobj.removeConfigurationSetNameListener(confsetnamelistenertype_.ON_UPDATE_CONFIG_SET,
+                                                     self._configMsg.updateConfigSetListener)
+      self._configMsg.updateConfigSetListener = None
+
+    if self._configMsg.removeConfigSetListener:
+      self._rtobj.removeConfigurationSetNameListener(confsetnamelistenertype_.ON_REMOVE_CONFIG_SET,
+                                                     self._configMsg.removeConfigSetListener)
+      self._configMsg.removeConfigSetListener = None
+
+    if self._configMsg.activateConfigSetListener:
+      self._rtobj.removeConfigurationSetNameListener(confsetnamelistenertype_.ON_ACTIVATE_CONFIG_SET,
+                                                     self._configMsg.activateConfigSetListener)
+      self._configMsg.activateConfigSetListener = None
+
+    return
+
+
+  ##
+  # @if jp
+  # @brief PostComponentActionListener class
+  # @else
+  # @brief PostComponentActionListener class
+  # @endif
+  #
+  class CompStatMsg:
+    """
+    """
+
+    #CompStatMsg(ComponentObserverConsumer& coc)
+    def __init__(self, coc):
+      self.activatedListener = None
+      self.deactivatedListener = None
+      self.resetListener = None
+      self.abortingListener = None
+      self.finalizeListener = None
+      self._coc = coc
+      return
+
+    def __del__(self):
+      del self._coc
+      return
+
+    #void onGeneric(const char* msgprefix, UniqueId ec_id, ReturnCode_t ret)
+    def onGeneric(self, msgprefix, ec_id, ret):
+      if ret == RTC.RTC_OK:
+        msg_ = msgprefix
+        msg_ += str(ec_id)
+        self._coc.updateStatus(OpenRTM.RTC_STATUS, msg_)
+      return
+
+    #void onActivated(UniqueId ec_id, ReturnCode_t ret)
+    def onActivated(self, ec_id, ret):
+      self.onGeneric("ACTIVE:", ec_id, ret)
+      return
+
+    #void onDeactivated(UniqueId ec_id, ReturnCode_t ret)
+    def onDeactivated(self, ec_id, ret):
+      self.onGeneric("INACTIVE:", ec_id, ret)
+      return
+
+    #void onReset(UniqueId ec_id, ReturnCode_t ret)
+    def onReset(self, ec_id, ret):
+      self.onGeneric("INACTIVE:", ec_id, ret)
+      return
+
+    #void onAborting(UniqueId ec_id, ReturnCode_t ret)
+    def onAborting(self, ec_id, ret):
+      self.onGeneric("ERROR:", ec_id, ret)
+      return
+
+    #void onFinalize(UniqueId ec_id, ReturnCode_t ret)
+    def onFinalize(self, ec_id, ret):
+      self.onGeneric("FINALIZE:", ec_id, ret)
+      return
+
+  ##
+  # @if jp
+  # @brief PortActionListener
+  # @else
+  # @brief PortActionListener
+  # @endif
+  #
+  class PortAction:
+    """
+    """
+
+    #PortAction(ComponentObserverConsumer& coc)
+    def __init__(self, coc):
+      self.portAddListener = None
+      self.portRemoveListener = None
+      self.portConnectListener = None
+      self.portDisconnectListener = None
+      self._coc = coc
+      return
+
+    def __del__(self):
+      del self._coc
+      return
+
+    #void onGeneric(const char* _msg, const char* portname)
+    def onGeneric(self, _msg, portname):
+      msg_ = _msg
+      msg_ += portname
+      self._coc.updateStatus(OpenRTM.PORT_PROFILE, msg_)
+      return
+
+    #void onAddPort(const ::RTC::PortProfile& pprof)
+    def onAddPort(self, pprof):
+      self.onGeneric("ADD:", str(pprof.name))
+      return
+
+    #void onRemovePort(const ::RTC::PortProfile& pprof)
+    def onRemovePort(self, pprof):
+      self.onGeneric("REMOVE:", str(pprof.name))
+      return
+
+    #void onConnect(const char* portname,
+    #                 ::RTC::ConnectorProfile& pprof, ReturnCode_t ret)
+    def onConnect(self, portname, pprof, ret):
+      if ret == RTC.RTC_OK:
+        self.onGeneric("CONNECT:", portname)
+      return
+
+    #void onDisconnect(const char* portname,
+    #                  ::RTC::ConnectorProfile& pprof, ReturnCode_t ret)
+    def onDisconnect(self, portname, pprof, ret):
+      if ret == RTC.RTC_OK:
+        self.onGeneric("DISCONNECT:", portname)
+      return
+
+
+  ##
+  # @if jp
+  # @brief ExecutionContextActionListener
+  # @else
+  # @brief ExecutionContextActionListener
+  # @endif
+  #
+  class ECAction:
+    """
+    """
+
+    #ECAction(ComponentObserverConsumer& coc)
+    def __init__(self, coc):
+      self.ecAttached = None
+      self.ecDetached = None
+      self.ecRatechanged = None
+      self.ecStartup = None
+      self.ecShutdown = None
+      self._coc = coc
+      return
+
+    def __del__(self):
+      del self._coc
+      return
+
+    #void onGeneric(const char* _msg, UniqueId ec_id)
+    def onGeneric(self, _msg, ec_id):
+      msg_ = _msg + str(ec_id)
+      self._coc.updateStatus(OpenRTM.EC_STATUS, msg_)
+      return
+
+    #void onAttached(UniqueId ec_id)
+    def onAttached(self, ec_id):
+      self.onGeneric("ATTACHED:", ec_id)
+      return
+
+    #void onDetached(UniqueId ec_id)
+    def onDetached(self, ec_id):
+      self.onGeneric("DETACHED:", ec_id)
+      return
+
+    #void onRateChanged(UniqueId ec_id, ReturnCode_t ret)
+    def onRateChanged(self, ec_id, ret):
+      if ret == RTC.RTC_OK:
+        self.onGeneric("RATE_CHANGED:", ec_id)
+      return
+
+    #void onStartup(UniqueId ec_id, ReturnCode_t ret)
+    def onStartup(self, ec_id, ret):
+      if ret == RTC.RTC_OK:
+        self.onGeneric("STARTUP:", ec_id)
+      return
+
+    #void onShutdown(UniqueId ec_id, ReturnCode_t ret)
+    def onShutdown(self, ec_id, ret):
+      if ret == RTC.RTC_OK:
+        self.onGeneric("SHUTDOWN:", ec_id)
+      return
+
+
+  ##
+  # @if jp
+  # @brief ConfigActionListener
+  # @else
+  # @brief ConfigActionListener
+  # @endif
+  #
+  class ConfigAction:
+    """
+    """
+
+    #ConfigAction(ComponentObserverConsumer& coc)
+    def __init__(self, coc):
+      self.updateConfigParamListener = None
+      self.setConfigSetListener = None
+      self.addConfigSetListener = None
+      self.updateConfigSetListener = None
+      self.removeConfigSetListener = None
+      self.activateConfigSetListener = None
+      self._coc = coc
+
+    def __del__(self):
+      del self._coc
+      return
+
+    #void updateConfigParam(const char* configsetname,
+    #                       const char* configparamname)
+    def updateConfigParam(self, configsetname, configparamname):
+      msg_ = "UPDATE_CONFIG_PARAM: "
+      msg_ += configsetname
+      msg_ += "."
+      msg_ += configparamname
+      self._coc.updateStatus(OpenRTM.CONFIGURATION, msg_)
+      return
+
+    #void setConfigSet(const coil::Properties& config_set)
+    def setConfigSet(self, config_set):
+      msg_ = "SET_CONFIG_SET: "
+      msg_ += config_set.getName()
+      self._coc.updateStatus(OpenRTM.CONFIGURATION, msg_)
+      return
+
+    #void addConfigSet(const coil::Properties& config_set)
+    def addConfigSet(self, config_set):
+      msg_ = "ADD_CONFIG_SET: "
+      msg_ += config_set.getName()
+      self._coc.updateStatus(OpenRTM.CONFIGURATION, msg_)
+      return
+
+    #void updateConfigSet(const char* config_set_name)
+    def updateConfigSet(self, config_set_name):
+      msg_ = "UPDATE_CONFIG_SET: "
+      msg_ += config_set_name
+      self._coc.updateStatus(OpenRTM.CONFIGURATION, msg_)
+      return
+
+    #void removeConfigSet(const char* config_set_name)
+    def removeConfigSet(self, config_set_name):
+      msg_ = "REMOVE_CONFIG_SET: "
+      msg_ += config_set_name
+      self._coc.updateStatus(OpenRTM.CONFIGURATION, msg_)
+      return
+
+    #void activateConfigSet(const char* config_set_name)
+    def activateConfigSet(self, config_set_name):
+      msg_ = "ACTIVATE_CONFIG_SET: "
+      msg_ += config_set_name
+      self._coc.updateStatus(OpenRTM.CONFIGURATION, msg_)
+      return
+
+def ComponentObserverConsumerInit(mgr=None):
+  factory = OpenRTM_aist.SdoServiceConsumerFactory.instance()
+  factory.addFactory(OpenRTM.ComponentObserver._NP_RepositoryId,
+                     ComponentObserverConsumer,
+                     OpenRTM_aist.Delete)
+  return

Added: branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/RTC.idl
===================================================================
--- branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/RTC.idl	                        (rev 0)
+++ branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/RTC.idl	2011-08-04 07:19:10 UTC (rev 436)
@@ -0,0 +1,2649 @@
+// RTC.idl
+
+#include "SDOPackage.idl"
+
+#pragma prefix "omg.org"
+
+#define EXECUTION_HANDLE_TYPE_NATIVE long
+
+module RTC
+{
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief ExecutionContextHandle_t
+   *
+   * @section Description
+   *
+   * This data type represents the association between an RTC and an
+   * ExecutionContext in which it participates.
+   * 
+   * @section Semantics
+   *
+   * This is an opaque DataType. It has no attributes or operations.
+   *
+   * @endif
+   */
+  typedef EXECUTION_HANDLE_TYPE_NATIVE ExecutionContextHandle_t;
+
+  typedef SDOPackage::UniqueIdentifier UniqueIdentifier;
+  typedef SDOPackage::NVList NVList;
+  
+  /*!
+   * @if jp
+   * @brief ReturnCode_t
+   *
+   * OMG RTC 1.0 仕様中の多くのオペレーションは、クラインとに対して考え
+   * られるエラー状態を報告する必要がある。これは、ReturnCode_t型の所謂
+   * リターンコードにより行われる。
+   *
+   * OMG RTC 1.0 の PIM 内において、ReturnCode_t型の値を返さないオペレーションは
+   * それらの戻り値の型に依存して、次の方法によりエラーを報告するものとする。
+   * -オペレーションが正数値を返す場合 (OMG RTC 1.0 Section 5.2.2.6.4 の
+   *  get_rateのように)、負数値を返すことによりエラーを示すものとする。
+   * - オペレーションがオブジェクトリファレンス(RTObject::get_component_profile
+   *   OMG RTC 1.0 5.4.2.2.1を参照) を通常返す場合、nil参照を返すことにより
+   *   エラーを示すものとする。
+   *
+   * @else
+   * @brief ReturnCode_t
+   *
+   * A number of operations in this specification will need to report
+   * potential error conditions to their clients. This task shall be
+   * accomplished by means of operation "return codes" of type
+   * ReturnCode_t
+   *
+   * Operations in the PIM that do not return a value of type
+   * ReturnCode_t shall report errors in the following ways, depending
+   * on their return type:
+   * - If an operation normally returns a positive numerical value (such as
+   *   get_rate, see [OMG RTC 1.0 Section 5.2.2.6.4]), it shall indicate
+   *   failure by returning a negative value.
+   * - If an operation normally returns an object reference (such as
+   *   RTObject::get_component_profile, see [OMG RTC 1.0 Section 5.4.2.2.1]),
+   *   it shall indicate failure by returning a nil reference.
+   *
+   * @param RTC_OK The operation completed successfully.
+   * @param RTC_ERROR The operation failed with a generic, unspecified error.
+   * @param BAD_PARAMETER The operation failed because an illegal argument was
+   *        passed to it.
+   * @param UNSUPPORTED The operation is unsupported by the implementation
+   *        (e.g., it belongs to a compliance point that is not implemented).
+   * @param OUT_OF_RESOURCES The target of the operation ran out of the
+   *        resources needed to complete the operation.
+   * @param PRECONDITION_NOT_MET A pre-condition for the operation was not met.
+   *
+   * @endif
+   */
+  enum ReturnCode_t
+  {
+    RTC_OK,
+    RTC_ERROR,
+    BAD_PARAMETER,
+    UNSUPPORTED,
+    OUT_OF_RESOURCES,
+    PRECONDITION_NOT_MET
+  };
+
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief LifeCycleState
+   *
+   * @section Description
+   * LifeCycleState is an enumeration of the states in the lifecycle above.
+   *
+   * @endif
+   */
+  enum LifeCycleState
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief CREATED
+     *
+     * @section Description
+     *
+     * The RTC object has been instantiated but not yet fully initialized.
+     * @endif
+     */
+    CREATED_STATE,
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief INACTIVE
+     *
+     * @section Description
+     *
+     * The RTC is Alive but is not being invoked in any execution
+     * context (see Section 5.2.2.5), regardless of whether the context
+     * is Running or not.
+     *
+     * @section Semantics
+     *
+     * An instance of this state exists for each execution context in
+     * which the RTC participates. If the RTC does not participate in
+     * any execution context, a single instance of this state exists.
+     *
+     * @endif
+     */
+    INACTIVE_STATE,
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief ACTIVE
+     *
+     * @section Description
+     *
+     * The RTC is Alive and will be invoked in the execution context
+     * if the context is Running.
+     *
+     * @section Semantics
+     * 
+     * An instance of this state exists for each execution context in
+     * which the RTC participates. If the RTC does not participate in
+     * any execution context, this state shall never be observed.
+     *
+     * @endif
+     */
+    ACTIVE_STATE,
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief ERROR
+     *
+     * @section Description
+     *
+     * The RTC has encountered a problem in a given execution context
+     * and cannot continue functioning in that context without being
+     * reset.
+     *
+     * @endif
+     */
+    ERROR_STATE
+  };
+  
+  interface ExecutionContext;
+  typedef sequence<ExecutionContext> ExecutionContextList;
+
+  /*!
+   * @if jp
+   * @brief
+   * @else
+   * @brief ComponentAction
+   *
+   * @section Description
+   *
+   * The ComponentAction interface provides callbacks corresponding to
+   * the execution of the lifecycle operations of LightweightRTObject
+   * (see Section 5.2.2.2) and ExecutionContext (see Section
+   * 5.2.2.5). An RTC developer may implement these callback
+   * operations in order to execute application-specific logic
+   * pointing response to those transitions.
+   *
+   * @section Semantics
+   *
+   * Clients of an RTC are not expected to invoke these operations
+   * directly; they are provided for the benefit of the RTC middleware
+   * implementation.
+   *
+   * @endif
+   */
+  interface ComponentAction
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_initialize
+     *
+     * @section Description
+     *
+     * The RTC has been initialized and entered the Alive state.
+     *
+     * @section Semantics
+     *
+     * Any RTC-specific initialization logic should be performed here.
+     *
+     * @endif
+     */
+    ReturnCode_t on_initialize();
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_finalize
+     *
+     * @section Description
+     *
+     * The RTC is being destroyed.
+     *
+     * @section Semantics
+     *
+     * Any final RTC-specific tear-down logic should be performed here.
+     *
+     * @endif
+     */
+    ReturnCode_t on_finalize();
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_startup
+     *
+     * @section Description
+     *
+     * The given execution context, in which the RTC is participating,
+     * has transitioned from Stopped to Running.
+     *
+     * @endif
+     */
+    ReturnCode_t on_startup(in ExecutionContextHandle_t exec_handle);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_shutdown
+     *
+     * @section Description
+     *
+     * The given execution context, in which the RTC is participating,
+     * has transitioned from Running to Stopped.
+     *
+     * @endif
+     */
+    ReturnCode_t on_shutdown(in ExecutionContextHandle_t exec_handle);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_activated
+     *
+     * @section Description
+     *
+     * The RTC has been activated in the given execution context.
+     *
+     * @endif
+     */
+    ReturnCode_t on_activated(in ExecutionContextHandle_t exec_handle);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_deactivated
+     *
+     * @section Description
+     *
+     * The RTC has been deactivated in the given execution context.
+     *
+     * @endif
+     */
+    ReturnCode_t on_deactivated(in ExecutionContextHandle_t exec_handle);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_aborting
+     *
+     * @section Description
+     *
+     * The RTC is transitioning from the Active state to the Error
+     * state in some execution context.
+     *
+     * @section Semantics
+     *
+     * This callback is invoked only a single time for time that the
+     * RTC transitions into the Error state from another state. This
+     * behavior is in contrast to that of on_error.  
+     *
+     * @endif
+     */
+    ReturnCode_t on_aborting(in ExecutionContextHandle_t exec_handle);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_error
+     *
+     * @section Description
+     *
+     * The RTC remains in the Error state.
+     *
+     * @section Semantics
+     *
+     * If the RTC is in the Error state relative to some execution
+     * context when it would otherwise be invoked from that context
+     * (according to the context’s ExecutionKind), this callback
+     * shall be invoked instead. For example,
+     *
+     * - If the ExecutionKind is PERIODIC, this operation shall be
+     *   invoked in sorted order at the rate of the context instead of
+     *   DataFlowComponentAction::on_execute and on_state_update.
+     *
+     * - If the ExecutionKind is EVENT_DRIVEN, this operation shall be
+     *   invoked whenever FsmParticipantAction::on_action would
+     *   otherwise have been invoked.
+     *
+     * @endif
+     */
+    ReturnCode_t on_error(in ExecutionContextHandle_t exec_handle);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_reset
+     *
+     * @section Description
+     *
+     * The RTC is in the Error state. An attempt is being made to
+     * recover it such that it can return to the Inactive state.
+     *
+     * @section Semantics
+     *
+     * If the RTC was successfully recovered and can safely return to
+     * the Inactive state, this method shall complete with
+     * ReturnCode_t::OK. Any other result shall indicate that the RTC
+     * should remain in the Error state.
+     *
+     * @endif
+     */
+    ReturnCode_t on_reset(in ExecutionContextHandle_t exec_handle);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief LightweightRTObject
+   * 
+   * @section Description
+   *
+   * This interface is realized by all lightweight RTCs (as required
+   * by the lightweightRTComponent stereotype). It defines the states
+   * and transitions through which all RTCs will pass from the time
+   * they are created until the time they are destroyed.
+   *
+   * @section Semantics
+   * @subsection Initialization
+   *
+   * An RTC begins in the Created state; at this point, it has been
+   * instantiated but not yet fully initialized. Note that this state
+   * is highly implementation-dependent. For example, it may
+   * correspond to the invocation of a constructor in languages that
+   * support that concept, but not all languages do. Furthermore, how
+   * soon this state is entered before initialize is invoked is
+   * implementation-dependent. Therefore, it should be relied on by
+   * RTC implementers only to the minimum extent possible.  An RTC
+   * that has completed its initialization and has not been finalized
+   * is said to be Alive.
+   *
+   * @subsection Execution Context
+   *
+   * An RTC in the Alive state may participate in any number of
+   * execution contexts (see Section 5.2.2.5 ). These contexts shall
+   * be represented to an RTC as distinct instances of the
+   * ExecutionContext class. The ExecutionContext manages the behavior
+   * of each RTC that participates in it. This relationship is defined
+   * by the following state machine, which is embedded within the
+   * ExecutionContext's own lifecycle (see Figure 5.5 ). Each
+   * participating RTC is represented as a separate parallel region.
+   *
+   * Relative to a given execution context, an RTC may either be
+   * Active, Inactive, or in Error. When the RTC is Active in a
+   * Running execution context, the ComponentAction callbacks (see
+   * Section 5.2.2.4) shall be invoked as appropriate for the context’
+   * s ExecutionKind. The callbacks shall not be invoked relative to
+   * that context when either the RTC is Inactive in that context or
+   * the context is Stopped. (Note that starting and stopping an
+   * execution context shall not impact whether its participating RTCs
+   * are Active or Inactive.)  It may be that a given RTC does not
+   * directly participate in any execution contexts. Such an RTC is
+   * referred to as passive.  A passive RTC may provide services to
+   * other components upon request. At any other time, it shall not be
+   * required to perform any ongoing activity of its own; therefore,
+   * instances of such an RTC typically exist only as parts (directly
+   * or indirectly) of a containing active RTC.
+   *
+   * @subsection Error Handling
+   *
+   * If an operation fails while the RTC is Active in a given
+   * execution context, the RTC will transition to the Error state
+   * corresponding to that context. While the RTC is in Error, the
+   * ComponentAction::on_error callback will be invoked in place of
+   * those callbacks that would otherwise have been invoked according
+   * to the context’s ExecutionKind. For example, if the kind is
+   * PERIODIC, on_error shall be invoked instead of the pair of
+   * on_execute, and on_state_update.  When an RTC is in Error, it may
+   * be reset. If resetting is successful, the RTC shall return to the
+   * Inactive state. If resetting is unsuccessful, it shall remain in
+   * the Error state.
+   * 
+   * @endif
+   */
+  interface LightweightRTObject
+    : ComponentAction
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief initialize
+     *
+     * @section Description
+     * Initialize the RTC that realizes this interface.
+     *
+     * @section Semantics
+     * The invocation of this operation shall result in the invocation
+     * of the callback ComponentAction::on_initialize.
+     *
+     * @section Constraints
+     *
+     * - An RTC may be initialized only while it is in the Created
+     *   state. Any attempt to invoke this operation while in another
+     *   state shall fail with ReturnCode_t::PRECONDITION_NOT_MET.
+     * - Application developers are not expected to call this operation
+     *   directly; it exists for use by the RTC infrastructure.
+     *
+     * @endif
+     */
+    ReturnCode_t initialize();
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief finalize
+     *
+     * @section Description
+     *
+     * Finalize the RTC that realizes this interface, preparing it for
+     * destruction.
+     *
+     * @section Semantics
+     *
+     * This invocation of this operation shall result in the
+     * invocation of the callback ComponentAction::on_finalize
+     *
+     * @section Constraints
+     *
+     * - An RTC may not be finalized while it is participating in any
+     *   execution context. It must first be removed with
+     *   ExecutionContextOperations::remove_component. Otherwise, this
+     *   operation shall fail with
+     *   ReturnCode_t::PRECONDITION_NOT_MET. See Figure 5.9.
+     *
+     * - An RTC may not be finalized while it is in the Created state. Any
+     *   attempt to invoke this operation while in that state shall fail with
+     *   ReturnCode_t::PRECONDITION_NOT_MET.
+     *
+     * - Application developers are not expected to call this operation
+     *   directly; it exists for use by the RTC infrastructure.
+     *
+     * @endif
+     */
+    ReturnCode_t finalize();
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief is_alive
+     * 
+     * @section Description
+     *
+     * A component is alive or not regardless of the execution context
+     * from which it is observed. However, whether or not it is
+     * Active, Inactive, or in Error is dependent on the execution
+     * context(s) (see Figure 5.7) in which it is running. That is, it
+     * may be Active in one context but Inactive in
+     * another. Therefore, this operation shall report whether this
+     * RTC is either Active, Inactive, or in Error; which of those
+     * states a component is in with respect to a particular context
+     * may be queried from the context itself.
+     *
+     * @endif
+     *
+     */
+    boolean is_alive(in ExecutionContext exec_context);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief exit
+     *
+     * @section Description
+     *
+     * Stop the RTC’s execution context(s) and finalize it along with
+     * its contents.
+     *
+     * @section Semantics
+     *
+     * Any execution contexts for which the RTC is the owner shall be
+     * stopped.  If the RTC participates in any execution contexts
+     * belonging to another RTC that contains it, directly or
+     * indirectly (i.e., the containing RTC is the owner of the
+     * ExecutionContext), it shall be deactivated in those contexts.
+     * After the RTC is no longer Active in any Running execution
+     * context, it and any RTCs contained transitively within it shall
+     * be finalized.
+     *
+     * @section Constraints
+     *
+     * An RTC cannot be exited if it has not yet been initialized. Any
+     * attempt to exit an RTC that is in the Created state shall fail
+     * with ReturnCode_t::PRECONDITION_NOT_MET.  
+     *
+     * @endif
+     */
+    ReturnCode_t exit();
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief attach_context
+     *
+     * @section Description
+     *
+     * Inform this RTC that it is participating in the given execution
+     * context. Return a handle that represents the association of
+     * this RTC with the context.
+     *
+     * @section Semantics
+     *
+     * This operation is intended to be invoked by
+     * ExecutionContextOperations::add_component (see Section
+     * 5.2.2.6.6). It is not intended for use by other clients.
+     *
+     * @endif
+     */
+    ExecutionContextHandle_t attach_context(in ExecutionContext exec_context);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief detach_context
+     * @section Description
+     * 
+     * Inform this RTC that it is no longer participating in the given
+     * execution context.
+     *
+     * @section Semantics
+     * 
+     * This operation is intended to be invoked by
+     * ExecutionContextOperations::remove_component (see Section
+     * 5.2.2.6.7). It is not intended for use by other clients.
+     *
+     * @section Constraints
+     *
+     * - This operation may not be invoked if this RTC is not already
+     *   participating in the execution context. Such a call shall fail
+     *   with ReturnCode_t::PRECONDITION_NOT_MET.
+     *
+     * - This operation may not be invoked if this RTC is Active in
+     *   the indicated execution context. Otherwise, it shall fail with
+     *   ReturnCode_t::PRECONDITION_NOT_MET.
+     *
+     * @endif
+     */
+    ReturnCode_t detach_context(in ExecutionContextHandle_t exec_handle);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_context
+     *
+     * @section Description
+     *
+     * Obtain a reference to the execution context represented by the
+     * given handle.
+     *
+     * @section Semantics
+     *
+     * The mapping from handle to context is specific to a particular
+     * RTC instance. The given handle must have been obtained by a
+     * previous call to attach_context on this RTC.
+     *
+     * @endif
+     */
+    ExecutionContext get_context(in ExecutionContextHandle_t exec_handle);
+
+    /*!
+     * @if jp
+     * @brief get_owned_contexts
+     *
+     * @section Description 
+     *
+     * この RTC が所有する ExecutionContext のリストを取得する。
+     * 
+     * @else
+     * @brief get_owned_contexts
+     *
+     * @section Description 
+     *
+     * This operation returns a list of all execution contexts owned
+     * by this RTC.
+     *
+     * @endif
+     */
+    ExecutionContextList get_owned_contexts();
+
+    /*!
+     * @if jp
+     * @brief get_participating_contexts
+     *  
+     * @section Description
+     *
+     * この RTC が参加しているすべての ExecutionContext のリストを取得する。
+     *
+     * @section Semantics
+     *
+     * このリストに含まれる実行コンテキストは、attach_context が呼び出
+     * されるごとに、リストに追加され、detach_context が呼び出されるご
+     * とに、リストから削除される。
+     *
+     * @else
+     * @brief* get_participating_contexts
+     *
+     * @section Description
+     *
+     * This operation returns a list of all execution contexts in
+     * which this RTC participates.
+     *
+     * @section Semantics
+     *
+     * Each call to attach_context causes the provided context to be
+     * added to this list. Each call to detach_context causes the
+     * provided context to be removed from this list.
+     *
+     * @endif
+     */
+    ExecutionContextList get_participating_contexts();
+    
+    /*!
+     * @if jp
+     * ### [誤植] RTC.idl には含まれていないがPIMには含まれている。
+     * ### PIMが正しい。
+     *
+     * @brief 
+     * @else
+     * @brief get_context_handle
+     *
+     * @section Description
+     * 
+     * This operation returns a handle that is associated with the given
+     * execution context.
+     *
+     * @endif
+     */
+    ExecutionContextHandle_t get_context_handle(in ExecutionContext cxt);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief ExecutionKind
+   * 
+   * @sectioni Description
+   *
+   * The ExecutionKind enumeration defines the execution semantics
+   * (see Section 5.3) of the RTCs that participate in an execution
+   * context.
+   *
+   * @endif
+   */
+  enum ExecutionKind
+  {
+    /*!
+     * @if jp
+     * @brief 
+     *
+     * @else
+     * @brief PERIODIC
+     *
+     * @section Description
+     *
+     * The participant RTCs are executing according to periodic
+     * sampled data semantics (see Section 5.3.1).
+     * 
+     * @endif
+     */
+    PERIODIC,
+    /*!
+     * @if jp
+     * @brief 
+     *
+     * @else
+     * @brief EVENT_DRIVEN
+     *
+     * @section Description
+     *
+     * The participant RTCs are executing according to stimulus
+     * response semantics (see Section 5.3.2).
+     * 
+     * @endif
+     */
+    EVENT_DRIVEN,
+    /*!
+     * @if jp
+     * @brief 
+     *
+     * @else
+     * @brief OTHER
+     *
+     * @section Description
+     *
+     * The participant RTCs are executing according to some semantics
+     * not defined by this specification.
+     * 
+     * @endif
+     */
+    OTHER
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief ExecutionContext
+   *
+   * @section Description
+   *
+   * An ExecutionContext allows the business logic of an RTC to be
+   * decoupled from the thread of control in which it is executed. The
+   * context represents a logical thread of control and is provided to
+   * RTCs at runtime as an argument to various operations, allowing
+   * them to query and modify their own state, and that of other RTCs
+   * executing within the same context, in the lifecycle.  This
+   * separation of concerns is important for two primary reasons:
+   *
+   * - Large number of components may collaborate tightly within a
+   * single node or process. If each component were to run within its
+   * own thread of control, the infrastructure may not be able to
+   * satisfy the timeliness and determinism requirements of real-time
+   * applications due to the large number of threads and the required
+   * synchronization between them.
+   *
+   * - A single application may carry out a number of independent
+   * tasks that require different execution rates. For example, it may
+   * need to sample a sensor periodically at a very high rate and update a
+   * user interface at a much lower rate.
+   *
+   * @section Semantics
+   *
+   * The state machine of an ExecutionContext has two parts. The
+   * behavior of the ExecutionContext itself is defined by the upper
+   * region in the above figure. The behavior of the RTCs that
+   * participate in the context is defined by the lower region. The
+   * contents of that region are displayed in more detail in Figure
+   * 5.5 in Section 5.2.2.2.  Ownership and Participation Each
+   * execution context is owned by a single RTC and may be used to
+   * execute that RTC and the RTCs contained within it, directly or
+   * indirectly. An RTC that owns one or more execution contexts is
+   * known as an autonomous RTC.  An autonomous RTC and some subset of
+   * the RTCs within it (to be defined by the application developer)
+   * shall be executed by the infrastructure according to the context’
+   * s execution kind, which defines when each RTC’s operations will
+   * be invoked when and in which order. These RTCs are said to
+   * participate in the context. The available execution kinds are
+   * described in Section 5.2.2.7.  The relationship between RTCs and
+   * execution contexts may be many-to-many in the general case:
+   * multiple RTCs may be invoked from the same execution context, and
+   * a single RTC may be invoked from multiple contexts. In the case
+   * where multiple RTCs are invoked from the same context, starting
+   * or stopping the context shall result in the corresponding
+   * lifecycle transitions for all of those components.
+   *
+   * @section Logical and Physical Threads
+   *
+   * Although an execution context represents a logical thread of
+   * control, the choice of how it maps to a physical thread shall be
+   * left to the application’s deployment
+   * environment. Implementations may elect to associate contexts with
+   * threads with a one-to-one mapping, to serve multiple contexts
+   * from a single thread, or by any other means. In the case where a
+   * given RTC may be invoked from multiple contexts, concurrency
+   * management is implementation-dependent.
+   *
+   * @endif
+   */
+  interface ExecutionContext
+  {
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief is_running
+     * @section Description
+     *
+     * This operation shall return true if the context is in the
+     * Running state.
+     *
+     * @section Semantics
+     *
+     * While the context is Running, all Active RTCs participating in
+     * the context shall be executed according to the context’s
+     * execution kind.  
+     *
+     * @endif
+     */
+    boolean is_running();
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     *
+     * @brief start
+     *
+     * @section Description
+     *
+     * Request that the context enter the Running state. Once the
+     * state transition occurs, the ComponentAction::on_startup
+     * operation (see Section 5.2.2.4.3) will be invoked.  @section *
+     *
+     * @section Semantics
+     *
+     * An execution context may not be started
+     * until the RT components that participate in it have been
+     * initialized. An execution context may be started and stopped
+     * multiple times.
+     *
+     * @section Constraints
+     *
+     * - This operation shall fail with
+     * ReturnCode_t::PRECONDITION_NOT_MET if the context is not in the
+     * Stopped state.
+     *
+     * - This operation shall fail with
+     * ReturnCode_t::PRECONDITION_NOT_MET if any of the participating
+     * components are not in their Alive state.
+     *
+     * @endif
+     */
+    ReturnCode_t start();
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief stop
+     *
+     * @section Description
+     *
+     * Request that the context enter the Stopped state. Once the
+     * transition occurs, the ComponentAction::on_shutdown operation
+     * (see Section 5.2.2.4.4) will be invoked.
+     *
+     * @section Semantics
+     *
+     * An execution context must be stopped before the RT components
+     * that participate in it are finalized.
+     *
+     * An execution context may be started and stopped multiple times.
+     *
+     * @section Constraints
+     *
+     * - This operation shall fail with
+     * ReturnCode_t::PRECONDITION_NOT_MET if the context is not in the
+     * Running state.
+     *
+     * @endif
+     */
+    ReturnCode_t stop();
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_rate
+     *
+     * @section Description
+     *
+     * This operation shall return the rate (in hertz) at which its
+     * Active participating RTCs are being invoked.
+     *
+     * @section Semantics
+     *
+     * An implementation is permitted to perform some periodic or
+     * quasi-periodic processing within an execution context with an
+     * ExecutionKind other than PERIODIC. In such a case, the result
+     * of this operation is implementation-defined. If no periodic
+     * processing of any kind is taking place within the context, this
+     * operation shall fail as described in Section 5.2.1.
+     *
+     * @section Constraints
+     *
+     * - If the context has an ExecutionKind of PERIODIC, this
+     *   operation shall return a rate greater than zero.
+     *
+     * @endif
+     */
+    double get_rate();
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief set_rate
+     *
+     * @section Description
+     *
+     * This operation shall set the rate (in hertz) at which this
+     * context’s Active participating RTCs are being called.
+     *
+     * @section Semantics
+     *
+     * If the execution kind of the context is PERIODIC, a rate change
+     * shall result in the invocation of on_rate_changed on any RTCs
+     * realizing DataFlowComponentAction that are registered with any
+     * RTCs participating in the context.  An implementation is
+     * permitted to perform some periodic or quasi-periodic processing
+     * within an execution context with an ExecutionKind other than
+     * PERIODIC. If such is the case, and the implementation reports a
+     * rate from get_rate, this operation shall set that rate
+     * successfully provided that the given rate is valid. If no
+     * periodic processing of any kind is taking place within the
+     * context, this operation shall fail with
+     * ReturnCode_t::UNSUPPORTED.
+     *
+     * @section Constraints
+     *
+     * - The given rate must be greater than zero. Otherwise, this
+     * operation shall fail with ReturnCode_t::BAD_PARAMETER.
+     *
+     * @endif
+     */
+    ReturnCode_t set_rate(in double rate);
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief add_component
+     *
+     * @section Description
+     *
+     * The operation causes the given RTC to begin participating in
+     * the execution context.
+     *
+     * @section Semantics
+     *
+     * The newly added RTC will receive a call to
+     * LightweightRTComponent::attach_context (see Section 5.2.2.2.5)
+     * and then enter the Inactive state. 
+     * 
+     * @section Constraints
+     * 
+     * - If the ExecutionKind of this context is PERIODIC, the RTC
+     * must be a data flow component (see Section 5.3.1.1).
+     * Otherwise, this operation shall fail with
+     * ReturnCode_t::PRECONDITION_NOT_MET.
+     * 
+     * - If the ExecutionKind of this context is EVENT_DRIVEN, the RTC
+     * must be an FSM participant (see Section 5.3.2.3).  Otherwise,
+     * this operation shall fail with
+     * ReturnCode_t::PRECONDITION_NOT_MET.
+     *
+     * @endif
+     */
+    ReturnCode_t add_component(in LightweightRTObject comp);
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief remove_component
+     *
+     * @section Description
+     *
+     * This operation causes a participant RTC to stop participating
+     * in the execution context.
+     *
+     * @section Semantics
+     *
+     * The removed RTC will receive a call to
+     * LightweightRTComponent::detach_context (see Section 5.2.2.2.6).
+     *
+     * @section Constraints
+     *
+     * - If the given RTC is not currently participating in the
+     * execution context, this operation shall fail with
+     * ReturnCode_t::BAD_PARAMETER.
+     * 
+     * - An RTC must be deactivated before it can be removed from an
+     * execution context. If the given RTC is participating in the
+     * execution context but is still in the Active state, this
+     * operation shall fail with ReturnCode_t::PRECONDITION_NOT_MET.
+     *
+     * @endif
+     */
+    ReturnCode_t remove_component(in LightweightRTObject comp);
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief activate_component
+     *
+     * @section Description
+     *
+     * The given participant RTC is Inactive and is therefore not
+     * being invoked according to the execution context’s execution
+     * kind. This operation shall cause the RTC to transition to the
+     * Active state such that it may subsequently be invoked in this
+     * execution context.
+     *
+     * @section Semantics
+     *
+     * The callback on_activate shall be called as a result of calling
+     * this operation. This operation shall not return until the
+     * callback has returned, and shall result in an error if the
+     * callback does.  The following figure is a non-normative example
+     * sequence diagram for activate_component.
+     *
+     * @section Constraints
+     *
+     * - An execution context can only activate its participant
+     *   components. If the given RTC is not participating in the
+     *   execution context, this operation shall fail with
+     *   ReturnCode_t::BAD_PARAMETER.
+     *
+     * - An RTC that is in the Error state cannot be activated until
+     *   after it has been reset. If the given RTC is in the Error
+     *   state, this operation shall fail with
+     *   ReturnCode_t::PRECONDITION_NOT_MET.
+     *
+     * - This operation shall fail with ReturnCode_t::BAD_PARAMETER if
+     *   the given component is not in its Alive state.
+     *
+     * @endif
+     */
+    ReturnCode_t activate_component(in LightweightRTObject comp);
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief deactivate_component
+     *
+     * @section Description
+     *
+     * The given RTC is Active in the execution context. Cause it to
+     * transition to the Inactive state such that it will not be
+     * subsequently invoked from the context unless and until it is
+     * activated again.
+     *
+     * @section Semantics
+     *
+     * The callback on_deactivate shall be called as a result of
+     * calling this operation. This operation shall not return until
+     * the callback has returned, and shall result in an error if the
+     * callback does.  The following figure is a non-normative example
+     * sequence diagram for deactivate_component.
+     *
+     * @section Constraints
+     *
+     * - An execution context can only deactivate its participant
+     * components. If the given RTC is not participating in the
+     * execution context, this operation shall fail with
+     * ReturnCode_t::BAD_PARAMETER.
+     *
+     * - This operation shall fail with ReturnCode_t::BAD_PARAMETER if
+     * the given component is not in its Alive state.
+     *
+     * @endif
+     */
+    ReturnCode_t deactivate_component(in LightweightRTObject comp);
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief reset_component
+     *
+     * @section Description
+     *
+     * Attempt to recover the RTC when it is in Error.
+     *
+     * @section Semantics
+     *
+     * The ComponentAction::on_reset callback shall be invoked. This
+     * operation shall not return until the callback has returned, and
+     * shall result in an error if the callback does. If possible, the
+     * RTC developer should implement that callback such that the RTC
+     * may be returned to a valid state.  * If this operation fails,
+     * the RTC will remain in Error.
+     *
+     * @section Constraints
+     *
+     * - An RTC may only be reset in an execution context in which it
+     *   is in error. If the RTC is not in Error in the identified
+     *   context, this operation shall fail with
+     *   ReturnCode_t::PRECONDITION_NOT_MET. However, that failure shall
+     *   not cause the RTC to enter the Error state.
+     *
+     * - An RTC may not be reset while in the Created state. Any
+     *   attempt to invoke this operation while the RTC is in that state
+     *   shall fail with ReturnCode_t::PRECONDITION_NOT_MET. However,
+     *   that failure shall not cause the RTC to enter the Error state.
+     *
+     * @endif
+     */
+    ReturnCode_t reset_component(in LightweightRTObject comp);
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_component_state
+     *
+     * @section Description
+     *
+     * This operation shall report the LifeCycleState of the given
+     * participant RTC.
+     *
+     * @section Constraints
+     *
+     * - The given RTC must be Alive.
+     *
+     * - The given RTC must be a participant in the target execution context.
+     *
+     * - The LifeCycleState returned by this operation shall be one of
+     *   LifeCycleState::INACTIVE, ACTIVE, or ERROR.
+     *
+     * @endif
+     */
+    LifeCycleState get_component_state(in LightweightRTObject comp);
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_kind
+     *
+     * @section Description
+     *
+     * This operation shall report the execution kind of the execution
+     * context.
+     *
+     * @endif
+     */
+    ExecutionKind get_kind();
+  };
+  
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief DataFlowComponentAction
+   *
+   * @section Description
+   *
+   * DataFlowComponentAction is a companion to ComponentAction (see
+   * Section 5.2.2.4) that provides additional callbacks for
+   * intercepting the two execution passes defined in Section
+   * 5.3.1.1.2.
+   *
+   * @endif
+   */
+  interface DataFlowComponentAction
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_execute
+     * @section Description
+     *
+     * This operation will be invoked periodically at the rate of the
+     * given execution context as long as the following conditions
+     * hold:
+     *
+     * - The RTC is Active.
+     *
+     * - The given execution context is Running.
+     *
+     * @section Semantics
+     *
+     This callback occurs during the first execution pass.
+     *
+     * @section Constraints
+     *
+     * - The execution context of the given context shall be PERIODIC.
+     *
+     * @endif
+     */
+    ReturnCode_t on_execute(in ExecutionContextHandle_t exec_handle);
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_state_update
+     *
+     * @section Description
+     *
+     * This operation will be invoked periodically at the rate of the
+     * given execution context as long as the following conditions hold:
+     *
+     * - The RTC is Active.
+     *
+     * - The given execution context is Running.
+     *
+     * @section Semantics
+     *
+     * This callback occurs during the second execution pass.
+     *
+     * @section Constraints
+     *
+     * - The execution context of the given context shall be PERIODIC.
+     *
+     *
+     * @endif
+     */
+    ReturnCode_t on_state_update(in ExecutionContextHandle_t exec_handle);
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_rate_changed
+     *
+     * @section Description
+     *
+     * This operation is a notification that the rate of the indicated
+     * execution context (see Section 5.2.2.6.4) has changed.
+     *
+     * @section Constraints
+     *
+     * - The execution context of the given context shall be PERIODIC.
+     *
+     *
+     * @endif
+     */
+    ReturnCode_t on_rate_changed(in ExecutionContextHandle_t exec_handle);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief dataFlowComponent
+   *
+   * @section Description
+   *
+   * The dataFlowComponent stereotype may be applied to a component
+   * type to indicate that its instances should be executed in sorted
+   * order by a periodic execution context.
+   *
+   * @section Constraints
+   *
+   * - An instance of a component extended by the dataFlowComponent
+   *   stereotype must participate in at least one * execution context
+   *   of kind PERIODIC, which shall also be used for the execution of
+   *   any contained data flow components.
+   *
+   * - A component extended by dataFlowComponent must realize the
+   *   interface DataFlowComponentAction.
+   *
+   *
+   * @endif
+   */
+  interface DataFlowComponent
+    : LightweightRTObject, DataFlowComponentAction
+  {
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief fsm
+   *
+   * @section Description
+   *
+   * Applying the fsm stereotype to a component implies the ability to
+   * define component-specific states and transitions.
+   *
+   * @section Semantics
+   *
+   * In creating a state machine such as is depicted in Figure 5.22,
+   * the RTC developer is implicitly defining the Active state to be a
+   * submachine state.  * The BehaviorStateMachines package described
+   * in [UML] is considered the normative definition of a state
+   * machine.
+   *
+   * @endif
+   */
+  interface Fsm
+    : LightweightRTObject
+  {
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief FsmParticipantAction
+   *
+   * @section Description
+   *
+   * FsmParticipantAction is companion to ComponentAction (see Section
+   * 5.2.2.4) that is intended for use with FSM participant RTCs. It
+   * adds a callback for the interception of state transitions, state
+   * entries, and state exits.
+   *
+   * @endif
+   */
+  interface FsmParticipantAction
+  {
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_action
+     *
+     * @section Description
+     *
+     * The indicated FSM participant RTC has been invoked as a result
+     * of a transition, state entry, or state exit in its containing
+     * FSM.
+     *
+     * @section Constraints
+     *
+     * - The given execution context shall be of kind EVENT_DRIVEN.
+        *
+     * @endif
+     */
+    ReturnCode_t on_action(in ExecutionContextHandle_t exec_handle);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief 
+   * @endif
+   */
+  interface FsmParticipant
+    : LightweightRTObject, FsmParticipantAction
+  {
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief Mode
+   *
+   * @section Description
+   *
+   * Each mode defined by a given RTC shall be represented by an
+   * instance of Mode.
+   *
+   * @endif
+   */
+  interface Mode
+  {
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief ModeCapable
+   *
+   * @section Description
+   *
+   * The ModeCapable interface provides access to an object’s modes
+   * and a means to set the current mode.
+   *
+   * @section Semantics
+   *
+   * A given RTC may support multiple modes as well as multiple
+   * execution contexts. In such a case, a request for a mode change
+   * (e.g., from "cruise control on" to "cruise control off") may
+   * come asynchronously with respect to one or more of those
+   * execution contexts. The mode of an RTC may therefore be observed
+   * to be different from one execution context to another.  - A mode
+   * is pending in a given execution context when a mode change has
+   * been requested but the new mode has not yet been observed by that
+   * context.
+   *
+   * - The new mode has been committed in a given execution context
+   *   when the context finally observes the new mode.
+   *
+   * - The new mode has stabilized once it has been committed in all
+   *   execution contexts in which the RTC participates.
+   *
+   * Figure 5.26 depicts a state machine that describes mode
+   * changes. Each parallel region in the composite state Mode Pending
+   * represents an execution context. The trigger "sample" within
+   * that state is considered to have occurred: - …just before the
+   * next call to on_execute (see Section 5.3.1.2.1) in the case where
+   * immediate is false and the execution kind is PERIODIC, …
+   *
+   * - …just before the processing of the next stimulus in the case
+   *   where immediate is false and the execution kind is
+   *   EVENT_DRIVEN, or …- …immediately in all other cases.
+   *
+   * @endif
+   */
+  interface ModeCapable
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_default_mode
+     *
+     * @section Description
+     *
+     * This operation shall return the mode in which the RTC shall be
+     * when no other mode has been set.
+     *
+     * @section Constraints
+     *
+     * - This operation shall not return nil.
+     *
+     * @endif
+     */
+    Mode get_default_mode();
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_current_mode
+     *
+     * @section Description
+     *
+     * This operation shall return the last mode to have
+     * stabilized. If no mode has been explicitly set, the current
+     * mode shall be the default mode.
+     *
+     * @section Constraints
+     *
+     * - This operation shall never return nil.
+     *
+     * @endif
+     */
+    Mode get_current_mode();
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_current_mode_in_context
+     *
+     * @section Description
+     *
+     * This operation returns the current mode of the component as
+     * seen by the indicated execution context.
+     *
+     * @section Semantics
+     *
+     * The manner in which this property changes is described in Figure 5.26.
+     *
+     * @endif
+     */
+    Mode get_current_mode_in_context(in ExecutionContext exec_context);
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_pending_mode
+     *
+     * @section Description
+     *
+     * This operation shall return the last mode to have been passed
+     * to set_mode that has not yet stabilized. Once the RTC’s mode
+     * has stabilized, this operation shall return nil.
+     *
+     * @endif
+     */
+    Mode get_pending_mode();
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_pending_mode_in_context
+     *
+     * @section Description
+     *
+     * If the last mode to be requested by a call to set_mode is
+     * different than the current mode as seen by the indicated
+     * execution context (see get_current_mode_in_context), this
+     * operation returns the former. If the requested mode has already
+     * been seen in that context, it returns nil.
+     *
+     * @section Semantics
+     *
+     * See Figure 5.26 for a description of how the pending mode
+     * relates to the current mode within a given execution context.
+     *
+     * @endif
+     */
+    Mode get_pending_mode_in_context(in ExecutionContext exec_context);
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief set_mode
+     *
+     * @section Description
+     *
+     * This operation shall request that the RTC change to the indicated mode.
+     *
+     * @section Semantics
+     *
+     * Usually, the new mode will be pending in each execution context
+     * in which the component executes until the next sample period
+     * (if the execution kind is PERIODIC); at that point it will
+     * become the current mode in that context and there will no
+     * longer be a pending mode. However, in some cases it is
+     * important for a mode change to take place immediately; for
+     * example, a serious fault has occurred and the component must
+     * enter an emergency mode to ensure fail-safe behavior in a
+     * safety-critical system. In such a case, immediate should be
+     * true and the mode change will take place in all contexts
+     * without waiting for the next sample period.
+     *
+     * @endif
+     */
+    ReturnCode_t set_mode(in Mode new_mode,
+			  in boolean immediate);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief MultiModeComponentAction
+   *
+   * MultiModeComponentAction is a companion to ComponentAction that
+   is realized by RTCs that support multiple modes.
+   *
+   * @endif
+   */
+  interface MultiModeComponentAction
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_mode_changed
+     *
+     * @section Description
+     *
+     * This callback is invoked each time the observed mode of a
+     * component has changed with respect to a particular execution
+     * context.
+     *
+     * @section Semantics
+     *
+     * If the context is PERIODIC, this callback shall come before the
+     * next call to on_execute (see Section 5.3.1.2.1) within that
+     * context.  The new mode can be retrieved with
+     * get_current_mode_in_context. If the result is the same as the
+     * result of get_current_mode, the mode has stabilized.
+     *
+     * @endif
+     */
+    ReturnCode_t on_mode_changed(in ExecutionContextHandle_t exec_handle);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief 
+   * @endif
+   */
+  interface MultiModeObject
+    : LightweightRTObject, ModeCapable, MultiModeComponentAction
+  {
+  };
+  
+  interface RTObject;
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief PortInterfacePolarity
+   *
+   * @section Description
+   *
+   * The PortInterfacePolarity enumeration identifies exposed
+   * interface instances as provided or required.  @endif
+   */
+  enum PortInterfacePolarity
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief PROVIDED
+     *
+     * @section Description
+     *
+     * The target interface is provided as an output by the target
+     * port.
+     *
+     * @endif
+     */
+    PROVIDED,
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief REQUIRED
+     *
+     * @section Description
+     *
+     * The target interface is required as an input by the target port.
+     *
+     * @endif
+     */
+    REQUIRED
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief PortInterfaceProfile
+   *
+   * @section Description
+   *
+   * PortInterfaceProfile describes an instance of a particular
+   * interface as it is exposed by a particular port. These objects
+   * are referred to below as the "target interface" and "target
+   * port" respectively.
+   *
+   * @endif
+   */
+  struct PortInterfaceProfile
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief instance_name
+     *
+     * @section Description
+     *
+     * This attribute stores the name of the target interface instance.
+     *
+     * @endif
+     */
+    string instance_name;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief type_name
+     *
+     * @section Description
+     *
+     * This attribute stores the name of the target interface type.
+     *
+     * @endif
+     */
+    string type_name;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief polarity
+     *
+     * @section Description
+     *
+     * This attribute indicates whether the target interface instance
+     * is provided or required by the RTC.
+     *
+     * @endif
+     */
+    PortInterfacePolarity polarity;
+  };
+  
+  typedef sequence<PortInterfaceProfile> PortInterfaceProfileList;
+  
+  interface PortService;
+  typedef sequence<PortService> PortServiceList;
+  typedef sequence<RTObject> RTCList;
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief ConnectorProfile
+   *
+   * @section Description
+   *
+   * The ConnectorProfile contains information about a connection
+   * between the ports of collaborating RTCs.
+   *
+   * @endif
+   */
+  struct ConnectorProfile
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief name
+     *
+     * @section Description
+     *
+     * This attribute contains the name of this connection.
+     *
+     * @endif
+     */
+    string name;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief connector_id
+     *
+     * @section Description
+     *
+     * Each connector has a unique identifier that is assigned when
+     * connection is established. This attribute stores that
+     * identifier.
+     *
+     * @endif
+     */
+    UniqueIdentifier connector_id;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief ports
+     *
+     * @section Description
+     *
+     * This field stores references to all ports connected by the
+     * target connector.
+     *
+     * @endif
+     */
+    PortServiceList ports;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief properties
+     *
+     * @section Description
+     *
+     * This attribute contains additional properties of the connection.
+     *
+     * @section Semantics
+     *
+     * This attribute provides implementations the opportunity to
+     * describe additional characteristics of a particular connection
+     * that are outside of the scope of this specification.
+     *
+     * @endif
+     */
+    NVList properties;
+  };
+  
+  typedef sequence<ConnectorProfile> ConnectorProfileList;
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief PortProfile
+   *
+   * @section Description
+   *
+   * A PortProfile describes a port of an RTC (referred to as the
+   * "target" RTC). This port is referred to as the "target" port.
+   * From this profile, other components and tools can obtain Port’s
+   * name, type, object reference, and so on.
+   *
+   * @endif
+   */
+  struct PortProfile
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief name
+     *
+     * @section Description
+     *
+     * This attribute contains the name of the target port.
+     *
+     * @section Semantics
+     *
+     * Ports owned by an RTC are distinguished by their
+     * names. Therefore, this name should be unique within the target
+     * RTC.
+     *
+     * @endif
+     */
+    string name;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief interfaces
+     *
+     * @section Description
+     *
+     * This attribute contains the name and polarity of each interface
+     * exposed by the target port.
+     *
+     * @endif
+     */
+    PortInterfaceProfileList interfaces;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief port_ref
+     *
+     * @section Description
+     *
+     * This attributes contains a reference to the target port.
+     *
+     * @endif
+     */
+    PortService port_ref;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief connector_profiles
+     *
+     * @section Description
+     *
+     * This attribute contains a collection of profiles describing the
+     * connections to the target port.
+     *
+     * @endif
+     */
+    ConnectorProfileList connector_profiles;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief owner
+     *
+     * @section Description
+     *
+     * This attribute contains a reference to the target RTC.
+     *
+     * @endif
+     */
+    RTObject owner;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief properties
+     *
+     * @section Description
+     *
+     * This attribute contains additional properties of the port.
+     *
+     * @section Semantics
+     *
+     * This attribute provides implementations the opportunity to
+     * describe additional characteristics of a particular port that
+     * are otherwise outside of the scope of this specification.
+     *
+     * @endif
+     */
+    NVList properties;
+  };
+  
+  typedef sequence<PortProfile> PortProfileList;
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief 
+   * @endif
+   */
+  struct ExecutionContextProfile
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief kind
+     *
+     * @section Description
+     *
+     * This attribute stores the context’s ExecutionKind.
+     *
+     * @endif
+     */
+    ExecutionKind kind;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief rate
+     *
+     * @section Description
+     *
+     * This attribute stores execution rate.
+     *
+     * @section Semantics
+     *
+     * If the execution kind is not PERIODIC, the value here may not
+     * be valid (and should be negative in that case). See
+     * ExecutionContext::get_rate (see Section 5.2.2.6.4) and set_rate
+     * (see Section 5.2.2.6.5) for more information.
+     *
+     * @endif
+     */
+    double rate;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief owner
+     *
+     * @section Description
+     *
+     * This attribute stores a reference to the RTC that owns the context.
+     *
+     * @endif
+     */
+    RTObject owner;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief participants
+     *
+     * @section Description
+     *
+     * This attribute stores references to the context’s participant RTCs.
+     *
+     * @endif
+     */
+    RTCList participants;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief properties
+     *
+     * @section Description
+     *
+     * This attribute contains additional properties of the execution
+     * context.
+     *
+     * @section Semantics
+     *
+     * This attribute provides implementations the opportunity to
+     * describe additional characteristics of a particular execution
+     * context that are outside the scope of this specification.
+     *
+     * @endif
+     */
+    NVList properties;
+  };
+  
+  typedef sequence<ExecutionContextProfile>
+  ExecutionContextProfileList;
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief FsmObject
+   *
+   * @section Description
+   *
+   * The FsmObject interface allows programs to send stimuli to a
+   * finite state machine, possibly causing it to change states.
+   *
+   * @endif
+   */
+  interface FsmObject
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief send_stimulus
+     *
+     * @section Description
+     *
+     * Send a stimulus to an FSM that realizes this interface.
+     *
+     * @section Semantics
+     *
+     * If the stimulus corresponds to any outgoing transition of the
+     * current state, that transition shall be taken and the state
+     * shall change. Any FSM participants associated with the exit of
+     * the current state, the transition to the new state, or the
+     * entry to the new state shall be invoked. If the stimulus does
+     * not correspond to any such transition, this operation shall
+     * succeed but have no effect.  
+     *
+     * If the given execution context is a non-nil reference to a
+     * context in which this FSM participates, the transition shall be
+     * executed in that context. If the argument is nil, the FSM shall
+     * choose an EVENT_DRIVEN context in which to execute the
+     * transition. If the argument is non-nil, but this FSM does not
+     * participate in the given context, this operation shall fail
+     * with * ReturnCode_t::BAD_PARAMETER.
+     *
+     * @section Constraints
+     *
+     * - The given execution context shall be of kind EVENT_DRIVEN.
+     *
+     * @endif
+     */
+    ReturnCode_t send_stimulus(in string message,
+			       in ExecutionContextHandle_t exec_handle);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief FsmBehaviorProfile
+   *
+   * @section Description
+   *
+   * FsmBehaviorProfile represents the association of an FSM
+   * participant with a transition, state entry, or state exit in an
+   * FSM.
+   *
+   * @section Semantics
+   *
+   * The assignment of identifiers to particular transitions, state
+   * entries, or state exits is implementation-dependent.
+   *
+   * @endif
+   */
+  struct FsmBehaviorProfile
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief action_component
+     *
+     * @section Description
+     *
+     * This attribute stores a reference to the FSM participant that
+     * is invoked when the containing Fsm receives a message
+     * distinguished by id.
+     *
+     * @endif
+     */
+    FsmParticipantAction action_component;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief id
+     *
+     * @section Description
+     *
+     * This attribute stores the message identifier.
+     *
+     * @endif
+     */
+    UniqueIdentifier id;
+  };
+  
+  typedef sequence<FsmBehaviorProfile> FsmBehaviorProfileList;
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief FsmProfile
+   *
+   * @section Description
+   *
+   * The FsmProfile describes the correspondence between an FSM and
+   * its contained FSM participants. This Profile is necessary for
+   * Stimulus Response Processing.
+   *
+   * @endif
+   */
+  struct FsmProfile
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief behavior_profiles
+     *
+     * @section Description
+     *
+     * This attribute lists the correspondences between an FSM and its
+     * contained FSM participants.
+     *
+     * @endif
+     */
+    FsmBehaviorProfileList behavior_profiles;
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief FsmService
+   *
+   * @section Description
+   *
+   * The FsmService interface defines operations necessary for
+   * Stimulus Response Processing as an SDO service.
+   *
+   * @endif
+   */
+  interface FsmService
+    : SDOPackage::SDOService
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_fsm_profile
+     *
+     * @section Description
+     *
+     * Get the current state of the FSM.
+     *
+     * @section Semantics
+     *
+     * Modifications to the object returned by this operation will not
+     * be reflected in the FSM until and unless set_fsm_profile is
+     * called.
+     *
+     * @endif
+     */
+    FsmProfile get_fsm_profile();
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief set_fsm_profile
+     *
+     * @section Description
+     *
+     * This operation will be used to modify the behavior of an FSM as
+     * described in Stimulus Response Processing.
+     *
+     * @endif
+     */
+    ReturnCode_t set_fsm_profile(in FsmProfile fsm_profile);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief ComponentProfile
+   *
+   * @section Description
+   *
+   * ComponentProfile represents the static state of an RTC that is
+   * referred to here as the "target" RTC.
+   *
+   * @endif
+   */
+  struct ComponentProfile
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief instance_name
+     *
+     * @section Description
+     *
+     * This attribute shall contain the name of the target RTC instance.
+     *
+     * @section Semantics
+     *
+     * The instance_name should be unique among RTC instances
+     * contained within the same containing component.
+     *
+     * @endif
+     */
+    string instance_name;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief type_name
+     *
+     * @section Description
+     *
+     * This attribute shall contain the name of the target RTC class.
+     *
+     * @section Semantics
+     *
+     * Each RTC class must have a name that is unique within an
+     * application.
+     *
+     * @endif
+     */
+    string type_name;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief description
+     *
+     * @section Description
+     *
+     * This attribute shall briefly describe the target RTC for the
+     * benefit of a human operator.
+     *
+     * @endif
+     */
+    string description;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief version
+     *
+     * @section Description
+     *
+     * This attribute shall contain the version number of the target
+     * RTC class.
+     *
+     * @section Semantics
+     *
+     * The format of the version number is outside of the scope of
+     * this specification.
+     *
+     * @endif
+     */
+    string version;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief vendor
+     *
+     * @section Description
+     *
+     * The name of the individual or organization that produced the
+     * target RTC class.
+     *
+     * @endif
+     */
+    string vendor;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief category
+     *
+     * @section Description
+     *
+     * This attribute contains the name of a "category" or group to
+     * which the target RTC belongs.
+     *
+     *
+     * @endif
+     */
+    string category;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief port_profiles
+     *
+     * @section Description
+     *
+     * This attribute contains a list of PortProfiles that describe
+     * the ports of the target RTC.
+     *
+     * @section Semantics
+     *
+     * There shall be a one-to-one correspondence between the members
+     * of this list and the ports of the target RTC.
+     *
+     *
+     * @endif
+     */
+    PortProfileList port_profiles;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief parent
+     *
+     * @section Description
+     *
+     * This attribute contains a reference to the RTC that contains
+     * the target RTC instance. If the target RTC instance is not
+     * owned by any other RTC, this field stores a nil reference.
+     *
+     * @endif
+     */
+    RTObject parent;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief properties
+     *
+     * @section Description
+     *
+     * This attribute contains additional properties of the target RTC.
+     *
+     * @section Semantics
+     *
+     * This attribute provides implementations the opportunity to
+     * describe additional characteristics of a particular RTC that
+     * are otherwise outside of the scope of this specification.
+     *
+     * @endif
+     */
+    NVList properties;
+  };
+  
+  typedef sequence<ComponentProfile> ComponentProfileList;
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief PortService
+   *
+   * @section Description
+   *
+   * An instance of the PortService interface represents a port (i.e.,
+   * UML::Composite Structures::Ports::Port) of an RTC. It provides
+   * operations that allow it to be connected to and disconnected from
+   * other ports.
+   *
+   * @section Semantics
+   *
+   * A port service can support unidirectional or bidirectional
+   * communication.  A port service may allow for a service-oriented
+   * connection, in which other connected ports, invoke methods on
+   * it. It may also allow for a data-centric connection, in which
+   * data values are streamed in or out. In either case, the
+   * connection is described by an instance of
+   * ConnectorProfile. However, the behavioral contracts of such
+   * connections are dependent on the interfaces exposed by the ports
+   * and are not described normatively by this specification.
+   *
+   * @endif
+   */
+  interface PortService
+    : SDOPackage::SDOService
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_port_profile
+     *
+     * @section Description
+     *
+     * This operation returns the PortProfile of the PortService.
+     *
+     * @endif
+     */
+    PortProfile get_port_profile();
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_connector_profiles
+     *
+     * @section Description
+     *
+     * This operation returns a list of the ConnectorProfiles of the
+     * PortService.
+     *
+     * @endif
+     */ 
+    ConnectorProfileList get_connector_profiles();
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_connector_profiles
+     *
+     * @section Description
+     *
+     * This operation returns a list of the ConnectorProfiles of the
+     * PortService.
+     *
+     * @endif
+     */
+    ConnectorProfile get_connector_profile(in UniqueIdentifier connector_id);
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief connect
+     *
+     * @section Description
+     *
+     * This operation establishes connection between this port and the
+     * peer ports according to given ConnectionProfile.
+     *
+     * @section Semantics
+     *
+     * A ConnectorProfile has a sequence of port references. This port
+     * invokes the notify_connect operation of one of the ports
+     * included in the sequence. It follows that the notification of
+     * connection is propagated by the notify_connect operation with
+     * ConnectorProfile. This operation returns ConnectorProfile
+     * return value and returns ReturnCode_t as return codes.
+     *
+     * @endif
+     */
+    ReturnCode_t connect(inout ConnectorProfile connector_profile);
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief disconnect
+     *
+     * @section Description
+     *
+     * This operation destroys the connection between this port and
+     * its peer ports using the ID that was given when the connection
+     * was established.
+     *
+     * @section Semantics
+     *
+     * This port invokes the notify_disconnect operation of one of the
+     * ports included in the sequence of the ConnectorProfile stored
+     * when the connection was established. The notification of
+     * disconnection is propagated by the notify_disconnect operation.
+     *
+     * @endif
+     */
+    ReturnCode_t disconnect(in UniqueIdentifier connector_id);
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief disconnect_all
+     *
+     * @section Description
+     *
+     * This operation destroys all connection channels owned by the
+     * PortService.
+     *
+     * @endif
+     */
+    ReturnCode_t disconnect_all();
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief notify_connect
+     *
+     * @section Description
+     *
+     * This operation notifies this PortService of the connection
+     * between its corresponding port and the other ports and
+     * propagates the given ConnectionProfile.
+     *
+     * @section Semantics
+     *
+     * A ConnectorProfile has a sequence of port references. This
+     * PortService stores the ConnectorProfile and invokes the
+     * notify_connect operation of the next PortService in the
+     * sequence. As ports are added to the connector, PortService
+     * references are added to the ConnectorProfile and provided to
+     * the caller. In this way, notification of connection is
+     * propagated with the ConnectorProfile.
+     *
+     * @endif
+     */
+    ReturnCode_t notify_connect(inout ConnectorProfile connector_profile);
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief notify_disconnect
+     *
+     * @section Description
+     *
+     * This operation notifies a PortService of a disconnection
+     * between its corresponding port and the other ports. The
+     * disconnected connector is identified by the given ID, which was
+     * given when the connection was established.
+     *
+     * @section Semantics
+     *
+     * This port invokes the notify_disconnect operation of the next
+     * PortService in the sequence of the ConnectorProfile that was
+     * stored when the connection was established. As ports are
+     * disconnected, PortService references are removed from the
+     * ConnectorProfile. In this way, the notification of
+     * disconnection is propagated by the notify_disconnect operation.
+     *
+     * @endif
+     */
+    ReturnCode_t notify_disconnect(in UniqueIdentifier connector_id);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief ExecutionContextService
+   *
+   * @section Description
+   *
+   * An ExecutionContextService exposes an ExecutionContext as an SDO
+   * service such that the context may be controlled remotely.
+   *
+   * @section Semantics
+   *
+   * Depending on the implementation, this interface may itself be an
+   * execution context (that is, it may be passed to the operations of
+   * ComponentAction) or it may represent a remote execution context
+   * that is not of type ExecutionContextService.  @endif
+   */
+  interface ExecutionContextService
+    : ExecutionContext, SDOPackage::SDOService
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_profile
+     *
+     * @section Description
+     *
+     * This operation provides a profile "descriptor" for the
+     * execution context.
+     *
+     * @endif
+     */
+    ExecutionContextProfile get_profile();
+  };
+  
+  typedef sequence<ExecutionContextService>
+  ExecutionContextServiceList;
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief RTObject
+   *
+   * @section Description
+   *
+   * The RTObject interface defines the operations that all SDO-based
+   * RTCs must provide. It is required by the rtComponent stereotype.
+   *
+   * @endif
+   */
+  interface RTObject
+    : LightweightRTObject, SDOPackage::SDO
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_component_profile
+     *
+     * @section Description
+     *
+     * This operation returns the ComponentProfile of the RTC.
+     *
+     * @endif
+     */
+    ComponentProfile get_component_profile();
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_ports
+     *
+     * @section Description
+     *
+     * This operation returns a list of the RTCs ports.
+     *
+     * @endif
+     */
+    PortServiceList get_ports();
+  };
+};
+

Added: branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/SDOPackage.idl
===================================================================
--- branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/SDOPackage.idl	                        (rev 0)
+++ branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/SDOPackage.idl	2011-08-04 07:19:10 UTC (rev 436)
@@ -0,0 +1,294 @@
+//Platform Independent Model (PIM) and Platform Specific Model (PSM)
+//for Super Distributed Objects (SDO) Specification, v1.1 - OMG IDL Summary File
+//Object Management Group, Inc.
+//Copyright (c) 2003, Fraunhofer FOKUS
+//Copyright (c) 2003, Hitachi, Ltd.
+//The companies listed above have granted to the Object Management Group, Inc. 
+//(OMG) a nonexclusive, royalty-free, paid up, worldwide license to copy and 
+//distribute this document and to modify this document and distribute copies of 
+//the modified version. Each of the copyright holders listed above has agreed 
+//that no person shall be deemed to have infringed the copyright in the included 
+//material of any such copyright holder by reason of having used the 
+//specification set forth herein or having conformed any computer software to 
+//the specification. 
+//
+//This file contains OMG IDL from the Naming Service Specification, v1.2.
+//OMG regularly publishes a summary file that contains all the "code" parts of 
+//an OMG formal document. Every formal document line that is IDL, PIDL, or 
+//language code is included in the summary file. The reason for such a listing 
+//is to give readers an electronic version of the "code" so that they can 
+//extract pieces of it. Readers might want to test an example, include it in 
+//their own code, or use it for documentation purposes. Having the code lines 
+//available electronically means there is less likelihood of a transcription 
+//error. 
+//
+// ver 1.0  formal/2004-11-02
+// ver 1.1  (RTF report: dtc/2008-03-05)
+//
+//SDOPackage.idl
+
+#ifndef    _SDO_PACKAGE_IDL_
+#define    _SDO_PACKAGE_IDL_
+
+#ifdef TAO_IDL
+#include <orb.idl>
+#endif
+#ifdef USE_MONITORING
+#include <CosNotifyComm.idl>
+#endif
+#ifndef ORBIT2_IDL
+#define TypeCode CORBA::TypeCode
+#endif
+/** CORBA specific model for SDOs */
+
+#pragma prefix "org.omg"
+#define exception_body { string description; }
+
+module SDOPackage
+{
+  interface SDO;
+  interface SDOService;
+  interface SDOSystemElement;
+  interface Configuration;
+  interface Monitoring;
+  interface Organization;
+  
+  /** ------- Data Types -------*/
+  typedef sequence<string>       StringList;
+  typedef sequence<SDO>          SDOList;
+  typedef sequence<Organization> OrganizationList;
+  typedef string                 UniqueIdentifier;
+
+  struct NameValue
+  {
+    string name;
+    any value;
+  };
+
+  typedef sequence<NameValue>   NVList;
+
+  enum NumericType
+  {
+    SHORT_TYPE,
+    LONG_TYPE,
+    FLOAT_TYPE,
+    DOUBLE_TYPE
+  };
+
+  union Numeric switch (NumericType)
+  {
+  case SHORT_TYPE:  short short_value;
+  case LONG_TYPE: long long_value;
+  case FLOAT_TYPE: float float_value;
+  case DOUBLE_TYPE: double double_value;
+  };
+
+  struct EnumerationType
+  {
+    StringList enumerated_values;
+  };
+
+  struct RangeType
+  {
+    Numeric min;
+    Numeric max;
+    boolean min_inclusive;
+    boolean max_inclusive;
+  };
+
+  struct IntervalType
+  {
+    Numeric min;
+    Numeric max;
+    boolean min_inclusive;
+    boolean max_inclusive;
+    Numeric step;
+  };
+
+  enum ComplexDataType
+  {
+    ENUMERATION, RANGE, INTERVAL
+  };
+
+  union AllowedValues switch (ComplexDataType)
+  {
+  case ENUMERATION:    EnumerationType allowed_enum;
+  case INTERVAL:       IntervalType allowed_interval;
+  case RANGE:          RangeType   allowed_range;
+  };
+
+  struct Parameter
+  {
+    string         name;
+    TypeCode       type;
+    AllowedValues  allowed_values;
+  };
+
+  typedef sequence<Parameter> ParameterList;
+  struct OrganizationProperty
+  {
+    NVList properties;
+  };
+  enum DependencyType
+  {
+    OWN,
+    OWNED,
+    NO_DEPENDENCY
+  };
+
+  struct DeviceProfile
+  {
+    string device_type;
+    string manufacturer;
+    string model;
+    string version;
+    NVList properties;
+  };
+
+  struct ServiceProfile
+  {
+    string id;
+    string interface_type;
+    NVList properties;
+    SDOService service;
+  };
+
+  typedef sequence <ServiceProfile> ServiceProfileList;
+  struct ConfigurationSet
+  {
+    string id;
+    string description;
+    NVList configuration_data;
+  };
+
+  typedef sequence<ConfigurationSet> ConfigurationSetList;
+
+
+  /** ------- Exceptions -------*/
+  exception NotAvailable             exception_body;
+  exception InterfaceNotImplemented  exception_body;
+  exception InvalidParameter         exception_body;
+  exception InternalError            exception_body;
+  
+  /** ------- Interfaces -------*/
+  interface SDOSystemElement
+  {
+    OrganizationList get_owned_organizations()
+      raises (NotAvailable,InternalError);
+  };
+  interface SDO : SDOSystemElement
+  {
+    UniqueIdentifier get_sdo_id()
+      raises (NotAvailable, InternalError);
+    string get_sdo_type()
+      raises (NotAvailable, InternalError);
+    DeviceProfile get_device_profile ()
+      raises (NotAvailable, InternalError);
+    ServiceProfileList get_service_profiles ()
+      raises (NotAvailable, InternalError);
+    ServiceProfile get_service_profile (in UniqueIdentifier id)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    SDOService get_sdo_service (in UniqueIdentifier id) 
+      raises (InvalidParameter, NotAvailable, InternalError);
+    Configuration get_configuration ()
+      raises (InterfaceNotImplemented, NotAvailable, InternalError);
+    Monitoring get_monitoring ()
+      raises (InterfaceNotImplemented, NotAvailable, InternalError);
+    OrganizationList get_organizations ()
+      raises (NotAvailable, InternalError);
+    NVList get_status_list ()
+      raises (NotAvailable, InternalError);
+    any get_status (in string nme)
+      raises (InvalidParameter, NotAvailable, InternalError);
+  };
+
+
+  interface Configuration
+  {
+    boolean set_device_profile (in DeviceProfile dProfile)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean add_service_profile (in ServiceProfile sProfile)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean add_organization (in Organization organization_object)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean remove_service_profile (in UniqueIdentifier id)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean remove_organization (in UniqueIdentifier organization_id)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    ParameterList get_configuration_parameters ()
+      raises (NotAvailable, InternalError);
+    NVList get_configuration_parameter_values ()
+      raises (NotAvailable, InternalError);
+    any get_configuration_parameter_value (in string name)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean set_configuration_parameter (in string name,
+                                         in any value)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    ConfigurationSetList get_configuration_sets ()
+      raises (NotAvailable, InternalError);
+    ConfigurationSet get_configuration_set (in UniqueIdentifier config_id)
+      raises (NotAvailable, InternalError);
+    boolean set_configuration_set_values (in ConfigurationSet configuration_set)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    ConfigurationSet get_active_configuration_set ()
+      raises (NotAvailable, InternalError);
+    boolean add_configuration_set (in ConfigurationSet configuration_set)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean remove_configuration_set (in UniqueIdentifier config_id)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean activate_configuration_set (in UniqueIdentifier config_id)
+      raises (InvalidParameter, NotAvailable, InternalError);
+  };
+
+
+#ifdef USE_MONITORING
+  interface Monitoring : CosNotifyComm::StructuredPushConsumer,
+    CosNotifyComm::StructuredPushSupplier
+  {
+    any get_monitoring_parameter_value (in string name)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    ParameterList get_monitoring_parameters ()
+      raises (NotAvailable, InternalError);
+    NVList get_monitoring_parameter_values ()
+      raises (NotAvailable, InternalError);
+  };
+#else
+  interface Monitoring {};
+#endif
+
+  interface SDOService {};
+  
+  interface Organization
+  {
+    UniqueIdentifier get_organization_id ()
+      raises (InvalidParameter, NotAvailable, InternalError);
+    OrganizationProperty get_organization_property ()
+      raises (NotAvailable, InternalError);
+    any get_organization_property_value (in string name)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean add_organization_property (in OrganizationProperty organization_property)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean set_organization_property_value (in string name,
+                                             in any value)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean remove_organization_property ( in string name )
+      raises (InvalidParameter, NotAvailable, InternalError);
+    SDOSystemElement get_owner ()
+      raises (NotAvailable, InternalError);
+    boolean set_owner (in SDOSystemElement sdo) 
+      raises (InvalidParameter, NotAvailable, InternalError);
+    SDOList get_members ()
+      raises (NotAvailable, InternalError);
+    boolean set_members (in SDOList sdos) 
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean add_members ( in SDOList sdo_list)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean remove_member (in UniqueIdentifier id)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    DependencyType get_dependency()
+      raises (NotAvailable, InternalError);
+    boolean set_dependency (in DependencyType dependency) 
+      raises (NotAvailable, InternalError);
+  };
+};
+#endif //_SDO_PACKAGE_IDL_

Added: branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/doxygen_idlref.conf
===================================================================
--- branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/doxygen_idlref.conf	                        (rev 0)
+++ branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/doxygen_idlref.conf	2011-08-04 07:19:10 UTC (rev 436)
@@ -0,0 +1,1122 @@
+# Doxyfile 1.3.6
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING      = EUC-JP
+INPUT_ENCODING         = EUC-JP
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = ComponentObserver
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 1.0.0
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = doc
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, 
+# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en 
+# (Japanese with English messages), Korean, Korean-en, Norwegian, Polish, Portuguese, 
+# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = Japanese
+
+# This tag can be used to specify the encoding used in the generated output. 
+# The encoding is not always determined by the language that is chosen, 
+# but also whether or not the output is meant for Windows or non-Windows users. 
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
+# forces the Windows encoding (this is the default for the Windows binary), 
+# whereas setting the tag to NO uses a Unix-style encoding (the default for 
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING   = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is used 
+# as the annotated text. Otherwise, the brief description is used as-is. If left 
+# blank, the following values are used ("$name" is automatically replaced with the 
+# name of the entity): "The $name class" "The $name widget" "The $name file" 
+# "is" "provides" "specifies" "contains" "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited 
+# members of a class in the documentation of that class as if those members were 
+# ordinary class members. Constructors, destructors and assignment operators of 
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. It is allowed to use relative paths in the argument list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like the Qt-style comments (thus requiring an 
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member 
+# documentation.
+
+DETAILS_AT_TOP         = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = "english=@if en" \
+                         end_eng=@endif \
+                         "japanese=@if ja" \
+                         end_ja=@endif
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 
+# only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources 
+# only. Doxygen will then generate output that is more tailored for Java. 
+# For instance, namespaces will be presented as packages, qualified scopes 
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = jp
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = ./
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp 
+# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc
+
+FILE_PATTERNS          = ComponentObserver.idl
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories 
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories.
+
+EXCLUDE_PATTERNS       = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.
+
+INPUT_FILTER           = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = platex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = platex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse the 
+# parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or 
+# super classes. Setting the tag to NO turns the diagrams off. Note that this 
+# option is superseded by the HAVE_DOT option below. This is only a fallback. It is 
+# recommended to install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a call dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable call graphs for selected 
+# functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_WIDTH    = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT   = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes that 
+# lay further from the root node will be omitted. Note that setting this option to 
+# 1 or 2 may greatly reduce the computation time needed for large code bases. Also 
+# note that a graph may be further truncated if the graph's image dimensions are 
+# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). 
+# If 0 is used for the depth value (the default), the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO

Added: branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/BasicDataType.idl
===================================================================
--- branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/BasicDataType.idl	                        (rev 0)
+++ branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/BasicDataType.idl	2011-08-04 07:19:10 UTC (rev 436)
@@ -0,0 +1,189 @@
+// -*- IDL -*-
+/*!
+ * @file DataType.idl
+ * @brief Basic Data Type definition
+ * @date $Date: 2007-01-09 15:36:29 $
+ * @author Noriaki Ando <n-ando at aist.go.jp>
+ *
+ * Copyright (C) 2003-2006
+ *     Task-intelligence Research Group,
+ *     Intelligent Systems Research Institute,
+ *     National Institute of
+ *         Advanced Industrial Science and Technology (AIST), Japan
+ *     All rights reserved.
+ *
+ * $Id: BasicDataType.idl 1580 2009-12-07 08:54:10Z kurihara $
+ *
+ */
+
+#ifndef BasicDataType_idl
+#define BasicDataType_idl
+
+module RTC {
+  //------------------------------------------------------------
+  // Basic data type definition
+  //------------------------------------------------------------
+  struct Time
+  {
+        unsigned long sec;    // sec
+        unsigned long nsec;   // nano sec
+  };
+
+  struct TimedState
+  {
+	Time tm;
+	short data;
+  };
+
+  struct TimedShort
+  {
+	Time tm;
+	short data;
+  };
+
+  struct TimedLong
+  {
+	Time tm;
+	long data;
+  };
+
+  struct TimedUShort
+  {
+	Time tm;
+	unsigned short data;
+  };
+
+  struct TimedULong
+  {
+	Time tm;
+	unsigned long data;
+  };
+
+  struct TimedFloat
+  {
+	Time tm;
+	float data;
+  };
+
+  struct TimedDouble
+  {
+	Time tm;
+	double data;
+  };
+
+  struct TimedChar
+  {
+	Time tm;
+	char data;
+  };
+
+  struct TimedWChar
+  {
+	Time tm;
+	wchar data;
+  };
+
+  struct TimedBoolean
+  {
+	Time tm;
+	boolean data;
+  };
+
+  struct TimedOctet
+  {
+	Time tm;
+	octet data;
+  };
+
+  struct TimedString
+  {
+	Time tm;
+	string data;
+  };
+
+
+  struct TimedWString
+  {
+	Time tm;
+	wstring data;
+  };
+
+
+  /*!
+   * Sequence data type
+   */
+  struct TimedShortSeq
+  {
+	Time tm;
+	sequence<short> data;
+  };
+
+  struct TimedLongSeq
+  {
+	Time tm;
+	sequence<long> data;
+  };
+
+  struct TimedUShortSeq
+  {
+	Time tm;
+	sequence<unsigned short> data;
+  };
+
+  struct TimedULongSeq
+  {
+	Time tm;
+	sequence<unsigned long> data;
+  };
+
+  struct TimedFloatSeq
+  {
+	Time tm;
+	sequence<float> data;
+  };
+
+  struct TimedDoubleSeq
+  {
+	Time tm;
+	sequence<double> data;
+  };
+
+  struct TimedCharSeq
+  {
+	Time tm;
+	sequence<char> data;
+  };
+
+  struct TimedWCharSeq
+  {
+	Time tm;
+	sequence<wchar> data;
+  };
+
+  struct TimedBooleanSeq
+  {
+	Time tm;
+	sequence<boolean> data;
+  };
+
+  struct TimedOctetSeq
+  {
+	Time tm;
+	sequence<octet> data;
+  };
+
+  struct TimedStringSeq
+  {
+	Time tm;
+	sequence<string> data;
+  };
+  
+  struct TimedWStringSeq
+  {
+	Time tm;
+	sequence<wstring> data;
+  };
+  
+};
+
+#endif // end of BasicDataType_idl

Added: branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/ComponentObserver.idl
===================================================================
--- branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/ComponentObserver.idl	                        (rev 0)
+++ branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/ComponentObserver.idl	2011-08-04 07:19:10 UTC (rev 436)
@@ -0,0 +1,512 @@
+// -*- IDL -*-
+/*!
+ * @file ComponentObserver.idl
+ * @brief Component observer SDO service
+ * @date $Date$
+ * @author Noriaki Ando <n-ando at aist.go.jp>
+ *
+ * Copyright (C) 2011
+ *     Noriaki Ando
+ *     Intelligent Systems Research Institute,
+ *     National Institute of
+ *         Advanced Industrial Science and Technology (AIST), Japan
+ *     All rights reserved.
+ *
+ * $Id$
+ *
+ */
+
+#include <SDOPackage.idl>
+#include <RTC.idl>
+
+/*!
+ * @if jp
+ * @brief コンポーネント状態オブザーバインターフェース
+ *
+ * コンポーネントの状態を監視するためのオブザーバインターフェース。オブ
+ * ザーバパターンに従い、外部ツールがコンポーネントにオブザーバオブジェ
+ * クトをセットし、コンポーネントは各種内部状態変更時にをオブザーバオブ
+ * ジェクトをコールし、オブザーバに対して変更を通知する。
+ *
+ * @since 1.1
+ *
+ * @else
+ * @brief Component state observer interface
+ *
+ * This interface defines observer interface for component states.
+ * According to the observer pattern, tools which want to observe
+ * component state set observer objects to the RT-Component, and weh
+ * RT-Component changes its status, the observer object is called and
+ * notice the changes to tools.
+ *
+ *
+ * @since 1.1
+ * @endif
+ */
+module OpenRTM
+{
+  /*!
+   * @if jp
+   *
+   * @brief 更新された状態の種類
+   * 
+   * ターゲットRTCで更新された状態の種類を分類する列挙型。
+   * 
+   * @else
+   *
+   * @brief A kind of updated status
+   * 
+   * This is a enumeration type to classify updated status in target RTC.
+   *
+   * @endif
+   */
+  enum StatusKind
+  {
+    /*!
+     * @if jp
+     *
+     * @brief コンポーネントプロファイル
+     * 
+     * コンポーネントプロファイル RTC::ComponentProfile が更新されたこ
+     * とを示す列挙型。
+     *
+     * RTC::ComponentProfile のメンバーのうち、instance_name,
+     * type_name, description, version, vendor, category はRTC動作中に
+     * 変更されることはない。これらが変更された場合には、
+     * ComponentObserver::updatestatus() の hint には、それぞれのメンバー
+     * 名が文字列で指定される。また、parent に対する変更は通知されない。
+     * さらに、properties に対する変更は、hint に "<key0>, <key1>,
+     * ..." の形で通知される。
+     *
+     * port_profiles に対する変更は、後述の PORT_PROFILE によって通知さ
+     * れるため、COMPONENT_PROFILE では通知されない。
+     *
+     * @else
+     *
+     * @brief Component profile
+     * 
+     * This is enumeration member to specify that the target
+     * component's RTC::componentProfile has been changed.
+     *
+     * In the member of RTC::ComponentProfile, instance_name,
+     * type_name, description, version, vendor, category are not
+     * modified during RTC running. If these members are changed, each
+     * member's name is specified in the
+     * ComponentObserver::updateStatus() 's hint argument. And,
+     * modification to parent is not notified. In the properties, the
+     * modification is notified as "<key0>, <key1>, ..." in the hint
+     * argument.
+     * 
+     * The modification to port_profiles is not notified as
+     * COMPONENT_PROFILE becauase it is notified as PORT_PROFILE.
+     *
+     * @endif
+     */
+    COMPONENT_PROFILE,
+    /*!
+     * @if jp
+     *
+     * @brief コンポーネントの状態
+     * 
+     * コンポーネントの状態が変化したことを示す列挙子。
+     *
+     * RTCにはECの状態として、INACTIVE_STATE, ACTIVE_STATE,
+     * ERROR_STATE があるが、この状態が変化したことを通知するための列挙
+     * 子。
+     *
+     * ComponentObserver::updatestatus() の hint には、状態と、どの実行
+     * コンテキストで変化があったかを知らせる以下の文字列が hint に引数
+     * として与えられる。
+     *
+     * hint: (INACTIVE, ACTIVE, ERROR):<Execution Context ID>
+     * 例:
+     *   ACTIVE:0 (デフォルトコンテキストでRTCがアクティブになった)
+     *   ERROR:1002 (実行コンテキスト1002でRTCがエラーになった)
+     *
+     * @else
+     *
+     * @brief Component status
+     * 
+     * This is INACTIVE_STATE, ACTIVE_STATE,
+     * ERROR_STATE status, and this enumerator specify a status of RTC changed.
+     *
+     * A status and ExecutionContext's id is specified in the argument of 
+     * ComponentObserver::updateStatus() 's hint.
+     *
+     * hint: (INACTIVE, ACTIVE, ERROR):<Execution Context ID>
+     * Example:
+     *   ACTIVE:0 (RTC is activated in the default ExecuionContext)
+     *   ERROR:1002 (RTC go to ERROR state in the EC of id 1002)
+     *
+     * @endif
+     */
+    RTC_STATUS,
+    /*!
+     * @if jp
+     *
+     * @brief ExecutionContextの状態
+     * 
+     * ExecutionContextの状態が変化したことを示す列挙子。
+     *
+     * RTCにECが attach/detach/rate_change/startup/shutdown されたことを
+     * 示す列挙子。
+     *
+     * ComponentObserver::updatestatus() の hint には、
+     * attach/detach/rate_change/startup/shutdow のいずれが行われたかと、
+     * 対象となるECのidが与えられる。
+     *
+     * hint: (ATTACHED, DETACHED, RATE_CHANGED, STARTUP,
+     *        SHUTDOWN):<Execution Context ID>
+     *
+     * 例:
+     *   ATTACHED:1002 (ECがアタッチされ、そのIDは1002)
+     *
+     * @else
+     *
+     * @brief The stauts of ExecutionContext
+     * 
+     * This is enumerator notifies that ExecutionContext is
+     * attach/detach/rate_change/startup/shutdown.  Attach or detach
+     * operation and target ExecutionContext's id is given in the
+     * argument of ComponentObserver::updateStatus() 's hint.
+     *
+     * hint: (ATTACHED, DETACHED, RATE_CHANGED, STARTUP,
+     *        SHUTDOWN):<Execution Context ID>
+     *
+     * Example:
+     *   ATTACHED:1002 (EC is attached and its ID is 1002)
+     *
+     * @endif
+     */
+    EC_STATUS,
+    /*!
+     * @if jp
+     *
+     * @brief Portの状態
+     * 
+     * Portの状態が変化したことを示す列挙子。Portの追加、削除、接続、切
+     * 断が行われたことを示す。ComponentObserver::updatestatus() の
+     * hint には、いずれかのアクションが行われたかと、対象となるポート
+     * の名前が与えられる。
+     *
+     * hint: (ADD, REMOVE, CONNECT, DISCONNECT):<port name>
+     * 例:
+     *   CONNECT:velocity (velocity ポートで接続が確立された)
+     *
+     * @else
+     *
+     * @brief The stauts of ports
+     * 
+     * This is enumerator which notifies that port is added, removed,
+     * connected and/or disconnected.  Which action is performed and
+     * target port's name is given to the hint argument in
+     * ComponentObserver::updateStatus() operation.
+     *
+     * hint: (ADD, REMOVE, CONNECT, DISCONNECT):<port name>
+     * Example:
+     *   CONNECT:velocity (A connection established in the velocity port)
+     *
+     * @endif
+     */
+    PORT_PROFILE,
+    /*!
+     * @if jp
+     *
+     * @brief Configurationの状態
+     * 
+     * Configurationの状態が変化したことを示す列挙子。Configurationに対
+     * して、コンフィギュレーションパラメータが更新された
+     * (UPDATE_CONFIG_PARAM)、コンフィギュレーションがセット(更新)さ
+     * れた (SET_CONFIG_SET)、コンフィギュレーションセットが追加された
+     * (ADD_CONFIG_SET)、コンフィギュレーションが更新された
+     * (UPDATE_CONFIG_SET)、コンフィギュレーションセットが削除された
+     * (REMOVE_CONFIG_SET)、コンフィギュレーションセットがアクティブに
+     * された (ACTIVATE_CONFIG_SET) といったアクションがあったことが通
+     * 知される。
+     *
+     * - UPDATE_CONFIG_PARAM: <config set name>.<config param name>
+     *   - SDOPackage::Configuration::set_configuration_parameter
+     * - SET_CONFIG_SET: <config set name>
+     *   - SDOPackage::Configuration::set_configuration_set_values
+     * - ADD_CONFIG_SET: <config set name>
+     *   - SDOPackage::Configuration::add_configuration_set
+     * - UPDATE_CONFIG_SET: <config set name>
+     *   - 内部のコンフィグセットを実際の変数に反映する
+     * - REMOVE_CONFIG_SET: <config set name>
+     *   - SDOPackage::Configuration::remove_configuration_set
+     * - ACTIVATE_CONFIG_SET:  <config set name>
+     *   - SDOPackage::Configuration::activate_configuration_set
+     * 
+     * @else
+     *
+     * @brief The stauts of ports
+     * 
+     * This is enumerator which notifies that configuration is
+     * changed.  To the configuration, a configuration parameter has
+     * been updated (UPDATE_CONFIG_PARAM), a configuration-set is set
+     * (SET_CONFIG_SET), a configuration set has been updated
+     * (UPDATE_CONFIG_SET), a configuration set has been added
+     * (ADD_CONFIG_SET) or removed (REMOVE_CONFIG_SET), the active
+     * configuration set has been changed (ACTIVATE_CONFIG_SET), these
+     * actions would be notified.
+     *
+     * - UPDATE_CONFIG_PARAM: <config set name>.<config param name>
+     *   - SDOPackage::Configuration::set_configuration_parameter
+     * - SET_CONFIG_SET: <config set name>
+     *   - SDOPackage::Configuration::set_configuration_set_values
+     * - ADD_CONFIG_SET: <config set name>
+     *   - SDOPackage::Configuration::add_configuration_set
+     * - UPDATE_CONFIG_SET: <config set name>
+     *   - Apply configuration-set values into actual variables.
+     * - REMOVE_CONFIG_SET: <config set name>
+     *   - SDOPackage::Configuration::remove_configuration_set
+     * - ACTIVATE_CONFIG_SET:  <config set name>
+     *   - SDOPackage::Configuration::activate_configuration_set
+     *
+     * @endif
+     */
+    CONFIGURATION,
+    /*!
+     * @if jp
+     *
+     * @brief ハートビートイベント
+     * 
+     * 当該RTCが生存していることをオブザーバー側に通知する列挙子。
+     *
+     * ハートビートを利用するかどうか、およびハートビートの周期は、
+     * ServiceProfile::properties の以下のプロパティによって与えられる。
+     *
+     * heartbeat.enable: YES/NO
+     * heartbeat.interval: x [s]
+     * 
+     * @else
+     *
+     * @brief The stauts of ports
+     * 
+     * This enumerator is heart beat notification.
+     *
+     * Whether if the heart-beat function is used is specified in the
+     * ServiceProfile::properties as the following properties.
+     *
+     * heartbeat.enable: YES/NO
+     * heartbeat.interval: x [s]
+     *
+     * @endif
+     */
+    HEARTBEAT,
+
+    STATUS_KIND_NUM
+  };
+
+  /*!
+   * @if jp
+   *
+   * @interface ComponentObserver
+   * 
+   * RTCの各種状態の更新を知らせるためのオブザーバーオブジェクトのため
+   * のインターフェース。SDO Service として、対象となるRTC/SDOに対して
+   * アタッチされ、RTC/SDO内の状態が変更された場合に、変更された状態の
+   * 種類とヒントを同時に通知する。ツールなどで、ポーリングによらずRTC
+   * の状態の変化を知りたい場合などに利用する。
+   *
+   * 想定している利用方法は以下のとおりである。
+   *
+   * -# SDO::get_configuration() により Configuration オブジェクトを取得
+   * -# Configuration::add_service_profile() によりTool側の
+   *     ComponentObserver を ServiceProfile により RTC に与える。
+   *     ServiceProfile のメンバーは以下のように設定すること
+   *   - id: UUID など一意なIDを設定する。削除時にも必要になるので、Tool
+   *     側ではIDを保持しておかなければならない。
+   *   - interface_type: 当該サービスのIFRのIDを文字列として指定。RTC側で
+   *     はこの文字列により当該サービスオブジェクトを受け入れるか決定す
+   *     るため指定は必須となる。
+   *   - properties: RTC側のサービスの受け入れ側に通知するプロパティを設
+   *     定する。このサービスでは、下記の heartbeat 関連のプロパティを
+   *     指定する。
+   *    - service: SDOService オブジェクトの参照を指定する。
+   * -# RTC側で状態の変化があった場合に update_status() オペレーション
+   *     が StatusKind および hint の文字列とともに呼び出される。Tool側
+   *     では、StatusKind と hint に基づき RTC のある部分の状態が変化し
+   *     たことを知り、必要な処理を行う。
+   * -# 最終的にComponentObserverオブジェクトが不要になった場合には、
+   *     Configuration::remove_service_profile() を id とともに呼び出し
+   *     RTC から削除する。
+   *
+   * <pre>
+   * 
+   *   [RTC]    [Configuration]           [Observer]    [Tool]
+   *     |            |                       |            |
+   *     |            | get_configuration()   |            |
+   *     |<------------------------------------------------|
+   *     |            |                       |            |
+   *     |            | add_service_profile(prof)          |
+   *     |            |<-----------------------------------|
+   *     |            |                       |            |
+   *     |            | update_status(kind, hint)          |
+   *     |----------------------------------->|            |
+   *     |            | update_status(kind, hint)          |
+   *     |----------------------------------->|            |
+   *     |            |       :               |            |
+   *     |            |                       |            |
+   *     |            | remove_service_profile(id)         |
+   *     |            |<-----------------------------------|
+   *     |            |                       |            |
+   *     |            |                       x            x
+   *
+   * </pre>
+   *
+   * なお、ServiceProfile::properties に指定するプロパティとしては、
+   *
+   * - observed_status: ALL or kind of status
+   * - heartbeat.enable: YES/NO
+   * - heartbeat.interval: x [s]
+   * 
+   * がある。
+   * 
+   * - observed_staus: ALL または状態の種類をカンマ区切りで指定
+   *   監視する状態を指定する。指定可能な状態を表す文字列は、
+   *   COMPONENT_PROFILE, RTC_STATUS, EC_STATUS, PORT_PROFILE,
+   *   CONFIGURATION 5種類である。監視したい対象をカンマで区切り複数指
+   *   定することができる。また、すべての状態を監視する場合、ALL を指定
+   *   することができる。指定文字列は大文字、小文字を問わない。
+   *
+   * - heartbeat.interval: 秒単位で数値で指定
+   *   ハートビートを送信する周期を秒単位で指定する。なお、指定した秒数
+   *   でハートビートが必ず送信される保証はない。したがって、RTCが死ん
+   *   だかどうかを確認するには、heartbeat.interval 数回分の時間を待つ
+   *   必要がある。
+   *
+   * - heartbeat.enable: YES または NOで指定
+   *   Tool側では、状態に変化があるまで RTC が生存しているかどうか知る
+   *   ことはできないため、突然RTCが死んだ場合には、これを知ることがで
+   *   きない。そこで、HEART_BEAT イベントを周期的にRTC側から送らせるこ
+   *   とができる。ハートビートを有効にするか否かをこのオプションで指定
+   *   する。
+   * 
+   * 
+   * @else
+   *
+   * @interface ComponentObserver
+   * 
+   * This is an interface to notify various status changed in RTC to
+   * others.  This is attached into a target RTC/SDO as a SDO service,
+   * and if an RTC/SDO's status change, a kind of changed status and
+   * its hints are notified to observers.  For example, it can be used
+   * to notify RTC's status changed without polling in certain tools.
+   *
+   * An assumed usage is as follows.
+   *
+   * -# SDO::get_configuration() is called to get a Configuration object
+   *
+   * -# Configuration::add_service_profile() is called by Tool.
+   *     A ComponentObserver in a ServiceProfile is given to RTC.
+   *     ServiceProfile members should be set as follows.
+   *
+   *    - id: UUID and other unique ID should be specified. Since this ID
+   *      is used when the service is removed, tools should remember
+   *      this ID.
+   *
+   *    - interface_type: IFR ID should be specified here. Since the RTC
+   *      decides if the given SDO service object can be accepted by
+   *      using the interface_type string, this member is mandatory.
+   * 
+   *    - properties: This member specifies properties to be notified to
+   *      RTC side. In this service, the following heartbeat related
+   *      properties should be specified.
+   *
+   *    - service: SDOService object reference should be specified.
+   * 
+   * -# If some changes happen in RTC, the update_status() operation
+   *    is called with StatusKind and hint string. RTC's status change
+   *    is notified to tool and some processes would be performed by
+   *    the tool according to the StatusKind and hint.
+   *
+   * -# Finally, When the ComponentObserver object becomes
+   *     unnecessary, Configuration::remove_service_profile() is called
+   *     with id and it is removed from RTC.
+   *
+   * <pre>
+   * 
+   *   [RTC]    [Configuration]           [Observer]    [Tool]
+   *     |            |                       |            |
+   *     |            | get_configuration()   |            |
+   *     |<------------------------------------------------|
+   *     |            |                       |            |
+   *     |            | add_service_profile(prof)          |
+   *     |            |<-----------------------------------|
+   *     |            |                       |            |
+   *     |            | update_status(kind, hint)          |
+   *     |----------------------------------->|            |
+   *     |            | update_status(kind, hint)          |
+   *     |----------------------------------->|            |
+   *     |            |       :               |            |
+   *     |            |                       |            |
+   *     |            | remove_service_profile(id)         |
+   *     |            |<-----------------------------------|
+   *     |            |                       |            |
+   *     |            |                       x            x
+   *
+   * </pre>
+   *
+   * Properties which is specified in ServiceProfile::properties is as follows.
+   *
+   * - observed_status: ALL or kind of status
+   * - heartbeat.enable: YES/NO
+   * - heartbeat.interval: x [s]
+   * 
+   *
+   * - observed_staus: ALL or comma separated status kinds This
+   *   property specifies kind of status to be observed. Available
+   *   kind of statuses are COMPONENT_PROFILE, RTC_STATUS, EC_STATUS,
+   *   PORT_PROFILE, CONFIGURATION. You can specify comma-separated
+   *   status list to be observed. And if you want to observe all the
+   *   status, you just specify ALL instead of all the status kind
+   *   list. Uppercase, lowercase and mixture are allowed in the
+   *   specified status kind.
+   *
+   * - heartbeat.enable: YES or NO
+   *
+   *   Since tools cannot know whether the RTC is alive or not until
+   *   status change happens, if the RTC suddenly died, the tools
+   *   cannot know it forever. To eliminate this problems, Observer
+   *   object can send periodic heartbeat signals to observers. The
+   *   heartbeat.enable option specifies whether the functionality is
+   *   activated or not.
+   *
+   * - heartbeat.interval: Heartbeat interval should be specified in
+   *   seconds.  This specification does not guarantee that heartbeat
+   *   signals precisely send back to observer. Therefore if you need
+   *   to decide whether an RTC died or not, you have to wait for
+   *   several heartbeat signals.
+   *
+   * @endif
+   */
+  interface ComponentObserver
+    : SDOPackage::SDOService
+  {
+    /*!
+     * @if jp
+     *
+     * @brief 状態が更新されたことを知らせる
+     * 
+     * 状態が更新されたことを知らせるオペレーション。status_kind によっ
+     * て更新された状態の種類、hint によってどのような状態が変更された
+     * かに関するヒントが与えられる。
+     *
+     * @param status_kind: StatusKind 型の状態の種類
+     * @param hint; StatusKind 毎に決まる状態変更に関するヒント
+     *
+     * @else
+     *
+     * @brief Notifies the status updated
+     *
+     * This operation notifies the updated status. The status_kind
+     * notifies kind of updated status, and the hint give some hint
+     * about updated status.
+     *
+     * @endif
+     */
+    oneway void update_status(in StatusKind status_kind, in string hint);
+  };
+
+};

Added: branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/DataPort.idl
===================================================================
--- branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/DataPort.idl	                        (rev 0)
+++ branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/DataPort.idl	2011-08-04 07:19:10 UTC (rev 436)
@@ -0,0 +1,48 @@
+// -*- IDL -*-
+/*!
+ * @file DataPort.idl
+ * @brief DataPort interface definition
+ * @date $Date: 2007-01-09 15:40:14 $
+ * @author Noriaki Ando <n-ando at aist.go.jp>
+ *
+ * Copyright (C) 2006
+ *     Noriaki Ando
+ *     Task-intelligence Research Group,
+ *     Intelligent Systems Research Institute,
+ *     National Institute of
+ *         Advanced Industrial Science and Technology (AIST), Japan
+ *
+ *     All rights reserved.
+ *
+ * $Id: DataPort.idl 1597 2009-12-22 02:26:17Z n-ando $
+ *
+ */
+
+#ifndef DataInPort_idl
+#define DataInPort_idl
+
+module OpenRTM
+{
+  enum PortStatus
+  {
+    PORT_OK,
+    PORT_ERROR,
+    BUFFER_FULL,
+    BUFFER_EMPTY,
+    BUFFER_TIMEOUT,
+    UNKNOWN_ERROR
+  };
+
+  typedef sequence<octet> CdrData;
+
+  interface InPortCdr
+  {
+    PortStatus put(in CdrData data);
+  };
+
+  interface OutPortCdr
+  {
+    PortStatus get(out CdrData data);
+  };
+};
+#endif

Added: branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/OpenRTM.idl
===================================================================
--- branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/OpenRTM.idl	                        (rev 0)
+++ branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/OpenRTM.idl	2011-08-04 07:19:10 UTC (rev 436)
@@ -0,0 +1,64 @@
+// -*- IDL -*-
+/*!
+ * @file OpenRTM.idl
+ * @brief OpenRTM interface definition
+ * @date $Date: 2007-09-21 09:19:33 $
+ * @author Noriaki Ando <n-ando at aist.go.jp>
+ *
+ * Copyright (C) 2007
+ *     Task-intelligence Research Group,
+ *     Intelligent Systems Research Institute,
+ *     National Institute of
+ *         Advanced Industrial Science and Technology (AIST), Japan
+ *     All rights reserved.
+ *
+ * $Id: OpenRTM.idl 1338 2009-05-18 05:58:25Z n-ando $
+ *
+ */
+
+#include "RTC.idl"
+
+#pragma prefix "openrtm.aist.go.jp"
+
+module OpenRTM
+{
+
+  interface DataFlowComponent
+    : RTC::RTObject, RTC::DataFlowComponent
+  {
+  };
+
+//  interface FiniteStateMachineComponent
+//    : RTC::RTObject, RTC::FsmParticipant
+//  {
+//  };
+//
+//  interface DataFlowFiniteStateMachineComponent
+//    : RTC::RTObject, RTC::DataFlowComponent, RTC::FsmParticipant
+//  {
+//  };
+//
+//  interface DataFlowMultiModeComponent
+//    : RTC::RTObject, RTC::DataFlowComponent, RTC::MultiModeObject
+//  {
+//  };
+//
+//  interface FiniteStateMachineMultiModeComponent
+//    : RTC::RTObject, RTC::FsmParticipant, RTC::MultiModeObject
+//  {
+//  };
+//
+//  interface DataFlowFiniteStateMachineMultiModeComponent
+//    : RTC::RTObject, RTC::DataFlowComponent,
+//    RTC::FsmParticipant, RTC::MultiModeObject
+//  {
+//  };
+
+
+  interface ExtTrigExecutionContextService
+    : RTC::ExecutionContextService
+  {
+    void tick();
+  };
+
+};

Added: branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/RTC.idl
===================================================================
--- branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/RTC.idl	                        (rev 0)
+++ branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/RTC.idl	2011-08-04 07:19:10 UTC (rev 436)
@@ -0,0 +1,2649 @@
+// RTC.idl
+
+#include "SDOPackage.idl"
+
+#pragma prefix "omg.org"
+
+#define EXECUTION_HANDLE_TYPE_NATIVE long
+
+module RTC
+{
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief ExecutionContextHandle_t
+   *
+   * @section Description
+   *
+   * This data type represents the association between an RTC and an
+   * ExecutionContext in which it participates.
+   * 
+   * @section Semantics
+   *
+   * This is an opaque DataType. It has no attributes or operations.
+   *
+   * @endif
+   */
+  typedef EXECUTION_HANDLE_TYPE_NATIVE ExecutionContextHandle_t;
+
+  typedef SDOPackage::UniqueIdentifier UniqueIdentifier;
+  typedef SDOPackage::NVList NVList;
+  
+  /*!
+   * @if jp
+   * @brief ReturnCode_t
+   *
+   * OMG RTC 1.0 仕様中の多くのオペレーションは、クラインとに対して考え
+   * られるエラー状態を報告する必要がある。これは、ReturnCode_t型の所謂
+   * リターンコードにより行われる。
+   *
+   * OMG RTC 1.0 の PIM 内において、ReturnCode_t型の値を返さないオペレーションは
+   * それらの戻り値の型に依存して、次の方法によりエラーを報告するものとする。
+   * -オペレーションが正数値を返す場合 (OMG RTC 1.0 Section 5.2.2.6.4 の
+   *  get_rateのように)、負数値を返すことによりエラーを示すものとする。
+   * - オペレーションがオブジェクトリファレンス(RTObject::get_component_profile
+   *   OMG RTC 1.0 5.4.2.2.1を参照) を通常返す場合、nil参照を返すことにより
+   *   エラーを示すものとする。
+   *
+   * @else
+   * @brief ReturnCode_t
+   *
+   * A number of operations in this specification will need to report
+   * potential error conditions to their clients. This task shall be
+   * accomplished by means of operation "return codes" of type
+   * ReturnCode_t
+   *
+   * Operations in the PIM that do not return a value of type
+   * ReturnCode_t shall report errors in the following ways, depending
+   * on their return type:
+   * - If an operation normally returns a positive numerical value (such as
+   *   get_rate, see [OMG RTC 1.0 Section 5.2.2.6.4]), it shall indicate
+   *   failure by returning a negative value.
+   * - If an operation normally returns an object reference (such as
+   *   RTObject::get_component_profile, see [OMG RTC 1.0 Section 5.4.2.2.1]),
+   *   it shall indicate failure by returning a nil reference.
+   *
+   * @param RTC_OK The operation completed successfully.
+   * @param RTC_ERROR The operation failed with a generic, unspecified error.
+   * @param BAD_PARAMETER The operation failed because an illegal argument was
+   *        passed to it.
+   * @param UNSUPPORTED The operation is unsupported by the implementation
+   *        (e.g., it belongs to a compliance point that is not implemented).
+   * @param OUT_OF_RESOURCES The target of the operation ran out of the
+   *        resources needed to complete the operation.
+   * @param PRECONDITION_NOT_MET A pre-condition for the operation was not met.
+   *
+   * @endif
+   */
+  enum ReturnCode_t
+  {
+    RTC_OK,
+    RTC_ERROR,
+    BAD_PARAMETER,
+    UNSUPPORTED,
+    OUT_OF_RESOURCES,
+    PRECONDITION_NOT_MET
+  };
+
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief LifeCycleState
+   *
+   * @section Description
+   * LifeCycleState is an enumeration of the states in the lifecycle above.
+   *
+   * @endif
+   */
+  enum LifeCycleState
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief CREATED
+     *
+     * @section Description
+     *
+     * The RTC object has been instantiated but not yet fully initialized.
+     * @endif
+     */
+    CREATED_STATE,
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief INACTIVE
+     *
+     * @section Description
+     *
+     * The RTC is Alive but is not being invoked in any execution
+     * context (see Section 5.2.2.5), regardless of whether the context
+     * is Running or not.
+     *
+     * @section Semantics
+     *
+     * An instance of this state exists for each execution context in
+     * which the RTC participates. If the RTC does not participate in
+     * any execution context, a single instance of this state exists.
+     *
+     * @endif
+     */
+    INACTIVE_STATE,
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief ACTIVE
+     *
+     * @section Description
+     *
+     * The RTC is Alive and will be invoked in the execution context
+     * if the context is Running.
+     *
+     * @section Semantics
+     * 
+     * An instance of this state exists for each execution context in
+     * which the RTC participates. If the RTC does not participate in
+     * any execution context, this state shall never be observed.
+     *
+     * @endif
+     */
+    ACTIVE_STATE,
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief ERROR
+     *
+     * @section Description
+     *
+     * The RTC has encountered a problem in a given execution context
+     * and cannot continue functioning in that context without being
+     * reset.
+     *
+     * @endif
+     */
+    ERROR_STATE
+  };
+  
+  interface ExecutionContext;
+  typedef sequence<ExecutionContext> ExecutionContextList;
+
+  /*!
+   * @if jp
+   * @brief
+   * @else
+   * @brief ComponentAction
+   *
+   * @section Description
+   *
+   * The ComponentAction interface provides callbacks corresponding to
+   * the execution of the lifecycle operations of LightweightRTObject
+   * (see Section 5.2.2.2) and ExecutionContext (see Section
+   * 5.2.2.5). An RTC developer may implement these callback
+   * operations in order to execute application-specific logic
+   * pointing response to those transitions.
+   *
+   * @section Semantics
+   *
+   * Clients of an RTC are not expected to invoke these operations
+   * directly; they are provided for the benefit of the RTC middleware
+   * implementation.
+   *
+   * @endif
+   */
+  interface ComponentAction
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_initialize
+     *
+     * @section Description
+     *
+     * The RTC has been initialized and entered the Alive state.
+     *
+     * @section Semantics
+     *
+     * Any RTC-specific initialization logic should be performed here.
+     *
+     * @endif
+     */
+    ReturnCode_t on_initialize();
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_finalize
+     *
+     * @section Description
+     *
+     * The RTC is being destroyed.
+     *
+     * @section Semantics
+     *
+     * Any final RTC-specific tear-down logic should be performed here.
+     *
+     * @endif
+     */
+    ReturnCode_t on_finalize();
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_startup
+     *
+     * @section Description
+     *
+     * The given execution context, in which the RTC is participating,
+     * has transitioned from Stopped to Running.
+     *
+     * @endif
+     */
+    ReturnCode_t on_startup(in ExecutionContextHandle_t exec_handle);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_shutdown
+     *
+     * @section Description
+     *
+     * The given execution context, in which the RTC is participating,
+     * has transitioned from Running to Stopped.
+     *
+     * @endif
+     */
+    ReturnCode_t on_shutdown(in ExecutionContextHandle_t exec_handle);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_activated
+     *
+     * @section Description
+     *
+     * The RTC has been activated in the given execution context.
+     *
+     * @endif
+     */
+    ReturnCode_t on_activated(in ExecutionContextHandle_t exec_handle);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_deactivated
+     *
+     * @section Description
+     *
+     * The RTC has been deactivated in the given execution context.
+     *
+     * @endif
+     */
+    ReturnCode_t on_deactivated(in ExecutionContextHandle_t exec_handle);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_aborting
+     *
+     * @section Description
+     *
+     * The RTC is transitioning from the Active state to the Error
+     * state in some execution context.
+     *
+     * @section Semantics
+     *
+     * This callback is invoked only a single time for time that the
+     * RTC transitions into the Error state from another state. This
+     * behavior is in contrast to that of on_error.  
+     *
+     * @endif
+     */
+    ReturnCode_t on_aborting(in ExecutionContextHandle_t exec_handle);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_error
+     *
+     * @section Description
+     *
+     * The RTC remains in the Error state.
+     *
+     * @section Semantics
+     *
+     * If the RTC is in the Error state relative to some execution
+     * context when it would otherwise be invoked from that context
+     * (according to the context’s ExecutionKind), this callback
+     * shall be invoked instead. For example,
+     *
+     * - If the ExecutionKind is PERIODIC, this operation shall be
+     *   invoked in sorted order at the rate of the context instead of
+     *   DataFlowComponentAction::on_execute and on_state_update.
+     *
+     * - If the ExecutionKind is EVENT_DRIVEN, this operation shall be
+     *   invoked whenever FsmParticipantAction::on_action would
+     *   otherwise have been invoked.
+     *
+     * @endif
+     */
+    ReturnCode_t on_error(in ExecutionContextHandle_t exec_handle);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_reset
+     *
+     * @section Description
+     *
+     * The RTC is in the Error state. An attempt is being made to
+     * recover it such that it can return to the Inactive state.
+     *
+     * @section Semantics
+     *
+     * If the RTC was successfully recovered and can safely return to
+     * the Inactive state, this method shall complete with
+     * ReturnCode_t::OK. Any other result shall indicate that the RTC
+     * should remain in the Error state.
+     *
+     * @endif
+     */
+    ReturnCode_t on_reset(in ExecutionContextHandle_t exec_handle);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief LightweightRTObject
+   * 
+   * @section Description
+   *
+   * This interface is realized by all lightweight RTCs (as required
+   * by the lightweightRTComponent stereotype). It defines the states
+   * and transitions through which all RTCs will pass from the time
+   * they are created until the time they are destroyed.
+   *
+   * @section Semantics
+   * @subsection Initialization
+   *
+   * An RTC begins in the Created state; at this point, it has been
+   * instantiated but not yet fully initialized. Note that this state
+   * is highly implementation-dependent. For example, it may
+   * correspond to the invocation of a constructor in languages that
+   * support that concept, but not all languages do. Furthermore, how
+   * soon this state is entered before initialize is invoked is
+   * implementation-dependent. Therefore, it should be relied on by
+   * RTC implementers only to the minimum extent possible.  An RTC
+   * that has completed its initialization and has not been finalized
+   * is said to be Alive.
+   *
+   * @subsection Execution Context
+   *
+   * An RTC in the Alive state may participate in any number of
+   * execution contexts (see Section 5.2.2.5 ). These contexts shall
+   * be represented to an RTC as distinct instances of the
+   * ExecutionContext class. The ExecutionContext manages the behavior
+   * of each RTC that participates in it. This relationship is defined
+   * by the following state machine, which is embedded within the
+   * ExecutionContext's own lifecycle (see Figure 5.5 ). Each
+   * participating RTC is represented as a separate parallel region.
+   *
+   * Relative to a given execution context, an RTC may either be
+   * Active, Inactive, or in Error. When the RTC is Active in a
+   * Running execution context, the ComponentAction callbacks (see
+   * Section 5.2.2.4) shall be invoked as appropriate for the context’
+   * s ExecutionKind. The callbacks shall not be invoked relative to
+   * that context when either the RTC is Inactive in that context or
+   * the context is Stopped. (Note that starting and stopping an
+   * execution context shall not impact whether its participating RTCs
+   * are Active or Inactive.)  It may be that a given RTC does not
+   * directly participate in any execution contexts. Such an RTC is
+   * referred to as passive.  A passive RTC may provide services to
+   * other components upon request. At any other time, it shall not be
+   * required to perform any ongoing activity of its own; therefore,
+   * instances of such an RTC typically exist only as parts (directly
+   * or indirectly) of a containing active RTC.
+   *
+   * @subsection Error Handling
+   *
+   * If an operation fails while the RTC is Active in a given
+   * execution context, the RTC will transition to the Error state
+   * corresponding to that context. While the RTC is in Error, the
+   * ComponentAction::on_error callback will be invoked in place of
+   * those callbacks that would otherwise have been invoked according
+   * to the context’s ExecutionKind. For example, if the kind is
+   * PERIODIC, on_error shall be invoked instead of the pair of
+   * on_execute, and on_state_update.  When an RTC is in Error, it may
+   * be reset. If resetting is successful, the RTC shall return to the
+   * Inactive state. If resetting is unsuccessful, it shall remain in
+   * the Error state.
+   * 
+   * @endif
+   */
+  interface LightweightRTObject
+    : ComponentAction
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief initialize
+     *
+     * @section Description
+     * Initialize the RTC that realizes this interface.
+     *
+     * @section Semantics
+     * The invocation of this operation shall result in the invocation
+     * of the callback ComponentAction::on_initialize.
+     *
+     * @section Constraints
+     *
+     * - An RTC may be initialized only while it is in the Created
+     *   state. Any attempt to invoke this operation while in another
+     *   state shall fail with ReturnCode_t::PRECONDITION_NOT_MET.
+     * - Application developers are not expected to call this operation
+     *   directly; it exists for use by the RTC infrastructure.
+     *
+     * @endif
+     */
+    ReturnCode_t initialize();
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief finalize
+     *
+     * @section Description
+     *
+     * Finalize the RTC that realizes this interface, preparing it for
+     * destruction.
+     *
+     * @section Semantics
+     *
+     * This invocation of this operation shall result in the
+     * invocation of the callback ComponentAction::on_finalize
+     *
+     * @section Constraints
+     *
+     * - An RTC may not be finalized while it is participating in any
+     *   execution context. It must first be removed with
+     *   ExecutionContextOperations::remove_component. Otherwise, this
+     *   operation shall fail with
+     *   ReturnCode_t::PRECONDITION_NOT_MET. See Figure 5.9.
+     *
+     * - An RTC may not be finalized while it is in the Created state. Any
+     *   attempt to invoke this operation while in that state shall fail with
+     *   ReturnCode_t::PRECONDITION_NOT_MET.
+     *
+     * - Application developers are not expected to call this operation
+     *   directly; it exists for use by the RTC infrastructure.
+     *
+     * @endif
+     */
+    ReturnCode_t finalize();
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief is_alive
+     * 
+     * @section Description
+     *
+     * A component is alive or not regardless of the execution context
+     * from which it is observed. However, whether or not it is
+     * Active, Inactive, or in Error is dependent on the execution
+     * context(s) (see Figure 5.7) in which it is running. That is, it
+     * may be Active in one context but Inactive in
+     * another. Therefore, this operation shall report whether this
+     * RTC is either Active, Inactive, or in Error; which of those
+     * states a component is in with respect to a particular context
+     * may be queried from the context itself.
+     *
+     * @endif
+     *
+     */
+    boolean is_alive(in ExecutionContext exec_context);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief exit
+     *
+     * @section Description
+     *
+     * Stop the RTC’s execution context(s) and finalize it along with
+     * its contents.
+     *
+     * @section Semantics
+     *
+     * Any execution contexts for which the RTC is the owner shall be
+     * stopped.  If the RTC participates in any execution contexts
+     * belonging to another RTC that contains it, directly or
+     * indirectly (i.e., the containing RTC is the owner of the
+     * ExecutionContext), it shall be deactivated in those contexts.
+     * After the RTC is no longer Active in any Running execution
+     * context, it and any RTCs contained transitively within it shall
+     * be finalized.
+     *
+     * @section Constraints
+     *
+     * An RTC cannot be exited if it has not yet been initialized. Any
+     * attempt to exit an RTC that is in the Created state shall fail
+     * with ReturnCode_t::PRECONDITION_NOT_MET.  
+     *
+     * @endif
+     */
+    ReturnCode_t exit();
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief attach_context
+     *
+     * @section Description
+     *
+     * Inform this RTC that it is participating in the given execution
+     * context. Return a handle that represents the association of
+     * this RTC with the context.
+     *
+     * @section Semantics
+     *
+     * This operation is intended to be invoked by
+     * ExecutionContextOperations::add_component (see Section
+     * 5.2.2.6.6). It is not intended for use by other clients.
+     *
+     * @endif
+     */
+    ExecutionContextHandle_t attach_context(in ExecutionContext exec_context);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief detach_context
+     * @section Description
+     * 
+     * Inform this RTC that it is no longer participating in the given
+     * execution context.
+     *
+     * @section Semantics
+     * 
+     * This operation is intended to be invoked by
+     * ExecutionContextOperations::remove_component (see Section
+     * 5.2.2.6.7). It is not intended for use by other clients.
+     *
+     * @section Constraints
+     *
+     * - This operation may not be invoked if this RTC is not already
+     *   participating in the execution context. Such a call shall fail
+     *   with ReturnCode_t::PRECONDITION_NOT_MET.
+     *
+     * - This operation may not be invoked if this RTC is Active in
+     *   the indicated execution context. Otherwise, it shall fail with
+     *   ReturnCode_t::PRECONDITION_NOT_MET.
+     *
+     * @endif
+     */
+    ReturnCode_t detach_context(in ExecutionContextHandle_t exec_handle);
+
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_context
+     *
+     * @section Description
+     *
+     * Obtain a reference to the execution context represented by the
+     * given handle.
+     *
+     * @section Semantics
+     *
+     * The mapping from handle to context is specific to a particular
+     * RTC instance. The given handle must have been obtained by a
+     * previous call to attach_context on this RTC.
+     *
+     * @endif
+     */
+    ExecutionContext get_context(in ExecutionContextHandle_t exec_handle);
+
+    /*!
+     * @if jp
+     * @brief get_owned_contexts
+     *
+     * @section Description 
+     *
+     * この RTC が所有する ExecutionContext のリストを取得する。
+     * 
+     * @else
+     * @brief get_owned_contexts
+     *
+     * @section Description 
+     *
+     * This operation returns a list of all execution contexts owned
+     * by this RTC.
+     *
+     * @endif
+     */
+    ExecutionContextList get_owned_contexts();
+
+    /*!
+     * @if jp
+     * @brief get_participating_contexts
+     *  
+     * @section Description
+     *
+     * この RTC が参加しているすべての ExecutionContext のリストを取得する。
+     *
+     * @section Semantics
+     *
+     * このリストに含まれる実行コンテキストは、attach_context が呼び出
+     * されるごとに、リストに追加され、detach_context が呼び出されるご
+     * とに、リストから削除される。
+     *
+     * @else
+     * @brief* get_participating_contexts
+     *
+     * @section Description
+     *
+     * This operation returns a list of all execution contexts in
+     * which this RTC participates.
+     *
+     * @section Semantics
+     *
+     * Each call to attach_context causes the provided context to be
+     * added to this list. Each call to detach_context causes the
+     * provided context to be removed from this list.
+     *
+     * @endif
+     */
+    ExecutionContextList get_participating_contexts();
+    
+    /*!
+     * @if jp
+     * ### [誤植] RTC.idl には含まれていないがPIMには含まれている。
+     * ### PIMが正しい。
+     *
+     * @brief 
+     * @else
+     * @brief get_context_handle
+     *
+     * @section Description
+     * 
+     * This operation returns a handle that is associated with the given
+     * execution context.
+     *
+     * @endif
+     */
+    ExecutionContextHandle_t get_context_handle(in ExecutionContext cxt);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief ExecutionKind
+   * 
+   * @sectioni Description
+   *
+   * The ExecutionKind enumeration defines the execution semantics
+   * (see Section 5.3) of the RTCs that participate in an execution
+   * context.
+   *
+   * @endif
+   */
+  enum ExecutionKind
+  {
+    /*!
+     * @if jp
+     * @brief 
+     *
+     * @else
+     * @brief PERIODIC
+     *
+     * @section Description
+     *
+     * The participant RTCs are executing according to periodic
+     * sampled data semantics (see Section 5.3.1).
+     * 
+     * @endif
+     */
+    PERIODIC,
+    /*!
+     * @if jp
+     * @brief 
+     *
+     * @else
+     * @brief EVENT_DRIVEN
+     *
+     * @section Description
+     *
+     * The participant RTCs are executing according to stimulus
+     * response semantics (see Section 5.3.2).
+     * 
+     * @endif
+     */
+    EVENT_DRIVEN,
+    /*!
+     * @if jp
+     * @brief 
+     *
+     * @else
+     * @brief OTHER
+     *
+     * @section Description
+     *
+     * The participant RTCs are executing according to some semantics
+     * not defined by this specification.
+     * 
+     * @endif
+     */
+    OTHER
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief ExecutionContext
+   *
+   * @section Description
+   *
+   * An ExecutionContext allows the business logic of an RTC to be
+   * decoupled from the thread of control in which it is executed. The
+   * context represents a logical thread of control and is provided to
+   * RTCs at runtime as an argument to various operations, allowing
+   * them to query and modify their own state, and that of other RTCs
+   * executing within the same context, in the lifecycle.  This
+   * separation of concerns is important for two primary reasons:
+   *
+   * - Large number of components may collaborate tightly within a
+   * single node or process. If each component were to run within its
+   * own thread of control, the infrastructure may not be able to
+   * satisfy the timeliness and determinism requirements of real-time
+   * applications due to the large number of threads and the required
+   * synchronization between them.
+   *
+   * - A single application may carry out a number of independent
+   * tasks that require different execution rates. For example, it may
+   * need to sample a sensor periodically at a very high rate and update a
+   * user interface at a much lower rate.
+   *
+   * @section Semantics
+   *
+   * The state machine of an ExecutionContext has two parts. The
+   * behavior of the ExecutionContext itself is defined by the upper
+   * region in the above figure. The behavior of the RTCs that
+   * participate in the context is defined by the lower region. The
+   * contents of that region are displayed in more detail in Figure
+   * 5.5 in Section 5.2.2.2.  Ownership and Participation Each
+   * execution context is owned by a single RTC and may be used to
+   * execute that RTC and the RTCs contained within it, directly or
+   * indirectly. An RTC that owns one or more execution contexts is
+   * known as an autonomous RTC.  An autonomous RTC and some subset of
+   * the RTCs within it (to be defined by the application developer)
+   * shall be executed by the infrastructure according to the context’
+   * s execution kind, which defines when each RTC’s operations will
+   * be invoked when and in which order. These RTCs are said to
+   * participate in the context. The available execution kinds are
+   * described in Section 5.2.2.7.  The relationship between RTCs and
+   * execution contexts may be many-to-many in the general case:
+   * multiple RTCs may be invoked from the same execution context, and
+   * a single RTC may be invoked from multiple contexts. In the case
+   * where multiple RTCs are invoked from the same context, starting
+   * or stopping the context shall result in the corresponding
+   * lifecycle transitions for all of those components.
+   *
+   * @section Logical and Physical Threads
+   *
+   * Although an execution context represents a logical thread of
+   * control, the choice of how it maps to a physical thread shall be
+   * left to the application’s deployment
+   * environment. Implementations may elect to associate contexts with
+   * threads with a one-to-one mapping, to serve multiple contexts
+   * from a single thread, or by any other means. In the case where a
+   * given RTC may be invoked from multiple contexts, concurrency
+   * management is implementation-dependent.
+   *
+   * @endif
+   */
+  interface ExecutionContext
+  {
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief is_running
+     * @section Description
+     *
+     * This operation shall return true if the context is in the
+     * Running state.
+     *
+     * @section Semantics
+     *
+     * While the context is Running, all Active RTCs participating in
+     * the context shall be executed according to the context’s
+     * execution kind.  
+     *
+     * @endif
+     */
+    boolean is_running();
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     *
+     * @brief start
+     *
+     * @section Description
+     *
+     * Request that the context enter the Running state. Once the
+     * state transition occurs, the ComponentAction::on_startup
+     * operation (see Section 5.2.2.4.3) will be invoked.  @section *
+     *
+     * @section Semantics
+     *
+     * An execution context may not be started
+     * until the RT components that participate in it have been
+     * initialized. An execution context may be started and stopped
+     * multiple times.
+     *
+     * @section Constraints
+     *
+     * - This operation shall fail with
+     * ReturnCode_t::PRECONDITION_NOT_MET if the context is not in the
+     * Stopped state.
+     *
+     * - This operation shall fail with
+     * ReturnCode_t::PRECONDITION_NOT_MET if any of the participating
+     * components are not in their Alive state.
+     *
+     * @endif
+     */
+    ReturnCode_t start();
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief stop
+     *
+     * @section Description
+     *
+     * Request that the context enter the Stopped state. Once the
+     * transition occurs, the ComponentAction::on_shutdown operation
+     * (see Section 5.2.2.4.4) will be invoked.
+     *
+     * @section Semantics
+     *
+     * An execution context must be stopped before the RT components
+     * that participate in it are finalized.
+     *
+     * An execution context may be started and stopped multiple times.
+     *
+     * @section Constraints
+     *
+     * - This operation shall fail with
+     * ReturnCode_t::PRECONDITION_NOT_MET if the context is not in the
+     * Running state.
+     *
+     * @endif
+     */
+    ReturnCode_t stop();
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_rate
+     *
+     * @section Description
+     *
+     * This operation shall return the rate (in hertz) at which its
+     * Active participating RTCs are being invoked.
+     *
+     * @section Semantics
+     *
+     * An implementation is permitted to perform some periodic or
+     * quasi-periodic processing within an execution context with an
+     * ExecutionKind other than PERIODIC. In such a case, the result
+     * of this operation is implementation-defined. If no periodic
+     * processing of any kind is taking place within the context, this
+     * operation shall fail as described in Section 5.2.1.
+     *
+     * @section Constraints
+     *
+     * - If the context has an ExecutionKind of PERIODIC, this
+     *   operation shall return a rate greater than zero.
+     *
+     * @endif
+     */
+    double get_rate();
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief set_rate
+     *
+     * @section Description
+     *
+     * This operation shall set the rate (in hertz) at which this
+     * context’s Active participating RTCs are being called.
+     *
+     * @section Semantics
+     *
+     * If the execution kind of the context is PERIODIC, a rate change
+     * shall result in the invocation of on_rate_changed on any RTCs
+     * realizing DataFlowComponentAction that are registered with any
+     * RTCs participating in the context.  An implementation is
+     * permitted to perform some periodic or quasi-periodic processing
+     * within an execution context with an ExecutionKind other than
+     * PERIODIC. If such is the case, and the implementation reports a
+     * rate from get_rate, this operation shall set that rate
+     * successfully provided that the given rate is valid. If no
+     * periodic processing of any kind is taking place within the
+     * context, this operation shall fail with
+     * ReturnCode_t::UNSUPPORTED.
+     *
+     * @section Constraints
+     *
+     * - The given rate must be greater than zero. Otherwise, this
+     * operation shall fail with ReturnCode_t::BAD_PARAMETER.
+     *
+     * @endif
+     */
+    ReturnCode_t set_rate(in double rate);
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief add_component
+     *
+     * @section Description
+     *
+     * The operation causes the given RTC to begin participating in
+     * the execution context.
+     *
+     * @section Semantics
+     *
+     * The newly added RTC will receive a call to
+     * LightweightRTComponent::attach_context (see Section 5.2.2.2.5)
+     * and then enter the Inactive state. 
+     * 
+     * @section Constraints
+     * 
+     * - If the ExecutionKind of this context is PERIODIC, the RTC
+     * must be a data flow component (see Section 5.3.1.1).
+     * Otherwise, this operation shall fail with
+     * ReturnCode_t::PRECONDITION_NOT_MET.
+     * 
+     * - If the ExecutionKind of this context is EVENT_DRIVEN, the RTC
+     * must be an FSM participant (see Section 5.3.2.3).  Otherwise,
+     * this operation shall fail with
+     * ReturnCode_t::PRECONDITION_NOT_MET.
+     *
+     * @endif
+     */
+    ReturnCode_t add_component(in LightweightRTObject comp);
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief remove_component
+     *
+     * @section Description
+     *
+     * This operation causes a participant RTC to stop participating
+     * in the execution context.
+     *
+     * @section Semantics
+     *
+     * The removed RTC will receive a call to
+     * LightweightRTComponent::detach_context (see Section 5.2.2.2.6).
+     *
+     * @section Constraints
+     *
+     * - If the given RTC is not currently participating in the
+     * execution context, this operation shall fail with
+     * ReturnCode_t::BAD_PARAMETER.
+     * 
+     * - An RTC must be deactivated before it can be removed from an
+     * execution context. If the given RTC is participating in the
+     * execution context but is still in the Active state, this
+     * operation shall fail with ReturnCode_t::PRECONDITION_NOT_MET.
+     *
+     * @endif
+     */
+    ReturnCode_t remove_component(in LightweightRTObject comp);
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief activate_component
+     *
+     * @section Description
+     *
+     * The given participant RTC is Inactive and is therefore not
+     * being invoked according to the execution context’s execution
+     * kind. This operation shall cause the RTC to transition to the
+     * Active state such that it may subsequently be invoked in this
+     * execution context.
+     *
+     * @section Semantics
+     *
+     * The callback on_activate shall be called as a result of calling
+     * this operation. This operation shall not return until the
+     * callback has returned, and shall result in an error if the
+     * callback does.  The following figure is a non-normative example
+     * sequence diagram for activate_component.
+     *
+     * @section Constraints
+     *
+     * - An execution context can only activate its participant
+     *   components. If the given RTC is not participating in the
+     *   execution context, this operation shall fail with
+     *   ReturnCode_t::BAD_PARAMETER.
+     *
+     * - An RTC that is in the Error state cannot be activated until
+     *   after it has been reset. If the given RTC is in the Error
+     *   state, this operation shall fail with
+     *   ReturnCode_t::PRECONDITION_NOT_MET.
+     *
+     * - This operation shall fail with ReturnCode_t::BAD_PARAMETER if
+     *   the given component is not in its Alive state.
+     *
+     * @endif
+     */
+    ReturnCode_t activate_component(in LightweightRTObject comp);
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief deactivate_component
+     *
+     * @section Description
+     *
+     * The given RTC is Active in the execution context. Cause it to
+     * transition to the Inactive state such that it will not be
+     * subsequently invoked from the context unless and until it is
+     * activated again.
+     *
+     * @section Semantics
+     *
+     * The callback on_deactivate shall be called as a result of
+     * calling this operation. This operation shall not return until
+     * the callback has returned, and shall result in an error if the
+     * callback does.  The following figure is a non-normative example
+     * sequence diagram for deactivate_component.
+     *
+     * @section Constraints
+     *
+     * - An execution context can only deactivate its participant
+     * components. If the given RTC is not participating in the
+     * execution context, this operation shall fail with
+     * ReturnCode_t::BAD_PARAMETER.
+     *
+     * - This operation shall fail with ReturnCode_t::BAD_PARAMETER if
+     * the given component is not in its Alive state.
+     *
+     * @endif
+     */
+    ReturnCode_t deactivate_component(in LightweightRTObject comp);
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief reset_component
+     *
+     * @section Description
+     *
+     * Attempt to recover the RTC when it is in Error.
+     *
+     * @section Semantics
+     *
+     * The ComponentAction::on_reset callback shall be invoked. This
+     * operation shall not return until the callback has returned, and
+     * shall result in an error if the callback does. If possible, the
+     * RTC developer should implement that callback such that the RTC
+     * may be returned to a valid state.  * If this operation fails,
+     * the RTC will remain in Error.
+     *
+     * @section Constraints
+     *
+     * - An RTC may only be reset in an execution context in which it
+     *   is in error. If the RTC is not in Error in the identified
+     *   context, this operation shall fail with
+     *   ReturnCode_t::PRECONDITION_NOT_MET. However, that failure shall
+     *   not cause the RTC to enter the Error state.
+     *
+     * - An RTC may not be reset while in the Created state. Any
+     *   attempt to invoke this operation while the RTC is in that state
+     *   shall fail with ReturnCode_t::PRECONDITION_NOT_MET. However,
+     *   that failure shall not cause the RTC to enter the Error state.
+     *
+     * @endif
+     */
+    ReturnCode_t reset_component(in LightweightRTObject comp);
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_component_state
+     *
+     * @section Description
+     *
+     * This operation shall report the LifeCycleState of the given
+     * participant RTC.
+     *
+     * @section Constraints
+     *
+     * - The given RTC must be Alive.
+     *
+     * - The given RTC must be a participant in the target execution context.
+     *
+     * - The LifeCycleState returned by this operation shall be one of
+     *   LifeCycleState::INACTIVE, ACTIVE, or ERROR.
+     *
+     * @endif
+     */
+    LifeCycleState get_component_state(in LightweightRTObject comp);
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_kind
+     *
+     * @section Description
+     *
+     * This operation shall report the execution kind of the execution
+     * context.
+     *
+     * @endif
+     */
+    ExecutionKind get_kind();
+  };
+  
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief DataFlowComponentAction
+   *
+   * @section Description
+   *
+   * DataFlowComponentAction is a companion to ComponentAction (see
+   * Section 5.2.2.4) that provides additional callbacks for
+   * intercepting the two execution passes defined in Section
+   * 5.3.1.1.2.
+   *
+   * @endif
+   */
+  interface DataFlowComponentAction
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_execute
+     * @section Description
+     *
+     * This operation will be invoked periodically at the rate of the
+     * given execution context as long as the following conditions
+     * hold:
+     *
+     * - The RTC is Active.
+     *
+     * - The given execution context is Running.
+     *
+     * @section Semantics
+     *
+     This callback occurs during the first execution pass.
+     *
+     * @section Constraints
+     *
+     * - The execution context of the given context shall be PERIODIC.
+     *
+     * @endif
+     */
+    ReturnCode_t on_execute(in ExecutionContextHandle_t exec_handle);
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_state_update
+     *
+     * @section Description
+     *
+     * This operation will be invoked periodically at the rate of the
+     * given execution context as long as the following conditions hold:
+     *
+     * - The RTC is Active.
+     *
+     * - The given execution context is Running.
+     *
+     * @section Semantics
+     *
+     * This callback occurs during the second execution pass.
+     *
+     * @section Constraints
+     *
+     * - The execution context of the given context shall be PERIODIC.
+     *
+     *
+     * @endif
+     */
+    ReturnCode_t on_state_update(in ExecutionContextHandle_t exec_handle);
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_rate_changed
+     *
+     * @section Description
+     *
+     * This operation is a notification that the rate of the indicated
+     * execution context (see Section 5.2.2.6.4) has changed.
+     *
+     * @section Constraints
+     *
+     * - The execution context of the given context shall be PERIODIC.
+     *
+     *
+     * @endif
+     */
+    ReturnCode_t on_rate_changed(in ExecutionContextHandle_t exec_handle);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief dataFlowComponent
+   *
+   * @section Description
+   *
+   * The dataFlowComponent stereotype may be applied to a component
+   * type to indicate that its instances should be executed in sorted
+   * order by a periodic execution context.
+   *
+   * @section Constraints
+   *
+   * - An instance of a component extended by the dataFlowComponent
+   *   stereotype must participate in at least one * execution context
+   *   of kind PERIODIC, which shall also be used for the execution of
+   *   any contained data flow components.
+   *
+   * - A component extended by dataFlowComponent must realize the
+   *   interface DataFlowComponentAction.
+   *
+   *
+   * @endif
+   */
+  interface DataFlowComponent
+    : LightweightRTObject, DataFlowComponentAction
+  {
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief fsm
+   *
+   * @section Description
+   *
+   * Applying the fsm stereotype to a component implies the ability to
+   * define component-specific states and transitions.
+   *
+   * @section Semantics
+   *
+   * In creating a state machine such as is depicted in Figure 5.22,
+   * the RTC developer is implicitly defining the Active state to be a
+   * submachine state.  * The BehaviorStateMachines package described
+   * in [UML] is considered the normative definition of a state
+   * machine.
+   *
+   * @endif
+   */
+  interface Fsm
+    : LightweightRTObject
+  {
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief FsmParticipantAction
+   *
+   * @section Description
+   *
+   * FsmParticipantAction is companion to ComponentAction (see Section
+   * 5.2.2.4) that is intended for use with FSM participant RTCs. It
+   * adds a callback for the interception of state transitions, state
+   * entries, and state exits.
+   *
+   * @endif
+   */
+  interface FsmParticipantAction
+  {
+    
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_action
+     *
+     * @section Description
+     *
+     * The indicated FSM participant RTC has been invoked as a result
+     * of a transition, state entry, or state exit in its containing
+     * FSM.
+     *
+     * @section Constraints
+     *
+     * - The given execution context shall be of kind EVENT_DRIVEN.
+        *
+     * @endif
+     */
+    ReturnCode_t on_action(in ExecutionContextHandle_t exec_handle);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief 
+   * @endif
+   */
+  interface FsmParticipant
+    : LightweightRTObject, FsmParticipantAction
+  {
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief Mode
+   *
+   * @section Description
+   *
+   * Each mode defined by a given RTC shall be represented by an
+   * instance of Mode.
+   *
+   * @endif
+   */
+  interface Mode
+  {
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief ModeCapable
+   *
+   * @section Description
+   *
+   * The ModeCapable interface provides access to an object’s modes
+   * and a means to set the current mode.
+   *
+   * @section Semantics
+   *
+   * A given RTC may support multiple modes as well as multiple
+   * execution contexts. In such a case, a request for a mode change
+   * (e.g., from "cruise control on" to "cruise control off") may
+   * come asynchronously with respect to one or more of those
+   * execution contexts. The mode of an RTC may therefore be observed
+   * to be different from one execution context to another.  - A mode
+   * is pending in a given execution context when a mode change has
+   * been requested but the new mode has not yet been observed by that
+   * context.
+   *
+   * - The new mode has been committed in a given execution context
+   *   when the context finally observes the new mode.
+   *
+   * - The new mode has stabilized once it has been committed in all
+   *   execution contexts in which the RTC participates.
+   *
+   * Figure 5.26 depicts a state machine that describes mode
+   * changes. Each parallel region in the composite state Mode Pending
+   * represents an execution context. The trigger "sample" within
+   * that state is considered to have occurred: - …just before the
+   * next call to on_execute (see Section 5.3.1.2.1) in the case where
+   * immediate is false and the execution kind is PERIODIC, …
+   *
+   * - …just before the processing of the next stimulus in the case
+   *   where immediate is false and the execution kind is
+   *   EVENT_DRIVEN, or …- …immediately in all other cases.
+   *
+   * @endif
+   */
+  interface ModeCapable
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_default_mode
+     *
+     * @section Description
+     *
+     * This operation shall return the mode in which the RTC shall be
+     * when no other mode has been set.
+     *
+     * @section Constraints
+     *
+     * - This operation shall not return nil.
+     *
+     * @endif
+     */
+    Mode get_default_mode();
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_current_mode
+     *
+     * @section Description
+     *
+     * This operation shall return the last mode to have
+     * stabilized. If no mode has been explicitly set, the current
+     * mode shall be the default mode.
+     *
+     * @section Constraints
+     *
+     * - This operation shall never return nil.
+     *
+     * @endif
+     */
+    Mode get_current_mode();
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_current_mode_in_context
+     *
+     * @section Description
+     *
+     * This operation returns the current mode of the component as
+     * seen by the indicated execution context.
+     *
+     * @section Semantics
+     *
+     * The manner in which this property changes is described in Figure 5.26.
+     *
+     * @endif
+     */
+    Mode get_current_mode_in_context(in ExecutionContext exec_context);
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_pending_mode
+     *
+     * @section Description
+     *
+     * This operation shall return the last mode to have been passed
+     * to set_mode that has not yet stabilized. Once the RTC’s mode
+     * has stabilized, this operation shall return nil.
+     *
+     * @endif
+     */
+    Mode get_pending_mode();
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_pending_mode_in_context
+     *
+     * @section Description
+     *
+     * If the last mode to be requested by a call to set_mode is
+     * different than the current mode as seen by the indicated
+     * execution context (see get_current_mode_in_context), this
+     * operation returns the former. If the requested mode has already
+     * been seen in that context, it returns nil.
+     *
+     * @section Semantics
+     *
+     * See Figure 5.26 for a description of how the pending mode
+     * relates to the current mode within a given execution context.
+     *
+     * @endif
+     */
+    Mode get_pending_mode_in_context(in ExecutionContext exec_context);
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief set_mode
+     *
+     * @section Description
+     *
+     * This operation shall request that the RTC change to the indicated mode.
+     *
+     * @section Semantics
+     *
+     * Usually, the new mode will be pending in each execution context
+     * in which the component executes until the next sample period
+     * (if the execution kind is PERIODIC); at that point it will
+     * become the current mode in that context and there will no
+     * longer be a pending mode. However, in some cases it is
+     * important for a mode change to take place immediately; for
+     * example, a serious fault has occurred and the component must
+     * enter an emergency mode to ensure fail-safe behavior in a
+     * safety-critical system. In such a case, immediate should be
+     * true and the mode change will take place in all contexts
+     * without waiting for the next sample period.
+     *
+     * @endif
+     */
+    ReturnCode_t set_mode(in Mode new_mode,
+			  in boolean immediate);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief MultiModeComponentAction
+   *
+   * MultiModeComponentAction is a companion to ComponentAction that
+   is realized by RTCs that support multiple modes.
+   *
+   * @endif
+   */
+  interface MultiModeComponentAction
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief on_mode_changed
+     *
+     * @section Description
+     *
+     * This callback is invoked each time the observed mode of a
+     * component has changed with respect to a particular execution
+     * context.
+     *
+     * @section Semantics
+     *
+     * If the context is PERIODIC, this callback shall come before the
+     * next call to on_execute (see Section 5.3.1.2.1) within that
+     * context.  The new mode can be retrieved with
+     * get_current_mode_in_context. If the result is the same as the
+     * result of get_current_mode, the mode has stabilized.
+     *
+     * @endif
+     */
+    ReturnCode_t on_mode_changed(in ExecutionContextHandle_t exec_handle);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief 
+   * @endif
+   */
+  interface MultiModeObject
+    : LightweightRTObject, ModeCapable, MultiModeComponentAction
+  {
+  };
+  
+  interface RTObject;
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief PortInterfacePolarity
+   *
+   * @section Description
+   *
+   * The PortInterfacePolarity enumeration identifies exposed
+   * interface instances as provided or required.  @endif
+   */
+  enum PortInterfacePolarity
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief PROVIDED
+     *
+     * @section Description
+     *
+     * The target interface is provided as an output by the target
+     * port.
+     *
+     * @endif
+     */
+    PROVIDED,
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief REQUIRED
+     *
+     * @section Description
+     *
+     * The target interface is required as an input by the target port.
+     *
+     * @endif
+     */
+    REQUIRED
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief PortInterfaceProfile
+   *
+   * @section Description
+   *
+   * PortInterfaceProfile describes an instance of a particular
+   * interface as it is exposed by a particular port. These objects
+   * are referred to below as the "target interface" and "target
+   * port" respectively.
+   *
+   * @endif
+   */
+  struct PortInterfaceProfile
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief instance_name
+     *
+     * @section Description
+     *
+     * This attribute stores the name of the target interface instance.
+     *
+     * @endif
+     */
+    string instance_name;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief type_name
+     *
+     * @section Description
+     *
+     * This attribute stores the name of the target interface type.
+     *
+     * @endif
+     */
+    string type_name;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief polarity
+     *
+     * @section Description
+     *
+     * This attribute indicates whether the target interface instance
+     * is provided or required by the RTC.
+     *
+     * @endif
+     */
+    PortInterfacePolarity polarity;
+  };
+  
+  typedef sequence<PortInterfaceProfile> PortInterfaceProfileList;
+  
+  interface PortService;
+  typedef sequence<PortService> PortServiceList;
+  typedef sequence<RTObject> RTCList;
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief ConnectorProfile
+   *
+   * @section Description
+   *
+   * The ConnectorProfile contains information about a connection
+   * between the ports of collaborating RTCs.
+   *
+   * @endif
+   */
+  struct ConnectorProfile
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief name
+     *
+     * @section Description
+     *
+     * This attribute contains the name of this connection.
+     *
+     * @endif
+     */
+    string name;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief connector_id
+     *
+     * @section Description
+     *
+     * Each connector has a unique identifier that is assigned when
+     * connection is established. This attribute stores that
+     * identifier.
+     *
+     * @endif
+     */
+    UniqueIdentifier connector_id;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief ports
+     *
+     * @section Description
+     *
+     * This field stores references to all ports connected by the
+     * target connector.
+     *
+     * @endif
+     */
+    PortServiceList ports;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief properties
+     *
+     * @section Description
+     *
+     * This attribute contains additional properties of the connection.
+     *
+     * @section Semantics
+     *
+     * This attribute provides implementations the opportunity to
+     * describe additional characteristics of a particular connection
+     * that are outside of the scope of this specification.
+     *
+     * @endif
+     */
+    NVList properties;
+  };
+  
+  typedef sequence<ConnectorProfile> ConnectorProfileList;
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief PortProfile
+   *
+   * @section Description
+   *
+   * A PortProfile describes a port of an RTC (referred to as the
+   * "target" RTC). This port is referred to as the "target" port.
+   * From this profile, other components and tools can obtain Port’s
+   * name, type, object reference, and so on.
+   *
+   * @endif
+   */
+  struct PortProfile
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief name
+     *
+     * @section Description
+     *
+     * This attribute contains the name of the target port.
+     *
+     * @section Semantics
+     *
+     * Ports owned by an RTC are distinguished by their
+     * names. Therefore, this name should be unique within the target
+     * RTC.
+     *
+     * @endif
+     */
+    string name;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief interfaces
+     *
+     * @section Description
+     *
+     * This attribute contains the name and polarity of each interface
+     * exposed by the target port.
+     *
+     * @endif
+     */
+    PortInterfaceProfileList interfaces;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief port_ref
+     *
+     * @section Description
+     *
+     * This attributes contains a reference to the target port.
+     *
+     * @endif
+     */
+    PortService port_ref;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief connector_profiles
+     *
+     * @section Description
+     *
+     * This attribute contains a collection of profiles describing the
+     * connections to the target port.
+     *
+     * @endif
+     */
+    ConnectorProfileList connector_profiles;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief owner
+     *
+     * @section Description
+     *
+     * This attribute contains a reference to the target RTC.
+     *
+     * @endif
+     */
+    RTObject owner;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief properties
+     *
+     * @section Description
+     *
+     * This attribute contains additional properties of the port.
+     *
+     * @section Semantics
+     *
+     * This attribute provides implementations the opportunity to
+     * describe additional characteristics of a particular port that
+     * are otherwise outside of the scope of this specification.
+     *
+     * @endif
+     */
+    NVList properties;
+  };
+  
+  typedef sequence<PortProfile> PortProfileList;
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief 
+   * @endif
+   */
+  struct ExecutionContextProfile
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief kind
+     *
+     * @section Description
+     *
+     * This attribute stores the context’s ExecutionKind.
+     *
+     * @endif
+     */
+    ExecutionKind kind;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief rate
+     *
+     * @section Description
+     *
+     * This attribute stores execution rate.
+     *
+     * @section Semantics
+     *
+     * If the execution kind is not PERIODIC, the value here may not
+     * be valid (and should be negative in that case). See
+     * ExecutionContext::get_rate (see Section 5.2.2.6.4) and set_rate
+     * (see Section 5.2.2.6.5) for more information.
+     *
+     * @endif
+     */
+    double rate;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief owner
+     *
+     * @section Description
+     *
+     * This attribute stores a reference to the RTC that owns the context.
+     *
+     * @endif
+     */
+    RTObject owner;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief participants
+     *
+     * @section Description
+     *
+     * This attribute stores references to the context’s participant RTCs.
+     *
+     * @endif
+     */
+    RTCList participants;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief properties
+     *
+     * @section Description
+     *
+     * This attribute contains additional properties of the execution
+     * context.
+     *
+     * @section Semantics
+     *
+     * This attribute provides implementations the opportunity to
+     * describe additional characteristics of a particular execution
+     * context that are outside the scope of this specification.
+     *
+     * @endif
+     */
+    NVList properties;
+  };
+  
+  typedef sequence<ExecutionContextProfile>
+  ExecutionContextProfileList;
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief FsmObject
+   *
+   * @section Description
+   *
+   * The FsmObject interface allows programs to send stimuli to a
+   * finite state machine, possibly causing it to change states.
+   *
+   * @endif
+   */
+  interface FsmObject
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief send_stimulus
+     *
+     * @section Description
+     *
+     * Send a stimulus to an FSM that realizes this interface.
+     *
+     * @section Semantics
+     *
+     * If the stimulus corresponds to any outgoing transition of the
+     * current state, that transition shall be taken and the state
+     * shall change. Any FSM participants associated with the exit of
+     * the current state, the transition to the new state, or the
+     * entry to the new state shall be invoked. If the stimulus does
+     * not correspond to any such transition, this operation shall
+     * succeed but have no effect.  
+     *
+     * If the given execution context is a non-nil reference to a
+     * context in which this FSM participates, the transition shall be
+     * executed in that context. If the argument is nil, the FSM shall
+     * choose an EVENT_DRIVEN context in which to execute the
+     * transition. If the argument is non-nil, but this FSM does not
+     * participate in the given context, this operation shall fail
+     * with * ReturnCode_t::BAD_PARAMETER.
+     *
+     * @section Constraints
+     *
+     * - The given execution context shall be of kind EVENT_DRIVEN.
+     *
+     * @endif
+     */
+    ReturnCode_t send_stimulus(in string message,
+			       in ExecutionContextHandle_t exec_handle);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief FsmBehaviorProfile
+   *
+   * @section Description
+   *
+   * FsmBehaviorProfile represents the association of an FSM
+   * participant with a transition, state entry, or state exit in an
+   * FSM.
+   *
+   * @section Semantics
+   *
+   * The assignment of identifiers to particular transitions, state
+   * entries, or state exits is implementation-dependent.
+   *
+   * @endif
+   */
+  struct FsmBehaviorProfile
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief action_component
+     *
+     * @section Description
+     *
+     * This attribute stores a reference to the FSM participant that
+     * is invoked when the containing Fsm receives a message
+     * distinguished by id.
+     *
+     * @endif
+     */
+    FsmParticipantAction action_component;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief id
+     *
+     * @section Description
+     *
+     * This attribute stores the message identifier.
+     *
+     * @endif
+     */
+    UniqueIdentifier id;
+  };
+  
+  typedef sequence<FsmBehaviorProfile> FsmBehaviorProfileList;
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief FsmProfile
+   *
+   * @section Description
+   *
+   * The FsmProfile describes the correspondence between an FSM and
+   * its contained FSM participants. This Profile is necessary for
+   * Stimulus Response Processing.
+   *
+   * @endif
+   */
+  struct FsmProfile
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief behavior_profiles
+     *
+     * @section Description
+     *
+     * This attribute lists the correspondences between an FSM and its
+     * contained FSM participants.
+     *
+     * @endif
+     */
+    FsmBehaviorProfileList behavior_profiles;
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief FsmService
+   *
+   * @section Description
+   *
+   * The FsmService interface defines operations necessary for
+   * Stimulus Response Processing as an SDO service.
+   *
+   * @endif
+   */
+  interface FsmService
+    : SDOPackage::SDOService
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_fsm_profile
+     *
+     * @section Description
+     *
+     * Get the current state of the FSM.
+     *
+     * @section Semantics
+     *
+     * Modifications to the object returned by this operation will not
+     * be reflected in the FSM until and unless set_fsm_profile is
+     * called.
+     *
+     * @endif
+     */
+    FsmProfile get_fsm_profile();
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief set_fsm_profile
+     *
+     * @section Description
+     *
+     * This operation will be used to modify the behavior of an FSM as
+     * described in Stimulus Response Processing.
+     *
+     * @endif
+     */
+    ReturnCode_t set_fsm_profile(in FsmProfile fsm_profile);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief ComponentProfile
+   *
+   * @section Description
+   *
+   * ComponentProfile represents the static state of an RTC that is
+   * referred to here as the "target" RTC.
+   *
+   * @endif
+   */
+  struct ComponentProfile
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief instance_name
+     *
+     * @section Description
+     *
+     * This attribute shall contain the name of the target RTC instance.
+     *
+     * @section Semantics
+     *
+     * The instance_name should be unique among RTC instances
+     * contained within the same containing component.
+     *
+     * @endif
+     */
+    string instance_name;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief type_name
+     *
+     * @section Description
+     *
+     * This attribute shall contain the name of the target RTC class.
+     *
+     * @section Semantics
+     *
+     * Each RTC class must have a name that is unique within an
+     * application.
+     *
+     * @endif
+     */
+    string type_name;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief description
+     *
+     * @section Description
+     *
+     * This attribute shall briefly describe the target RTC for the
+     * benefit of a human operator.
+     *
+     * @endif
+     */
+    string description;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief version
+     *
+     * @section Description
+     *
+     * This attribute shall contain the version number of the target
+     * RTC class.
+     *
+     * @section Semantics
+     *
+     * The format of the version number is outside of the scope of
+     * this specification.
+     *
+     * @endif
+     */
+    string version;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief vendor
+     *
+     * @section Description
+     *
+     * The name of the individual or organization that produced the
+     * target RTC class.
+     *
+     * @endif
+     */
+    string vendor;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief category
+     *
+     * @section Description
+     *
+     * This attribute contains the name of a "category" or group to
+     * which the target RTC belongs.
+     *
+     *
+     * @endif
+     */
+    string category;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief port_profiles
+     *
+     * @section Description
+     *
+     * This attribute contains a list of PortProfiles that describe
+     * the ports of the target RTC.
+     *
+     * @section Semantics
+     *
+     * There shall be a one-to-one correspondence between the members
+     * of this list and the ports of the target RTC.
+     *
+     *
+     * @endif
+     */
+    PortProfileList port_profiles;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief parent
+     *
+     * @section Description
+     *
+     * This attribute contains a reference to the RTC that contains
+     * the target RTC instance. If the target RTC instance is not
+     * owned by any other RTC, this field stores a nil reference.
+     *
+     * @endif
+     */
+    RTObject parent;
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief properties
+     *
+     * @section Description
+     *
+     * This attribute contains additional properties of the target RTC.
+     *
+     * @section Semantics
+     *
+     * This attribute provides implementations the opportunity to
+     * describe additional characteristics of a particular RTC that
+     * are otherwise outside of the scope of this specification.
+     *
+     * @endif
+     */
+    NVList properties;
+  };
+  
+  typedef sequence<ComponentProfile> ComponentProfileList;
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief PortService
+   *
+   * @section Description
+   *
+   * An instance of the PortService interface represents a port (i.e.,
+   * UML::Composite Structures::Ports::Port) of an RTC. It provides
+   * operations that allow it to be connected to and disconnected from
+   * other ports.
+   *
+   * @section Semantics
+   *
+   * A port service can support unidirectional or bidirectional
+   * communication.  A port service may allow for a service-oriented
+   * connection, in which other connected ports, invoke methods on
+   * it. It may also allow for a data-centric connection, in which
+   * data values are streamed in or out. In either case, the
+   * connection is described by an instance of
+   * ConnectorProfile. However, the behavioral contracts of such
+   * connections are dependent on the interfaces exposed by the ports
+   * and are not described normatively by this specification.
+   *
+   * @endif
+   */
+  interface PortService
+    : SDOPackage::SDOService
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_port_profile
+     *
+     * @section Description
+     *
+     * This operation returns the PortProfile of the PortService.
+     *
+     * @endif
+     */
+    PortProfile get_port_profile();
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_connector_profiles
+     *
+     * @section Description
+     *
+     * This operation returns a list of the ConnectorProfiles of the
+     * PortService.
+     *
+     * @endif
+     */ 
+    ConnectorProfileList get_connector_profiles();
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_connector_profiles
+     *
+     * @section Description
+     *
+     * This operation returns a list of the ConnectorProfiles of the
+     * PortService.
+     *
+     * @endif
+     */
+    ConnectorProfile get_connector_profile(in UniqueIdentifier connector_id);
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief connect
+     *
+     * @section Description
+     *
+     * This operation establishes connection between this port and the
+     * peer ports according to given ConnectionProfile.
+     *
+     * @section Semantics
+     *
+     * A ConnectorProfile has a sequence of port references. This port
+     * invokes the notify_connect operation of one of the ports
+     * included in the sequence. It follows that the notification of
+     * connection is propagated by the notify_connect operation with
+     * ConnectorProfile. This operation returns ConnectorProfile
+     * return value and returns ReturnCode_t as return codes.
+     *
+     * @endif
+     */
+    ReturnCode_t connect(inout ConnectorProfile connector_profile);
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief disconnect
+     *
+     * @section Description
+     *
+     * This operation destroys the connection between this port and
+     * its peer ports using the ID that was given when the connection
+     * was established.
+     *
+     * @section Semantics
+     *
+     * This port invokes the notify_disconnect operation of one of the
+     * ports included in the sequence of the ConnectorProfile stored
+     * when the connection was established. The notification of
+     * disconnection is propagated by the notify_disconnect operation.
+     *
+     * @endif
+     */
+    ReturnCode_t disconnect(in UniqueIdentifier connector_id);
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief disconnect_all
+     *
+     * @section Description
+     *
+     * This operation destroys all connection channels owned by the
+     * PortService.
+     *
+     * @endif
+     */
+    ReturnCode_t disconnect_all();
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief notify_connect
+     *
+     * @section Description
+     *
+     * This operation notifies this PortService of the connection
+     * between its corresponding port and the other ports and
+     * propagates the given ConnectionProfile.
+     *
+     * @section Semantics
+     *
+     * A ConnectorProfile has a sequence of port references. This
+     * PortService stores the ConnectorProfile and invokes the
+     * notify_connect operation of the next PortService in the
+     * sequence. As ports are added to the connector, PortService
+     * references are added to the ConnectorProfile and provided to
+     * the caller. In this way, notification of connection is
+     * propagated with the ConnectorProfile.
+     *
+     * @endif
+     */
+    ReturnCode_t notify_connect(inout ConnectorProfile connector_profile);
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief notify_disconnect
+     *
+     * @section Description
+     *
+     * This operation notifies a PortService of a disconnection
+     * between its corresponding port and the other ports. The
+     * disconnected connector is identified by the given ID, which was
+     * given when the connection was established.
+     *
+     * @section Semantics
+     *
+     * This port invokes the notify_disconnect operation of the next
+     * PortService in the sequence of the ConnectorProfile that was
+     * stored when the connection was established. As ports are
+     * disconnected, PortService references are removed from the
+     * ConnectorProfile. In this way, the notification of
+     * disconnection is propagated by the notify_disconnect operation.
+     *
+     * @endif
+     */
+    ReturnCode_t notify_disconnect(in UniqueIdentifier connector_id);
+  };
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief ExecutionContextService
+   *
+   * @section Description
+   *
+   * An ExecutionContextService exposes an ExecutionContext as an SDO
+   * service such that the context may be controlled remotely.
+   *
+   * @section Semantics
+   *
+   * Depending on the implementation, this interface may itself be an
+   * execution context (that is, it may be passed to the operations of
+   * ComponentAction) or it may represent a remote execution context
+   * that is not of type ExecutionContextService.  @endif
+   */
+  interface ExecutionContextService
+    : ExecutionContext, SDOPackage::SDOService
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_profile
+     *
+     * @section Description
+     *
+     * This operation provides a profile "descriptor" for the
+     * execution context.
+     *
+     * @endif
+     */
+    ExecutionContextProfile get_profile();
+  };
+  
+  typedef sequence<ExecutionContextService>
+  ExecutionContextServiceList;
+  
+  /*!
+   * @if jp
+   * @brief 
+   * @else
+   * @brief RTObject
+   *
+   * @section Description
+   *
+   * The RTObject interface defines the operations that all SDO-based
+   * RTCs must provide. It is required by the rtComponent stereotype.
+   *
+   * @endif
+   */
+  interface RTObject
+    : LightweightRTObject, SDOPackage::SDO
+  {
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_component_profile
+     *
+     * @section Description
+     *
+     * This operation returns the ComponentProfile of the RTC.
+     *
+     * @endif
+     */
+    ComponentProfile get_component_profile();
+    /*!
+     * @if jp
+     * @brief 
+     * @else
+     * @brief get_ports
+     *
+     * @section Description
+     *
+     * This operation returns a list of the RTCs ports.
+     *
+     * @endif
+     */
+    PortServiceList get_ports();
+  };
+};
+

Added: branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/SDOPackage.idl
===================================================================
--- branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/SDOPackage.idl	                        (rev 0)
+++ branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/SDOPackage.idl	2011-08-04 07:19:10 UTC (rev 436)
@@ -0,0 +1,294 @@
+//Platform Independent Model (PIM) and Platform Specific Model (PSM)
+//for Super Distributed Objects (SDO) Specification, v1.1 - OMG IDL Summary File
+//Object Management Group, Inc.
+//Copyright (c) 2003, Fraunhofer FOKUS
+//Copyright (c) 2003, Hitachi, Ltd.
+//The companies listed above have granted to the Object Management Group, Inc. 
+//(OMG) a nonexclusive, royalty-free, paid up, worldwide license to copy and 
+//distribute this document and to modify this document and distribute copies of 
+//the modified version. Each of the copyright holders listed above has agreed 
+//that no person shall be deemed to have infringed the copyright in the included 
+//material of any such copyright holder by reason of having used the 
+//specification set forth herein or having conformed any computer software to 
+//the specification. 
+//
+//This file contains OMG IDL from the Naming Service Specification, v1.2.
+//OMG regularly publishes a summary file that contains all the "code" parts of 
+//an OMG formal document. Every formal document line that is IDL, PIDL, or 
+//language code is included in the summary file. The reason for such a listing 
+//is to give readers an electronic version of the "code" so that they can 
+//extract pieces of it. Readers might want to test an example, include it in 
+//their own code, or use it for documentation purposes. Having the code lines 
+//available electronically means there is less likelihood of a transcription 
+//error. 
+//
+// ver 1.0  formal/2004-11-02
+// ver 1.1  (RTF report: dtc/2008-03-05)
+//
+//SDOPackage.idl
+
+#ifndef    _SDO_PACKAGE_IDL_
+#define    _SDO_PACKAGE_IDL_
+
+#ifdef TAO_IDL
+#include <orb.idl>
+#endif
+#ifdef USE_MONITORING
+#include <CosNotifyComm.idl>
+#endif
+#ifndef ORBIT2_IDL
+#define TypeCode CORBA::TypeCode
+#endif
+/** CORBA specific model for SDOs */
+
+#pragma prefix "org.omg"
+#define exception_body { string description; }
+
+module SDOPackage
+{
+  interface SDO;
+  interface SDOService;
+  interface SDOSystemElement;
+  interface Configuration;
+  interface Monitoring;
+  interface Organization;
+  
+  /** ------- Data Types -------*/
+  typedef sequence<string>       StringList;
+  typedef sequence<SDO>          SDOList;
+  typedef sequence<Organization> OrganizationList;
+  typedef string                 UniqueIdentifier;
+
+  struct NameValue
+  {
+    string name;
+    any value;
+  };
+
+  typedef sequence<NameValue>   NVList;
+
+  enum NumericType
+  {
+    SHORT_TYPE,
+    LONG_TYPE,
+    FLOAT_TYPE,
+    DOUBLE_TYPE
+  };
+
+  union Numeric switch (NumericType)
+  {
+  case SHORT_TYPE:  short short_value;
+  case LONG_TYPE: long long_value;
+  case FLOAT_TYPE: float float_value;
+  case DOUBLE_TYPE: double double_value;
+  };
+
+  struct EnumerationType
+  {
+    StringList enumerated_values;
+  };
+
+  struct RangeType
+  {
+    Numeric min;
+    Numeric max;
+    boolean min_inclusive;
+    boolean max_inclusive;
+  };
+
+  struct IntervalType
+  {
+    Numeric min;
+    Numeric max;
+    boolean min_inclusive;
+    boolean max_inclusive;
+    Numeric step;
+  };
+
+  enum ComplexDataType
+  {
+    ENUMERATION, RANGE, INTERVAL
+  };
+
+  union AllowedValues switch (ComplexDataType)
+  {
+  case ENUMERATION:    EnumerationType allowed_enum;
+  case INTERVAL:       IntervalType allowed_interval;
+  case RANGE:          RangeType   allowed_range;
+  };
+
+  struct Parameter
+  {
+    string         name;
+    TypeCode       type;
+    AllowedValues  allowed_values;
+  };
+
+  typedef sequence<Parameter> ParameterList;
+  struct OrganizationProperty
+  {
+    NVList properties;
+  };
+  enum DependencyType
+  {
+    OWN,
+    OWNED,
+    NO_DEPENDENCY
+  };
+
+  struct DeviceProfile
+  {
+    string device_type;
+    string manufacturer;
+    string model;
+    string version;
+    NVList properties;
+  };
+
+  struct ServiceProfile
+  {
+    string id;
+    string interface_type;
+    NVList properties;
+    SDOService service;
+  };
+
+  typedef sequence <ServiceProfile> ServiceProfileList;
+  struct ConfigurationSet
+  {
+    string id;
+    string description;
+    NVList configuration_data;
+  };
+
+  typedef sequence<ConfigurationSet> ConfigurationSetList;
+
+
+  /** ------- Exceptions -------*/
+  exception NotAvailable             exception_body;
+  exception InterfaceNotImplemented  exception_body;
+  exception InvalidParameter         exception_body;
+  exception InternalError            exception_body;
+  
+  /** ------- Interfaces -------*/
+  interface SDOSystemElement
+  {
+    OrganizationList get_owned_organizations()
+      raises (NotAvailable,InternalError);
+  };
+  interface SDO : SDOSystemElement
+  {
+    UniqueIdentifier get_sdo_id()
+      raises (NotAvailable, InternalError);
+    string get_sdo_type()
+      raises (NotAvailable, InternalError);
+    DeviceProfile get_device_profile ()
+      raises (NotAvailable, InternalError);
+    ServiceProfileList get_service_profiles ()
+      raises (NotAvailable, InternalError);
+    ServiceProfile get_service_profile (in UniqueIdentifier id)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    SDOService get_sdo_service (in UniqueIdentifier id) 
+      raises (InvalidParameter, NotAvailable, InternalError);
+    Configuration get_configuration ()
+      raises (InterfaceNotImplemented, NotAvailable, InternalError);
+    Monitoring get_monitoring ()
+      raises (InterfaceNotImplemented, NotAvailable, InternalError);
+    OrganizationList get_organizations ()
+      raises (NotAvailable, InternalError);
+    NVList get_status_list ()
+      raises (NotAvailable, InternalError);
+    any get_status (in string nme)
+      raises (InvalidParameter, NotAvailable, InternalError);
+  };
+
+
+  interface Configuration
+  {
+    boolean set_device_profile (in DeviceProfile dProfile)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean add_service_profile (in ServiceProfile sProfile)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean add_organization (in Organization organization_object)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean remove_service_profile (in UniqueIdentifier id)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean remove_organization (in UniqueIdentifier organization_id)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    ParameterList get_configuration_parameters ()
+      raises (NotAvailable, InternalError);
+    NVList get_configuration_parameter_values ()
+      raises (NotAvailable, InternalError);
+    any get_configuration_parameter_value (in string name)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean set_configuration_parameter (in string name,
+                                         in any value)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    ConfigurationSetList get_configuration_sets ()
+      raises (NotAvailable, InternalError);
+    ConfigurationSet get_configuration_set (in UniqueIdentifier config_id)
+      raises (NotAvailable, InternalError);
+    boolean set_configuration_set_values (in ConfigurationSet configuration_set)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    ConfigurationSet get_active_configuration_set ()
+      raises (NotAvailable, InternalError);
+    boolean add_configuration_set (in ConfigurationSet configuration_set)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean remove_configuration_set (in UniqueIdentifier config_id)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean activate_configuration_set (in UniqueIdentifier config_id)
+      raises (InvalidParameter, NotAvailable, InternalError);
+  };
+
+
+#ifdef USE_MONITORING
+  interface Monitoring : CosNotifyComm::StructuredPushConsumer,
+    CosNotifyComm::StructuredPushSupplier
+  {
+    any get_monitoring_parameter_value (in string name)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    ParameterList get_monitoring_parameters ()
+      raises (NotAvailable, InternalError);
+    NVList get_monitoring_parameter_values ()
+      raises (NotAvailable, InternalError);
+  };
+#else
+  interface Monitoring {};
+#endif
+
+  interface SDOService {};
+  
+  interface Organization
+  {
+    UniqueIdentifier get_organization_id ()
+      raises (InvalidParameter, NotAvailable, InternalError);
+    OrganizationProperty get_organization_property ()
+      raises (NotAvailable, InternalError);
+    any get_organization_property_value (in string name)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean add_organization_property (in OrganizationProperty organization_property)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean set_organization_property_value (in string name,
+                                             in any value)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean remove_organization_property ( in string name )
+      raises (InvalidParameter, NotAvailable, InternalError);
+    SDOSystemElement get_owner ()
+      raises (NotAvailable, InternalError);
+    boolean set_owner (in SDOSystemElement sdo) 
+      raises (InvalidParameter, NotAvailable, InternalError);
+    SDOList get_members ()
+      raises (NotAvailable, InternalError);
+    boolean set_members (in SDOList sdos) 
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean add_members ( in SDOList sdo_list)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    boolean remove_member (in UniqueIdentifier id)
+      raises (InvalidParameter, NotAvailable, InternalError);
+    DependencyType get_dependency()
+      raises (NotAvailable, InternalError);
+    boolean set_dependency (in DependencyType dependency) 
+      raises (NotAvailable, InternalError);
+  };
+};
+#endif //_SDO_PACKAGE_IDL_

Added: branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/test_ComponentObserverConsumer.py
===================================================================
--- branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/test_ComponentObserverConsumer.py	                        (rev 0)
+++ branches/RELENG_1_1/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/test/test_ComponentObserverConsumer.py	2011-08-04 07:19:10 UTC (rev 436)
@@ -0,0 +1,206 @@
+#!/usr/bin/env python
+# -*- coding: euc-jp -*-
+
+##
+# @file test_ComponentObserverConsumer.py
+# @brief test for ComponentObserverConsumer
+# @date $Date$
+# @author Shinji Kurihara
+#
+# Copyright (C) 2011
+#     Noriaki Ando
+#     Intelligent Systems Research Institute,
+#     National Institute of
+#         Advanced Industrial Science and Technology (AIST), Japan
+#     All rights reserved.
+#
+
+import sys
+sys.path.insert(1,"../")
+
+import unittest
+import time
+
+from omniORB import CORBA, PortableServer
+import RTC
+import OpenRTM, OpenRTM__POA
+import SDOPackage
+import OpenRTM_aist
+
+from ComponentObserverConsumer import *
+
+class ComponentObserver_i(OpenRTM__POA.ComponentObserver):
+  def __init__(self):
+    pass
+
+  def update_status(self, status_kind, hint):
+    print "update_status: ", status_kind, ", ", hint
+    return
+
+
+class MockRTC(OpenRTM_aist.RTObject_impl):
+  def __init__(self):
+    self._orb = CORBA.ORB_init()
+    self._poa = self._orb.resolve_initial_references("RootPOA")
+    OpenRTM_aist.RTObject_impl.__init__(self, orb=self._orb, poa=self._poa)
+    pass
+
+##
+# @if jp
+# @else
+# @endif
+#
+class TestComponentObserverConsumer(unittest.TestCase):
+  """
+  """
+
+  def setUp(self):
+    self._orb = CORBA.ORB_init(sys.argv)
+    self._poa = self._orb.resolve_initial_references("RootPOA")
+    self._poa._get_the_POAManager().activate()
+    self.coc = ComponentObserverConsumer()
+    servant_ = ComponentObserver_i()
+    mgr_ = OpenRTM_aist.Manager.instance()
+    oid_ = mgr_.getPOA().servant_to_id(servant_)
+    self._provider = mgr_.getPOA().id_to_reference(oid_)
+    self._mock = MockRTC()
+    self._properties = [OpenRTM_aist.NVUtil.newNV("heartbeat.enable","YES"),
+                        OpenRTM_aist.NVUtil.newNV("heartbeat.interval","0.1"),
+                        OpenRTM_aist.NVUtil.newNV("observed_status","ALL")]
+    self._sprof = SDOPackage.ServiceProfile("test_id", "interface_type",
+                                            self._properties, self._provider)
+    self.coc.init(self._mock, self._sprof)
+    return
+
+  def tearDown(self):
+    self.coc.finalize()
+    del self.coc
+    self._mock.exit()
+    time.sleep(0.1)
+    OpenRTM_aist.Manager.instance().shutdownManager()
+    return
+
+
+  def test_reinit(self):
+    self.assertEqual(self.coc.reinit(self._sprof), True)
+    return
+
+
+  def test_getProfile(self):
+    self.coc.getProfile()
+    return
+
+
+  def test_finalize(self):
+    self.coc.finalize()
+    return
+
+
+  def test_updateStatus(self):
+    self.coc.updateStatus(OpenRTM.COMPONENT_PROFILE, "update Component profile")
+    return
+
+
+  def test_toString(self):
+    self.assertEqual("COMPONENT_PROFILE",self.coc.toString(OpenRTM.COMPONENT_PROFILE))
+    self.assertEqual("RTC_STATUS",self.coc.toString(OpenRTM.RTC_STATUS))
+    self.assertEqual("EC_STATUS",self.coc.toString(OpenRTM.EC_STATUS))
+    self.assertEqual("PORT_PROFILE",self.coc.toString(OpenRTM.PORT_PROFILE))
+    self.assertEqual("CONFIGURATION",self.coc.toString(OpenRTM.CONFIGURATION))
+    self.assertEqual("HEARTBEAT",self.coc.toString(OpenRTM.HEARTBEAT))
+    return
+
+
+  def test_setListeners(self):
+    prop = OpenRTM_aist.Properties()
+    prop.setProperty("observed_status", 
+                     "component_profile, rtc_status, port_profile, \
+                      ec_status, port_profile , configuration")
+    self.coc.setListeners(prop)
+    return
+
+
+  def setfunc(self):
+    print "setfunc"
+    return
+
+  def unsetfunc(self):
+    print "unsetfunc"
+    return
+
+  def test_switchListeners(self):
+    self.coc.switchListeners(True, [True], 0, self.setfunc, self. unsetfunc)
+    self.coc.switchListeners(True, [False], 0, self.setfunc, self. unsetfunc)
+    self.coc.switchListeners(False, [True], 0, self.setfunc, self. unsetfunc)
+    self.coc.switchListeners(False, [False], 0, self.setfunc, self. unsetfunc)
+    return
+
+
+  def test_heartbeat(self):
+    self.coc.heartbeat()
+    return
+
+
+  def test_setHeartbeat(self):
+    prop = OpenRTM_aist.Properties()
+    prop.setProperty("heartbeat.enable","NO")
+    prop.setProperty("heartbeat.interval","1.0")
+    self.coc.setHeartbeat(prop)
+    prop = OpenRTM_aist.Properties()
+    prop.setProperty("heartbeat.enable","YES")
+    prop.setProperty("heartbeat.interval","0.01")
+    self.coc.setHeartbeat(prop)
+    prop = OpenRTM_aist.Properties()
+    prop.setProperty("heartbeat.enable","YES")
+    self.coc.setHeartbeat(prop)
+    return
+
+
+  def test_unsetHeartbeat(self):
+    self.coc.unsetHeartbeat()
+    return
+
+
+  def test_setComponentStatusListeners(self):
+    self.coc.setComponentStatusListeners()
+    return
+
+  
+  def test_unsetComponentStatusListeners(self):
+    self.coc.unsetComponentStatusListeners()
+    return
+
+
+  def test_setPortProfileListeners(self):
+    self.coc.setPortProfileListeners()
+    return
+
+
+  def test_unsetPortProfileListeners(self):
+    self.coc.unsetPortProfileListeners()
+    return
+
+
+  def test_setExecutionContextListeners(self):
+    self.coc.setExecutionContextListeners()
+    return
+
+
+  def test_unsetExecutionContextListeners(self):
+    self.coc.unsetExecutionContextListeners()
+    return
+
+
+  def test_setConfigurationListeners(self):
+    self.coc.setConfigurationListeners()
+    return
+
+
+  def test_unsetConfigurationListeners(self):
+    self.coc.unsetConfigurationListeners()
+    return
+
+
+############### test #################
+if __name__ == '__main__':
+        unittest.main()



openrtm-commit メーリングリストの案内