blob: 9539dc30b46c14865c3817187e62c7b9de97e94e [file] [log] [blame]
/******************************************************************************
* *
* 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
])
}
}