/*
* 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.TestTimeout;
import org.rf.ide.core.testdata.text.read.recognizer.RobotToken;
public class TestTimeoutView extends TestTimeout implements ISingleElementViewer {
private static final long serialVersionUID = -4081479282712030528L;
private final List<TestTimeout> timeouts;
private final boolean changeForceRebuild;
public TestTimeoutView(final List<TestTimeout> timeouts) {
this(timeouts, false);
}
public TestTimeoutView(final List<TestTimeout> timeouts, final boolean changeForceRebuild) {
super(timeouts.get(0).getDeclaration());
this.timeouts = timeouts;
this.changeForceRebuild = changeForceRebuild;
// join timeout for this view
final TestTimeout timeout = new TestTimeout(getDeclaration());
joinTimeout(timeout, timeouts);
copyWithoutJoinIfNeededExecution(timeout);
}
@Override
public boolean isForceRebuild() {
return changeForceRebuild;
}
private void copyWithoutJoinIfNeededExecution(final TestTimeout timeout) {
super.setTimeout(timeout.getTimeout());
for (final RobotToken token : timeout.getMessageArguments()) {
super.addMessageArgument(token);
}
for (final RobotToken comment : timeout.getComment()) {
super.addCommentPart(comment);
}
}
@Override
public void setTimeout(final RobotToken timeout) {
OneSettingJoinerHelper.applyJoinBeforeModificationIfNeeded(this, null, 0);
super.setTimeout(timeout);
}
@Override
public void setTimeout(final String timeout) {
OneSettingJoinerHelper.applyJoinBeforeModificationIfNeeded(this, null, 0);
super.setTimeout(timeout);
}
@Override
public void addMessageArgument(final String messageArgument) {
joinIfNeeded();
super.addMessageArgument(messageArgument);
}
@Override
public void addMessageArgument(final RobotToken messageArgument) {
joinIfNeeded();
super.addMessageArgument(messageArgument);
}
@Override
public void setMessageArgument(final int index, final String argument) {
OneSettingJoinerHelper.applyJoinBeforeModificationIfNeeded(this, super.getMessageArguments(), index);
super.setMessageArgument(index, argument);
}
@Override
public void setMessageArgument(final int index, final RobotToken argument) {
OneSettingJoinerHelper.applyJoinBeforeModificationIfNeeded(this, super.getMessageArguments(), index);
super.setMessageArgument(index, argument);
}
@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 (timeouts.size() > 1) {
TestTimeout joined = new TestTimeout(getDeclaration());
joinTimeout(joined, timeouts);
timeouts.clear();
timeouts.add(this);
}
}
private void joinTimeout(final TestTimeout target, final List<TestTimeout> timeouts) {
for (final TestTimeout time : timeouts) {
if (time.getTimeout() != null) {
if (target.getTimeout() != null) {
target.addMessageArgument(time.getTimeout());
} else {
target.setTimeout(time.getTimeout());
}
}
for (final RobotToken msg : time.getMessageArguments()) {
target.addMessageArgument(msg);
}
for (final RobotToken comment : time.getComment()) {
target.addCommentPart(comment);
}
}
}
}