233 lines
6.1 KiB
Java
233 lines
6.1 KiB
Java
package org.hwo.ui.servicelink.register;
|
|
|
|
import java.lang.reflect.InvocationTargetException;
|
|
import java.util.HashMap;
|
|
import javax.swing.JComponent;
|
|
|
|
import org.hwo.i18n.Messages;
|
|
import org.hwo.interactiveobjects.InteractiveObject;
|
|
import org.hwo.servicelink.ng.ServiceLink;
|
|
import org.hwo.servicelink.ng.ServiceRegisterListener;
|
|
import org.hwo.models.TableMapper.TableColumn;
|
|
import org.w3c.dom.Element;
|
|
|
|
@InteractiveObject(editor=ServiceRegisterEditorDialog.class)
|
|
public abstract class ServiceRegister implements ServiceRegisterListener {
|
|
|
|
static HashMap<String, Class<? extends ServiceRegister>> serviceRegisterTypes;
|
|
public static void addServiceRegisterType(String typename,Class<? extends ServiceRegister> clazz)
|
|
{
|
|
serviceRegisterTypes.put(typename, clazz);
|
|
}
|
|
|
|
public static ServiceRegister createServiceRegister(ServiceLink serviceLink,String typeName)
|
|
{
|
|
ServiceRegister sr = null;
|
|
|
|
Class<? extends ServiceRegister> clazz = serviceRegisterTypes.get(typeName);
|
|
if (clazz != null)
|
|
{
|
|
try {
|
|
sr = clazz.getDeclaredConstructor(ServiceLink.class).newInstance(serviceLink);
|
|
} catch (InstantiationException e) {
|
|
e.printStackTrace();
|
|
} catch (IllegalAccessException e) {
|
|
e.printStackTrace();
|
|
} catch (InvocationTargetException e) {
|
|
e.printStackTrace();
|
|
} catch (NoSuchMethodException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
return sr;
|
|
}
|
|
public static ServiceRegister createServiceRegister(ServiceLink serviceLink,Element registerNode)
|
|
{
|
|
ServiceRegister sr = null;
|
|
String registerType = registerNode.getAttribute("type");
|
|
|
|
if (registerType == null || registerType.equals(""))
|
|
registerType = "Integer";
|
|
|
|
sr = createServiceRegister(serviceLink, registerType);
|
|
if (sr != null)
|
|
{
|
|
sr.setRegisterNode(registerNode);
|
|
}
|
|
return sr;
|
|
}
|
|
|
|
private Element registerNode;
|
|
|
|
private ServiceLink serviceLink;
|
|
private Integer ax,
|
|
node,
|
|
register;
|
|
|
|
private boolean asFloat;
|
|
|
|
private String registerName;
|
|
|
|
protected Integer lastAsyncIntValue;
|
|
protected Float lastAsyncFloatValue;
|
|
|
|
public ServiceRegister(ServiceLink serviceLink,boolean asFloat)
|
|
{
|
|
this.serviceLink = serviceLink;
|
|
this.asFloat = asFloat;
|
|
}
|
|
|
|
public void dispose(){
|
|
removeServiceRegisterListener();
|
|
}
|
|
|
|
private void removeServiceRegisterListener(){
|
|
if ((this.serviceLink != null)&&(ax != null)&&(node != null)&&(register != null))
|
|
this.serviceLink.getAsynchronServiceLinkProvider().removeServiceRegisterListener(this.ax, this.node, this.register, this.asFloat, this);
|
|
}
|
|
private void addServiceRegisterListener(){
|
|
if ((this.serviceLink != null) &&(ax != null)&&(node != null)&&(register != null))
|
|
this.serviceLink.getAsynchronServiceLinkProvider().addServiceRegisterListener(this.ax, this.node, this.register, this.asFloat, this);
|
|
}
|
|
|
|
|
|
@TableColumn(label="Bezeichnung",width=400,order=5)
|
|
public String getRegisterName() {
|
|
return registerName;
|
|
}
|
|
public void setRegisterName(String registerName) {
|
|
this.registerName = registerName;
|
|
}
|
|
|
|
@TableColumn(label="Register",firstColumn=true,width=80)
|
|
public Integer getRegister() {
|
|
return register;
|
|
}
|
|
public void setRegister(Integer register) {
|
|
removeServiceRegisterListener();
|
|
this.register = register;
|
|
addServiceRegisterListener();
|
|
}
|
|
|
|
@TableColumn(label="Wert",order=10,width=250)
|
|
abstract public String getTextRepresentation();
|
|
|
|
abstract public JComponent getEditorComponent();
|
|
abstract public void acceptEditorValue();
|
|
abstract public void updateEditorValue();
|
|
|
|
public Element getRegisterNode()
|
|
{
|
|
return registerNode;
|
|
};
|
|
public void setRegisterNode(Element registerNode)
|
|
{
|
|
this.registerNode = registerNode;
|
|
|
|
if (this.registerNode != null)
|
|
{
|
|
Element labelNode = (Element)this.registerNode.getElementsByTagName("Label").item(0);
|
|
Element addressNode = (Element)this.registerNode.getElementsByTagName("Address").item(0);
|
|
|
|
register = Integer.decode(addressNode.getTextContent());
|
|
registerName = Messages.getString(labelNode.getTextContent());
|
|
}
|
|
|
|
}
|
|
|
|
public void setAsFloat(boolean asFloat) {
|
|
removeServiceRegisterListener();
|
|
this.asFloat = asFloat;
|
|
addServiceRegisterListener();
|
|
}
|
|
public boolean getAsFloat() {
|
|
return this.asFloat;
|
|
}
|
|
|
|
|
|
public ServiceLink getServiceLink() {
|
|
return serviceLink;
|
|
}
|
|
public void setServiceLink(ServiceLink serviceLink) {
|
|
this.serviceLink = serviceLink;
|
|
}
|
|
|
|
|
|
public Integer getAx() {
|
|
return ax;
|
|
}
|
|
public void setAx(Integer ax) {
|
|
removeServiceRegisterListener();
|
|
this.ax = ax;
|
|
addServiceRegisterListener();
|
|
}
|
|
|
|
|
|
public Integer getNode() {
|
|
return node;
|
|
}
|
|
public void setNode(Integer node) {
|
|
removeServiceRegisterListener();
|
|
this.node = node;
|
|
addServiceRegisterListener();
|
|
}
|
|
|
|
public Float readFloatValue()
|
|
{
|
|
if (lastAsyncFloatValue != null)
|
|
return lastAsyncFloatValue;
|
|
return 0.0f;
|
|
//return serviceLink.getServiceRegisterCache().getCachedFloat(ax, node, register);
|
|
}
|
|
public void writeFloatValue(Float value)
|
|
{
|
|
try
|
|
{
|
|
this.serviceLink.writeFloat(ax.byteValue(), node.byteValue(), register,value);
|
|
} catch (Exception e)
|
|
{
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public Float readFloatValueSynchron()
|
|
{
|
|
return serviceLink.readFloat(ax.byteValue(), node.byteValue(), register);
|
|
}
|
|
|
|
|
|
public Integer readIntegerValue()
|
|
{
|
|
if (lastAsyncIntValue != null)
|
|
return lastAsyncIntValue;
|
|
return 0;
|
|
//return serviceLink.getServiceRegisterCache().getCachedInteger(ax, node, register);
|
|
}
|
|
public void writeIntegerValue(Integer value)
|
|
{
|
|
this.serviceLink.writeInteger(ax.byteValue(), node.byteValue(), register,value);
|
|
}
|
|
|
|
@Override
|
|
public void ServiceRegisterValueUpdated(int ax, int node,
|
|
int registervalue, Float value) {
|
|
this.lastAsyncFloatValue = value;
|
|
}
|
|
@Override
|
|
public void ServiceRegisterValueUpdated(int ax, int node,
|
|
int registervalue, Integer value) {
|
|
this.lastAsyncIntValue = value;
|
|
}
|
|
|
|
|
|
static {
|
|
serviceRegisterTypes = new HashMap<String, Class<? extends ServiceRegister>>();
|
|
|
|
serviceRegisterTypes.put("Integer", IntegerServiceRegister.class);
|
|
serviceRegisterTypes.put("Float", FloatServiceRegister.class);
|
|
serviceRegisterTypes.put("BitField", BitFieldServiceRegister.class);
|
|
serviceRegisterTypes.put("IndexedList", IndexedListServiceRegister.class);
|
|
}
|
|
|
|
}
|