[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 メーリングリストの案内