1 package net.mograsim.logic.model.examples;
3 import java.io.IOException;
4 import java.nio.file.Files;
5 import java.nio.file.Path;
6 import java.nio.file.Paths;
7 import java.util.Comparator;
8 import java.util.Map.Entry;
9 import java.util.Scanner;
11 import java.util.stream.Collectors;
12 import java.util.stream.Stream;
14 import net.mograsim.logic.model.model.ViewModelModifiable;
15 import net.mograsim.logic.model.model.wires.GUIWire;
16 import net.mograsim.logic.model.model.wires.MovablePin;
17 import net.mograsim.logic.model.model.wires.Pin;
18 import net.mograsim.logic.model.model.wires.PinUsage;
19 import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent;
20 import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
21 import net.mograsim.logic.model.serializing.SubmodelComponentSerializer;
23 public class ReserializeJSONsSettingUsages
25 public static void main(String[] args) throws IOException
27 try (Scanner sysin = new Scanner(System.in))
29 System.out.print("Directory to search for JSONs in / JSON file to reserialize >");
30 Path root = Paths.get(sysin.nextLine());
31 if (!Files.exists(root))
32 throw new IllegalArgumentException("Path doesn't exist");
33 if (Files.isRegularFile(root))
34 reserializeJSON(root, sysin);
37 System.out.print("Recursive? >");
38 boolean recursive = Boolean.valueOf(sysin.nextLine());
39 try (Stream<Path> jsons = recursive ? Files.walk(root) : Files.list(root))
41 jsons.filter(Files::isRegularFile).filter(p -> p.getFileName().toString().endsWith(".json"))
42 .forEach(j -> reserializeJSON(j, sysin));
48 public static void reserializeJSON(Path json, Scanner sysin)
52 DeserializedSubmodelComponent comp = (DeserializedSubmodelComponent) IndirectGUIComponentCreator
53 .createComponent(new ViewModelModifiable(), "file:" + json.toString());
54 System.out.println("Reserializing " + json);
55 comp.getSupermodelPins().entrySet().stream().sorted(Comparator.comparing(Entry::getKey)).map(Entry::getValue).forEach(pin ->
57 System.out.print(" Usage for interface pin " + pin.name + " (empty: " + pin.usage + ") >");
58 String usageStr = sysin.nextLine().toUpperCase();
59 PinUsage usage = usageStr.equals("") ? pin.usage
60 : usageStr.equals("I") ? PinUsage.INPUT
61 : usageStr.equals("O") ? PinUsage.OUTPUT
62 : usageStr.equals("T") ? PinUsage.TRISTATE : PinUsage.valueOf(usageStr);
63 setInterfacePinUsage(comp, pin, usage);
65 SubmodelComponentSerializer.serialize(comp, json.toString());
69 System.err.println("An error occurred visiting " + json + ":");
74 private static void setInterfacePinUsage(DeserializedSubmodelComponent comp, Pin interfacePin, PinUsage usage)
76 Set<GUIWire> wiresConnectedToPin = comp.submodel.getWiresByName().values().stream()
77 .filter(w -> w.getPin1() == interfacePin || w.getPin2() == interfacePin).collect(Collectors.toSet());
78 wiresConnectedToPin.forEach(GUIWire::destroy);
79 comp.removeSubmodelInterface(interfacePin.name);
80 comp.addSubmodelInterface(
81 new MovablePin(comp, interfacePin.name, interfacePin.logicWidth, usage, interfacePin.getRelX(), interfacePin.getRelY()));
82 ViewModelModifiable submodelModifiable = comp.getSubmodelModifiable();
83 wiresConnectedToPin.forEach(w -> new GUIWire(submodelModifiable, w.getPin1(), w.getPin2()));