/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.ui.viewsupport;
import java.util.ArrayList;
import java.util.Collections;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.teiid.core.designer.ModelerCoreException;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.core.types.DatatypeManager;
import org.teiid.designer.ui.UiConstants;
/**
* DatatypeHierarchyTreeViewer is a reusable TreeViewer to display the Datatype hierarchy.
*
* @since 8.0
*/
public class DatatypeHierarchyTreeViewer extends TreeViewer {
// private EObject selectedDatatype;
/**
* Construct an instance of DatatypeHierarchyTreeViewer.
* @param parent
*/
public DatatypeHierarchyTreeViewer(Composite parent) {
this(parent, SWT.MULTI);
}
public DatatypeHierarchyTreeViewer(Composite parent, int style) {
super(parent, style | SWT.H_SCROLL | SWT.V_SCROLL);
setContentProvider(new DatatypeTreeContentProvider());
setLabelProvider(ModelUtilities.getEMFLabelProvider());
super.setInput(Collections.EMPTY_LIST);
}
/**
* Construct an instance of DatatypeHierarchyTreeViewer.
* @param parent
*/
public DatatypeHierarchyTreeViewer(Composite parent, int style, EObject selectedDatatype) {
this(parent, style);
// this.selectedDatatype = selectedDatatype;
ArrayList list = new ArrayList(1);
list.add(selectedDatatype);
super.setInput(list);
}
class DatatypeTreeContentProvider implements ITreeContentProvider {
private DatatypeManager datatypeManager;
public DatatypeTreeContentProvider() {
datatypeManager = ModelerCore.getWorkspaceDatatypeManager(); // Assumed to be in workspace!!!
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
@Override
public void dispose() {
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
*/
@Override
public Object[] getChildren(Object parentElement) {
Object[] result = new Object[0];
try {
result = datatypeManager.getSubtypes((EObject)parentElement);
} catch (ModelerCoreException e) {
UiConstants.Util.log(e);
}
return result;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
@Override
public Object[] getElements(Object inputElement) {
Object[] result = new Object[1];
try {
result[0] = datatypeManager.getAnySimpleType();
} catch (ModelerCoreException e) {
UiConstants.Util.log(e);
}
return result;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
*/
@Override
public Object getParent(Object element) {
return datatypeManager.getBaseType((EObject) element);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
*/
@Override
public boolean hasChildren(Object element) {
return getChildren(element).length > 0;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
*/
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}
}