/*
* 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.filter;
import org.eclipse.jface.viewers.IFilter;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.xsd.XSDSimpleTypeDefinition;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.ui.UiConstants;
/**
* @since 8.0
*/
public class StructuredViewerDatatypeFilterer extends StructuredViewerFilterer implements IFilter {
private static final String GROUP_TITLE = UiConstants.Util.getString("StructuredViewerDatatypeFilterer.title"); //$NON-NLS-1$
private static final String BUTTON_BUILTIN = UiConstants.Util.getString("StructuredViewerDatatypeFilterer.builtin"); //$NON-NLS-1$
private static final String BUTTON_USERDEF = UiConstants.Util.getString("StructuredViewerDatatypeFilterer.userdef"); //$NON-NLS-1$
Button bltBtn;
Button usrBtn;
boolean showUser = true;
private boolean showSimple = true;
boolean showBuiltin = true;
public void setAllowSimple( boolean allow ) {
showSimple = allow;
if (bltBtn != null) {
updateFilter();
} // endif
}
@Override
public Control addControl( Composite parent,
FormToolkit ftk ) {
Group grp = new Group(parent, SWT.NONE);
if (ftk != null) {
ftk.adapt(grp);
} // endif
grp.setText(GROUP_TITLE);
GridLayout gl = new GridLayout();
gl.numColumns = 2;
grp.setLayout(gl);
bltBtn = createButton(grp, ftk, BUTTON_BUILTIN);
bltBtn.setSelection(true);
usrBtn = createButton(grp, ftk, BUTTON_USERDEF);
usrBtn.setSelection(true);
// Add listener:
SelectionListener sl = new SelectionListener() {
@Override
public void widgetSelected( SelectionEvent e ) {
showUser = usrBtn.getSelection();
showBuiltin = bltBtn.getSelection();
scheduleUpdate();
}
@Override
public void widgetDefaultSelected( SelectionEvent e ) {
}
}; // endanon
bltBtn.addSelectionListener(sl);
usrBtn.addSelectionListener(sl);
updateFilter();
return grp;
}
private Button createButton( Composite parent,
FormToolkit ftk,
String text ) {
Button btn;
if (ftk != null) {
btn = ftk.createButton(parent, text, SWT.CHECK);
} else {
btn = new Button(parent, SWT.CHECK);
btn.setText(text);
} // endif
return btn;
}
@Override
protected ViewerFilter createViewerFilter() {
return new ViewerFilter() {
@Override
public boolean select( Viewer viewer,
Object parentElement,
Object element ) {
return StructuredViewerDatatypeFilterer.this.select(element);
}
}; // endanon ViewerFilter
}
@Override
protected IFilter createVirtualFilter() {
return this;
}
//
// Implementation of IFilter methods:
//
@Override
public boolean select( Object toTest ) {
// quick cases:
if (showBuiltin && showUser && showSimple) {
// keep all:
return true;
} else if (!showBuiltin && !showUser && !showSimple) {
// remove all:
return false;
} // endif
XSDSimpleTypeDefinition std = (XSDSimpleTypeDefinition)toTest;
// built-in:
boolean isBuiltin = ModelerCore.getBuiltInTypesManager().isBuiltInDatatype(std);
if (isBuiltin) {
// ONLY remove builtin if instructed; we want to skip the other filters in this case:
return showBuiltin;
} // endif
// Enterprise:
if (showUser) {
// we are showing user-defined types; filter simple types if needed:
return showSimple || ModelerCore.getDatatypeManager(std).isEnterpriseDatatype(std);
// interpreted, the above line returns true when we are showing all user-defined
// types (we don't care whether simple or not), or, if not showSimple, the type
// is an enterprise type.
} // endif
return false;
}
}