/*
* 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.EnumSet;
import java.util.List;
import org.eclipse.jface.resource.ImageDescriptor;
import org.rf.ide.core.testdata.model.AModelElement;
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 org.robotframework.ide.eclipse.main.plugin.RedImages;
import com.google.common.base.Predicate;
public class RobotSetting extends RobotKeywordCall {
private static final long serialVersionUID = 1L;
private SettingsGroup group;
RobotSetting(final RobotSettingsSection section, final AModelElement<?> linkedElement) {
this(section, SettingsGroup.NO_GROUP, linkedElement);
}
public RobotSetting(final RobotSettingsSection section, final SettingsGroup group,
final AModelElement<?> linkedElement) {
super(section, linkedElement);
this.group = group;
}
@Override
public RobotSettingsSection getParent() {
return (RobotSettingsSection) super.getParent();
}
public SettingsGroup getGroup() {
return group;
}
public void setGroup(final SettingsGroup group) {
this.group = group;
}
public String getNameInGroup() {
final List<String> arguments = getArguments();
return arguments.isEmpty() ? "" : arguments.get(0);
}
@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.SETTING_METADATA_DECLARATION
&& type != RobotTokenType.SETTING_VARIABLES_DECLARATION
&& type != RobotTokenType.SETTING_RESOURCE_DECLARATION
&& type != RobotTokenType.SETTING_LIBRARY_DECLARATION
&& type != RobotTokenType.SETTING_SUITE_SETUP_DECLARATION
&& type != RobotTokenType.SETTING_SUITE_TEARDOWN_DECLARATION
&& type != RobotTokenType.SETTING_TEST_SETUP_DECLARATION
&& type != RobotTokenType.SETTING_TEST_TEARDOWN_DECLARATION
&& type != RobotTokenType.SETTING_TEST_TEMPLATE_DECLARATION
&& type != RobotTokenType.SETTING_TEST_TIMEOUT_DECLARATION
&& type != RobotTokenType.SETTING_FORCE_TAGS_DECLARATION
&& type != RobotTokenType.SETTING_DEFAULT_TAGS_DECLARATION;
}
});
return newArrayList(transform(tokensWithoutComments, TokenFunctions.tokenToString()));
}
return arguments;
}
public boolean isImportSetting() {
return SettingsGroup.getImportsGroupsSet().contains(getGroup());
}
@Override
public ImageDescriptor getImage() {
return RedImages.getRobotSettingImage();
}
@Override
public OpenStrategy getOpenRobotEditorStrategy() {
return new PageActivatingOpeningStrategy(this);
}
public enum SettingsGroup {
NO_GROUP {
@Override
public String getName() {
return null;
}
},
METADATA {
@Override
public String getName() {
return "Metadata";
}
},
LIBRARIES {
@Override
public String getName() {
return "Library";
}
},
RESOURCES {
@Override
public String getName() {
return "Resource";
}
},
VARIABLES {
@Override
public String getName() {
return "Variables";
}
};
public static EnumSet<SettingsGroup> getImportsGroupsSet() {
return EnumSet.of(LIBRARIES, RESOURCES, VARIABLES);
}
public abstract String getName();
}
}