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