/* * 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.presenter.update; import java.util.Arrays; import java.util.List; import org.rf.ide.core.testdata.model.AModelElement; import org.rf.ide.core.testdata.model.ICommentHolder; import org.rf.ide.core.testdata.model.presenter.CommentServiceHandler; import org.rf.ide.core.testdata.model.presenter.CommentServiceHandler.ETokenSeparator; import org.rf.ide.core.testdata.model.presenter.update.settings.DefaultTagsModelOperation; import org.rf.ide.core.testdata.model.presenter.update.settings.DocumentationModelOperation; import org.rf.ide.core.testdata.model.presenter.update.settings.ForceTagsModelOperation; import org.rf.ide.core.testdata.model.presenter.update.settings.LibraryImportModelOperation; import org.rf.ide.core.testdata.model.presenter.update.settings.MetadataModelOperation; import org.rf.ide.core.testdata.model.presenter.update.settings.ResourceImportModelOperation; import org.rf.ide.core.testdata.model.presenter.update.settings.SuiteSetupModelOperation; import org.rf.ide.core.testdata.model.presenter.update.settings.SuiteTeardownModelOperation; import org.rf.ide.core.testdata.model.presenter.update.settings.TestSetupModelOperation; import org.rf.ide.core.testdata.model.presenter.update.settings.TestTeardownModelOperation; import org.rf.ide.core.testdata.model.presenter.update.settings.TestTemplateModelOperation; import org.rf.ide.core.testdata.model.presenter.update.settings.TestTimeoutModelOperation; import org.rf.ide.core.testdata.model.presenter.update.settings.VariablesImportModelOperation; import org.rf.ide.core.testdata.model.table.ARobotSectionTable; import org.rf.ide.core.testdata.model.table.SettingTable; import org.rf.ide.core.testdata.text.read.IRobotTokenType; import org.rf.ide.core.testdata.text.read.recognizer.RobotTokenType; public class SettingTableModelUpdater { private static final List<ISettingTableElementOperation> elementOperations = Arrays.asList( new SuiteSetupModelOperation(), new SuiteTeardownModelOperation(), new TestSetupModelOperation(), new TestTeardownModelOperation(), new TestTemplateModelOperation(), new TestTimeoutModelOperation(), new ForceTagsModelOperation(), new DefaultTagsModelOperation(), new DocumentationModelOperation(), new LibraryImportModelOperation(), new ResourceImportModelOperation(), new VariablesImportModelOperation(), new MetadataModelOperation()); public void update(final AModelElement<?> modelElement, final int index, final String value) { if (modelElement != null) { final ISettingTableElementOperation operationHandler = getOperationHandler(modelElement); if (operationHandler != null) { operationHandler.update(modelElement, index, value); } } } public void updateComment(final AModelElement<?> modelElement, final String value) { if (modelElement != null) { CommentServiceHandler.update((ICommentHolder) modelElement, ETokenSeparator.PIPE_WRAPPED_WITH_SPACE, value); } } public AModelElement<?> create(final ARobotSectionTable sectionTable, final int tableIndex, final String settingName, final String comment, final List<String> args) { if (sectionTable != null && sectionTable instanceof SettingTable) { final ISettingTableElementOperation operationHandler = getOperationHandler(settingName); if (operationHandler != null) { return operationHandler.create((SettingTable) sectionTable, tableIndex, args, comment); } } return null; } public void insert(final ARobotSectionTable sectionTable, int index, AModelElement<?> modelElement) { if (sectionTable != null && sectionTable instanceof SettingTable) { final ISettingTableElementOperation operationHandler = getOperationHandler(modelElement); if (operationHandler != null) { operationHandler.insert((SettingTable) sectionTable, index, modelElement); } } } public void remove(final ARobotSectionTable sectionTable, final AModelElement<?> modelElement) { if (sectionTable != null && sectionTable instanceof SettingTable) { final ISettingTableElementOperation operationHandler = getOperationHandler(modelElement); if (operationHandler != null) { operationHandler.remove((SettingTable) sectionTable, modelElement); } } } private ISettingTableElementOperation getOperationHandler(final String settingName) { return getOperationHandler(RobotTokenType.findTypeOfDeclarationForSettingTable(settingName)); } private ISettingTableElementOperation getOperationHandler(final AModelElement<?> elem) { ISettingTableElementOperation oper = null; for (final ISettingTableElementOperation cOper : elementOperations) { if (cOper.isApplicable(elem.getModelType())) { oper = cOper; break; } } return oper; } private ISettingTableElementOperation getOperationHandler(final IRobotTokenType type) { ISettingTableElementOperation oper = null; for (final ISettingTableElementOperation cOper : elementOperations) { if (cOper.isApplicable(type)) { oper = cOper; break; } } return oper; } }