190 lines
4.7 KiB
Java
190 lines
4.7 KiB
Java
package org.hwo.ui.servicelink.register;
|
|
|
|
import java.awt.Component;
|
|
import java.lang.reflect.InvocationTargetException;
|
|
import java.util.HashMap;
|
|
import java.util.HashSet;
|
|
import java.util.Hashtable;
|
|
|
|
import javax.swing.JComponent;
|
|
|
|
import org.hwo.interactiveobjects.InteractiveObject;
|
|
import org.hwo.io.servicelink.ServiceLink;
|
|
import org.hwo.io.servicelink.ServiceLink.ServiceTelegram;
|
|
import org.hwo.io.servicelink.ServiceLinkException;
|
|
import org.hwo.models.TableMapper.TableColumn;
|
|
import org.hwo.ui.servicelink.register.bitfield.BitFieldEditor;
|
|
import org.w3c.dom.Element;
|
|
import org.w3c.dom.Node;
|
|
|
|
@InteractiveObject(editor=ServiceRegisterEditorDialog.class)
|
|
public abstract class ServiceRegister {
|
|
|
|
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 String registerType;
|
|
private String registerName;
|
|
|
|
private ServiceRegisterControl
|
|
serviceRegisterControl;
|
|
|
|
public ServiceRegister(ServiceLink serviceLink)
|
|
{
|
|
this.serviceLink = serviceLink;
|
|
}
|
|
|
|
@TableColumn(label="Bezeichnung",after="Register",width=400)
|
|
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) {
|
|
this.register = register;
|
|
}
|
|
|
|
@TableColumn(label="Wert",after="Bezeichnung",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 = labelNode.getTextContent();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public ServiceLink getServiceLink() {
|
|
return serviceLink;
|
|
}
|
|
public void setServiceLink(ServiceLink serviceLink) {
|
|
this.serviceLink = serviceLink;
|
|
}
|
|
|
|
|
|
public Integer getAx() {
|
|
return ax;
|
|
}
|
|
public void setAx(Integer ax) {
|
|
this.ax = ax;
|
|
}
|
|
|
|
|
|
public Integer getNode() {
|
|
return node;
|
|
}
|
|
public void setNode(Integer node) {
|
|
this.node = node;
|
|
}
|
|
|
|
public Float readFloatValue()
|
|
{
|
|
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 Integer readIntegerValue()
|
|
{
|
|
return serviceLink.getServiceRegisterCache().getCachedInteger(ax, node, register);
|
|
}
|
|
public void writeIntegerValue(Integer value)
|
|
{
|
|
try
|
|
{
|
|
this.serviceLink.writeInt(ax.byteValue(), node.byteValue(), register,value);
|
|
} catch (Exception e)
|
|
{
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
}
|