| /****************************************************************************** |
| * * |
| * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) * |
| * * |
| * All rights reserved. This program and the accompanying materials * |
| * are made available under the terms of the Eclipse Public License 2.0 * |
| * which accompanies this distribution, and is available at * |
| * https://www.eclipse.org/legal/epl-2.0/ * |
| * * |
| * SPDX-License-Identifier: EPL-2.0 * |
| * * |
| *============================================================================* |
| * Initial contribution: * |
| * Loetz GmbH & Co. KG * |
| * * |
| * generated by xtext * |
| ******************************************************************************/ |
| package org.eclipse.osbp.xtext.dialogdsl.scoping |
| |
| import org.eclipse.emf.ecore.EObject |
| import org.eclipse.emf.ecore.EReference |
| import org.eclipse.osbp.dsl.semantic.dto.LDto |
| import org.eclipse.osbp.dsl.semantic.dto.LDtoAttribute |
| import org.eclipse.osbp.dsl.semantic.dto.LDtoInheritedAttribute |
| import org.eclipse.osbp.dsl.semantic.entity.LBean |
| import org.eclipse.osbp.xtext.action.ActionButton |
| import org.eclipse.osbp.xtext.action.ActionChart |
| import org.eclipse.osbp.xtext.action.ActionReport |
| import org.eclipse.osbp.xtext.action.ActionSelectWorkload |
| import org.eclipse.osbp.xtext.action.ActionTable |
| import org.eclipse.osbp.xtext.action.ActionToolbar |
| import org.eclipse.osbp.xtext.action.ActionUI |
| import org.eclipse.osbp.xtext.dialogdsl.Dialog |
| import org.eclipse.osbp.xtext.dialogdsl.DialogDSLPackage |
| import org.eclipse.osbp.xtext.dialogdsl.DialogFieldHook |
| import org.eclipse.osbp.xtext.oxtype.resource.EcoreUtil3 |
| import org.eclipse.xtext.resource.EObjectDescription |
| import org.eclipse.xtext.resource.IEObjectDescription |
| import org.eclipse.xtext.scoping.IScope |
| import org.eclipse.xtext.scoping.impl.FilteringScope |
| import org.eclipse.xtext.scoping.impl.MapBasedScope |
| |
| /** |
| * This class contains custom scoping description. |
| * |
| * see : http://www.eclipse.org/Xtext/documentation.html#scoping |
| * on how and when to use it |
| * |
| */ |
| class DialogDslScopeProvider extends AbstractDialogDslScopeProvider { |
| |
| override getScope(EObject context, EReference reference) { |
| if (reference == DialogDSLPackage.Literals.DIALOG__DTO) { |
| return getScope_Dialog_Dto(context as Dialog, reference) |
| } else if (reference == DialogDSLPackage.Literals.DIALOG_FIELD_HOOK__ATTRIBUTE) { |
| return getScope_Dialog_HookAttribute(context as DialogFieldHook, reference) |
| } else if (reference == DialogDSLPackage.Literals.DIALOG_FIELD_HOOK__POST_FOCUS || |
| reference == DialogDSLPackage.Literals.DIALOG_FIELD_HOOK__PRE_FOCUS) { |
| return getScope_Dialog_HookFocus(context as DialogFieldHook, reference) |
| } else if (reference == DialogDSLPackage.Literals.DIALOG__POST_SAVE || |
| reference == DialogDSLPackage.Literals.DIALOG__PRE_SAVE || |
| reference == DialogDSLPackage.Literals.DIALOG__INITIALIZATION) { |
| return getScope_Dialog_Hook(context as Dialog, reference) |
| } else if (reference == DialogDSLPackage.Literals.DIALOG__TOOLBAR) { |
| return getScope_Dialog_Toolbar(context as Dialog, reference) |
| } |
| super.getScope(context, reference) |
| } |
| |
| def IScope getScope_Dialog_Toolbar(Dialog dialog, EReference reference) { |
| var superScope = super.getScope(dialog, reference) |
| return new FilteringScope(superScope, [ |
| if (it.EObjectOrProxy instanceof ActionToolbar) { |
| var toolbar = it.EObjectOrProxy as ActionToolbar |
| toolbar = EcoreUtil3.resolve(toolbar, dialog.eResource.resourceSet) as ActionToolbar |
| return toolbar.filterToolbarScopeCondition |
| } |
| return false |
| ]) |
| } |
| |
| private def filterToolbarScopeCondition (ActionToolbar toolbar) { |
| var allItemsOfDialog = true |
| if (toolbar !== null) { |
| for(item:toolbar.actions) { |
| if(item instanceof ActionButton) { |
| if(item.command.actionType instanceof ActionChart || |
| item.command.actionType instanceof ActionTable || |
| item.command.actionType instanceof ActionReport || |
| item.command.actionType instanceof ActionSelectWorkload) { |
| allItemsOfDialog = false |
| } |
| } |
| } |
| } |
| return allItemsOfDialog |
| } |
| |
| def getScope_Dialog_Hook(Dialog dialog, EReference reference) { |
| val result = <IEObjectDescription>newArrayList |
| if(dialog.group !== null) { |
| dialog.group.dialogHooks.forEach[ |
| result.add(EObjectDescription.create(it.name, it)) |
| ] |
| } |
| return MapBasedScope.createScope(IScope.NULLSCOPE, result) |
| } |
| |
| def getScope_Dialog_HookFocus(DialogFieldHook dialogFieldHook, EReference reference) { |
| val result = <IEObjectDescription>newArrayList |
| var group = (dialogFieldHook.eContainer as Dialog).group |
| if(group !== null) { |
| group.dialogHooks.forEach[ |
| result.add(EObjectDescription.create(it.name, it)) |
| ] |
| } |
| return MapBasedScope.createScope(IScope.NULLSCOPE, result) |
| } |
| |
| def getScope_Dialog_HookAttribute(DialogFieldHook dialogFieldHook, EReference reference) { |
| val result = <IEObjectDescription>newArrayList |
| var dto = (dialogFieldHook.eContainer as Dialog).dto |
| if(dto !== null) { |
| dto.features.filter[it instanceof LDtoAttribute || it instanceof LDtoInheritedAttribute].forEach[ |
| result.add(EObjectDescription.create(it.name, it)) |
| ] |
| } |
| return MapBasedScope.createScope(IScope.NULLSCOPE, result) |
| } |
| |
| def getScope_Dialog_Dto(Dialog dialog, EReference reference) { |
| var superScope = super.getScope(dialog, reference) |
| return new FilteringScope(superScope, [ |
| var dtoObj = EcoreUtil3.resolve(it.EObjectOrProxy, dialog.eResource.resourceSet) |
| if(dtoObj instanceof LDto) { |
| return !(dtoObj.wrappedType instanceof LBean) |
| } |
| return false |
| ]) |
| } |
| |
| } |