/******************************************************************************* | |
* Copyright (c) 2011 Mia-Software and others. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License v2.0 | |
* which accompanies this distribution, and is available at | |
* http://www.eclipse.org/legal/epl-v20.html | |
* | |
* Contributors: | |
* Nicolas Bros (Mia-Software) - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.modisco.infra.discovery.ui.internal.views; | |
import java.util.Collection; | |
import java.util.List; | |
import org.eclipse.jface.action.Action; | |
import org.eclipse.jface.action.IAction; | |
import org.eclipse.jface.resource.ImageDescriptor; | |
import org.eclipse.jface.viewers.ColumnLabelProvider; | |
import org.eclipse.jface.viewers.IContentProvider; | |
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.TableViewer; | |
import org.eclipse.jface.viewers.Viewer; | |
import org.eclipse.modisco.facet.common.ui.internal.controls.PersistableColumn; | |
import org.eclipse.modisco.infra.discovery.catalog.DiscovererDescription; | |
import org.eclipse.modisco.infra.discovery.catalog.DiscovererParameter; | |
import org.eclipse.modisco.infra.discovery.core.IDiscoveryManager; | |
import org.eclipse.modisco.infra.discovery.ui.Activator; | |
import org.eclipse.modisco.infra.discovery.ui.Messages; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.custom.SashForm; | |
import org.eclipse.swt.events.ControlAdapter; | |
import org.eclipse.swt.events.ControlEvent; | |
import org.eclipse.swt.graphics.Image; | |
import org.eclipse.swt.layout.FillLayout; | |
import org.eclipse.swt.layout.GridData; | |
import org.eclipse.swt.layout.GridLayout; | |
import org.eclipse.swt.widgets.Composite; | |
import org.eclipse.swt.widgets.Control; | |
import org.eclipse.swt.widgets.Group; | |
import org.eclipse.ui.IMemento; | |
import org.eclipse.ui.IViewSite; | |
import org.eclipse.ui.PartInitException; | |
import org.eclipse.ui.part.ViewPart; | |
/** An Eclipse view that displays a list of available discoverers. */ | |
public class DiscoverersView extends ViewPart { | |
private TableViewer discoverersViewer; | |
private TableViewer parametersViewer; | |
private Composite parentComposite; | |
private Composite mainComposite; | |
private static final String NAME_COLUMN = "DiscoverersView_NameColumn"; //$NON-NLS-1$ | |
private static final String TYPE_COLUMN = "DiscoverersView_DescriptionColumn"; //$NON-NLS-1$ | |
private static final String INPUT_TYPE_COLUMN = "DiscoverersView_InputTypeColumn"; //$NON-NLS-1$ | |
private static final String DECLARING_BUNDLE_COLUMN = "DiscoverersView_DeclaringBundleColumn"; //$NON-NLS-1$ | |
private static final String PARAM_NAME_COLUMN = "DiscoverersView_ParamName"; //$NON-NLS-1$ | |
private static final String PARAM_TYPE_COLUMN = "DiscoverersView_ParamType"; //$NON-NLS-1$ | |
private static final String PARAM_DIRECTION_COLUMN = "DiscoverersView_ParamDirection"; //$NON-NLS-1$ | |
private static final String PARAM_REQUIRED_COLUMN = "DiscoverersView_ParamRequired"; //$NON-NLS-1$ | |
private static final String PARAM_DESCRIPTION_COLUMN = "DiscoverersView_ParamDescription"; //$NON-NLS-1$ | |
private static final int NAME_COLUMN_WIDTH = 200; | |
private static final int TYPE_COLUMN_WIDTH = 150; | |
private static final int DECLARING_BUNDLE_COLUMN_WIDTH = 400; | |
private static final int INPUT_TYPE_COLUMN_WIDTH = 150; | |
private static final int PARAM_NAME_COLUMN_WIDTH = 160; | |
private static final int PARAM_TYPE_COLUMN_WIDTH = 100; | |
private static final int PARAM_DIRECTION_COLUMN_WIDTH = 60; | |
private static final int PARAM_REQUIRED_COLUMN_WIDTH = 60; | |
private static final int PARAM_DESCRIPTION_COLUMN_WIDTH = 400; | |
private static final String SASH_POSITION1 = "sashPosition1"; //$NON-NLS-1$ | |
private static final String SASH_POSITION2 = "sashPosition2"; //$NON-NLS-1$ | |
private static final String LAYOUT_ORIENTATION = "orientation"; //$NON-NLS-1$ | |
private enum LayoutStyle { | |
Horizontal, Vertical | |
} | |
/** static because we want to save it before closing Eclipse */ | |
private static LayoutStyle layoutStyle = DiscoverersView.LayoutStyle.Vertical; | |
private PersistableColumn nameColumn; | |
private PersistableColumn implClassColumn; | |
private PersistableColumn paramNameColumn; | |
private PersistableColumn paramTypeColumn; | |
private PersistableColumn paramDirectionColumn; | |
private PersistableColumn paramRequiredColumn; | |
private PersistableColumn paramDescColumn; | |
private PersistableColumn inputTypeColumn; | |
private PersistableColumn declaringBundleColumn; | |
private SashForm sashForm; | |
private static Integer sashPosition1; | |
private static Integer sashPosition2; | |
protected static LayoutStyle getLayoutStyle() { | |
return DiscoverersView.layoutStyle; | |
} | |
protected void changeLayoutStyle(final LayoutStyle newLayoutStyle) { | |
if (newLayoutStyle == DiscoverersView.layoutStyle) { | |
return; | |
} | |
DiscoverersView.layoutStyle = newLayoutStyle; | |
createMainComposite(); | |
} | |
@Override | |
public void createPartControl(final Composite parent) { | |
this.parentComposite = parent; | |
parent.setLayout(gridLayoutWithNoMargins()); | |
createMainComposite(); | |
// automatic layout: | |
// parent.addControlListener(new ControlAdapter() { | |
// @Override | |
// public void controlResized(final ControlEvent e) { | |
// Point size = parent.getSize(); | |
// if (size.x > size.y) { | |
// changeLayoutStyle(LayoutStyle.Horizontal); | |
// } else { | |
// changeLayoutStyle(LayoutStyle.Vertical); | |
// } | |
// } | |
// }); | |
} | |
private void createMainComposite() { | |
if (this.mainComposite != null) { | |
this.mainComposite.dispose(); | |
} | |
this.mainComposite = new Composite(this.parentComposite, SWT.NONE); | |
this.mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); | |
this.mainComposite.setLayout(gridLayoutWithNoMargins()); | |
final int direction; | |
if (DiscoverersView.layoutStyle == DiscoverersView.LayoutStyle.Horizontal) { | |
direction = SWT.HORIZONTAL; | |
} else { | |
direction = SWT.VERTICAL; | |
} | |
this.sashForm = new SashForm(this.mainComposite, SWT.SMOOTH | direction); | |
this.sashForm.setLayout(new FillLayout()); | |
this.sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); | |
Control discoverersGroup = createDiscoverersGroup(this.sashForm); | |
createParametersGroup(this.sashForm); | |
discoverersGroup.addControlListener(new ControlAdapter() { | |
@Override | |
public void controlResized(final ControlEvent e) { | |
DiscoverersView.sashPosition1 = new Integer(DiscoverersView.this.sashForm | |
.getWeights()[0]); | |
DiscoverersView.sashPosition2 = new Integer(DiscoverersView.this.sashForm | |
.getWeights()[1]); | |
} | |
}); | |
if (DiscoverersView.sashPosition1 != null && DiscoverersView.sashPosition2 != null) { | |
this.sashForm.setWeights(new int[] { DiscoverersView.sashPosition1.intValue(), | |
DiscoverersView.sashPosition2.intValue() }); | |
} | |
this.parentComposite.layout(); | |
} | |
private Group createDiscoverersGroup(final Composite parent) { | |
Group contextGroup = new Group(parent, SWT.NONE); | |
contextGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); | |
contextGroup.setText(Messages.DiscoverersView_title); | |
GridLayout groupLayout = new GridLayout(); | |
contextGroup.setLayout(groupLayout); | |
createDiscoverersViewer(contextGroup); | |
return contextGroup; | |
} | |
private void createDiscoverersViewer(final Group contextGroup) { | |
this.discoverersViewer = new TableViewer(contextGroup, SWT.BORDER | SWT.H_SCROLL | |
| SWT.V_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION); | |
this.discoverersViewer.getTable().setLinesVisible(true); | |
this.discoverersViewer.getTable().setHeaderVisible(true); | |
this.discoverersViewer.getTable().setLayoutData( | |
new GridData(SWT.FILL, SWT.FILL, true, true)); | |
this.discoverersViewer.setContentProvider(getDiscoverersContentProvider()); | |
createDiscovererNameColumn(this.discoverersViewer); | |
createDiscovererInputTypeColumn(this.discoverersViewer); | |
createDiscovererImplClassColumn(this.discoverersViewer); | |
createDiscovererDeclaringBundleColumn(this.discoverersViewer); | |
this.discoverersViewer.setInput(getDiscoverersInput()); | |
this.discoverersViewer.addSelectionChangedListener(new ISelectionChangedListener() { | |
public void selectionChanged(final SelectionChangedEvent event) { | |
discovererSelectionChanged(); | |
} | |
}); | |
} | |
private void discovererSelectionChanged() { | |
IStructuredSelection selection = (IStructuredSelection) this.discoverersViewer | |
.getSelection(); | |
Object firstElement = selection.getFirstElement(); | |
if (firstElement instanceof DiscovererDescription) { | |
DiscovererDescription discovererDescription = (DiscovererDescription) firstElement; | |
this.parametersViewer.setInput(discovererDescription); | |
} | |
} | |
private void createParametersGroup(final Composite parent) { | |
Group contextGroup = new Group(parent, SWT.NONE); | |
contextGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); | |
contextGroup.setText(Messages.DiscoverersView_params); | |
GridLayout groupLayout = new GridLayout(); | |
contextGroup.setLayout(groupLayout); | |
createParametersViewer(contextGroup); | |
} | |
private void createParametersViewer(final Group contextGroup) { | |
this.parametersViewer = new TableViewer(contextGroup, SWT.BORDER | SWT.H_SCROLL | |
| SWT.V_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION); | |
this.parametersViewer.getTable().setLinesVisible(true); | |
this.parametersViewer.getTable().setHeaderVisible(true); | |
this.parametersViewer.getTable() | |
.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); | |
this.parametersViewer.setContentProvider(getParametersContentProvider()); | |
createParameterNameColumn(this.parametersViewer); | |
createParameterTypeColumn(this.parametersViewer); | |
createParameterDirectionColumn(this.parametersViewer); | |
createParameterRequiredColumn(this.parametersViewer); | |
createParameterDescriptionColumn(this.parametersViewer); | |
} | |
private static IContentProvider getParametersContentProvider() { | |
return new IStructuredContentProvider() { | |
public Object[] getElements(final Object inputElement) { | |
DiscovererDescription discovererDescription = (DiscovererDescription) inputElement; | |
List<DiscovererParameter> parameterDefinitions = discovererDescription | |
.getParameterDefinitions(); | |
return parameterDefinitions.toArray(); | |
} | |
public void inputChanged(final Viewer viewer, final Object oldInput, | |
final Object newInput) { | |
// nothing | |
} | |
public void dispose() { | |
// nothing | |
} | |
}; | |
} | |
private static GridLayout gridLayoutWithNoMargins() { | |
GridLayout gridLayout = new GridLayout(); | |
gridLayout.marginWidth = 0; | |
gridLayout.marginHeight = 0; | |
return gridLayout; | |
} | |
@Override | |
public void setFocus() { | |
// | |
} | |
private void createDiscovererNameColumn(final TableViewer viewer) { | |
ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() { | |
private Image discovererImage; | |
@Override | |
public String getText(final Object element) { | |
DiscovererDescription discovererDescription = (DiscovererDescription) element; | |
return discovererDescription.getId(); | |
} | |
@Override | |
public Image getImage(final Object element) { | |
if (this.discovererImage == null) { | |
this.discovererImage = Activator | |
.getImageDescriptor("icons/discoverer16x16.png").createImage(); //$NON-NLS-1$ | |
} | |
return this.discovererImage; | |
} | |
@Override | |
public void dispose() { | |
super.dispose(); | |
if (this.discovererImage != null) { | |
this.discovererImage.dispose(); | |
} | |
} | |
}; | |
this.nameColumn = new PersistableColumn(Messages.DiscoverersView_name, | |
DiscoverersView.NAME_COLUMN, DiscoverersView.NAME_COLUMN_WIDTH, | |
columnLabelProvider, viewer); | |
} | |
private void createDiscovererImplClassColumn(final TableViewer viewer) { | |
ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() { | |
@Override | |
public String getText(final Object element) { | |
DiscovererDescription discovererDescription = (DiscovererDescription) element; | |
return discovererDescription.getImplementationType().getName(); | |
} | |
}; | |
this.implClassColumn = new PersistableColumn(Messages.DiscoverersView_implClass, | |
DiscoverersView.TYPE_COLUMN, DiscoverersView.TYPE_COLUMN_WIDTH, | |
columnLabelProvider, viewer); | |
} | |
private void createDiscovererDeclaringBundleColumn(final TableViewer viewer) { | |
ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() { | |
@Override | |
public String getText(final Object element) { | |
DiscovererDescription discovererDescription = (DiscovererDescription) element; | |
return discovererDescription.getImplementationBundle().getSymbolicName(); | |
} | |
}; | |
this.declaringBundleColumn = new PersistableColumn( | |
Messages.DiscoverersView_declaringBundle, DiscoverersView.DECLARING_BUNDLE_COLUMN, | |
DiscoverersView.DECLARING_BUNDLE_COLUMN_WIDTH, columnLabelProvider, viewer); | |
} | |
private void createDiscovererInputTypeColumn(final TableViewer viewer) { | |
ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() { | |
@Override | |
public String getText(final Object element) { | |
DiscovererDescription discovererDescription = (DiscovererDescription) element; | |
return discovererDescription.getSourceType().getName(); | |
} | |
}; | |
this.inputTypeColumn = new PersistableColumn(Messages.DiscoverersView_inputType, | |
DiscoverersView.INPUT_TYPE_COLUMN, DiscoverersView.INPUT_TYPE_COLUMN_WIDTH, | |
columnLabelProvider, viewer); | |
} | |
private void createParameterNameColumn(final TableViewer viewer) { | |
ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() { | |
@Override | |
public String getText(final Object element) { | |
DiscovererParameter discoveryParameter = (DiscovererParameter) element; | |
return discoveryParameter.getId(); | |
} | |
}; | |
this.paramNameColumn = new PersistableColumn(Messages.DiscoverersView_name, | |
DiscoverersView.PARAM_NAME_COLUMN, DiscoverersView.PARAM_NAME_COLUMN_WIDTH, | |
columnLabelProvider, viewer); | |
} | |
private void createParameterTypeColumn(final TableViewer viewer) { | |
ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() { | |
@Override | |
public String getText(final Object element) { | |
DiscovererParameter discoveryParameter = (DiscovererParameter) element; | |
return discoveryParameter.getType().getSimpleName(); | |
} | |
}; | |
this.paramTypeColumn = new PersistableColumn(Messages.DiscoverersView_type, | |
DiscoverersView.PARAM_TYPE_COLUMN, DiscoverersView.PARAM_TYPE_COLUMN_WIDTH, | |
columnLabelProvider, viewer); | |
} | |
private void createParameterDirectionColumn(final TableViewer viewer) { | |
ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() { | |
@Override | |
public String getText(final Object element) { | |
DiscovererParameter discoveryParameter = (DiscovererParameter) element; | |
return discoveryParameter.getDirection().toString(); | |
} | |
}; | |
this.paramDirectionColumn = new PersistableColumn(Messages.DiscoverersView_direction, | |
DiscoverersView.PARAM_DIRECTION_COLUMN, | |
DiscoverersView.PARAM_DIRECTION_COLUMN_WIDTH, columnLabelProvider, viewer); | |
} | |
private void createParameterRequiredColumn(final TableViewer viewer) { | |
ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() { | |
@Override | |
public String getText(final Object element) { | |
DiscovererParameter discoveryParameter = (DiscovererParameter) element; | |
return Boolean.toString(discoveryParameter.isRequiredInput()); | |
} | |
}; | |
this.paramRequiredColumn = new PersistableColumn(Messages.DiscoverersView_required, | |
DiscoverersView.PARAM_REQUIRED_COLUMN, DiscoverersView.PARAM_REQUIRED_COLUMN_WIDTH, | |
columnLabelProvider, viewer); | |
} | |
private void createParameterDescriptionColumn(final TableViewer viewer) { | |
ColumnLabelProvider columnLabelProvider = new ColumnLabelProvider() { | |
@Override | |
public String getText(final Object element) { | |
DiscovererParameter discoveryParameter = (DiscovererParameter) element; | |
return discoveryParameter.getDescription(); | |
} | |
}; | |
this.paramDescColumn = new PersistableColumn(Messages.DiscoverersView_description, | |
DiscoverersView.PARAM_DESCRIPTION_COLUMN, | |
DiscoverersView.PARAM_DESCRIPTION_COLUMN_WIDTH, columnLabelProvider, viewer); | |
} | |
protected static IContentProvider getDiscoverersContentProvider() { | |
return new IStructuredContentProvider() { | |
public Object[] getElements(final Object inputElement) { | |
@SuppressWarnings("unchecked") | |
Collection<DiscovererDescription> discovererDescription = (Collection<DiscovererDescription>) inputElement; | |
return discovererDescription.toArray(); | |
} | |
public void inputChanged(final Viewer viewer, final Object oldInput, | |
final Object newInput) { | |
// nothing | |
} | |
public void dispose() { | |
// nothing | |
} | |
}; | |
} | |
protected static Object getDiscoverersInput() { | |
return IDiscoveryManager.INSTANCE.getDiscoverers(); | |
} | |
private final Action horizontalLayoutAction = new Action(Messages.DiscoverersView_horizontal, | |
IAction.AS_RADIO_BUTTON) { | |
@Override | |
public ImageDescriptor getImageDescriptor() { | |
return Activator.getImageDescriptor("icons/th_horizontal.gif"); //$NON-NLS-1$ | |
} | |
@Override | |
public void run() { | |
changeLayoutStyle(DiscoverersView.LayoutStyle.Horizontal); | |
} | |
}; | |
private final Action verticalLayoutAction = new Action(Messages.DiscoverersView_vertical, | |
IAction.AS_RADIO_BUTTON) { | |
@Override | |
public ImageDescriptor getImageDescriptor() { | |
return Activator.getImageDescriptor("icons/th_vertical.gif"); //$NON-NLS-1$ | |
} | |
@Override | |
public void run() { | |
changeLayoutStyle(DiscoverersView.LayoutStyle.Vertical); | |
} | |
}; | |
@Override | |
public void init(final IViewSite site, final IMemento memento) throws PartInitException { | |
super.init(site, memento); | |
site.getActionBars().getToolBarManager().add(this.horizontalLayoutAction); | |
site.getActionBars().getToolBarManager().add(this.verticalLayoutAction); | |
if (memento != null) { | |
PersistableColumn.loadState(memento, DiscoverersView.NAME_COLUMN); | |
PersistableColumn.loadState(memento, DiscoverersView.TYPE_COLUMN); | |
PersistableColumn.loadState(memento, DiscoverersView.INPUT_TYPE_COLUMN); | |
PersistableColumn.loadState(memento, DiscoverersView.DECLARING_BUNDLE_COLUMN); | |
PersistableColumn.loadState(memento, DiscoverersView.PARAM_NAME_COLUMN); | |
PersistableColumn.loadState(memento, DiscoverersView.PARAM_TYPE_COLUMN); | |
PersistableColumn.loadState(memento, DiscoverersView.PARAM_DIRECTION_COLUMN); | |
PersistableColumn.loadState(memento, DiscoverersView.PARAM_REQUIRED_COLUMN); | |
PersistableColumn.loadState(memento, DiscoverersView.PARAM_DESCRIPTION_COLUMN); | |
DiscoverersView.sashPosition1 = memento.getInteger(DiscoverersView.SASH_POSITION1); | |
DiscoverersView.sashPosition2 = memento.getInteger(DiscoverersView.SASH_POSITION2); | |
String layout = memento.getString(DiscoverersView.LAYOUT_ORIENTATION); | |
if (layout != null) { | |
DiscoverersView.layoutStyle = DiscoverersView.LayoutStyle.valueOf(layout); | |
} | |
} | |
if (DiscoverersView.layoutStyle == DiscoverersView.LayoutStyle.Horizontal) { | |
this.horizontalLayoutAction.setChecked(true); | |
} else { | |
this.verticalLayoutAction.setChecked(true); | |
} | |
} | |
@Override | |
public void saveState(final IMemento memento) { | |
super.saveState(memento); | |
this.nameColumn.saveState(memento); | |
this.implClassColumn.saveState(memento); | |
this.inputTypeColumn.saveState(memento); | |
this.declaringBundleColumn.saveState(memento); | |
this.paramNameColumn.saveState(memento); | |
this.paramTypeColumn.saveState(memento); | |
this.paramDirectionColumn.saveState(memento); | |
this.paramRequiredColumn.saveState(memento); | |
this.paramDescColumn.saveState(memento); | |
memento.putInteger(DiscoverersView.SASH_POSITION1, this.sashForm.getWeights()[0]); | |
memento.putInteger(DiscoverersView.SASH_POSITION2, this.sashForm.getWeights()[1]); | |
memento.putString(DiscoverersView.LAYOUT_ORIENTATION, DiscoverersView.layoutStyle.name()); | |
} | |
} |