org.jnario.feature.naming.FeatureQualifiedNameProvider Maven / Gradle / Ivy
/*******************************************************************************
* 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.naming;
import static org.eclipse.xtext.EcoreUtil2.getContainerOfType;
import static org.eclipse.xtext.util.Strings.isEmpty;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtend.core.naming.XtendQualifiedNameProvider;
import org.eclipse.xtend.core.xtend.XtendFile;
import org.eclipse.xtend.core.xtend.XtendTypeDeclaration;
import org.eclipse.xtext.EcoreUtil2;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.util.IResourceScopeCache;
import org.jnario.feature.feature.Feature;
import org.jnario.feature.feature.Scenario;
import org.jnario.feature.feature.Step;
import org.jnario.feature.feature.StepReference;
import com.google.inject.Inject;
import com.google.inject.Provider;
/**
* @author Birgit Engelmann - Initial contribution and API
* @author Sebastian Benz
*/
public class FeatureQualifiedNameProvider extends XtendQualifiedNameProvider {
private StepNameProvider stepNameProvider;
@Inject
private IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE;
@Inject
public FeatureQualifiedNameProvider(StepNameProvider stepNameProvider) {
this.stepNameProvider = stepNameProvider;
}
@Override
public QualifiedName getFullyQualifiedName(EObject obj) {
if (obj instanceof Step) {
return getStepName((Step) obj);
}
if(obj instanceof Scenario){
String typeName = ((Scenario)obj).getName();
if (typeName == null)
return null;
String packageName = getPackageName(obj);
if (packageName != null) {
return getConverter().toQualifiedName(packageName).append(typeName);
}
return QualifiedName.create(typeName);
}
else{
return super.getFullyQualifiedName(obj);
}
}
public QualifiedName getStepName(final Step step) {
return cache.get(step, step.eResource(), new Provider() {
public QualifiedName get() {
String name = null;
if (step instanceof StepReference) {
name = stepNameProvider.nameOf((StepReference)step);
name = stepNameProvider.removeKeywords(name);
}else{
name = step.getName();
}
if(isEmpty(name)){
return null;
}else{
String formattedName = format(name);
return toQualifiedName(step, formattedName);
}
}
});
}
private QualifiedName toQualifiedName(EObject obj, String name) {
String packageName = getPackageName(obj);
if(isEmpty(packageName)){
return QualifiedName.create(name);
}
List segments = new LinkedList();
StringBuilder segment = new StringBuilder();
for(int i = 0; i < packageName.length(); i++){
char c = packageName.charAt(i);
if(c == '.'){
segments.add(segment.toString());
segment = new StringBuilder();
}else{
segment.append(c);
}
}
if(segment.length() > 0){
segments.add(segment.toString());
}
segments.add(name);
return QualifiedName.create(segments);
}
public String getPackageName(EObject obj) {
XtendFile file = getContainerOfType(obj, XtendFile.class);
return file.getPackage();
}
private String format(String name) {
name = stepNameProvider.removeArguments(name);
if(name.endsWith(".")){
name = name.substring(0, name.length()-1);
}
return name;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy