
org.jnario.feature.linking.FeatureLinkingService Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.jnario.standalone Show documentation
Show all versions of org.jnario.standalone Show documentation
The required libraries to execute Jnario specifications without Eclipse.
The newest version!
/*******************************************************************************
* Copyright (c) 2012 BMW Car IT and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.jnario.feature.linking;
import static org.eclipse.xtext.util.Strings.isEmpty;
import java.util.Collections;
import java.util.List;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.xtext.linking.impl.DefaultLinkingService;
import org.eclipse.xtext.linking.impl.IllegalNodeException;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.nodemodel.INode;
import org.eclipse.xtext.resource.IEObjectDescription;
import org.eclipse.xtext.scoping.IScope;
import org.jnario.feature.feature.FeaturePackage;
import org.jnario.feature.feature.Step;
import org.jnario.feature.feature.StepReference;
import org.jnario.feature.naming.StepNameProvider;
import com.google.inject.Inject;
/**
* @author Birgit Engelmann - Initial contribution and API
*/
public class FeatureLinkingService extends DefaultLinkingService {
@Inject
private StepNameProvider stepNameProvider;
@Inject
private IQualifiedNameConverter qualifiedNameConverter;
public List getLinkedObjects(EObject context, EReference ref, INode node)
throws IllegalNodeException {
if(context instanceof StepReference && ref == FeaturePackage.Literals.STEP_REFERENCE__REFERENCE){
return getLinkedStep(context, ref, node);
}else{
return super.getLinkedObjects(context, ref, node);
}
}
public List getLinkedStep(EObject context, EReference ref, INode node)
throws IllegalNodeException {
final EClass requiredType = ref.getEReferenceType();
if (requiredType == null)
return Collections. emptyList();
final String crossRefString = getReferencedStepName(node);
if (crossRefString != null && !crossRefString.equals("")) {
final IScope scope = getScope(context, ref);
QualifiedName qualifiedLinkName = qualifiedNameConverter.toQualifiedName(crossRefString);
IEObjectDescription eObjectDescription = scope.getSingleElement(qualifiedLinkName);
if (eObjectDescription != null)
return Collections.singletonList(eObjectDescription.getEObjectOrProxy());
}
return Collections.emptyList();
}
private String getReferencedStepName(INode node) {
String crossRefString = getCrossRefNodeAsString(node);
crossRefString = stepNameProvider.removeArguments(crossRefString);
return crossRefString;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy