/******************************************************************************* * Copyright (c) 2007, 2009 Borland Software Corporation 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 * * Contributors: * Borland Software Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.m2m.internal.qvt.oml.emf.util.ui.choosers.metamodel; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EPackage; public class EPackageNode extends EObjectNode { public EPackageNode(EPackage pack, ChooserNode parent) { super(pack, parent); myChildren = null; } public EPackage getEPackage() { return (EPackage)getObj(); } @Override public boolean hasChildren() { if(myChildren == null) { myChildren = getChildNodes(); } return myChildren.length > 0; } @Override public ChooserNode[] getChildren() { if(myChildren == null) { myChildren = getChildNodes(); } return myChildren; } protected ChooserNode[] getChildNodes() { return getChildNodes(getEPackage(), new NodeMaker() { public ChooserNode makePackageNode(EPackage pack) { return new EPackageNode(pack, EPackageNode.this); } public ChooserNode makeClassNode(EClass cls) { return new EClassNode(cls, EPackageNode.this); }}); } public static interface NodeMaker { ChooserNode makePackageNode(EPackage pack); ChooserNode makeClassNode(EClass cls); } public static ChooserNode[] getChildNodes(EPackage pack, NodeMaker maker) { List<ChooserNode> nodes = new ArrayList<ChooserNode>(); for(Iterator<?> it = pack.getESubpackages().iterator(); it.hasNext(); ) { EPackage subPack = (EPackage)it.next(); nodes.add(maker.makePackageNode(subPack)); } for(Iterator<?> it = pack.getEClassifiers().iterator(); it.hasNext(); ) { EClassifier classifier = (EClassifier) it.next(); if(classifier instanceof EClass) { EClass cls = (EClass)classifier; nodes.add(maker.makeClassNode(cls)); } } return nodes.toArray(new ChooserNode[nodes.size()]); } private ChooserNode[] myChildren; }