/* * 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.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.setting.AImported; import org.rf.ide.core.testdata.model.table.setting.LibraryAlias; 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; import com.google.common.annotations.VisibleForTesting; public class LibraryAliasDeclarationMapper implements IParsingMapper { private final ParsingStateHelper utility; public LibraryAliasDeclarationMapper() { this.utility = 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) { rt.setType(RobotTokenType.SETTING_LIBRARY_ALIAS); rt.setText(text); final LibraryImport lib = getNearestLibraryImport(robotFileOutput); final LibraryAlias alias = new LibraryAlias(rt); lib.setAlias(alias); processingState.push(ParsingState.SETTING_LIBRARY_IMPORT_ALIAS); return rt; } @VisibleForTesting protected LibraryImport getNearestLibraryImport( final RobotFileOutput robotFileOutput) { LibraryImport library = null; final List<AImported> imports = robotFileOutput.getFileModel() .getSettingTable().getImports(); if (!imports.isEmpty()) { final AImported aImported = imports.get(imports.size() - 1); if (aImported instanceof LibraryImport) { library = (LibraryImport) aImported; } else { // FIXME: sth wrong inside mapping logic } } else { // FIXME: sth wrong - declaration of library not inside setting and // was not catch by previous library declaration logic } return library; } @Override public boolean checkIfCanBeMapped(final RobotFileOutput robotFileOutput, final RobotLine currentLine, final RobotToken rt, final String text, final Stack<ParsingState> processingState) { boolean result; if (rt.getTypes().contains(RobotTokenType.SETTING_LIBRARY_ALIAS)) { final ParsingState state = utility.getCurrentStatus(processingState); if (state == ParsingState.SETTING_LIBRARY_NAME_OR_PATH || state == ParsingState.SETTING_LIBRARY_ARGUMENTS) { result = true; } else if (state == ParsingState.SETTING_LIBRARY_IMPORT) { // FIXME: warning that library name is the same as alias // declaration result = false; } else { // FIXME: wrong place result = false; } } else { result = false; } return result; } }