| /** |
| * |
| * Copyright (c) 2011, 2016 - 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 |
| * |
| */ |
| package org.eclipse.osbp.xtext.datamartdsl.util; |
| |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.xtext.naming.QualifiedName; |
| import org.eclipse.xtext.resource.EObjectDescription; |
| import org.eclipse.xtext.resource.IEObjectDescription; |
| import org.eclipse.xtext.scoping.IScope; |
| import org.eclipse.xtext.scoping.Scopes; |
| import org.eclipse.xtext.scoping.impl.SimpleScope; |
| |
| import com.google.common.base.Function; |
| import com.google.common.base.Predicates; |
| import com.google.common.collect.Iterables; |
| |
| /** |
| * The Class DatamartScopes. |
| */ |
| public class DatamartScopes extends Scopes { |
| |
| /** |
| * creates a scope using the passed function to compute the names and sets |
| * the passed scope as the parent scope. |
| * |
| * @param <T> |
| * the generic type |
| * @param elements |
| * the elements |
| * @return the i scope |
| */ |
| public static <T extends EObject> IScope scopeForEntity(Iterable<? extends T> elements) { |
| return scopeForString(elements, new DatamartMemberEntityNameComputation(), IScope.NULLSCOPE); |
| } |
| |
| /** |
| * creates a scope using the passed function to compute the names and sets |
| * the passed scope as the parent scope. |
| * |
| * @param <T> |
| * the generic type |
| * @param elements |
| * the elements |
| * @return the i scope |
| */ |
| public static <T extends EObject> IScope scopeForLEntityRef(Iterable<? extends T> elements) { |
| return scopeFor(elements, new LEntityRefFQNComputation(), IScope.NULLSCOPE); |
| } |
| |
| /** |
| * creates a scope using the passed function to compute the names and sets |
| * the passed scope as the parent scope. |
| * |
| * @param <T> |
| * the generic type |
| * @param elements |
| * the elements |
| * @param nameComputation |
| * the name computation |
| * @param outer |
| * the outer |
| * @return the i scope |
| */ |
| public static <T extends EObject> IScope scopeForString(Iterable<? extends T> elements, |
| final Function<T, String> nameComputation, IScope outer) { |
| return new SimpleScope(outer,scopedElementsForString(elements, nameComputation)); |
| } |
| |
| /** |
| * transforms an {@link Iterable} of {@link EObject}s into an |
| * {@link Iterable} of {@link IEObjectDescription}s computing the name of |
| * the elements using the passed {@link Function} If the passed function |
| * returns null the object is filtered out. |
| * |
| * @param <T> |
| * the generic type |
| * @param elements |
| * the elements |
| * @param nameComputation |
| * the name computation |
| * @return the iterable |
| */ |
| public static <T extends EObject> Iterable<IEObjectDescription> scopedElementsForString(Iterable<? extends T> elements, |
| final Function<T, String> nameComputation) { |
| Iterable<IEObjectDescription> transformed = Iterables.transform(elements, |
| new Function<T, IEObjectDescription>() { |
| public IEObjectDescription apply(T from) { |
| final QualifiedName qualifiedName = QualifiedName.create(nameComputation.apply(from)); |
| if (qualifiedName != null) |
| return new EObjectDescription(qualifiedName, from, null); |
| return null; |
| } |
| }); |
| return Iterables.filter(transformed, Predicates.notNull()); |
| } |
| |
| |
| |
| } |