/* * Copyright 2015 Nokia Solutions and Networks * Licensed under the Apache License, Version 2.0, * see license.txt file for details. */ package org.rf.ide.core.testdata.model.table; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map.Entry; import java.util.Optional; import org.rf.ide.core.testdata.model.RobotFile; import org.rf.ide.core.testdata.model.presenter.MoveElementHelper; import org.rf.ide.core.testdata.model.table.variables.AVariable; import org.rf.ide.core.testdata.model.table.variables.AVariable.VariableScope; import org.rf.ide.core.testdata.model.table.variables.AVariable.VariableType; import org.rf.ide.core.testdata.model.table.variables.DictionaryVariable; import org.rf.ide.core.testdata.model.table.variables.ListVariable; import org.rf.ide.core.testdata.model.table.variables.ScalarVariable; import org.rf.ide.core.testdata.text.read.IRobotLineElement; import org.rf.ide.core.testdata.text.read.recognizer.RobotToken; import org.rf.ide.core.testdata.text.read.recognizer.RobotTokenType; public class VariableTable extends ARobotSectionTable { private final List<AVariable> variables = new ArrayList<>(); public VariableTable(final RobotFile parent) { super(parent); } public List<AVariable> getVariables() { return Collections.unmodifiableList(variables); } public void addVariable(final AVariable variable) { variable.setParent(this); variables.add(variable); } public void addVariable(final int index, final AVariable variable) { variable.setParent(this); variables.add(index, variable); } public ScalarVariable createScalarVariable(final int index, final String name, final List<String> values) { final RobotToken dec = new RobotToken(); dec.setRaw(VariableType.SCALAR.getIdentificator() + "{" + name + "}"); dec.setText(VariableType.SCALAR.getIdentificator() + "{" + name + "}"); dec.setType(RobotTokenType.VARIABLES_SCALAR_DECLARATION); final ScalarVariable scalar = new ScalarVariable(name, dec, VariableScope.TEST_SUITE); for (final String v : values) { final RobotToken t = new RobotToken(); t.setText(v); t.setType(RobotTokenType.VARIABLES_VARIABLE_VALUE); scalar.addValue(t); } scalar.setParent(this); variables.add(index, scalar); return scalar; } public ListVariable createListVariable(final int index, final String name, final List<String> values) { final RobotToken dec = new RobotToken(); dec.setRaw(VariableType.LIST.getIdentificator() + "{" + name + "}"); dec.setText(VariableType.LIST.getIdentificator() + "{" + name + "}"); dec.setType(RobotTokenType.VARIABLES_LIST_DECLARATION); final ListVariable list = new ListVariable(name, dec, VariableScope.TEST_SUITE); for (final String v : values) { final RobotToken t = new RobotToken(); t.setText(v); t.setType(RobotTokenType.VARIABLES_VARIABLE_VALUE); list.addItem(t); } list.setParent(this); variables.add(index, list); return list; } public DictionaryVariable createDictionaryVariable(final int index, final String name, final List<Entry<String, String>> items) { final RobotToken dec = new RobotToken(); dec.setRaw(VariableType.DICTIONARY.getIdentificator() + "{" + name + "}"); dec.setText(VariableType.DICTIONARY.getIdentificator() + "{" + name + "}"); dec.setType(RobotTokenType.VARIABLES_DICTIONARY_DECLARATION); final DictionaryVariable dict = new DictionaryVariable(name, dec, VariableScope.TEST_SUITE); for (final Entry<String, String> e : items) { final RobotToken keyT = new RobotToken(); keyT.setText(e.getKey()); keyT.setType(RobotTokenType.VARIABLES_DICTIONARY_KEY); final String value = e.getValue(); final RobotToken valueT = new RobotToken(); valueT.setText(value); valueT.setType(RobotTokenType.VARIABLES_DICTIONARY_VALUE); final RobotToken decKey = new RobotToken(); dict.put(decKey, keyT, valueT); } dict.setParent(this); variables.add(index, dict); return dict; } public Entry<String, String> createEntry(final String key, final String value) { return new DictionaryEntry(key, value); } private static class DictionaryEntry implements Entry<String, String> { private final String key; private String value; public DictionaryEntry(final String key, final String value) { this.key = key; this.value = value; } @Override public String getKey() { return key; } @Override public String getValue() { return value; } @Override public String setValue(final String value) { this.value = value; return value; } } public void removeVariable(final AVariable variable) { variables.remove(variable); } public boolean moveUpVariable(final AVariable variable) { return MoveElementHelper.moveUp(variables, variable); } public boolean moveDownVariable(final AVariable variable) { return MoveElementHelper.moveDown(variables, variable); } public boolean isEmpty() { return (variables.isEmpty()); } public Optional<AVariable> findVariable(final IRobotLineElement partOfVariable) { Optional<AVariable> res = Optional.empty(); for (final AVariable var : variables) { final List<RobotToken> elems = var.getElementTokens(); for (final IRobotLineElement e : elems) { if (e == partOfVariable) { res = Optional.of(var); break; } } } return res; } }