[openrtm-commit:00572] r632 - branches/work/ConfigurationCallback/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC
openrtm @ openrtm.org
openrtm @ openrtm.org
2012年 1月 11日 (水) 11:01:17 JST
Author: fsi-katami
Date: 2012-01-11 11:01:17 +0900 (Wed, 11 Jan 2012)
New Revision: 632
Modified:
branches/work/ConfigurationCallback/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/Config.java
branches/work/ConfigurationCallback/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigAdmin.java
branches/work/ConfigurationCallback/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigBase.java
Log:
The callback of the configuration is added. refs #2267
Modified: branches/work/ConfigurationCallback/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/Config.java
===================================================================
--- branches/work/ConfigurationCallback/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/Config.java 2012-01-11 01:52:11 UTC (rev 631)
+++ branches/work/ConfigurationCallback/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/Config.java 2012-01-11 02:01:17 UTC (rev 632)
@@ -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/work/ConfigurationCallback/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigAdmin.java
===================================================================
--- branches/work/ConfigurationCallback/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigAdmin.java 2012-01-11 01:52:11 UTC (rev 631)
+++ branches/work/ConfigurationCallback/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigAdmin.java 2012-01-11 02:01:17 UTC (rev 632)
@@ -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)}
@@ -408,8 +442,8 @@
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));
+ if( prop.hasKey(m_params.get(intIdx).name) != null ) {
+ m_params.get(intIdx).update(prop.getProperty(m_params.get(intIdx).name));
onUpdate(config_set);
}
}
@@ -1382,7 +1416,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
*/
Modified: branches/work/ConfigurationCallback/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigBase.java
===================================================================
--- branches/work/ConfigurationCallback/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigBase.java 2012-01-11 01:52:11 UTC (rev 631)
+++ branches/work/ConfigurationCallback/jp.go.aist.rtm.RTC/src/jp/go/aist/rtm/RTC/ConfigBase.java 2012-01-11 02:01:17 UTC (rev 632)
@@ -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;
}
openrtm-commit メーリングリストの案内