/*
* Copyright 2015 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.robotframework.ide.eclipse.main.plugin.model;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.transform;
import static com.google.common.collect.Lists.newArrayList;
import java.util.List;
import org.rf.ide.core.testdata.model.AModelElement;
import org.rf.ide.core.testdata.model.ModelType;
import org.rf.ide.core.testdata.text.read.IRobotTokenType;
import org.rf.ide.core.testdata.text.read.recognizer.RobotToken;
import org.rf.ide.core.testdata.text.read.recognizer.RobotTokenType;
import com.google.common.base.Predicate;
public class RobotDefinitionSetting extends RobotKeywordCall {
private static final long serialVersionUID = 1L;
public RobotDefinitionSetting(final RobotCodeHoldingElement<?> robotCodeHoldingElement,
final AModelElement<?> linkedElement) {
super(robotCodeHoldingElement, linkedElement);
}
@Override
public String getName() {
final String nameInBrackets = super.getName();
return nameInBrackets.substring(1, nameInBrackets.length() - 1);
}
@Override
public List<String> getArguments() {
if (arguments == null) {
final List<RobotToken> allTokens = getLinkedElement().getElementTokens();
final Iterable<RobotToken> tokensWithoutComments = filter(allTokens, new Predicate<RobotToken>() {
@Override
public boolean apply(final RobotToken token) {
final List<IRobotTokenType> types = token.getTypes();
final IRobotTokenType type = types.isEmpty() ? null : types.get(0);
return type != RobotTokenType.START_HASH_COMMENT && type != RobotTokenType.COMMENT_CONTINUE
&& type != RobotTokenType.TEST_CASE_SETTING_SETUP
&& type != RobotTokenType.TEST_CASE_SETTING_DOCUMENTATION
&& type != RobotTokenType.TEST_CASE_SETTING_TAGS_DECLARATION
&& type != RobotTokenType.TEST_CASE_SETTING_TEARDOWN
&& type != RobotTokenType.TEST_CASE_SETTING_TEMPLATE
&& type != RobotTokenType.TEST_CASE_SETTING_TIMEOUT
&& type != RobotTokenType.TEST_CASE_SETTING_UNKNOWN_DECLARATION
&& type != RobotTokenType.KEYWORD_SETTING_ARGUMENTS
&& type != RobotTokenType.KEYWORD_SETTING_DOCUMENTATION
&& type != RobotTokenType.KEYWORD_SETTING_TAGS
&& type != RobotTokenType.KEYWORD_SETTING_TEARDOWN
&& type != RobotTokenType.KEYWORD_SETTING_RETURN
&& type != RobotTokenType.KEYWORD_SETTING_TIMEOUT
&& type != RobotTokenType.KEYWORD_SETTING_UNKNOWN_DECLARATION;
}
});
arguments = newArrayList(transform(tokensWithoutComments, TokenFunctions.tokenToString()));
}
return arguments;
}
@Override
public boolean shouldAddCommentMark() {
final RobotToken declaration = getLinkedElement().getDeclaration();
if (declaration.isDirty()) {
if (declaration.getText().isEmpty()) {
return true;
} else {
return !declaration.getText().trim().startsWith("#");
}
} else {
return !declaration.getTypes().contains(RobotTokenType.START_HASH_COMMENT);
}
}
public boolean isArguments() {
return getLinkedElement().getModelType() == ModelType.USER_KEYWORD_ARGUMENTS;
}
public boolean isDocumentation() {
final ModelType modelType = getLinkedElement().getModelType();
return modelType == ModelType.TEST_CASE_DOCUMENTATION || modelType == ModelType.USER_KEYWORD_DOCUMENTATION;
}
public boolean isKeywordBased() {
final ModelType modelType = getLinkedElement().getModelType();
return modelType == ModelType.TEST_CASE_SETUP || modelType == ModelType.TEST_CASE_TEARDOWN
|| modelType == ModelType.TEST_CASE_TEMPLATE || modelType == ModelType.USER_KEYWORD_TEARDOWN;
}
}