/*******************************************************************************
* 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
******************************************************************************/
/*
* generated by Xtext
*/
package de.itemis.tooling.terminology.scoping;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.scoping.IScope;
import org.eclipse.xtext.scoping.Scopes;
import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider;
import com.google.common.base.Function;
import de.itemis.tooling.terminology.terminology.Author;
import de.itemis.tooling.terminology.terminology.Customer;
import de.itemis.tooling.terminology.terminology.Gr;
import de.itemis.tooling.terminology.terminology.Language;
import de.itemis.tooling.terminology.terminology.Product;
import de.itemis.tooling.terminology.terminology.Status;
import de.itemis.tooling.terminology.terminology.SubjectEntries;
import de.itemis.tooling.terminology.terminology.Terminology;
/**
* This class contains custom scoping description.
*
* see : http://www.eclipse.org/Xtext/documentation/latest/xtext.html#scoping
* on how and when to use it
*
*/
public class TerminologyScopeProvider extends AbstractDeclarativeScopeProvider {
private Terminology getTerminology(SubjectEntries entries){
return (Terminology) entries.getSubject().eContainer();
}
public IScope scope_MetaData_status(SubjectEntries entries, EReference ref){
EList<Status> status = getTerminology(entries).getStatus();
return Scopes.scopeFor(status, new Function<Status, QualifiedName>() {
public QualifiedName apply(Status s){
return QualifiedName.create(s.getName());
}
}, IScope.NULLSCOPE);
}
public IScope scope_Term_language(SubjectEntries entries, EReference ref){
EList<Language> languages = getTerminology(entries).getLanguages();
return Scopes.scopeFor(languages);
}
public IScope scope_Entry_missingPreferredTermLangage(SubjectEntries entries, EReference ref){
EList<Language> languages = getTerminology(entries).getLanguages();
return Scopes.scopeFor(languages);
}
public IScope scope_Entry_relatedEntries(SubjectEntries entries, EReference ref){
return Scopes.scopeFor(entries.getEntries());
}
public IScope scope_Term_gr(SubjectEntries entries, EReference ref){
EList<Gr> grs = getTerminology(entries).getGrs();
return Scopes.scopeFor(grs);
}
public IScope scope_Term_customers(SubjectEntries entries, EReference ref){
EList<Customer> customers = getTerminology(entries).getCustomers();
return Scopes.scopeFor(customers);
}
public IScope scope_Term_products(SubjectEntries entries, EReference ref){
EList<Product> products = getTerminology(entries).getProducts();
return Scopes.scopeFor(products);
}
public IScope scope_MetaData_createdAuthor(SubjectEntries entries, EReference ref){
return getAuthors(entries);
}
public IScope scope_MetaData_modifiedAuthor(SubjectEntries entries, EReference ref){
return getAuthors(entries);
}
private IScope getAuthors(SubjectEntries entries) {
EList<Author> authors = getTerminology(entries).getAuthors();
return Scopes.scopeFor(authors);
}
}