/* * 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.mapping.variables; import java.util.List; import java.util.Stack; import org.rf.ide.core.testdata.mapping.table.IParsingMapper; import org.rf.ide.core.testdata.mapping.table.ParsingStateHelper; import org.rf.ide.core.testdata.model.FilePosition; import org.rf.ide.core.testdata.model.RobotFileOutput; import org.rf.ide.core.testdata.model.table.VariableTable; import org.rf.ide.core.testdata.model.table.variables.AVariable; import org.rf.ide.core.testdata.model.table.variables.IVariableHolder; import org.rf.ide.core.testdata.model.table.variables.ScalarVariable; import org.rf.ide.core.testdata.text.read.IRobotTokenType; import org.rf.ide.core.testdata.text.read.ParsingState; import org.rf.ide.core.testdata.text.read.RobotLine; import org.rf.ide.core.testdata.text.read.recognizer.RobotToken; import org.rf.ide.core.testdata.text.read.recognizer.RobotTokenType; public class ScalarVariableValueMapper implements IParsingMapper { private final ParsingStateHelper utility; public ScalarVariableValueMapper() { this.utility = new ParsingStateHelper(); } @Override public RobotToken map(RobotLine currentLine, Stack<ParsingState> processingState, RobotFileOutput robotFileOutput, RobotToken rt, FilePosition fp, String text) { List<IRobotTokenType> types = rt.getTypes(); types.remove(RobotTokenType.UNKNOWN); types.add(0, RobotTokenType.VARIABLES_VARIABLE_VALUE); VariableTable variableTable = robotFileOutput.getFileModel() .getVariableTable(); List<AVariable> variables = variableTable.getVariables(); if (!variables.isEmpty()) { IVariableHolder var = variables.get(variables.size() - 1); ((ScalarVariable) var).addValue(rt); } else { // FIXME: some error } processingState.push(ParsingState.SCALAR_VARIABLE_VALUE); return rt; } @Override public boolean checkIfCanBeMapped(RobotFileOutput robotFileOutput, RobotLine currentLine, RobotToken rt, String text, Stack<ParsingState> processingState) { ParsingState state = utility.getCurrentStatus(processingState); return (state == ParsingState.SCALAR_VARIABLE_DECLARATION || state == ParsingState.SCALAR_VARIABLE_VALUE); } }