/* * 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.setting; 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.FileRegion; import org.rf.ide.core.testdata.model.ICommentHolder; import org.rf.ide.core.testdata.model.IDocumentationHolder; import org.rf.ide.core.testdata.model.ModelType; import org.rf.ide.core.testdata.model.presenter.DocumentationServiceHandler; import org.rf.ide.core.testdata.model.table.SettingTable; import org.rf.ide.core.testdata.text.read.recognizer.RobotToken; import org.rf.ide.core.testdata.text.read.recognizer.RobotTokenType; public class SuiteDocumentation extends AModelElement<SettingTable> implements ICommentHolder, IDocumentationHolder { private final RobotToken declaration; private final List<RobotToken> text = new ArrayList<>(); private final List<RobotToken> comment = new ArrayList<>(); public SuiteDocumentation(final RobotToken declaration) { this.declaration = declaration; fixForTheType(declaration, RobotTokenType.SETTING_DOCUMENTATION_DECLARATION); } public void addDocumentationText(final String text) { RobotToken rt = new RobotToken(); rt.setText(text); addDocumentationText(rt); } @Override public void addDocumentationText(final RobotToken token) { fixForTheType(token, RobotTokenType.SETTING_DOCUMENTATION_TEXT); text.add(token); } @Override public List<RobotToken> getDocumentationText() { return Collections.unmodifiableList(text); } @Override public void setDocumentationText(final int index, final String docText) { updateOrCreateTokenInside(text, index, docText, RobotTokenType.SETTING_DOCUMENTATION_TEXT); } @Override public void setDocumentationText(final int index, final RobotToken docText) { updateOrCreateTokenInside(text, index, docText, RobotTokenType.SETTING_DOCUMENTATION_TEXT); } @Override public void removeDocumentationPart(int index) { this.text.remove(index); } @Override public void clearDocumentation() { this.text.clear(); } @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(String comment) { RobotToken tok = new RobotToken(); tok.setText(comment); setComment(tok); } @Override public void setComment(RobotToken comment) { this.comment.clear(); addCommentPart(comment); } @Override public void removeCommentPart(int index) { this.comment.remove(index); } @Override public void clearComment() { this.comment.clear(); } @Override public RobotToken getDeclaration() { return declaration; } @Override public boolean isPresent() { return (getDeclaration() != null); } @Override public ModelType getModelType() { return ModelType.SUITE_DOCUMENTATION; } @Override public FilePosition getBeginPosition() { return getDeclaration().getFilePosition(); } @Override public List<RobotToken> getElementTokens() { final List<RobotToken> tokens = new ArrayList<>(); if (isPresent()) { tokens.add(getDeclaration()); tokens.addAll(getDocumentationText()); tokens.addAll(getComment()); } return tokens; } @Override public boolean removeElementToken(int index) { throw new UnsupportedOperationException("Please see " + DocumentationServiceHandler.class); } @Override public List<FileRegion> getContinuousRegions() { return new FileRegion.FileRegionSplitter().splitContinuousRegions(getElementTokens()); } @Override public IDocumentationHolder getCached() { return this; } }