[openrtm-commit:00576] r636 - in trunk: . jp.go.aist.rtm.RTC jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC

openrtm @ openrtm.org openrtm @ openrtm.org
2012年 1月 12日 (木) 15:04:45 JST


Author: fsi-katami
Date: 2012-01-12 15:04:45 +0900 (Thu, 12 Jan 2012)
New Revision: 636

Modified:
   trunk/
   trunk/jp.go.aist.rtm.RTC/
   trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/Config.java
   trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigAdmin.java
   trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigBase.java
   trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/RTObject_impl.java
Log:
The callback of the configuration is added. refs #2267  


Property changes on: trunk
___________________________________________________________________
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/ForFileNameservice:623-628
/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
   + /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/ForFileNameservice:623-628
/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


Property changes on: trunk/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/ForFileNameservice/jp.go.aist.rtm.RTC:623-628
/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
   + /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/ForFileNameservice/jp.go.aist.rtm.RTC:623-628
/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

Modified: trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/Config.java
===================================================================
--- trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/Config.java	2012-01-12 05:53:12 UTC (rev 635)
+++ trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/Config.java	2012-01-12 06:04:45 UTC (rev 636)
@@ -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: trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigAdmin.java
===================================================================
--- trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigAdmin.java	2012-01-12 05:53:12 UTC (rev 635)
+++ trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigAdmin.java	2012-01-12 06:04:45 UTC (rev 636)
@@ -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();
     }
@@ -370,10 +367,47 @@
         } 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");
         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 +438,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 +474,7 @@
      *
      */
     public void update() {
+        m_changedParam.clear();
         if( m_changed && m_active ) {
             update(m_activeId);
             m_changed = false;
@@ -476,6 +515,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 +523,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 +574,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 +1030,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 +1437,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 +1458,7 @@
      * 新規追加分コンフィギュレーションセット
      */
     private Vector<String> m_newConfig = new Vector<String>();
+    private ArrayList<String> m_changedParam = new ArrayList<String>();
 
     private ConfigurationListeners m_listeners = new ConfigurationListeners();
 /*

Modified: trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigBase.java
===================================================================
--- trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigBase.java	2012-01-12 05:53:12 UTC (rev 635)
+++ trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigBase.java	2012-01-12 06:04:45 UTC (rev 636)
@@ -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: trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/RTObject_impl.java
===================================================================
--- trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/RTObject_impl.java	2012-01-12 05:53:12 UTC (rev 635)
+++ trunk/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/RTObject_impl.java	2012-01-12 06:04:45 UTC (rev 636)
@@ -2626,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}
      * 



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