org.eclipse.emf.eson.scoping.SimpleEPackageScope.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.emf.eson.scoping.SimpleEPackageScope.java

Source

/*
 * #%L
 * org.eclipse.emf.eson
 * %%
 * Copyright (C) 2016 Michael Vorburger 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
 * #L%
 */
package org.eclipse.emf.eson.scoping;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.xtext.resource.IEObjectDescription;
import org.eclipse.xtext.scoping.IScope;
import org.eclipse.xtext.scoping.impl.SimpleScope;

import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;

/**
 * IScope with special handling for EPackage.
 *
 * @author Michael Vorburger
 */
public class SimpleEPackageScope extends SimpleScope implements IScope {

    public SimpleEPackageScope(IScope parent, Iterable<IEObjectDescription> transform) {
        super(parent, transform);
    }

    @Override
    public Iterable<IEObjectDescription> getElements(EObject object) {
        Iterable<IEObjectDescription> result = super.getElements(object);
        if (Iterables.isEmpty(result) && (object instanceof EPackage)) {
            final EPackage ePackage = (EPackage) object;
            Iterable<IEObjectDescription> localElements = getLocalElementsByEClass(EcorePackage.Literals.EPACKAGE);
            result = Iterables.filter(localElements, new Predicate<IEObjectDescription>() {
                @Override
                public boolean apply(IEObjectDescription input) {
                    return input.getQualifiedName().getFirstSegment().equals(ePackage.getNsURI());
                }
            });
        }
        return result;
    }

    protected Iterable<IEObjectDescription> getLocalElementsByEClass(final EClass eClass) {
        Iterable<IEObjectDescription> localElements = getAllLocalElements();
        return Iterables.filter(localElements, new Predicate<IEObjectDescription>() {
            @Override
            public boolean apply(IEObjectDescription input) {
                return input.getEClass().equals(eClass);
            }
        });
    }

}