- comp.setSubmodelScale(params.composition.innerScale);
- comp.setSize(params.width, params.height);
- for (InterfacePinParams iPinParams : params.interfacePins)
- {
- comp.addSubmodelInterface(iPinParams.logicWidth, iPinParams.location.x, iPinParams.location.y);
- }
+ // May return null
+ private static SimpleRectangularSubmodelComponent createRectComponent(ViewModelModifiable model, SubmodelComponentParams params)
+ {
+ try
+ {
+ Map<String, Object> m = params.specialized;
+ SimpleRectangularSubmodelComponent rect = new SimpleRectangularSubmodelComponent(model,
+ ((Number) m.get(SimpleRectangularSubmodelComponent.kLogicWidth)).intValue(),
+ (String) m.get(SimpleRectangularSubmodelComponent.kLabel));
+ rect.setSubmodelScale(params.composition.innerScale);
+ // rect.setSize(params.width, params.height);
+
+ // TODO save & restore names
+ int inputCount = ((Number) m.get(SimpleRectangularSubmodelComponent.kInCount)).intValue();
+ String[] inputNames = new String[inputCount];
+ for (int i = 0; i < inputCount; i++)
+ inputNames[i] = params.interfacePins[i].name;
+ rect.setInputPins(inputNames);
+
+ int outputCount = ((Number) m.get(SimpleRectangularSubmodelComponent.kOutCount)).intValue();
+ String[] outputPins = new String[outputCount];
+ for (int i = 0; i < outputCount; i++)
+ outputPins[i] = params.interfacePins[inputCount + i].name;
+ rect.setOutputPins(outputPins);
+
+ return rect;
+ }
+ catch (ClassCastException | NullPointerException e)
+ {
+ System.err.println("Failed to specialize component!");
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ private static SubmodelComponent createSubmodelComponent(ViewModelModifiable model, SubmodelComponentParams params)
+ {
+ // As SubmodelComponent is abstract, for now SubmodelComponents are instantiated as SimpleRectangularSubmodelComponents
+ SubmodelComponent comp = new SimpleRectangularSubmodelComponent(model, 0, "");
+ comp.setSubmodelScale(params.composition.innerScale);
+ comp.setSize(params.width, params.height);
+ for (InterfacePinParams iPinParams : params.interfacePins)
+ {
+ comp.addSubmodelInterface(iPinParams.name, iPinParams.logicWidth, iPinParams.location.x, iPinParams.location.y);