/* * 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.model.table.testcases; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.rf.ide.core.testdata.model.AModelElement; import org.rf.ide.core.testdata.model.FilePosition; import org.rf.ide.core.testdata.model.ICommentHolder; import org.rf.ide.core.testdata.model.IDataDrivenSetting; import org.rf.ide.core.testdata.model.ModelType; import org.rf.ide.core.testdata.text.read.recognizer.RobotToken; import org.rf.ide.core.testdata.text.read.recognizer.RobotTokenType; public class TestCaseTemplate extends AModelElement<TestCase> implements IDataDrivenSetting, ICommentHolder, Serializable { private static final long serialVersionUID = -3597368615403861260L; private final RobotToken declaration; private RobotToken keywordName; private final List<RobotToken> unexpectedTrashArguments = new ArrayList<>(); private final List<RobotToken> comment = new ArrayList<>(); public TestCaseTemplate(final RobotToken declaration) { this.declaration = declaration; fixForTheType(declaration, RobotTokenType.TEST_CASE_SETTING_TEMPLATE); } @Override public boolean isPresent() { return (declaration != null); } @Override public RobotToken getDeclaration() { return declaration; } @Override public RobotToken getKeywordName() { return keywordName; } public void setKeywordName(final RobotToken keywordName) { fixForTheType(keywordName, RobotTokenType.TEST_CASE_SETTING_TEMPLATE_KEYWORD_NAME, true); this.keywordName = keywordName; } public void setKeywordName(final String keywordName) { this.keywordName = updateOrCreate(this.keywordName, keywordName, RobotTokenType.TEST_CASE_SETTING_TEMPLATE_KEYWORD_NAME); } @Override public List<RobotToken> getUnexpectedTrashArguments() { return Collections.unmodifiableList(unexpectedTrashArguments); } public void addUnexpectedTrashArgument(final RobotToken trashArgument) { fixForTheType(trashArgument, RobotTokenType.TEST_CASE_SETTING_TEMPLATE_KEYWORD_UNWANTED_ARGUMENT, true); this.unexpectedTrashArguments.add(trashArgument); } public void addUnexpectedTrashArgument(final String trashArgument) { addUnexpectedTrashArgument(RobotToken.create(trashArgument)); } public void setUnexpectedTrashArguments(final int index, final String trashArgument) { updateOrCreateTokenInside(unexpectedTrashArguments, index, trashArgument, RobotTokenType.TEST_CASE_SETTING_TEMPLATE_KEYWORD_UNWANTED_ARGUMENT); } @Override public List<RobotToken> getComment() { return Collections.unmodifiableList(comment); } @Override public void addCommentPart(final RobotToken rt) { fixComment(getComment(), rt); this.comment.add(rt); } @Override public void setComment(final String comment) { final RobotToken tok = new RobotToken(); tok.setText(comment); setComment(tok); } @Override public void setComment(final RobotToken comment) { this.comment.clear(); addCommentPart(comment); } @Override public void removeCommentPart(final int index) { this.comment.remove(index); } @Override public void clearComment() { this.comment.clear(); } @Override public ModelType getModelType() { return ModelType.TEST_CASE_TEMPLATE; } @Override public FilePosition getBeginPosition() { return getDeclaration().getFilePosition(); } @Override public List<RobotToken> getElementTokens() { final List<RobotToken> tokens = new ArrayList<>(); if (isPresent()) { tokens.add(getDeclaration()); if (getKeywordName() != null) { tokens.add(getKeywordName()); } tokens.addAll(getUnexpectedTrashArguments()); tokens.addAll(getComment()); } return tokens; } @Override public boolean removeElementToken(final int index) { return super.removeElementFromList(unexpectedTrashArguments, index); } }