/*
* 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.common.wizard;
import java.net.MalformedURLException;
import java.net.URL;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.teiid.core.designer.util.CoreArgCheck;
import org.teiid.core.designer.util.I18nUtil;
import org.teiid.designer.ui.common.UiConstants;
import org.teiid.designer.ui.common.util.WidgetFactory;
import org.teiid.designer.ui.common.widget.AbstractTableLabelProvider;
/**
* @since 4.0
*/
final class WizardSelectionPage extends WizardPage implements UiConstants {
private static final String I18N_PREFIX = I18nUtil.getPropertyPrefix(WizardSelectionPage.class);
private static final String TITLE = getString("title"); //$NON-NLS-1$
private static final String INITIAL_MESSAGE = getString("initialMessage"); //$NON-NLS-1$
private static final String SELECT_LABEL = getString("selectLabel"); //$NON-NLS-1$
/**
* @since 4.0
*/
private static String getString( final String id ) {
return Util.getString(I18N_PREFIX + id);
}
IConfigurationElement[] elems;
private ViewerSorter sorter;
/**
* @since 4.0
*/
public WizardSelectionPage( final IConfigurationElement[] elements,
final ViewerSorter sorter ) {
super(WizardSelectionPage.class.getSimpleName(), TITLE, null);
CoreArgCheck.isNotNull(elements);
this.elems = elements;
this.sorter = sorter;
setMessage(INITIAL_MESSAGE);
}
/**
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
* @since 4.0
*/
@Override
public void createControl( final Composite parent ) {
// Create page
final Composite pg = WidgetFactory.createPanel(parent);
setControl(pg);
// Add widgets to page
final Label label = new Label(pg, SWT.NONE);
label.setText(SELECT_LABEL);
final TableViewer viewer = WidgetFactory.createTableViewer(pg);
viewer.setContentProvider(new IStructuredContentProvider() {
@Override
public void dispose() {
}
@Override
public Object[] getElements( final Object inputElement ) {
return WizardSelectionPage.this.elems;
}
@Override
public void inputChanged( final Viewer viewer,
final Object oldInput,
final Object newInput ) {
}
});
viewer.setLabelProvider(new AbstractTableLabelProvider() {
@Override
public Image getColumnImage( final Object element,
final int column ) {
try {
final AbstractSelectionWizard wizard = (AbstractSelectionWizard)getWizard();
final String icon = wizard.getSelectedWizardIcon((IConfigurationElement)element);
if (icon != null) {
final URL baseUrl = Platform.getBundle(((IConfigurationElement)element).getDeclaringExtension().getNamespaceIdentifier()).getEntry("/"); //$NON-NLS-1$
final URL url = new URL(baseUrl, icon);
return ImageDescriptor.createFromURL(url).createImage();
}
} catch (final MalformedURLException err) {
Util.log(err);
}
return ImageDescriptor.getMissingImageDescriptor().createImage();
}
@Override
public String getColumnText( final Object element,
final int column ) {
final AbstractSelectionWizard wizard = (AbstractSelectionWizard)getWizard();
return wizard.getSelectedWizardName((IConfigurationElement)element);
}
});
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged( final SelectionChangedEvent event ) {
IStructuredSelection sel = (IStructuredSelection)event.getSelection();
((AbstractSelectionWizard)getWizard()).setSelectedWizard(sel);
if (sel != null && !sel.isEmpty()) {
IConfigurationElement elem = (IConfigurationElement)sel.getFirstElement();
IConfigurationElement[] children = elem.getChildren("description"); //$NON-NLS-1$
if (children.length >= 1) {
setMessage(children[0].getValue());
} else {
setMessage("");//$NON-NLS-1$
}
}
}
});
if (sorter != null) viewer.setSorter(sorter);
viewer.setInput(this);
viewer.setSelection(new StructuredSelection(viewer.getElementAt(0)));
}
/**
* @see org.eclipse.jface.wizard.WizardPage#canFlipToNextPage()
* @since 4.0
*/
@Override
public boolean canFlipToNextPage() {
return (((AbstractSelectionWizard)getWizard()).getSelectedWizard() != null);
}
}