/*
* Copyright 2016 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.views;
import java.util.List;
import org.rf.ide.core.testdata.model.table.setting.SuiteDocumentation;
import org.rf.ide.core.testdata.text.read.recognizer.RobotToken;
public class SuiteDocumentationView extends SuiteDocumentation implements ISingleElementViewer {
private final List<SuiteDocumentation> suiteDocs;
private final boolean changeForceRebuild;
public SuiteDocumentationView(final List<SuiteDocumentation> suiteDocs) {
this(suiteDocs, false);
}
public SuiteDocumentationView(final List<SuiteDocumentation> suiteDocs, final boolean changeForceRebuild) {
super(suiteDocs.get(0).getDeclaration());
this.suiteDocs = suiteDocs;
this.changeForceRebuild = changeForceRebuild;
// join tags for this view
final SuiteDocumentation doc = new SuiteDocumentation(getDeclaration());
joinDoc(doc, suiteDocs);
copyWithoutJoinIfNeededExecution(doc);
}
@Override
public boolean isForceRebuild() {
return changeForceRebuild;
}
private void copyWithoutJoinIfNeededExecution(final SuiteDocumentation doc) {
for (final RobotToken token : doc.getDocumentationText()) {
super.addDocumentationText(token);
}
for (final RobotToken comment : doc.getComment()) {
super.addCommentPart(comment);
}
}
@Override
public void addDocumentationText(final String text) {
joinIfNeeded();
super.addDocumentationText(text);
}
@Override
public void addDocumentationText(final RobotToken token) {
joinIfNeeded();
super.addDocumentationText(token);
}
@Override
public void setDocumentationText(final int index, final String docText) {
OneSettingJoinerHelper.applyJoinBeforeModificationIfNeeded(this, super.getDocumentationText(), index);
super.setDocumentationText(index, docText);
}
@Override
public void setDocumentationText(final int index, final RobotToken docText) {
OneSettingJoinerHelper.applyJoinBeforeModificationIfNeeded(this, super.getDocumentationText(), index);
super.setDocumentationText(index, docText);
}
@Override
public void addCommentPart(final RobotToken rt) {
joinIfNeeded();
super.addCommentPart(rt);
}
@Override
public void setComment(final String comment) {
joinIfNeeded();
super.setComment(comment);
}
@Override
public void setComment(final RobotToken rt) {
joinIfNeeded();
super.setComment(rt);
}
@Override
public synchronized void joinIfNeeded() {
if (suiteDocs.size() > 1) {
SuiteDocumentation joined = new SuiteDocumentation(getDeclaration());
joinDoc(joined, suiteDocs);
suiteDocs.clear();
suiteDocs.add(this);
}
}
private void joinDoc(final SuiteDocumentation target, final List<SuiteDocumentation> suiteDocs) {
for (final SuiteDocumentation sd : suiteDocs) {
for (final RobotToken text : sd.getDocumentationText()) {
target.addDocumentationText(text);
}
for (final RobotToken comment : sd.getComment()) {
target.addCommentPart(comment);
}
}
}
}