| /** |
| * |
| * Copyright (c) 2011, 2018 - 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 |
| * |
| * Contributors: |
| * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation |
| * |
| * generated by Xtext 2.11.0 |
| * |
| */ |
| |
| package org.eclipse.osbp.xtext.signal.scoping |
| |
| import javax.inject.Inject |
| import org.eclipse.emf.ecore.EObject |
| import org.eclipse.emf.ecore.EReference |
| import org.eclipse.osbp.dsl.common.xtext.extensions.ModelExtensions |
| import org.eclipse.osbp.xtext.datainterchange.DataInterchange |
| import org.eclipse.osbp.xtext.datainterchange.DataInterchangeGroup |
| import org.eclipse.osbp.xtext.signal.SignalDSLPackage |
| import org.eclipse.osbp.xtext.signal.SignalScheduler |
| import org.eclipse.osbp.xtext.signal.SignalWatcher |
| import org.eclipse.osbp.xtext.signal.WatcherWithFileMask |
| import org.eclipse.osbp.xtext.signal.WatcherWithFileName |
| import org.eclipse.xtext.resource.EObjectDescription |
| import org.eclipse.xtext.resource.IEObjectDescription |
| import org.eclipse.xtext.scoping.IScope |
| import org.eclipse.xtext.scoping.impl.MapBasedScope |
| |
| /** |
| * This class contains custom scoping description. |
| * |
| * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#scoping |
| * on how and when to use it. |
| */ |
| class SignalDSLScopeProvider extends AbstractSignalDSLScopeProvider { |
| |
| @Inject extension ModelExtensions |
| |
| override getScope(EObject context, EReference reference) { |
| if (reference == SignalDSLPackage.Literals.SIGNAL_DATAINTERCHANGE__DATA_REF) { |
| return getScope_DataInterchanges(context, reference) |
| } |
| else { |
| super.getScope(context, reference) |
| } |
| } |
| |
| def getScope_DataInterchanges(EObject context, EReference reference) { |
| var result = <IEObjectDescription>newArrayList |
| |
| if (context !== null) { |
| |
| var signal = context.eContainer |
| var group = null as DataInterchangeGroup |
| if(signal instanceof WatcherWithFileMask){ |
| group = signal.interchangegroup |
| } |
| else if(signal instanceof WatcherWithFileName){ |
| group = signal.interchangegroup |
| } |
| else if(signal instanceof SignalScheduler){ |
| group = signal.interchangegroup |
| } |
| for(value : group.datInts){ |
| result.add(EObjectDescription.create((value as DataInterchange).name, (value as DataInterchange))) |
| } |
| } |
| return MapBasedScope.createScope(IScope.NULLSCOPE, result) |
| |
| } |
| |
| } |