java-org.hwo.ui/src/org/hwo/ui/servicelink/register/ServiceRegister.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);
}
}