/* * 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.ElementPositionResolver; import org.rf.ide.core.testdata.mapping.table.ElementPositionResolver.PositionExpected; 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.VariableScope; import org.rf.ide.core.testdata.model.table.variables.UnknownVariable; 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 UnknownVariableMapper implements IParsingMapper { private final ElementPositionResolver positionResolver; private final ParsingStateHelper stateHelper; public UnknownVariableMapper() { this.positionResolver = new ElementPositionResolver(); this.stateHelper = new ParsingStateHelper(); } @Override public RobotToken map(final RobotLine currentLine, final Stack<ParsingState> processingState, final RobotFileOutput robotFileOutput, final RobotToken rt, final FilePosition fp, final String text) { final List<IRobotTokenType> types = rt.getTypes(); types.remove(RobotTokenType.UNKNOWN); types.add(0, RobotTokenType.VARIABLES_UNKNOWN_DECLARATION); rt.setStartColumn(fp.getColumn()); rt.setText(text); rt.setRaw(text); final VariableTable varTable = robotFileOutput.getFileModel().getVariableTable(); final UnknownVariable varUnknown = new UnknownVariable(rt.getRaw().toString(), rt, VariableScope.TEST_SUITE); varTable.addVariable(varUnknown); processingState.push(ParsingState.VARIABLE_UNKNOWN); return rt; } @Override public boolean checkIfCanBeMapped(final RobotFileOutput robotFileOutput, final RobotLine currentLine, final RobotToken rt, final String text, final Stack<ParsingState> processingState) { boolean result = false; final ParsingState currentState = stateHelper.getCurrentStatus(processingState); if (currentState == ParsingState.VARIABLE_TABLE_INSIDE) { if (text != null) { result = positionResolver.isCorrectPosition(PositionExpected.VARIABLE_DECLARATION_IN_VARIABLE_TABLE, robotFileOutput.getFileModel(), currentLine, rt); } } return result; } }