/***********************************************************************
* Copyright (c) 2007, 2008 INRIA 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:
* INRIA - initial API and implementation
*
* $Id: RegisteredPackagesContentProvider.java,v 1.3 2008/05/12 21:52:32 lbigearde Exp $
**********************************************************************/
package org.eclipse.emf.ecoretools.registration.view;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EPackage.Registry;
import org.eclipse.emf.ecoretools.registration.EMFRegistryHelper;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
/**
* ContentProvider for the tree of registered packages
*/
public class RegisteredPackagesContentProvider implements ITreeContentProvider {
/**
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
* java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// Nothing to do
}
/**
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
public void dispose() {
// Nothing to do
}
/**
* @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
*/
public Object[] getChildren(Object arg0) {
EPackage p = (EPackage) arg0;
Set<String> uris = EMFRegistryHelper.getRegisteredChildren(p.getNsURI());
List<EPackage> children = new ArrayList<EPackage>();
for (String s : uris) {
Object o = Registry.INSTANCE.get(s);
if (o instanceof EPackage)
children.add((EPackage) o);
}
return children.toArray();
}
/**
* Tells if the given element has children
*
* @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
*/
public boolean hasChildren(Object arg0) {
EPackage p = (EPackage) arg0;
// a good guess about if we have children or not is if we have
// subpackages
// a better evaluation should get only valid children , ie. registered
// children as in getChildren method
return !p.getESubpackages().isEmpty();
}
/**
* @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
*/
public Object getParent(Object arg0) {
EPackage result = null;
EPackage p = (EPackage) arg0;
if (p.eContainer() != null) {
String nsURI = ((EPackage) p.eContainer()).getNsURI();
if (EMFRegistryHelper.isRegistered(nsURI)) {
result = (EPackage) p.eContainer();
}
}
return result;
}
/**
* Element for the Table from the registered instances
*
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
public Object[] getElements(Object parent) {
ArrayList<EPackage> table = new ArrayList<EPackage>();
for (String uri : Registry.INSTANCE.keySet()) {
Object obj = Registry.INSTANCE.get(uri);
if (obj instanceof EPackage) {
// EPackage p = (EPackage) obj;
// add only root packages
if (getParent(obj) == null)
table.add((EPackage) obj);
}
}
return table.toArray();
}
}