diff --git a/CPS/src/lu/list/itis/dkd/tui/utility/VariableManager.java b/CPS/src/lu/list/itis/dkd/tui/utility/VariableManager.java index ca686c91cfbe1c7e0a5c44a2912297a556912144..224fe67fa06ea0ffecb7ea39cd3a21e22da40ba9 100644 --- a/CPS/src/lu/list/itis/dkd/tui/utility/VariableManager.java +++ b/CPS/src/lu/list/itis/dkd/tui/utility/VariableManager.java @@ -141,6 +141,29 @@ public class VariableManager implements VariableBased { // --------------------------------------------------------------------------- + public static List> gatherDeclaredVariables(Corona candidate) { + List> declared = new ArrayList<>(); + + if (candidate instanceof VariableBased) { + VariableBased variableBased = (VariableBased) candidate; + declared.addAll(variableBased.getDeclaredVariables()); + } + + List handlers = candidate.getHandlers(VariableBased.class); + for (VariableBased handler : handlers) { + declared.addAll(handler.getDeclaredVariables()); + } + + List variableScripts = candidate.getScripts(VariableBased.class); + for (VariableBased script : variableScripts) { + declared.addAll(script.getDeclaredVariables()); + } + + return declared; + } + + // --------------------------------------------------------------------------- + /** {@inheritDoc} */ @Override public List> getDeclaredVariables() { diff --git a/CPS/src/lu/list/itis/dkd/tui/utility/VariableUtils.java b/CPS/src/lu/list/itis/dkd/tui/utility/VariableUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..19233b2a7301ae05e02c305ce5bf729feb8b4491 --- /dev/null +++ b/CPS/src/lu/list/itis/dkd/tui/utility/VariableUtils.java @@ -0,0 +1,116 @@ +/** + * Copyright Luxembourg Institute of Science and Technology, 2020. All rights reserved. If you wish + * to use this code for any purpose, please contact the author(s). + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY + * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package lu.list.itis.dkd.tui.utility; + +import lu.list.itis.dkd.tui.cps.system.VariableBased; +import lu.list.itis.dkd.tui.cps.variable.Variable; +import lu.list.itis.dkd.tui.widget.BaseWidget; +import lu.list.itis.dkd.tui.widget.ModalWidget; +import lu.list.itis.dkd.tui.widget.corona.Corona; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @author mack + * @since [major].[minor] + * @version [major].[minor].[micro] + */ +public class VariableUtils { + // --------------------------------------------------------------------------- + // *************************************************************************** + // * Constructor(s) + // *************************************************************************** + // --------------------------------------------------------------------------- + + private VariableUtils() { + + } + + // --------------------------------------------------------------------------- + // *************************************************************************** + // * Class Body + // *************************************************************************** + // --------------------------------------------------------------------------- + + public static List getVariableBased(BaseWidget widget) { + List variableBased = new ArrayList<>(); + + variableBased.addAll(widget.getCoronas(VariableBased.class)); + if (widget instanceof ModalWidget) { + variableBased.addAll(((ModalWidget) widget).getBundledCoronas(VariableBased.class)); + } + + List allCoronas = widget.getCoronas(); + for (Corona corona : allCoronas) { + variableBased.addAll(corona.getHandlers(VariableBased.class)); + variableBased.addAll(corona.getScripts(VariableBased.class)); + } + + return variableBased; + } + + // --------------------------------------------------------------------------- + + public static List> getDeclaredVariables(Corona candidate) { + List> declared = new ArrayList<>(); + + if (candidate instanceof VariableBased) { + VariableBased variableBased = (VariableBased) candidate; + declared.addAll(variableBased.getDeclaredVariables()); + } + + List handlers = candidate.getHandlers(VariableBased.class); + for (VariableBased handler : handlers) { + declared.addAll(handler.getDeclaredVariables()); + } + + List variableScripts = candidate.getScripts(VariableBased.class); + for (VariableBased script : variableScripts) { + declared.addAll(script.getDeclaredVariables()); + } + + return declared; + } + + // --------------------------------------------------------------------------- + + public static List> connectWithSystemVariables(Corona candidate, Map> systemVariables) { + List> connected = new ArrayList<>(); + + if (systemVariables == null) { + return connected; + } + + if (candidate instanceof VariableBased) { + VariableBased variableBased = (VariableBased) candidate; + connected.addAll(variableBased.connectWithSystemVariables(systemVariables)); + } + + List handlers = candidate.getHandlers(VariableBased.class); + for (VariableBased handler : handlers) { + connected.addAll(handler.connectWithSystemVariables(systemVariables)); + } + + List variableScripts = candidate.getScripts(VariableBased.class); + for (VariableBased script : variableScripts) { + connected.addAll(script.connectWithSystemVariables(systemVariables)); + } + + + return connected; + } + +}