/******************************************************************************* * Copyright (c) 2013 itemis AG (http://www.itemis.eu). * 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 de.itemis.tooling.terminology.naming; import java.util.List; import javax.inject.Inject; import org.eclipse.emf.ecore.EObject; import org.eclipse.xtext.EcoreUtil2; import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider; import org.eclipse.xtext.naming.QualifiedName; import org.eclipse.xtext.nodemodel.INode; import org.eclipse.xtext.nodemodel.util.NodeModelUtils; import org.eclipse.xtext.util.IResourceScopeCache; import com.google.common.base.Optional; import com.google.inject.Provider; import de.itemis.tooling.terminology.terminology.Entry; import de.itemis.tooling.terminology.terminology.SubjectEntries; import de.itemis.tooling.terminology.terminology.Term; import de.itemis.tooling.terminology.terminology.TerminologyPackage; public class TerminologyNameProvider extends DefaultDeclarativeQualifiedNameProvider { @Inject IResourceScopeCache cache; private QualifiedName getCategoryName(EObject o) { final SubjectEntries cat = (SubjectEntries) EcoreUtil2 .getRootContainer(o); QualifiedName terminologyName = cache.get(cat, o.eResource(), new Provider<QualifiedName>() { public QualifiedName get() { List<INode> refNodes = NodeModelUtils .findNodesForFeature( cat, TerminologyPackage.Literals.SUBJECT_ENTRIES__SUBJECT); INode node = refNodes.get(0); String withoutHidden = node.getText().substring( node.getOffset() - node.getTotalOffset()); return QualifiedName.create(withoutHidden.split("\\.")); } }); return terminologyName; } QualifiedName qualifiedName(final Term term) { return getCategoryName(term).append(Optional.fromNullable(term.getName()).or("")); } QualifiedName qualifiedName(final Entry entry) { return getCategoryName(entry).append(Optional.fromNullable(entry.getName()).or("")); } }