/** * <copyright> * * Copyright (c) 2011 Christian Kerl * 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 * * Contributors: * Christian Kerl - Initial API and implementation * * </copyright> */ package org.eclipselab.emf.ecore.protobuf.util; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.List; import java.util.Queue; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EPackage; /** * * * @author Christian Kerl */ public class EcoreUtil2 { public static EPackage getRootPackage(EClassifier eClassifier) { return getRootPackage(eClassifier.getEPackage()); } public static EPackage getRootPackage(EPackage ePackage) { EPackage eRootPackage = ePackage; while(eRootPackage.getESuperPackage() != null) { eRootPackage = eRootPackage.getESuperPackage(); } return eRootPackage; } public static List<EClassifier> getAllClassifiersFromPackageHierarchy(EPackage eRootPackage) { List<EClassifier> result = new ArrayList<EClassifier>(); Queue<EPackage> ePackages = new ArrayDeque<EPackage>(); ePackages.add(eRootPackage); while(!ePackages.isEmpty()) { EPackage ePackage = ePackages.poll(); ePackages.addAll(ePackage.getESubpackages()); result.addAll(ePackage.getEClassifiers()); } return result; } public static EClassifier getClassifierFromPackageHierarchy(EPackage eRootPackage, String eClassifierName) { EClassifier result = null; Queue<EPackage> ePackages = new ArrayDeque<EPackage>(); ePackages.add(eRootPackage); while(!ePackages.isEmpty() && result == null) { EPackage ePackage = ePackages.poll(); ePackages.addAll(ePackage.getESubpackages()); result = ePackage.getEClassifier(eClassifierName); } return result; } }