/*
* 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;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import org.rf.ide.core.testdata.model.RobotFile;
import org.rf.ide.core.testdata.model.RobotVersion;
import org.rf.ide.core.testdata.model.presenter.DataDrivenKeywordName;
import org.rf.ide.core.testdata.model.presenter.MoveElementHelper;
import org.rf.ide.core.testdata.model.table.setting.AImported;
import org.rf.ide.core.testdata.model.table.setting.DefaultTags;
import org.rf.ide.core.testdata.model.table.setting.ForceTags;
import org.rf.ide.core.testdata.model.table.setting.LibraryImport;
import org.rf.ide.core.testdata.model.table.setting.Metadata;
import org.rf.ide.core.testdata.model.table.setting.ResourceImport;
import org.rf.ide.core.testdata.model.table.setting.SuiteDocumentation;
import org.rf.ide.core.testdata.model.table.setting.SuiteSetup;
import org.rf.ide.core.testdata.model.table.setting.SuiteTeardown;
import org.rf.ide.core.testdata.model.table.setting.TestSetup;
import org.rf.ide.core.testdata.model.table.setting.TestTeardown;
import org.rf.ide.core.testdata.model.table.setting.TestTemplate;
import org.rf.ide.core.testdata.model.table.setting.TestTimeout;
import org.rf.ide.core.testdata.model.table.setting.UnknownSetting;
import org.rf.ide.core.testdata.model.table.setting.VariablesImport;
import org.rf.ide.core.testdata.text.read.recognizer.RobotToken;
import org.rf.ide.core.testdata.text.read.recognizer.RobotTokenType;
public class SettingTable extends ARobotSectionTable {
private final List<AImported> imports = new ArrayList<>();
private final List<SuiteDocumentation> documentations = new ArrayList<>();
private final List<Metadata> metadatas = new ArrayList<>();
private final List<SuiteSetup> suiteSetups = new ArrayList<>();
private final List<SuiteTeardown> suiteTeardowns = new ArrayList<>();
private final List<ForceTags> forceTags = new ArrayList<>();
private final List<DefaultTags> defaultTags = new ArrayList<>();
private final List<TestSetup> testSetups = new ArrayList<>();
private final List<TestTeardown> testTeardowns = new ArrayList<>();
private final List<TestTemplate> testTemplates = new ArrayList<>();
private final List<TestTimeout> testTimeouts = new ArrayList<>();
private final List<UnknownSetting> unknownSettings = new ArrayList<>();
private final SettingTableMultipleElementsViewCreator joiner = new SettingTableMultipleElementsViewCreator();
public SettingTable(final RobotFile parent) {
super(parent);
}
protected SettingTableMultipleElementsViewCreator getSettingViewCreator() {
return joiner;
}
public boolean isEmpty() {
return imports.isEmpty() && documentations.isEmpty() && metadatas.isEmpty() && suiteSetups.isEmpty()
&& suiteTeardowns.isEmpty() && forceTags.isEmpty() && defaultTags.isEmpty() && testSetups.isEmpty()
&& testTeardowns.isEmpty() && testTemplates.isEmpty() && testTimeouts.isEmpty()
&& unknownSettings.isEmpty();
}
public List<AImported> getImports() {
return Collections.unmodifiableList(imports);
}
public LibraryImport newLibraryImport() {
return newLibraryImport(imports.size());
}
public LibraryImport newLibraryImport(final int index) {
final RobotToken dec = new RobotToken();
dec.setText(RobotTokenType.SETTING_LIBRARY_DECLARATION
.getTheMostCorrectOneRepresentation(getParent().getParent().getRobotVersion()).getRepresentation());
final LibraryImport libImp = new LibraryImport(dec);
addImported(libImp, index);
return libImp;
}
public ResourceImport newResourceImport() {
return newResourceImport(imports.size());
}
public ResourceImport newResourceImport(final int index) {
final RobotToken dec = new RobotToken();
dec.setText(RobotTokenType.SETTING_RESOURCE_DECLARATION
.getTheMostCorrectOneRepresentation(getParent().getParent().getRobotVersion()).getRepresentation());
final ResourceImport resImp = new ResourceImport(dec);
addImported(resImp, index);
return resImp;
}
public VariablesImport newVariablesImport() {
return newVariablesImport(imports.size());
}
public VariablesImport newVariablesImport(final int index) {
final RobotToken dec = new RobotToken();
dec.setText(RobotTokenType.SETTING_VARIABLES_DECLARATION
.getTheMostCorrectOneRepresentation(getParent().getParent().getRobotVersion()).getRepresentation());
final VariablesImport varImp = new VariablesImport(dec);
addImported(varImp, index);
return varImp;
}
public void addImported(final AImported imported) {
imported.setParent(this);
imports.add(imported);
}
public void addImported(final AImported imported, final int position) {
imported.setParent(this);
imports.add(position, imported);
}
public void removeImported(final AImported imported) {
imports.remove(imported);
}
public boolean moveUpImported(final AImported imported) {
return MoveElementHelper.moveUp(imports, imported);
}
public boolean moveDownImported(final AImported imported) {
return MoveElementHelper.moveDown(imports, imported);
}
public Optional<SuiteDocumentation> documentation() {
return getSettingViewCreator().createViewAboutSuiteDoc(documentations);
}
public List<SuiteDocumentation> getDocumentation() {
return Collections.unmodifiableList(documentations);
}
public SuiteDocumentation newSuiteDocumentation() {
final RobotToken dec = new RobotToken();
dec.setText(RobotTokenType.SETTING_DOCUMENTATION_DECLARATION
.getTheMostCorrectOneRepresentation(getParent().getParent().getRobotVersion()).getRepresentation());
final SuiteDocumentation suiteDoc = new SuiteDocumentation(dec);
addDocumentation(suiteDoc);
return suiteDoc;
}
public void addDocumentation(final SuiteDocumentation doc) {
doc.setParent(this);
documentations.add(doc);
getParent().getParent().getDocumentationCacher().register(doc);
}
public void removeDocumentation() {
for (final SuiteDocumentation doc : documentations) {
getParent().getParent().getDocumentationCacher().unregister(doc);
}
documentations.clear();
}
public List<Metadata> getMetadatas() {
return Collections.unmodifiableList(metadatas);
}
public Metadata newMetadata() {
return newMetadata(metadatas.size());
}
public Metadata newMetadata(final int index) {
final RobotToken dec = new RobotToken();
dec.setText(RobotTokenType.SETTING_METADATA_DECLARATION
.getTheMostCorrectOneRepresentation(getParent().getParent().getRobotVersion()).getRepresentation());
final Metadata metadata = new Metadata(dec);
addMetadata(metadata, index);
return metadata;
}
public void addMetadata(final Metadata metadata) {
metadata.setParent(this);
metadatas.add(metadata);
}
public void addMetadata(final Metadata metadata, final int position) {
metadata.setParent(this);
metadatas.add(position, metadata);
}
public void removeMetadata(final Metadata metadata) {
metadatas.remove(metadata);
}
public boolean moveUpMetadata(final Metadata metadata) {
return MoveElementHelper.moveUp(metadatas, metadata);
}
public boolean moveDownMetadata(final Metadata metadata) {
return MoveElementHelper.moveDown(metadatas, metadata);
}
public Optional<SuiteSetup> suiteSetup() {
return getSettingViewCreator().createViewAboutSuiteSetup(suiteSetups);
}
public List<SuiteSetup> getSuiteSetups() {
return Collections.unmodifiableList(suiteSetups);
}
public SuiteSetup newSuiteSetup() {
final RobotToken dec = new RobotToken();
dec.setText(RobotTokenType.SETTING_SUITE_SETUP_DECLARATION
.getTheMostCorrectOneRepresentation(getParent().getParent().getRobotVersion()).getRepresentation());
final SuiteSetup suiteSetup = new SuiteSetup(dec);
addSuiteSetup(suiteSetup);
return suiteSetup;
}
public void addSuiteSetup(final SuiteSetup suiteSetup) {
suiteSetup.setParent(this);
suiteSetups.add(suiteSetup);
}
public void removeSuiteSetup() {
suiteSetups.clear();
}
public Optional<SuiteTeardown> suiteTeardown() {
return getSettingViewCreator().createViewAboutSuiteTeardown(suiteTeardowns);
}
public List<SuiteTeardown> getSuiteTeardowns() {
return Collections.unmodifiableList(suiteTeardowns);
}
public SuiteTeardown newSuiteTeardown() {
final RobotToken dec = new RobotToken();
dec.setText(RobotTokenType.SETTING_SUITE_TEARDOWN_DECLARATION
.getTheMostCorrectOneRepresentation(getParent().getParent().getRobotVersion()).getRepresentation());
final SuiteTeardown suiteTeardown = new SuiteTeardown(dec);
addSuiteTeardown(suiteTeardown);
return suiteTeardown;
}
public void addSuiteTeardown(final SuiteTeardown suiteTeardown) {
suiteTeardown.setParent(this);
suiteTeardowns.add(suiteTeardown);
}
public void removeSuiteTeardown() {
suiteTeardowns.clear();
}
public Optional<ForceTags> forceTags() {
return getSettingViewCreator().createViewAboutForceTags(forceTags);
}
public ForceTags newForceTag() {
final RobotToken dec = new RobotToken();
dec.setText(RobotTokenType.SETTING_FORCE_TAGS_DECLARATION
.getTheMostCorrectOneRepresentation(getParent().getParent().getRobotVersion()).getRepresentation());
final ForceTags tags = new ForceTags(dec);
addForceTags(tags);
return tags;
}
public List<ForceTags> getForceTags() {
return Collections.unmodifiableList(forceTags);
}
public void addForceTags(final ForceTags tags) {
tags.setParent(this);
forceTags.add(tags);
}
public void removeForceTags() {
forceTags.clear();
}
public Optional<DefaultTags> defaultTags() {
return getSettingViewCreator().createViewAboutDefaultTags(defaultTags);
}
public List<DefaultTags> getDefaultTags() {
return Collections.unmodifiableList(defaultTags);
}
public DefaultTags newDefaultTag() {
final RobotToken dec = new RobotToken();
dec.setText(RobotTokenType.SETTING_DEFAULT_TAGS_DECLARATION
.getTheMostCorrectOneRepresentation(getParent().getParent().getRobotVersion()).getRepresentation());
final DefaultTags tags = new DefaultTags(dec);
addDefaultTags(tags);
return tags;
}
public void addDefaultTags(final DefaultTags tags) {
tags.setParent(this);
defaultTags.add(tags);
}
public void removeDefaultTags() {
defaultTags.clear();
}
public Optional<TestSetup> testSetup() {
return getSettingViewCreator().createViewAboutTestSetup(testSetups);
}
public List<TestSetup> getTestSetups() {
return Collections.unmodifiableList(testSetups);
}
public TestSetup newTestSetup() {
final RobotToken dec = new RobotToken();
dec.setText(RobotTokenType.SETTING_TEST_SETUP_DECLARATION
.getTheMostCorrectOneRepresentation(getParent().getParent().getRobotVersion()).getRepresentation());
final TestSetup testSetup = new TestSetup(dec);
addTestSetup(testSetup);
return testSetup;
}
public void addTestSetup(final TestSetup testSetup) {
testSetup.setParent(this);
testSetups.add(testSetup);
}
public void removeTestSetup() {
testSetups.clear();
}
public Optional<TestTeardown> testTeardown() {
return getSettingViewCreator().createViewAboutTestTeardown(testTeardowns);
}
public List<TestTeardown> getTestTeardowns() {
return Collections.unmodifiableList(testTeardowns);
}
public TestTeardown newTestTeardown() {
final RobotToken dec = new RobotToken();
dec.setText(RobotTokenType.SETTING_TEST_TEARDOWN_DECLARATION
.getTheMostCorrectOneRepresentation(getParent().getParent().getRobotVersion()).getRepresentation());
final TestTeardown testTeardown = new TestTeardown(dec);
addTestTeardown(testTeardown);
return testTeardown;
}
public void addTestTeardown(final TestTeardown testTeardown) {
testTeardown.setParent(this);
testTeardowns.add(testTeardown);
}
public void removeTestTeardown() {
testTeardowns.clear();
}
public List<TestTemplate> getTestTemplates() {
return Collections.unmodifiableList(testTemplates);
}
public String getRobotViewAboutTestTemplate() {
String templateName = null;
boolean useGenerator = true;
final RobotVersion robotVersion = getParent().getParent().getRobotVersion();
if (robotVersion != null && robotVersion.isNewerThan(new RobotVersion(2, 9))) {
if (isDuplicatedTemplatesDeclaration()) {
useGenerator = false;
}
}
if (useGenerator) {
templateName = DataDrivenKeywordName.createRepresentation(testTemplates);
}
return templateName;
}
private boolean isDuplicatedTemplatesDeclaration() {
return testTemplates.size() != 1;
}
public TestTemplate newTestTemplate() {
final RobotToken dec = new RobotToken();
dec.setText(RobotTokenType.SETTING_TEST_TEMPLATE_DECLARATION
.getTheMostCorrectOneRepresentation(getParent().getParent().getRobotVersion()).getRepresentation());
final TestTemplate testTemplate = new TestTemplate(dec);
addTestTemplate(testTemplate);
return testTemplate;
}
public void addTestTemplate(final TestTemplate testTemplate) {
testTemplate.setParent(this);
testTemplates.add(testTemplate);
}
public void removeTestTemplate() {
testTemplates.clear();
}
public Optional<TestTimeout> testTimeout() {
return getSettingViewCreator().createViewAboutTestTimeout(testTimeouts);
}
public List<TestTimeout> getTestTimeouts() {
return Collections.unmodifiableList(testTimeouts);
}
public TestTimeout newTestTimeout() {
final RobotToken dec = new RobotToken();
dec.setText(RobotTokenType.SETTING_TEST_TIMEOUT_DECLARATION
.getTheMostCorrectOneRepresentation(getParent().getParent().getRobotVersion()).getRepresentation());
final TestTimeout testTimeout = new TestTimeout(dec);
addTestTimeout(testTimeout);
return testTimeout;
}
public void addTestTimeout(final TestTimeout testTimeout) {
testTimeout.setParent(this);
testTimeouts.add(testTimeout);
}
public void removeTestTimeout() {
testTimeouts.clear();
}
public List<UnknownSetting> getUnknownSettings() {
return Collections.unmodifiableList(unknownSettings);
}
public void addUnknownSetting(final UnknownSetting unknownSetting) {
unknownSetting.setParent(this);
unknownSettings.add(unknownSetting);
}
}