DoubleUserDefinedDiscreteLinearDynamicSystem.java
/*
* Created on 2008/07/01
* Copyright (C) 2008 Koga Laboratory. All rights reserved.
*
*/
package org.mklab.tool.control.system.discrete;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Set;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.tool.control.DoubleLinearSystem;
import org.mklab.tool.control.system.ParameterUtil;
import org.mklab.tool.control.system.UserDefinedSystem;
import org.mklab.tool.control.system.parameter.NoSuchParameterException;
import org.mklab.tool.control.system.parameter.ParameterException;
/**
* ユーザ定義離散時間線形システムを表すクラスです。
*
* @author koga
* @version $Revision: 1.6 $, 2008/07/01
*/
public class DoubleUserDefinedDiscreteLinearDynamicSystem extends DoubleDiscreteLinearDynamicSystem implements UserDefinedSystem {
/** システムを定義したクラス */
private Class<?> systemKlass;
/** システムの初期化処理を定義したメソッド */
private Method initializeFunction;
/** システムの更新処理を定義したメソッド */
private Method updateFunction;
/**
* 新しく生成された<code>UserDefinedContinuousLinearDynamicSystem</code>オブジェクトを初期化します。
*/
public DoubleUserDefinedDiscreteLinearDynamicSystem() {
super();
}
/**
* 新しく生成された<code>UserDefinedContinuousLinearDynamicSystem</code>オブジェクトを初期化します。
*
* @param sys システム
*/
public DoubleUserDefinedDiscreteLinearDynamicSystem(DoubleLinearSystem sys) {
super(sys);
}
/**
* 新しく生成された<code>UserDefinedContinuousLinearDynamicSystem</code>オブジェクトを初期化します。
*
* @param A A行列
* @param B B行列
* @param C C行列
* @param D D行列
*/
public DoubleUserDefinedDiscreteLinearDynamicSystem(DoubleMatrix A, DoubleMatrix B, DoubleMatrix C, DoubleMatrix D) {
super(A, B, C, D);
}
/**
* @see org.mklab.tool.control.system.UserDefinedSystem#getParameterValue(java.lang.String)
*/
public Object getParameterValue(String name) throws NoSuchParameterException {
return ParameterUtil.getValue(this.systemKlass, name);
}
/**
* @see org.mklab.tool.control.system.UserDefinedSystem#getParameterNames()
*/
public Set<String> getParameterNames() throws NoSuchParameterException {
return ParameterUtil.getParameterNames(this.systemKlass);
}
/**
* @see org.mklab.tool.control.system.UserDefinedSystem#setParameterValue(java.lang.String, java.lang.Object)
*/
public void setParameterValue(String name, Object value) throws NoSuchParameterException {
ParameterUtil.setValue(this.systemKlass, name, value);
}
/**
* @see org.mklab.tool.control.system.UserDefinedSystem#containParameter(java.lang.String)
*/
public boolean containParameter(String name) {
return ParameterUtil.contains(this.systemKlass, name);
}
/**
* @see org.mklab.tool.control.system.UserDefinedSystem#setSystemClass(java.lang.Class)
*/
public void setSystemClass(final Class<?> klass) {
this.systemKlass = klass;
}
/**
* @see org.mklab.tool.control.system.UserDefinedSystem#getSystemClass()
*/
public Class<?> getSystemClass() {
return this.systemKlass;
}
/**
* @see org.mklab.tool.control.system.UserDefinedSystem#setInitializeFunction(java.lang.reflect.Method)
*/
public void setInitializeFunction(final Method method) throws SecurityException {
this.initializeFunction = method;
this.initializeFunction.setAccessible(true);
}
/**
* @see org.mklab.tool.control.system.UserDefinedSystem#setUpdateFunction(java.lang.reflect.Method)
*/
public void setUpdateFunction(final Method method) throws SecurityException {
this.updateFunction = method;
this.updateFunction.setAccessible(true);
}
/**
* @see org.mklab.tool.control.system.UserDefinedSystem#update()
*/
public void update() throws ParameterException {
try {
this.updateFunction.invoke(null);
} catch (IllegalArgumentException e) {
throw new ParameterException(e);
} catch (IllegalAccessException e) {
throw new ParameterException(e);
} catch (InvocationTargetException e) {
throw new ParameterException(e.getTargetException());
} catch (Exception e) {
throw new ParameterException(e);
}
}
}