package org.jbehave.eclipse.preferences; import org.apache.commons.lang.StringUtils; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.jbehave.eclipse.Dialogs; import org.jbehave.eclipse.swt.SWTResourceManager; import ch.qos.logback.classic.Level; public class LoggerEntriesComposite extends Composite { private LoggerPreferences prefs; private TableViewer filterViewer; private Button removeButton; private Text loggerNameText; private ComboViewer loggerLevelCombo; /** * Create the composite. * @param parent * @param style */ public LoggerEntriesComposite(Composite parent, int style) { super(parent, style); setLayout(new GridLayout(2, false)); filterViewer = new TableViewer(this, SWT.BORDER | SWT.V_SCROLL | SWT.MULTI); Table table = filterViewer.getTable(); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1); gridData.heightHint = 75; table.setLayoutData(gridData); filterViewer.setContentProvider(new LoggerEntryContentProvider()); filterViewer.setLabelProvider(new LoggerEntryLabelProvider()); filterViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { displaySelectedElement(); } }); dressUpTable(table); removeButton = new Button(this, SWT.NONE); removeButton.setText("Remove"); removeButton.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent event) { removeSelectedElements(); } public void widgetDefaultSelected(SelectionEvent event) { removeSelectedElements(); } }); Group grpFilter = new Group(this, SWT.NONE); grpFilter.setText("Logger"); grpFilter.setLayout(new GridLayout(3, false)); grpFilter.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1)); Label lblFilterPattern = new Label(grpFilter, SWT.NONE); lblFilterPattern.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, false, 1, 1)); lblFilterPattern.setText("Logger name"); Composite composite_1 = new Composite(grpFilter, SWT.NONE); GridLayout gl_composite_1 = new GridLayout(1, false); gl_composite_1.marginHeight = 0; gl_composite_1.verticalSpacing = 0; composite_1.setLayout(gl_composite_1); composite_1.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 2, 1)); Label lblFilterPatternExample = new Label(composite_1, SWT.NONE); lblFilterPatternExample.setFont(SWTResourceManager.getFont("Lucida Grande", 10, SWT.ITALIC)); lblFilterPatternExample.setAlignment(SWT.RIGHT); lblFilterPatternExample.setText("comma separated glob expressions"); Label lblEgorgeclipseapple = new Label(composite_1, SWT.NONE); lblEgorgeclipseapple.setText("e.g. \"org.eclipse.*, *.apple.*\""); lblEgorgeclipseapple.setFont(SWTResourceManager.getFont("Lucida Grande", 10, SWT.ITALIC)); lblEgorgeclipseapple.setAlignment(SWT.RIGHT); loggerNameText = new Text(grpFilter, SWT.BORDER); GridData gd_loggerNameText = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1); gd_loggerNameText.widthHint = 90; loggerNameText.setLayoutData(gd_loggerNameText); loggerLevelCombo = new ComboViewer(grpFilter, SWT.NONE|SWT.READ_ONLY); loggerLevelCombo.setContentProvider(new ArrayContentProvider()); loggerLevelCombo.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { return ((Level)element).levelStr; } }); loggerLevelCombo.setInput(new Object[] { Level.ERROR, Level.WARN, Level.INFO, Level.DEBUG, Level.TRACE, Level.OFF }); loggerLevelCombo.setSelection(new StructuredSelection(Level.INFO)); Combo combo = loggerLevelCombo.getCombo(); GridData gd_combo = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); gd_combo.widthHint = 10; combo.setLayoutData(gd_combo); Button btnAdd = new Button(grpFilter, SWT.NONE); btnAdd.setText("Add"); btnAdd.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent arg0) { addLoggerEntry(); } public void widgetDefaultSelected(SelectionEvent arg0) { addLoggerEntry(); } }); new Label(grpFilter, SWT.NONE); new Label(grpFilter, SWT.NONE); } protected void dressUpTable(Table table) { TableColumn loggerNameCol = new TableColumn( table, SWT.LEFT ); loggerNameCol.setText("Logger name"); loggerNameCol.setResizable(true); loggerNameCol.setWidth(150); TableColumn loggerLevelCol = new TableColumn( table, SWT.LEFT ); loggerLevelCol.setText("Level"); loggerLevelCol.setResizable(false); loggerLevelCol.setWidth(50); table.setHeaderVisible(true); table.setLinesVisible(true); } protected void displaySelectedElement() { IStructuredSelection selection = (IStructuredSelection) filterViewer.getSelection(); if(!selection.isEmpty()) displayEntry ((LoggerEntry)selection.getFirstElement()); } private void displayEntry(LoggerEntry entry) { loggerLevelCombo.setSelection(new StructuredSelection(entry.getLevel())); loggerNameText.setText(entry.getLoggerName()); } private void addLoggerEntry() { IStructuredSelection selection = (IStructuredSelection) loggerLevelCombo.getSelection(); if(!selection.isEmpty()) { Level level = (Level)selection.getFirstElement(); String loggerName = StringUtils.trimToEmpty(loggerNameText.getText()); if(loggerName.isEmpty()) { Dialogs.warning("Missing logger name", "Empty or blank name specified"); return; } prefs.addEntry(loggerName, level); filterViewer.refresh(); } } protected void removeSelectedElements() { IStructuredSelection selection = (IStructuredSelection) filterViewer.getSelection(); Object[] array = selection.toArray(); for(Object o : array) { LoggerEntry entry = (LoggerEntry) o; prefs.removeEntry(entry); } filterViewer.remove(array); } @Override protected void checkSubclass() { // Disable the check that prevents subclassing of SWT components } public void setInput(LoggerPreferences prefs) { this.prefs = prefs; this.filterViewer.setInput(prefs); } }