Merge branch 'development' of
[Mograsim.git] / LogicUI / src / era / mi / gui / modeladapter / componentadapters / SimpleGateAdapter.java
1 package era.mi.gui.modeladapter.componentadapters;
2
3 import java.util.List;
4 import java.util.Map;
5
6 import era.mi.gui.model.components.SimpleRectangularGUIGate;
7 import era.mi.gui.model.wires.Pin;
8 import era.mi.gui.modeladapter.LogicModelParameters;
9 import era.mi.logic.components.Component;
10 import era.mi.logic.timeline.Timeline;
11 import era.mi.logic.wires.Wire;
12 import era.mi.logic.wires.Wire.ReadEnd;
13 import era.mi.logic.wires.Wire.ReadWriteEnd;
14
15 public class SimpleGateAdapter implements ComponentAdapter<SimpleRectangularGUIGate>
16 {
17         private final ComponentConstructor constructor;
18
19         public SimpleGateAdapter(ComponentConstructor constructor)
20         {
21                 this.constructor = constructor;
22         }
23
24         @Override
25         public Component createAndLinkComponent(Timeline timeline, LogicModelParameters params, SimpleRectangularGUIGate guiComponent,
26                         Map<Pin, Wire> logicWiresPerPin)
27         {
28                 ReadWriteEnd out = logicWiresPerPin.get(guiComponent.getOutputPin()).createReadWriteEnd();
29                 List<Pin> inputPins = guiComponent.getInputPins();
30                 ReadEnd[] ins = new ReadEnd[inputPins.size()];
31                 for (int i = 0; i < inputPins.size(); i++)
32                         ins[i] = logicWiresPerPin.get(inputPins.get(i)).createReadOnlyEnd();
33                 return constructor.newComponent(timeline, params.gateProcessTime, out, ins);
34         }
35
36         public static interface ComponentConstructor
37         {
38                 public Component newComponent(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd[] ins);
39         }
40 }