/** * Allocate a port according to the explicit/implicit values. * * @return a new typed port */ private InputPort allocatePort() { InputPort ret; /* * backward compatibility, use explicit as default. */ if (graphics.size() <= GRAPHICS_INIMPL_INDEX) { return new ExplicitInputPort( controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null); } ScilabType inImpl = graphics.get(GRAPHICS_INIMPL_INDEX); /* * backward compatibility, use explicit as default. */ if (isEmptyField(inImpl)) { return new ExplicitInputPort( controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null); } final ScilabString inImplicit = (ScilabString) inImpl; /* * backward compatibility, use explicit as default. */ if (isEmptyField(inImplicit)) { return new ExplicitInputPort( controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null); } final boolean isColumnDominant = inImplicit.getHeight() >= inImplicit.getWidth(); final int[] indexes = getIndexes(alreadyDecodedCount, isColumnDominant); final String[][] inimpl = inImplicit.getData(); // can we safely access the indexed data ? final boolean isSet = canGet(inImplicit, indexes); /* * when the type is set, create a new port instance; create an explicit typed port otherwise. */ if (isSet && inimpl[indexes[0]][indexes[1]].equals(EXPLICIT)) { ret = new ExplicitInputPort( controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null); } else if (isSet && inimpl[indexes[0]][indexes[1]].equals(IMPLICIT)) { ret = new ImplicitInputPort( controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null); } else { // when not specified, use explicit ret = new ExplicitInputPort( controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null); } return ret; }
/** * Fill the port with the parameters from the graphics structure. * * @param port the target instance */ private void decodeGraphics(InputPort port) { // protection against previously stored blocks if (graphics.size() > GRAPHICS_INSTYLE_INDEX && !isEmptyField(graphics.get(GRAPHICS_INSTYLE_INDEX))) { final ScilabString styles = (ScilabString) graphics.get(GRAPHICS_INSTYLE_INDEX); boolean isColumnDominant = styles.getHeight() >= styles.getWidth(); int[] indexes = getIndexes(alreadyDecodedCount, isColumnDominant); if (canGet(styles, indexes)) { final String style; style = styles.getData()[indexes[0]][indexes[1]]; port.setStyle(new StyleMap(port.getStyle()).putAll(style).toString()); } } // protection against previously stored blocks if (graphics.size() > GRAPHICS_INLABEL_INDEX && !isEmptyField(graphics.get(GRAPHICS_INLABEL_INDEX))) { final ScilabString labels = (ScilabString) graphics.get(GRAPHICS_INLABEL_INDEX); boolean isColumnDominant = labels.getHeight() >= labels.getWidth(); int[] indexes = getIndexes(alreadyDecodedCount, isColumnDominant); if (canGet(labels, indexes)) { final String label = labels.getData()[indexes[0]][indexes[1]]; if (label != null) { port.setValue(label); } else { port.setValue(""); } } } }