[openrtm-commit:01627] r730 - in branches/RELENG_1_1: . jp.go.aist.rtm.RTC jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC

openrtm @ openrtm.org openrtm @ openrtm.org
2015年 10月 28日 (水) 10:05:37 JST


Author: kawauchi
Date: 2015-10-28 10:05:37 +0900 (Wed, 28 Oct 2015)
New Revision: 730

Modified:
   branches/RELENG_1_1/
   branches/RELENG_1_1/buildRTC.sh
   branches/RELENG_1_1/jp.go.aist.rtm.RTC/
   branches/RELENG_1_1/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/Config.java
   branches/RELENG_1_1/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigAdmin.java
   branches/RELENG_1_1/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigBase.java
   branches/RELENG_1_1/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/RTObject_impl.java
Log:
[compat,merge] r630,633,636,637 merged from trunk.


Property changes on: branches/RELENG_1_1
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/RELENG_1_0_0:60-401
/branches/work/ForComponentActionListener:521-522
/branches/work/ForComponentObserverConsumer:534-543
/branches/work/ForConfigurationListener:524-526
/branches/work/ForLogFormat:518-519
/branches/work/ForPortConnectListener:528-532
/branches/work/ForSDOServiceAdminClass:505-507
/branches/work/SourceSharing:591-603
/branches/work/ToGetProperties:545-548
/branches/work/ToIFR_ID:509-514
/trunk:622
   + /branches/RELENG_1_0_0:60-401
/branches/work/ConfigurationCallback:631-635
/branches/work/ForComponentActionListener:521-522
/branches/work/ForComponentObserverConsumer:534-543
/branches/work/ForConfigurationListener:524-526
/branches/work/ForLogFormat:518-519
/branches/work/ForPortConnectListener:528-532
/branches/work/ForSDOServiceAdminClass:505-507
/branches/work/SourceSharing:591-603
/branches/work/ToGetProperties:545-548
/branches/work/ToIFR_ID:509-514
/trunk:622,630-637

Modified: branches/RELENG_1_1/buildRTC.sh
===================================================================
--- branches/RELENG_1_1/buildRTC.sh	2015-10-28 00:51:37 UTC (rev 729)
+++ branches/RELENG_1_1/buildRTC.sh	2015-10-28 01:05:37 UTC (rev 730)
@@ -18,7 +18,7 @@
 #
 cd jp.go.aist.rtm.RTC
 #ant buildAllLinux -lib $ECLIPSE_HOME/plugins/net.sf.ant4eclipse.plugin_0.5.0.rc1/lib/
-ant $var_for -lib $ECLIPSE_HOME/plugins/net.sf.ant4eclipse.plugin_0.5.0.rc1/lib/
+ant $var_for -lib $ECLIPSE_HOME/plugins/net.sf.ant4eclipse.plugin_0.5.0.rc1/lib/ -lib $ECLIPSE_HOME/plugins/org.apache.ant_1.7.0.v200803061910/lib
 if [ $? -ne 0 ];
 then 
     exit 1


Property changes on: branches/RELENG_1_1/jp.go.aist.rtm.RTC
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/RELENG_1_0/jp.go.aist.rtm.RTC:408-498
/branches/RELENG_1_0_0/jp.go.aist.rtm.RTC:60-401
/branches/work/ForComponentActionListener/jp.go.aist.rtm.RTC:521-522
/branches/work/ForComponentObserverConsumer/jp.go.aist.rtm.RTC:534-543
/branches/work/ForConfigurationListener/jp.go.aist.rtm.RTC:524-526
/branches/work/ForLogFormat/jp.go.aist.rtm.RTC:518-519
/branches/work/ForPortConnectListener/jp.go.aist.rtm.RTC:528-532
/branches/work/ForSDOServiceAdminClass/jp.go.aist.rtm.RTC:505-507
/branches/work/SourceSharing/jp.go.aist.rtm.RTC:591-603
/branches/work/ToGetProperties/jp.go.aist.rtm.RTC:545-548
/branches/work/ToIFR_ID/jp.go.aist.rtm.RTC:509-514
/trunk/jp.go.aist.rtm.RTC:622
   + /branches/RELENG_1_0/jp.go.aist.rtm.RTC:408-498
/branches/RELENG_1_0_0/jp.go.aist.rtm.RTC:60-401
/branches/work/ConfigurationCallback/jp.go.aist.rtm.RTC:631-635
/branches/work/ForComponentActionListener/jp.go.aist.rtm.RTC:521-522
/branches/work/ForComponentObserverConsumer/jp.go.aist.rtm.RTC:534-543
/branches/work/ForConfigurationListener/jp.go.aist.rtm.RTC:524-526
/branches/work/ForLogFormat/jp.go.aist.rtm.RTC:518-519
/branches/work/ForPortConnectListener/jp.go.aist.rtm.RTC:528-532
/branches/work/ForSDOServiceAdminClass/jp.go.aist.rtm.RTC:505-507
/branches/work/SourceSharing/jp.go.aist.rtm.RTC:591-603
/branches/work/ToGetProperties/jp.go.aist.rtm.RTC:545-548
/branches/work/ToIFR_ID/jp.go.aist.rtm.RTC:509-514
/trunk/jp.go.aist.rtm.RTC:622,630-637

Modified: branches/RELENG_1_1/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/Config.java
===================================================================
--- branches/RELENG_1_1/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/Config.java	2015-10-28 00:51:37 UTC (rev 729)
+++ branches/RELENG_1_1/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/Config.java	2015-10-28 01:05:37 UTC (rev 730)
@@ -45,8 +45,14 @@
      * 
      */
     public boolean update(final String val){
+        if (string_value.equals(val)) {
+             return true; 
+        }
+        string_value = val;
+        // value changed
         try {
             m_var.stringFrom(val);
+            notifyUpdate(name,val);
             return true;
         } catch (Exception ex) {
             try {
@@ -54,6 +60,7 @@
             } catch (Exception e) {
             }
         }
+        notifyUpdate(name,val);
         return false;
     }
 

Modified: branches/RELENG_1_1/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigAdmin.java
===================================================================
--- branches/RELENG_1_1/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigAdmin.java	2015-10-28 00:51:37 UTC (rev 729)
+++ branches/RELENG_1_1/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigAdmin.java	2015-10-28 01:05:37 UTC (rev 730)
@@ -1,21 +1,16 @@
 package jp.go.aist.rtm.RTC;
 
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.Vector;
 
-import jp.go.aist.rtm.RTC.util.OnActivateSetCallbackFunc;
+import jp.go.aist.rtm.RTC.util.OnActivateSetCallbackFunc;
+import jp.go.aist.rtm.RTC.util.OnAddConfigurationAddCallbackFunc;
+import jp.go.aist.rtm.RTC.util.OnRemoveConfigurationSetCallbackFunc;
+import jp.go.aist.rtm.RTC.util.OnSetConfigurationSetCallbackFunc;
+import jp.go.aist.rtm.RTC.util.OnUpdateCallbackFunc;
+import jp.go.aist.rtm.RTC.util.OnUpdateParamCallbackFunc;
 
-import jp.go.aist.rtm.RTC.util.OnAddConfigurationAddCallbackFunc;
-
-import jp.go.aist.rtm.RTC.util.OnRemoveConfigurationSetCallbackFunc;
-
-import jp.go.aist.rtm.RTC.util.OnSetConfigurationSetCallbackFunc;
-
-import jp.go.aist.rtm.RTC.util.OnUpdateCallbackFunc;
-
-import jp.go.aist.rtm.RTC.util.OnUpdateParamCallbackFunc;
-
-
 import jp.go.aist.rtm.RTC.util.Properties;
 import jp.go.aist.rtm.RTC.util.ValueHolder;
 
@@ -320,7 +315,9 @@
      */
     public void destruct() {
         for(int intIdx=0; intIdx<m_params.size(); ++intIdx) {
-            if( m_params.elementAt(intIdx) != null ) m_params.setElementAt(null, intIdx);
+            if( m_params.get(intIdx) != null ) {
+                m_params.set(intIdx,null);
+            }
         }
         m_params.clear();
     }
@@ -345,10 +342,14 @@
      * <p>
      * {@.ja コンフィギュレーションパラメータと変数をバインドする。
      * 指定した名称のコンフィギュレーションパラメータが既に存在する場合は
-     * falseを返す。}
+     * falseを返す。
+     * なお、このメンバ関数が呼ばれた後、現在アクティブなコンフィギュレー
+     * ションセットの値が変数にセットされる。}
      * {@.en Bind configuration parameter to its variable.
      * Return false, if configuration parameter of specified name has already 
-     * existed.}
+     * existed.
+     * After calling this function, configuration variable would be
+     * updated by the active configuration parameter.}
      *
      * @param param_name
      *   {@.ja 設定対象パラメータ名}
@@ -370,10 +371,48 @@
         } catch(Exception ex) {
             return false;
         }
-        m_params.add(new Config(param_name, var, def_val));
+        Config config = new Config(param_name, var, def_val);
+        m_params.add(config);
+        config.setCallback(this, "onUpdateParam");
+        update(getActiveId(), param_name);
         return true;
     }
+    /**
+     * {@.ja コンフィギュレーションパラメータの解除}
+     * {@.en Unbinding configuration parameters}
+     * <p>
+     * {@.ja コンフィギュレーションパラメータと変数のバインドを解除する。
+     * 指定した名称のコンフィギュレーションパラメータが存在しない場合は
+     * falseを返す。}
+     * {@.en Unbind configuration parameter from its variable. It returns
+     * false, if configuration parameter of specified name has already
+     * existed.}
+     *
+     * @param param_name 
+     *   {@.ja コンフィギュレーションパラメータ名}
+     *   {@.en Configuration parameter name}
+     * @return 
+     *   {@.ja 設定結果(設定成功:true,設定失敗:false)}
+     *   {@.en Setup result (Successful:true, Failed:false)}
+     */
+    public boolean unbindParameter(final String param_name){
+        Iterator<ConfigBase> iterator = m_params.iterator();
+        while (iterator.hasNext()) {
+            ConfigBase cb = iterator.next();
+            if( new find_conf(param_name).equalof(cb) ) {
+                m_params.remove(cb);
+                // configsets
+                final Vector<Properties> leaf = m_configsets.getLeaf();
 
+                for (int ic=0; ic < leaf.size(); ++ic) {
+                    Properties p = leaf.get(ic).removeNode(param_name);
+                }
+                return true;
+            }
+        }
+        return false;
+    }
+
     /**
      * {@.ja コンフィギュレーションパラメータの更新(ID指定)。}
      * {@.en Update configuration parameter (By ID)}
@@ -404,15 +443,19 @@
      * 
      */
     public void update(final String config_set) {
-        if( m_configsets.hasKey(config_set) == null) return;
+        if( m_configsets.hasKey(config_set) == null) {
+            return;
+        }
+        // clear changed parameter list
+        m_changedParam.clear();
         Properties prop = new Properties(m_configsets.getNode(config_set));
 
         for(int intIdx=0; intIdx<m_params.size(); ++intIdx) {
-            if( prop.hasKey(m_params.elementAt(intIdx).name) != null ) {
-                m_params.elementAt(intIdx).update(prop.getProperty(m_params.elementAt(intIdx).name));
-                onUpdate(config_set);
+            if( prop.hasKey(m_params.get(intIdx).name) != null ) {
+                m_params.get(intIdx).update(prop.getProperty(m_params.get(intIdx).name));
             }
         }
+        onUpdate(config_set);
     }
 
     /**
@@ -436,6 +479,7 @@
      *
      */
     public void update() {
+        m_changedParam.clear();
         if( m_changed && m_active ) {
             update(m_activeId);
             m_changed = false;
@@ -476,6 +520,7 @@
      * 
      */
     public void update(final String config_set, final String config_param) {
+        m_changedParam.clear();
         String key = config_set + "." + config_param;
         
         Iterator<ConfigBase> iterator = m_params.iterator();
@@ -483,7 +528,6 @@
             ConfigBase configbase = iterator.next();
             if( new find_conf(config_param).equalof(configbase) ) {
                 configbase.update(m_configsets.getProperty(key));
-                onUpdateParam(config_set, config_param);
                 return;
             }
         }
@@ -535,6 +579,21 @@
     public boolean isChanged() {
         return m_changed;
     }
+    /**
+     * {@.ja 変更されたパラメータのリスト}
+     * {@.en Changed parameters list}
+     * <p>
+     * {@.ja コンフィギュレーションパラメータのうち変更されたもののリストを返す。}
+     *
+     * {@.en This operation returns parameter list which are changed.}
+     * @return 
+     *   {@.ja 変更されたパラメータ名リスト}
+     *   {@.en Changed parameters list}
+     *
+     */
+    public Vector<String> changedParameters() { 
+        return new Vector<String>(m_changedParam); 
+    }
     
     /**
      * {@.ja アクティブ・コンフィギュレーションセットIDの取得。}
@@ -976,6 +1035,7 @@
      *
      */
     public void onUpdateParam(String config_set, String config_param) {
+        m_changedParam.add(config_param);
         m_listeners.configparam_[ConfigurationParamListenerType.ON_UPDATE_CONFIG_PARAM].notify(config_set, config_param);
     }
 
@@ -1382,7 +1442,8 @@
      * バインド対象パラメータ・リスト
      */
 
-    private Vector<ConfigBase> m_params = new Vector<ConfigBase>();
+    //private Vector<ConfigBase> m_params = new Vector<ConfigBase>();
+    private ArrayList<ConfigBase> m_params = new ArrayList<ConfigBase>();
     /**
      * アクティブ・コンフィギュレーションセットID
      */
@@ -1402,6 +1463,7 @@
      * 新規追加分コンフィギュレーションセット
      */
     private Vector<String> m_newConfig = new Vector<String>();
+    private ArrayList<String> m_changedParam = new ArrayList<String>();
 
     private ConfigurationListeners m_listeners = new ConfigurationListeners();
 /*

Modified: branches/RELENG_1_1/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigBase.java
===================================================================
--- branches/RELENG_1_1/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigBase.java	2015-10-28 00:51:37 UTC (rev 729)
+++ branches/RELENG_1_1/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigBase.java	2015-10-28 01:05:37 UTC (rev 730)
@@ -1,5 +1,6 @@
 package jp.go.aist.rtm.RTC;
 
+import java.lang.reflect.Method;
   /**
    * {@.ja コンフィギュレーション情報保持用クラスの基底抽象クラス。}
    * {@.en This is the abstract interface class to hold various configuration 
@@ -42,6 +43,9 @@
     public ConfigBase(final String name_, final String def_val) {
         this.name = name_;
         this.default_value = def_val;
+        string_value = new String();
+        m_admin = null;
+        m_callback_name = null;
     }
 
     /**
@@ -66,6 +70,41 @@
     public abstract boolean update(final String val);
 
     /**
+     * {@.ja コールバックのセット}
+     * {@.en Setting callback}
+     * <p>
+     * {@.ja 変数変更時にコールされるコールバック関数をセットする.}
+     * {@.en This member function sets callback function which is called
+     * when variable is changed.}
+     *
+     */
+    public void setCallback(ConfigAdmin cadmin, String cbf) {
+        m_admin = cadmin;
+        m_callback_name = cbf;
+    }
+
+    /**
+     * {@.ja 変数変更を知らせるオブザーバ関数}
+     * {@.en Observer function to notify variable changed}
+     * <p>
+     * {@.ja 変数変更を知らせるオブザーバ関数.}
+     * {@.en This function notifies variable has been changed.}
+     *
+     */
+    public void notifyUpdate(final String key, final String val){
+        try {
+            Class clazz = m_admin.getClass();
+
+            Method method = clazz.getMethod(m_callback_name,
+                                            String.class,String.class);
+
+            method.invoke(m_admin, key, val);
+        }
+        catch(java.lang.Exception e){
+        }
+    }
+    
+    /**
      * {@.ja コンフィギュレーション名}
      * {@.en Configuration name}
      */
@@ -75,4 +114,19 @@
      * {@.en Default value in string format}
      */
     public final String default_value;
+    /**
+     * {@.ja 文字列形式の現在値}
+     * {@.en Current value in string format}
+     */
+    protected String string_value;
+    /**
+     * {@.ja ConfigAdminオブジェクトへのポインタ}
+     * {@.en A pointer to the ConfigAdmin object}
+     */
+    protected ConfigAdmin m_admin;
+    /**
+     * {@.ja コールバックのメンバ関数名}
+     * {@.en A member function pointer to the callback function name.}
+     */
+    protected String m_callback_name;
 }

Modified: branches/RELENG_1_1/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/RTObject_impl.java
===================================================================
--- branches/RELENG_1_1/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/RTObject_impl.java	2015-10-28 00:51:37 UTC (rev 729)
+++ branches/RELENG_1_1/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/RTObject_impl.java	2015-10-28 01:05:37 UTC (rev 730)
@@ -677,10 +677,10 @@
 
         ReturnCode_t ret;
         ret = on_initialize();
+        m_created = false;
         if( ret!=ReturnCode_t.RTC_OK ) {
             return ret;
         }
-        m_created = false;
 
         // -- entering alive state --
         // at least one EC must be attached
@@ -1281,8 +1281,19 @@
         ReturnCode_t ret = ReturnCode_t.RTC_ERROR;
         try {
             preOnInitialize(0);
+            rtcout.println(Logbuf.DEBUG, "Calling onInitialize().");
             ret = onInitialize();
+            if (ret == ReturnCode_t.RTC_OK) {
+                rtcout.println(Logbuf.ERROR,
+                        "onInitialize() returns an ERROR ("
+                        +ret
+                        +")");
+            }
+            else {
+                rtcout.println(Logbuf.DEBUG,"onInitialize() succeeded.");
+            }
         } catch(Exception ex) {
+            rtcout.println(Logbuf.ERROR,"onInitialize() raised an exception.");
             ret =  ReturnCode_t.RTC_ERROR;
         }
         String active_set;
@@ -1290,10 +1301,22 @@
             = m_properties.getProperty("configuration.active_config",
                                             "default");
         if (m_configsets.haveConfig(active_set)) {
+            rtcout.println(Logbuf.DEBUG, "Active configuration set: " 
+                                            + active_set 
+                                            + "exists." );
+            m_configsets.activateConfigurationSet(active_set);
             m_configsets.update(active_set);
+            rtcout.println(Logbuf.INFO, "Initial active configuration set is " 
+                                            + active_set +" .");
         }
         else {
+            rtcout.println(Logbuf.DEBUG, "Active configuration set: " 
+                                            + active_set 
+                                            + "does not exists." );
+            m_configsets.activateConfigurationSet("default");
             m_configsets.update("default");
+            rtcout.println(Logbuf.INFO, 
+                        "Initial active configuration set is default-set.");
         }
         postOnInitialize(0, ret);
         return ret;
@@ -2603,6 +2626,69 @@
     }
     
     /**
+     * {@.ja コンフィギュレーションサービスを取得する}
+     * {@.en Getting configuration service}
+     * <p>
+     * {@.ja コンフィギュレーションサービスオブジェクトを取得する。このサービ
+     * スオブジェクトを利用して、コンフィギュレーションパラメータの操作
+     * を行うことができる。主な操作としては、
+     *
+     * - unbindParameter(): パラメータのアンバインド
+     * - update(): パラメータの更新
+     * - update(set_name): 特定のセットの更新
+     * - update(set_name, param_name): 特定のセットのパラメータの更新
+     * - isExist(): パラメータの存在確認
+     * - isChanged(): パラメータが変更されたかの確認
+     * - changedParameters(): 変更されたパラメータのリスト
+     * - getActiveId(): アクティブセット名の取得
+     * - haveConfig(config_id): コンフィグセットを持っているかどうか
+     * - getConfigurationSets(): 全コンフィギュレーションセットの取得
+     * - getConfigurationSet(set_id): 特定セットを取得
+     *
+     * コールバック関連 
+     * - addConfigurationParamListener(): リスナの追加
+     * - removeConfigurationParamListener(): リスナの削除
+     * - addConfigurationSetListener(): リスナの追加
+     * - removeConfigurationSetListener(): リスナの削除
+     * - addConfigurationSetNameListener(): リスナの追加
+     * - removeConfigurationSetNameListener(): リスナの削除
+     *
+     * 詳細はConfigAdminクラスリファレンスを参照のこと。}
+     * {@.en This operation returns configuration service object. By using
+     * this service, user can manipulate configuration
+     * parameters. Mainly the following operations are supported.
+     *
+     * - unbindParameter(): Unbinding parameters
+     * - update(): Updateing parameters
+     * - update(set_name): Updating a specific configuration set
+     * - update(set_name, param_name): Updating specific parameter in a set
+     * - isExist(): Checking existence of a parameter
+     * - isChanged(): Check if a parameter was updated
+     * - changedParameters(): Getting changed parameter list
+     * - getActiveId(): Getting active configuration set name
+     * - haveConfig(config_id): Checking if having a specified configuration set
+     * - getConfigurationSets(): getting all the configuration sets
+     * - getConfigurationSet(set_id): Getting a configuration set
+     *
+     * Callback related member functions
+     * - addConfigurationParamListener(): Adding listener
+     * - removeConfigurationParamListener(): Removing listener
+     * - addConfigurationSetListener(): Adding listener
+     * - removeConfigurationSetListener(): Removing listener
+     * - addConfigurationSetNameListener(): Adding listener
+     * - removeConfigurationSetNameListener(): Removing listener
+     *
+     * See details in the ConfigAdmin class reference}
+     *
+     * @return 
+     *   {@.ja ConfigAdmin object}
+     *   {@.en ConfigAdmin object}
+     *
+     */
+    public ConfigAdmin getConfigService() { 
+        return m_configsets; 
+    }
+    /**
      * {@.ja コンフィギュレーションパラメータの更新。}
      * {@.en Update configuration parameters}
      * 



More information about the openrtm-commit mailing list