59 lines
1.8 KiB
Java
59 lines
1.8 KiB
Java
package org.hwo.servicelink.register;
|
|
|
|
import java.util.Hashtable;
|
|
|
|
import org.w3c.dom.Element;
|
|
import org.w3c.dom.Node;
|
|
|
|
public class RegisterTypeRegistry {
|
|
ServiceRegisterRegistry registry;
|
|
Hashtable<String, RegisterType> registeredTypes;
|
|
|
|
|
|
public RegisterTypeRegistry(ServiceRegisterRegistry registry) {
|
|
this.registry = registry;
|
|
this.registeredTypes = new Hashtable<String, RegisterType>();
|
|
|
|
|
|
registerType(new org.hwo.servicelink.register.basetypes.Integer());
|
|
registerType(new org.hwo.servicelink.register.basetypes.Float());
|
|
registerType(new org.hwo.servicelink.register.basetypes.BitField());
|
|
registerType(new org.hwo.servicelink.register.basetypes.IndexedList());
|
|
}
|
|
|
|
public void registerType(RegisterType registerType){
|
|
System.err.println(String.format("RegisterTypeRegistry: New type: %s", registerType.getName()));
|
|
registeredTypes.put(registerType.getName(),registerType);
|
|
}
|
|
|
|
void createType(Node typeNode){
|
|
Element typeElement = (Element)typeNode;
|
|
|
|
RegisterType baseType = registeredTypes.get(typeElement.getAttribute("basetype"));
|
|
if (baseType == null){
|
|
throw new RuntimeException("BaseType not found: " + typeElement.getAttribute("basetype"));
|
|
}
|
|
RegisterType rt = baseType.inherit(typeElement.getAttribute("id"));
|
|
rt.createFromTypeNode(typeNode);
|
|
|
|
registerType(rt);
|
|
}
|
|
|
|
|
|
public RegisterType createRegisterTypeInstance(ServiceRegisterList serviceRegisterList,Node registerNode){
|
|
RegisterType baseType;
|
|
Element registerElement = (Element)registerNode;
|
|
String id = registerElement.getAttribute("type");
|
|
|
|
if (registeredTypes.containsKey(id)){
|
|
baseType = registeredTypes.get(id);
|
|
} else {
|
|
baseType = registeredTypes.get("Integer");
|
|
}
|
|
return baseType.createRegisterTypeInstance(serviceRegisterList, registerNode);
|
|
}
|
|
|
|
|
|
|
|
}
|