+ public ModelComponent getComponentByName(String name)
+ {
+ return components.get(name);
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T extends ModelComponent> T getComponentByName(String name, Class<T> expectedComponentClass)
+ {
+ ModelComponent comp = components.get(name);
+ Objects.requireNonNull(comp, "Invaild path, component " + name + " not found");
+ if (expectedComponentClass.isInstance(comp))
+ return (T) comp;
+ throw new IllegalArgumentException("The component " + name + " is not an instance of " + expectedComponentClass);
+ }
+
+ public ModelWire getWireByName(String name)
+ {
+ return wires.get(name);
+ }
+
+ public <T extends ModelComponent> T getComponentBySubmodelPath(String path, Class<T> modelClass)
+ {
+ int firstDot = path.indexOf('.');
+ if (firstDot == -1)
+ return getComponentByName(path, modelClass);
+ String first = path.substring(0, firstDot);
+ String rest = path.substring(firstDot + 1);
+ return getComponentByName(first, SubmodelComponent.class).submodel.getComponentBySubmodelPath(rest, modelClass);
+ }
+
+ public ModelWire getWireBySubmodelPath(String path)
+ {
+ int firstDot = path.indexOf('.');
+ if (firstDot == -1)
+ return getWireByName(path);
+ String first = path.substring(0, firstDot);
+ String rest = path.substring(firstDot + 1);
+ return getComponentByName(first, SubmodelComponent.class).submodel.getWireBySubmodelPath(rest);
+ }
+