/* * 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.setting.library; import java.util.Stack; import org.rf.ide.core.testdata.mapping.table.ElementsUtility; 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.setting.AImported; import org.rf.ide.core.testdata.model.table.setting.LibraryImport; 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 LibraryAliasMapper implements IParsingMapper { private final ElementsUtility utility; private final ParsingStateHelper parsingStateHelper; private final LibraryAliasFixer libraryFixer; public LibraryAliasMapper() { this.utility = new ElementsUtility(); this.parsingStateHelper = new ParsingStateHelper(); this.libraryFixer = new LibraryAliasFixer(utility, parsingStateHelper); } @Override public RobotToken map(final RobotLine currentLine, final Stack<ParsingState> processingState, final RobotFileOutput robotFileOutput, final RobotToken rt, final FilePosition fp, final String text) { rt.getTypes().add(0, RobotTokenType.SETTING_LIBRARY_ALIAS_VALUE); rt.setText(text); final AImported imported = utility.getNearestImport(robotFileOutput); LibraryImport lib; if (imported instanceof LibraryImport) { lib = (LibraryImport) imported; } else { lib = null; // FIXME: sth wrong - declaration of library not inside setting and // was not catch by previous library declaration logic } lib.getAlias().setLibraryAlias(rt); processingState.push(ParsingState.SETTING_LIBRARY_IMPORT_ALIAS_VALUE); return rt; } @Override public boolean checkIfCanBeMapped(final RobotFileOutput robotFileOutput, final RobotLine currentLine, final RobotToken rt, final String text, final Stack<ParsingState> processingState) { boolean result; final ParsingState status = parsingStateHelper .getCurrentStatus(processingState); if (status == ParsingState.SETTING_LIBRARY_IMPORT_ALIAS) { result = true; } else if (status == ParsingState.SETTING_LIBRARY_IMPORT_ALIAS_VALUE) { final AImported imported = utility.getNearestImport(robotFileOutput); LibraryImport lib; if (imported instanceof LibraryImport) { lib = (LibraryImport) imported; } else { lib = null; // FIXME: sth wrong - declaration of library not inside setting // and // was not catch by previous library declaration logic } libraryFixer.applyFixes(robotFileOutput, lib, rt, processingState); // FIXME: fixer apply we have Library OperatingSystem WITH NAME x | // y // (two aliases) result = false; } else { result = false; } return result; } }