/*
* 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);
}
}