X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fmodel%2FLogicModel.java;h=33cc22e293a96a0ca7f7dcb52a27e161beb25cdc;hb=fa5e3151a923b6cb6120f62436e24ac103a9290c;hp=839d5f9af0cb9956a833c7df7b0c483b75273cc8;hpb=e64bf4e47f616ff2d2d477e9faacc98e7ff36235;p=Mograsim.git diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/LogicModel.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/LogicModel.java index 839d5f9a..33cc22e2 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/LogicModel.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/LogicModel.java @@ -5,9 +5,11 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.function.Consumer; import net.mograsim.logic.model.model.components.ModelComponent; +import net.mograsim.logic.model.model.components.submodels.SubmodelComponent; import net.mograsim.logic.model.model.wires.ModelWire; public class LogicModel @@ -115,6 +117,46 @@ public class LogicModel return wiresUnmodifiable; } + public T getComponentByName(String name, Class modelClass) + { + return getByName(name, modelClass, components); + } + + public ModelWire getWireByName(String name) + { + return getByName(name, ModelWire.class, wires); + } + + @SuppressWarnings("unchecked") + private static T getByName(String name, Class modelClass, Map map) + { + Object comp = map.get(name); + Objects.requireNonNull(comp, "Invaild path, component " + name + " not found"); + if (modelClass.isInstance(comp)) + return (T) comp; + throw new IllegalArgumentException("The component " + name + " is not an instance of " + modelClass); + } + + public T getComponentByPath(String path, Class 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.getComponentByPath(rest, modelClass); + } + + public ModelWire getWireByPath(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.getWireByPath(rest); + } + // @formatter:off public void addComponentAddedListener (Consumer listener) {componentAddedListeners .add (listener);} public void addComponentRemovedListener (Consumer listener) {componentRemovedListeners .add (listener);}