/* * 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.keywords; 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.RobotFileOutput; import org.rf.ide.core.testdata.text.read.IRobotLineElement; 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.ParsingState.TableType; 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; import org.rf.ide.core.testdata.text.read.separators.Separator.SeparatorType; public abstract class AKeywordSettingDeclarationMapper implements IParsingMapper { private final IRobotTokenType mappedType; private final ParsingStateHelper parsingStateHelper; protected final KeywordFinder finder; protected AKeywordSettingDeclarationMapper(final IRobotTokenType mappedType) { this.mappedType = mappedType; this.parsingStateHelper = new ParsingStateHelper(); this.finder = new KeywordFinder(); } @Override public boolean checkIfCanBeMapped(RobotFileOutput robotFileOutput, RobotLine currentLine, RobotToken rt, String text, Stack<ParsingState> processingState) { boolean result = false; if (rt.getTypes().get(0) == mappedType && parsingStateHelper.getCurrentStatus(processingState).getTable() == TableType.KEYWORD) { List<IRobotLineElement> lineElements = currentLine.getLineElements(); int size = lineElements.size(); if (size == 1) { List<IRobotTokenType> types = lineElements.get(0).getTypes(); result = (types.contains(SeparatorType.PIPE) || types.contains(SeparatorType.TABULATOR_OR_DOUBLE_SPACE)); } else { for (IRobotLineElement elem : lineElements) { List<IRobotTokenType> types = elem.getTypes(); if (types.contains(SeparatorType.PIPE) || types.contains(SeparatorType.TABULATOR_OR_DOUBLE_SPACE)) { continue; } else if (types.contains(RobotTokenType.KEYWORD_NAME)) { result = true; break; } else { result = false; break; } } } } return result; } }