From 60ad0ce18eb366fa22e34cdd7dff87055e43c789 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Wed, 29 May 2019 17:31:22 +0200 Subject: [PATCH] Restructured ComponentAdapter; added ManualSwitchAdapter --- .../gui/model/components/GUIManualSwitch.java | 9 +++++- .../modeladapter/ViewLogicModelAdapter.java | 13 +++++--- .../componentadapters/ComponentAdapter.java | 2 ++ .../ManualSwitchAdapter.java | 31 +++++++++++++++++++ .../componentadapters/SimpleGateAdapter.java | 16 +++++++--- 5 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 LogicUI/src/era/mi/gui/modeladapter/componentadapters/ManualSwitchAdapter.java diff --git a/LogicUI/src/era/mi/gui/model/components/GUIManualSwitch.java b/LogicUI/src/era/mi/gui/model/components/GUIManualSwitch.java index 6008329c..b215cff8 100644 --- a/LogicUI/src/era/mi/gui/model/components/GUIManualSwitch.java +++ b/LogicUI/src/era/mi/gui/model/components/GUIManualSwitch.java @@ -16,6 +16,8 @@ public class GUIManualSwitch extends GUIComponent private static final double height = 15; private static final double fontHeight = 5; + private final Pin outputPin; + private ManualSwitch logicSwitch; private ReadEnd end; @@ -23,7 +25,7 @@ public class GUIManualSwitch extends GUIComponent { super(model); setSize(width, height); - addPin(new Pin(this, 1, width, height / 2)); + addPin(this.outputPin = new Pin(this, 1, width, height / 2)); } @Override @@ -53,4 +55,9 @@ public class GUIManualSwitch extends GUIComponent logicSwitch.toggle(); return true; } + + public Pin getOutputPin() + { + return outputPin; + } } \ No newline at end of file diff --git a/LogicUI/src/era/mi/gui/modeladapter/ViewLogicModelAdapter.java b/LogicUI/src/era/mi/gui/modeladapter/ViewLogicModelAdapter.java index c64ae971..3cb593ff 100644 --- a/LogicUI/src/era/mi/gui/modeladapter/ViewLogicModelAdapter.java +++ b/LogicUI/src/era/mi/gui/modeladapter/ViewLogicModelAdapter.java @@ -20,6 +20,7 @@ import era.mi.gui.model.wires.GUIWire; import era.mi.gui.model.wires.Pin; import era.mi.gui.model.wires.WireCrossPoint; import era.mi.gui.modeladapter.componentadapters.ComponentAdapter; +import era.mi.gui.modeladapter.componentadapters.ManualSwitchAdapter; import era.mi.gui.modeladapter.componentadapters.SimpleGateAdapter; import era.mi.logic.components.Component; import era.mi.logic.components.gates.AndGate; @@ -34,12 +35,14 @@ public class ViewLogicModelAdapter private final static Map, ComponentAdapter> componentAdapters; static { - Map, ComponentAdapter> componentAdaptersModifiable = new HashMap<>(); - componentAdaptersModifiable.put(GUIOrGate.class, new SimpleGateAdapter(OrGate::new)); - componentAdaptersModifiable.put(GUIAndGate.class, new SimpleGateAdapter(AndGate::new)); - componentAdaptersModifiable.put(GUINotGate.class, new SimpleGateAdapter((t, p, o, i) -> new NotGate(t, p, i[0], o))); + Set> componentAdaptersModifiable = new HashSet<>(); + componentAdaptersModifiable.add(new SimpleGateAdapter<>(GUIOrGate.class, OrGate::new)); + componentAdaptersModifiable.add(new SimpleGateAdapter<>(GUIAndGate.class, AndGate::new)); + componentAdaptersModifiable.add(new SimpleGateAdapter<>(GUINotGate.class, (t, p, o, i) -> new NotGate(t, p, i[0], o))); + componentAdaptersModifiable.add(new ManualSwitchAdapter()); // TODO list all "primitive" adapters here - componentAdapters = Collections.unmodifiableMap(componentAdaptersModifiable); + componentAdapters = Collections.unmodifiableMap( + componentAdaptersModifiable.stream().collect(Collectors.toMap(ComponentAdapter::getSupportedClass, Function.identity()))); } public static Timeline convert(ViewModel viewModel, LogicModelParameters params) diff --git a/LogicUI/src/era/mi/gui/modeladapter/componentadapters/ComponentAdapter.java b/LogicUI/src/era/mi/gui/modeladapter/componentadapters/ComponentAdapter.java index 8598fa83..c109d732 100644 --- a/LogicUI/src/era/mi/gui/modeladapter/componentadapters/ComponentAdapter.java +++ b/LogicUI/src/era/mi/gui/modeladapter/componentadapters/ComponentAdapter.java @@ -11,6 +11,8 @@ import era.mi.logic.wires.Wire; public interface ComponentAdapter { + public Class getSupportedClass(); + public Component createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, Map logicWiresPerPin); } \ No newline at end of file diff --git a/LogicUI/src/era/mi/gui/modeladapter/componentadapters/ManualSwitchAdapter.java b/LogicUI/src/era/mi/gui/modeladapter/componentadapters/ManualSwitchAdapter.java new file mode 100644 index 00000000..3a6ea050 --- /dev/null +++ b/LogicUI/src/era/mi/gui/modeladapter/componentadapters/ManualSwitchAdapter.java @@ -0,0 +1,31 @@ +package era.mi.gui.modeladapter.componentadapters; + +import java.util.Map; + +import era.mi.gui.model.components.GUIManualSwitch; +import era.mi.gui.model.wires.Pin; +import era.mi.gui.modeladapter.LogicModelParameters; +import era.mi.logic.components.Component; +import era.mi.logic.components.ManualSwitch; +import era.mi.logic.timeline.Timeline; +import era.mi.logic.wires.Wire; +import era.mi.logic.wires.Wire.ReadWriteEnd; + +public class ManualSwitchAdapter implements ComponentAdapter +{ + @Override + public Class getSupportedClass() + { + return GUIManualSwitch.class; + } + + @Override + public Component createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUIManualSwitch guiComponent, + Map logicWiresPerPin) + { + ReadWriteEnd end = logicWiresPerPin.get(guiComponent.getOutputPin()).createReadWriteEnd(); + ManualSwitch manualSwitch = new ManualSwitch(timeline, end); + guiComponent.setLogicModelBinding(manualSwitch, end); + return manualSwitch; + } +} \ No newline at end of file diff --git a/LogicUI/src/era/mi/gui/modeladapter/componentadapters/SimpleGateAdapter.java b/LogicUI/src/era/mi/gui/modeladapter/componentadapters/SimpleGateAdapter.java index e256ff03..b244973b 100644 --- a/LogicUI/src/era/mi/gui/modeladapter/componentadapters/SimpleGateAdapter.java +++ b/LogicUI/src/era/mi/gui/modeladapter/componentadapters/SimpleGateAdapter.java @@ -12,18 +12,25 @@ import era.mi.logic.wires.Wire; import era.mi.logic.wires.Wire.ReadEnd; import era.mi.logic.wires.Wire.ReadWriteEnd; -public class SimpleGateAdapter implements ComponentAdapter +public class SimpleGateAdapter implements ComponentAdapter { + private final Class supportedClass; private final ComponentConstructor constructor; - public SimpleGateAdapter(ComponentConstructor constructor) + public SimpleGateAdapter(Class supportedClass, ComponentConstructor constructor) { + this.supportedClass = supportedClass; this.constructor = constructor; } @Override - public Component createAndLinkComponent(Timeline timeline, LogicModelParameters params, SimpleRectangularGUIGate guiComponent, - Map logicWiresPerPin) + public Class getSupportedClass() + { + return supportedClass; + } + + @Override + public Component createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, Map logicWiresPerPin) { ReadWriteEnd out = logicWiresPerPin.get(guiComponent.getOutputPin()).createReadWriteEnd(); List inputPins = guiComponent.getInputPins(); @@ -37,4 +44,5 @@ public class SimpleGateAdapter implements ComponentAdapter