| 1 | package de.uka.ipd.sdq.sensorframework.visualisation.tabs.filters; |
| 2 | |
| 3 | import java.util.ArrayList; |
| 4 | |
| 5 | import org.eclipse.jface.viewers.CellEditor; |
| 6 | import org.eclipse.jface.viewers.ISelection; |
| 7 | import org.eclipse.jface.viewers.ISelectionChangedListener; |
| 8 | import org.eclipse.jface.viewers.IStructuredSelection; |
| 9 | import org.eclipse.jface.viewers.LabelProvider; |
| 10 | import org.eclipse.jface.viewers.SelectionChangedEvent; |
| 11 | import org.eclipse.jface.viewers.TableViewer; |
| 12 | import org.eclipse.jface.viewers.TextCellEditor; |
| 13 | import org.eclipse.swt.SWT; |
| 14 | import org.eclipse.swt.events.SelectionAdapter; |
| 15 | import org.eclipse.swt.events.SelectionEvent; |
| 16 | import org.eclipse.swt.layout.FormAttachment; |
| 17 | import org.eclipse.swt.layout.FormData; |
| 18 | import org.eclipse.swt.layout.GridData; |
| 19 | import org.eclipse.swt.widgets.Composite; |
| 20 | import org.eclipse.swt.widgets.Table; |
| 21 | import org.eclipse.swt.widgets.TableColumn; |
| 22 | import org.eclipse.swt.widgets.ToolBar; |
| 23 | import org.eclipse.swt.widgets.ToolItem; |
| 24 | import org.eclipse.ui.IWorkbenchPart; |
| 25 | import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection; |
| 26 | import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; |
| 27 | |
| 28 | import de.uka.ipd.sdq.sensorframework.filter.FilteredCollectionRegistry; |
| 29 | import de.uka.ipd.sdq.sensorframework.filter.IFilteredCollectionFactory; |
| 30 | import de.uka.ipd.sdq.sensorframework.visualisation.VisualisationImages; |
| 31 | import de.uka.ipd.sdq.sensorframework.visualisation.dialogs.ActionListSelectionDialog; |
| 32 | import de.uka.ipd.sdq.sensorframework.visualisation.editor.AbstractReportView; |
| 33 | import de.uka.ipd.sdq.sensorframework.visualisation.editor.ConfigEditorInput; |
| 34 | |
| 35 | /** |
| 36 | * This class defines the 'Filters' tab section, which makes a definition |
| 37 | * possible of filter and their pure sequence for measured values indicated in |
| 38 | * the opinion. |
| 39 | * |
| 40 | * @author Roman Andrej |
| 41 | */ |
| 42 | public class FiltersPropertySection extends AbstractPropertySection { |
| 43 | |
| 44 | private ConfigEditorInput configObject; |
| 45 | private TableViewer viewer; |
| 46 | private ToolItem deleteItem, upItem, downItem; |
| 47 | |
| 48 | private IFilteredCollectionFactory selectedFactory; |
| 49 | |
| 50 | |
| 51 | public static final int ICON_COLUMN_INDEX = 0; |
| 52 | public static final int FILTERNAME_COLUMN_INDEX = 1; |
| 53 | public static final int PARAMETER_TYPE_COLUMN_INDEX = 2; |
| 54 | public static final int PARAMETER_DESCRIPTION_COLUMN_INDEX = 3; |
| 55 | public static final int PARAMETER_VALUE_COLUMN_INDEX = 4; |
| 56 | |
| 57 | /** |
| 58 | * Columns of a table, which is used into ParameterEditDialog. |
| 59 | */ |
| 60 | public final static String ICON_COLUMN = ""; |
| 61 | public final static String FILTERNAME_COLUMN = "Filter name"; |
| 62 | public final static String PARAMETER_TYPE_COLUMN = "Parameter type"; |
| 63 | public final static String PARAMETER_DESCRIPTION_COLUMN = "Description"; |
| 64 | public final static String PARAMETER_VALUE_COLUMN = "Value"; |
| 65 | /** ToolBar width. */ |
| 66 | private final int toolbarWidth = 23; |
| 67 | |
| 68 | // Set column names of Tabele |
| 69 | protected static String[] columnNames = new String[] { ICON_COLUMN, FILTERNAME_COLUMN, PARAMETER_TYPE_COLUMN,PARAMETER_DESCRIPTION_COLUMN, PARAMETER_VALUE_COLUMN }; |
| 70 | |
| 71 | // style the style of table to construct |
| 72 | int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL |
| 73 | | SWT.FULL_SELECTION | SWT.HIDE_SELECTION; |
| 74 | |
| 75 | /* (non-Javadoc) |
| 76 | * @see org.eclipse.ui.views.properties.tabbed.AbstractPropertySection#createControls(org.eclipse.swt.widgets.Composite, org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage) |
| 77 | */ |
| 78 | @Override |
| 79 | public void createControls(Composite parent, |
| 80 | TabbedPropertySheetPage tabbedPropertySheetPage) { |
| 81 | super.createControls(parent, tabbedPropertySheetPage); |
| 82 | |
| 83 | Composite composite = getWidgetFactory() |
| 84 | .createFlatFormComposite(parent); |
| 85 | composite.getParent().setLayoutData( |
| 86 | new GridData(SWT.FILL, SWT.FILL, true, true)); |
| 87 | |
| 88 | // create table |
| 89 | final Table table = new Table(composite, style); |
| 90 | final FormData fd_table = new FormData(); |
| 91 | fd_table.bottom = new FormAttachment(100, 0); |
| 92 | fd_table.top = new FormAttachment(0, 0); |
| 93 | fd_table.left = new FormAttachment(0, 0); |
| 94 | table.setLayoutData(fd_table); |
| 95 | table.setLinesVisible(true); |
| 96 | table.setHeaderVisible(true); |
| 97 | |
| 98 | // create 'Viewer' |
| 99 | viewer = new TableViewer(table); |
| 100 | viewer.setColumnProperties(columnNames); |
| 101 | viewer.setContentProvider(new FiltersTabContentProvider()); |
| 102 | viewer.setLabelProvider(new FiltersTabLabelProvider()); |
| 103 | |
| 104 | viewer.setCellModifier(new FiltersTabCellModifier(this)); |
| 105 | viewer.addSelectionChangedListener(new ISelectionChangedListener() { |
| 106 | public void selectionChanged(SelectionChangedEvent event) { |
| 107 | Object object = ((IStructuredSelection) viewer.getSelection()) |
| 108 | .getFirstElement(); |
| 109 | if (object instanceof IFilteredCollectionFactory) { |
| 110 | selectedFactory = (IFilteredCollectionFactory) object; |
| 111 | upItem.setEnabled(true); |
| 112 | downItem.setEnabled(true); |
| 113 | deleteItem.setEnabled(true); |
| 114 | |
| 115 | int index = configObject.getFiltersManager().getFactories() |
| 116 | .indexOf(selectedFactory); |
| 117 | if (index == 0) { |
| 118 | upItem.setEnabled(false); |
| 119 | } |
| 120 | if (index == configObject.getFiltersManager() |
| 121 | .getFactories().size()-1) { |
| 122 | downItem.setEnabled(false); |
| 123 | } |
| 124 | } |
| 125 | } |
| 126 | }); |
| 127 | |
| 128 | // Create the cell editors for 'Parameters' column |
| 129 | CellEditor[] editors = new CellEditor[columnNames.length]; |
| 130 | editors[PARAMETER_VALUE_COLUMN_INDEX] = new TextCellEditor(table); |
| 131 | |
| 132 | // Assign the cell editors to the viewer |
| 133 | viewer.setCellEditors(editors); |
| 134 | |
| 135 | // create icon column |
| 136 | final TableColumn iconColumn = new TableColumn(table, SWT.NONE); |
| 137 | iconColumn.setWidth(30); |
| 138 | iconColumn.setText(ICON_COLUMN); |
| 139 | |
| 140 | // create filter name column |
| 141 | final TableColumn nameColumn = new TableColumn(table, SWT.NONE); |
| 142 | nameColumn.setWidth(210); |
| 143 | nameColumn.setText(FILTERNAME_COLUMN); |
| 144 | |
| 145 | // create parameter type column |
| 146 | final TableColumn parametersColumn = new TableColumn(table, SWT.CENTER); |
| 147 | parametersColumn.setWidth(100); |
| 148 | parametersColumn.setText(PARAMETER_TYPE_COLUMN); |
| 149 | |
| 150 | // create parameter description column |
| 151 | final TableColumn parameterDescColumn = new TableColumn(table, SWT.CENTER); |
| 152 | parameterDescColumn.setWidth(140); |
| 153 | parameterDescColumn.setText(PARAMETER_DESCRIPTION_COLUMN); |
| 154 | |
| 155 | // create parameter value column |
| 156 | final TableColumn parameterValueColumn = new TableColumn(table, SWT.CENTER); |
| 157 | parameterValueColumn.setWidth(80); |
| 158 | parameterValueColumn.setText(PARAMETER_VALUE_COLUMN); |
| 159 | |
| 160 | // create tool bar |
| 161 | final ToolBar toolBar = new ToolBar(composite, SWT.VERTICAL); |
| 162 | fd_table.right = new FormAttachment(toolBar, 0 , SWT.LEFT); |
| 163 | final FormData fd_toolBar = new FormData(); |
| 164 | fd_toolBar.bottom = new FormAttachment(100, 0); |
| 165 | fd_toolBar.left = new FormAttachment(100, - toolbarWidth); |
| 166 | fd_toolBar.right = new FormAttachment(100, 0); |
| 167 | fd_toolBar.top = new FormAttachment(0, 0); |
| 168 | toolBar.setLayoutData(fd_toolBar); |
| 169 | |
| 170 | // create 'Add' button |
| 171 | ToolItem addRunItem = new ToolItem(toolBar, SWT.PUSH); |
| 172 | addRunItem.setImage(VisualisationImages.imageRegistry.get(VisualisationImages.ADD)); |
| 173 | addRunItem.addSelectionListener(new SelectionAdapter(){ |
| 174 | |
| 175 | /* (non-Javadoc) |
| 176 | * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) |
| 177 | */ |
| 178 | @Override |
| 179 | public void widgetSelected(SelectionEvent event) { |
| 180 | IFilteredCollectionFactory factory = null; |
| 181 | |
| 182 | ActionListSelectionDialog dialog = new ActionListSelectionDialog( |
| 183 | event.display.getActiveShell(), |
| 184 | new FilterLabelProvider(), 250, 200); |
| 185 | dialog.setElements(getDefinedFilters()); |
| 186 | dialog.open(); |
| 187 | Object[] results = dialog.getResult(); |
| 188 | |
| 189 | if (results != null) { |
| 190 | factory = (IFilteredCollectionFactory) results[0]; |
| 191 | // add the filtered collection to the FilteredCollectionsManager |
| 192 | configObject.getFiltersManager().addFactory(factory); |
| 193 | // refresh TabeleViewer |
| 194 | refresh(); |
| 195 | } |
| 196 | } |
| 197 | }); |
| 198 | |
| 199 | // create 'Up' button |
| 200 | upItem = new ToolItem(toolBar, SWT.PUSH); |
| 201 | upItem.setImage(VisualisationImages.imageRegistry.get(VisualisationImages.UP)); |
| 202 | upItem.addSelectionListener(new SelectionAdapter(){ |
| 203 | |
| 204 | /* (non-Javadoc) |
| 205 | * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) |
| 206 | */ |
| 207 | @Override |
| 208 | public void widgetSelected(SelectionEvent e) { |
| 209 | ArrayList<IFilteredCollectionFactory> factories = configObject |
| 210 | .getFiltersManager().getFactories(); |
| 211 | int index = factories.indexOf(selectedFactory); |
| 212 | factories.remove(selectedFactory); |
| 213 | factories.add(index - 1, selectedFactory); |
| 214 | upItem.setEnabled(false); |
| 215 | refresh(); |
| 216 | } |
| 217 | }); |
| 218 | upItem.setEnabled(false); |
| 219 | |
| 220 | // create 'Down' button |
| 221 | downItem = new ToolItem(toolBar, SWT.PUSH); |
| 222 | downItem.setImage(VisualisationImages.imageRegistry.get(VisualisationImages.DOWN)); |
| 223 | downItem.addSelectionListener(new SelectionAdapter(){ |
| 224 | |
| 225 | /* (non-Javadoc) |
| 226 | * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) |
| 227 | */ |
| 228 | @Override |
| 229 | public void widgetSelected(SelectionEvent e) { |
| 230 | ArrayList<IFilteredCollectionFactory> factories = configObject |
| 231 | .getFiltersManager().getFactories(); |
| 232 | int index = factories.indexOf(selectedFactory); |
| 233 | factories.remove(selectedFactory); |
| 234 | factories.add(index + 1, selectedFactory); |
| 235 | downItem.setEnabled(false); |
| 236 | refresh(); |
| 237 | } |
| 238 | }); |
| 239 | downItem.setEnabled(false); |
| 240 | |
| 241 | // create 'Delete' button |
| 242 | deleteItem = new ToolItem(toolBar, SWT.PUSH); |
| 243 | deleteItem.setImage(VisualisationImages.imageRegistry.get(VisualisationImages.DELETE)); |
| 244 | deleteItem.addSelectionListener(new SelectionAdapter(){ |
| 245 | |
| 246 | /* (non-Javadoc) |
| 247 | * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) |
| 248 | */ |
| 249 | @Override |
| 250 | public void widgetSelected(SelectionEvent event) { |
| 251 | // remove in viewer selected filter from 'FilterManager' |
| 252 | configObject.getFiltersManager().removeFactory(selectedFactory); |
| 253 | refresh(); |
| 254 | } |
| 255 | }); |
| 256 | deleteItem.setEnabled(false); |
| 257 | } |
| 258 | |
| 259 | /* (non-Javadoc) |
| 260 | * @see org.eclipse.ui.views.properties.tabbed.AbstractPropertySection#setInput(org.eclipse.ui.IWorkbenchPart, |
| 261 | * org.eclipse.jface.viewers.ISelection) |
| 262 | */ |
| 263 | @Override |
| 264 | public void setInput(IWorkbenchPart part, ISelection selection) { |
| 265 | super.setInput(part, selection); |
| 266 | |
| 267 | if (part instanceof AbstractReportView) { |
| 268 | AbstractReportView view = (AbstractReportView) part; |
| 269 | configObject = (ConfigEditorInput) view.getEditorInput(); |
| 270 | |
| 271 | viewer.setInput(configObject); |
| 272 | } |
| 273 | } |
| 274 | |
| 275 | private Object[] getDefinedFilters() { |
| 276 | return FilteredCollectionRegistry |
| 277 | .singleton().getAllAvailableCollectionFactories().toArray(); |
| 278 | } |
| 279 | |
| 280 | /* (non-Javadoc) |
| 281 | * @see org.eclipse.ui.views.properties.tabbed.AbstractPropertySection#refresh() |
| 282 | */ |
| 283 | @Override |
| 284 | public void refresh() { |
| 285 | // send message to observer |
| 286 | configObject.update(null, null); |
| 287 | // refresh TableViewer (FilterTab) |
| 288 | viewer.refresh(); |
| 289 | } |
| 290 | } |
| 291 | |
| 292 | /** The Class define the LabelProvider for ActionListSelectionDialog. */ |
| 293 | class FilterLabelProvider extends LabelProvider { |
| 294 | |
| 295 | /* (non-Javadoc) |
| 296 | * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object) |
| 297 | */ |
| 298 | @Override |
| 299 | public String getText(Object element) { |
| 300 | if (element instanceof IFilteredCollectionFactory) { |
| 301 | IFilteredCollectionFactory factory = (IFilteredCollectionFactory) element; |
| 302 | return factory.getFilterFactoryID(); |
| 303 | } |
| 304 | return super.getText(element); |
| 305 | } |
| 306 | } |