X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fmodeladapter%2FViewLogicModelAdapter.java;h=17dc22f411e90198632e614b82cd2ee66581a845;hb=662eb9515b9fcbccc4997f50fecfb597ee8eb316;hp=16b52ee1bd6767d88de37f118acd4dac373797ba;hpb=47ea68ed5c444dd14864412639f6a6fd60ab8a0f;p=Mograsim.git diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/ViewLogicModelAdapter.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/ViewLogicModelAdapter.java index 16b52ee1..17dc22f4 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/ViewLogicModelAdapter.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/ViewLogicModelAdapter.java @@ -1,9 +1,9 @@ package net.mograsim.logic.model.modeladapter; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -43,7 +43,8 @@ public class ViewLogicModelAdapter private static void convert(ViewModel viewModel, LogicModelParameters params, Timeline timeline, Map externalWires) { - Map logicWiresPerPin = convertWires(getAllPins(viewModel), viewModel.getWires(), externalWires, params, timeline); + Map logicWiresPerPin = convertWires(getAllPins(viewModel), viewModel.getWiresByName().values(), externalWires, params, + timeline); Map logicWiresPerPinUnmodifiable = Collections.unmodifiableMap(logicWiresPerPin); for (GUIComponent guiComp : viewModel.getComponentsByName().values()) @@ -60,7 +61,7 @@ public class ViewLogicModelAdapter WireCrossPoint guiCompCasted = (WireCrossPoint) guiComp; guiCompCasted.setLogicModelBinding(logicWiresPerPin.get(guiCompCasted.getPin()).createReadOnlyEnd()); } else if (!(guiComp instanceof SubmodelInterface))// nothing to do for SubmodelInterfaces - createAndLinkComponent(timeline, params, guiComp, logicWiresPerPinUnmodifiable, componentAdapters.get(guiComp.getClass())); + createAndLinkComponent(timeline, params, guiComp, logicWiresPerPinUnmodifiable); } } @@ -70,7 +71,7 @@ public class ViewLogicModelAdapter .collect(Collectors.toSet()); } - private static Map convertWires(Set allPins, List wires, Map externalWires, + private static Map convertWires(Set allPins, Collection wires, Map externalWires, LogicModelParameters params, Timeline timeline) { Map> connectedPinGroups = getConnectedPinGroups(allPins, wires); @@ -105,7 +106,7 @@ public class ViewLogicModelAdapter return logicWiresPerPin; } - private static void setGUIWiresLogicModelBinding(List wires, Map logicWiresPerPin) + private static void setGUIWiresLogicModelBinding(Collection wires, Map logicWiresPerPin) { Map guiWireSharedReadEnd = logicWiresPerPin.values().stream().distinct() .collect(Collectors.toMap(Function.identity(), Wire::createReadOnlyEnd)); @@ -113,7 +114,7 @@ public class ViewLogicModelAdapter guiWire.setLogicModelBinding(guiWireSharedReadEnd.get(logicWiresPerPin.get(guiWire.getPin1()))); } - private static Map> getConnectedPinGroups(Set allPins, List wires) + private static Map> getConnectedPinGroups(Set allPins, Collection wires) { Map> connectedPinsPerPin = new HashMap<>(); @@ -143,8 +144,15 @@ public class ViewLogicModelAdapter @SuppressWarnings("unchecked") private static void createAndLinkComponent(Timeline timeline, LogicModelParameters params, - GUIComponent guiComponent, Map logicWiresPerPin, ComponentAdapter adapter) + GUIComponent guiComponent, Map logicWiresPerPin) { + Class cls = guiComponent.getClass(); + ComponentAdapter adapter = null; + while (cls != GUIComponent.class && adapter == null) + { + adapter = (ComponentAdapter) componentAdapters.get(cls); + cls = cls.getSuperclass(); + } if (adapter == null) throw new IllegalArgumentException("Unknown component class: " + guiComponent.getClass()); adapter.createAndLinkComponent(timeline, params, (G) guiComponent, logicWiresPerPin);