/******************************************************************************* * Copyright (c) 2007, 2008 Spring IDE Developers * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Spring IDE Developers - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.webflow.ui.graph.dialogs; import java.util.List; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.DecoratingLabelProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; 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.swt.widgets.Shell; import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.Table; import org.springframework.ide.eclipse.webflow.core.internal.model.ExceptionHandler; import org.springframework.ide.eclipse.webflow.core.model.IExceptionHandler; import org.springframework.ide.eclipse.webflow.core.model.IWebflowModelElement; import org.springframework.ide.eclipse.webflow.ui.editor.outline.webflow.WebflowUIImages; import org.springframework.ide.eclipse.webflow.ui.graph.model.WebflowModelLabelDecorator; import org.springframework.ide.eclipse.webflow.ui.graph.model.WebflowModelLabelProvider; /** * @author Christian Dupuis */ public class ExceptionHandlerComposite { private class ExceptionHandlerContentProvider implements IStructuredContentProvider { private List<IExceptionHandler> actions; public ExceptionHandlerContentProvider(List<IExceptionHandler> actions) { this.actions = actions; } public void dispose() { } public Object[] getElements(Object obj) { return actions.toArray(); } public void inputChanged(Viewer arg0, Object arg1, Object arg2) { } } private TableViewer configsViewer; private Button editButton; private Button addButton; private Button deleteButton; // private IDialogValidator validator; @SuppressWarnings("unused") private Shell parentShell; private List<IExceptionHandler> exceptionHandler; private IWebflowModelElement parentElement; public ExceptionHandlerComposite(IDialogValidator validator, TabItem item, Shell parentShell, List<IExceptionHandler> actions, IWebflowModelElement parentElement) { this.exceptionHandler = actions; item.setText("Exception Handler"); item.setToolTipText("Define element's exception handler"); item.setImage(WebflowUIImages .getImage(WebflowUIImages.IMG_OBJS_EXCEPTION_HANDLER)); this.parentShell = parentShell; this.parentElement = parentElement; // this.validator = validator; } protected Control createDialogArea(Composite parent) { Group groupActionType = new Group(parent, SWT.NULL); GridLayout layoutAttMap = new GridLayout(); layoutAttMap.marginWidth = 3; layoutAttMap.marginHeight = 3; groupActionType.setLayout(layoutAttMap); groupActionType.setText(" Exception Handler "); groupActionType.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Composite tableAndButtons = new Composite(groupActionType, SWT.NONE); tableAndButtons.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); GridLayout layout2 = new GridLayout(); layout2.marginHeight = 0; layout2.marginWidth = 0; layout2.numColumns = 2; tableAndButtons.setLayout(layout2); Table configsTable = new Table(tableAndButtons, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER); GridData data = new GridData(GridData.FILL_BOTH); data.widthHint = 250; data.heightHint = 200; configsTable.setLayoutData(data); configsTable.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { handleTableSelectionChanged(); } }); configsViewer = new TableViewer(configsTable); configsViewer.setContentProvider(new ExceptionHandlerContentProvider( this.exceptionHandler)); configsViewer.setLabelProvider(new DecoratingLabelProvider( new WebflowModelLabelProvider(), new WebflowModelLabelDecorator())); configsViewer.setInput(this); Composite buttonArea = new Composite(tableAndButtons, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; buttonArea.setLayout(layout); buttonArea.setLayoutData(new GridData(GridData.FILL_VERTICAL)); addButton = new Button(buttonArea, SWT.PUSH); addButton.setText("Add"); GridData data1 = new GridData(GridData.HORIZONTAL_ALIGN_FILL); addButton.setLayoutData(data1); addButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { ExceptionHandler action = new ExceptionHandler(); action.createNew(parentElement); if (DialogUtils.openPropertiesDialog(parentElement, action, true) == Dialog.OK) { exceptionHandler.add(action); configsViewer.refresh(); } } }); editButton = new Button(buttonArea, SWT.PUSH); editButton.setText("Edit"); data1 = new GridData(GridData.HORIZONTAL_ALIGN_FILL); editButton.setLayoutData(data1); editButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { IStructuredSelection selection = (IStructuredSelection) configsViewer .getSelection(); if (selection.getFirstElement() != null) { if (selection.getFirstElement() instanceof ExceptionHandler) { if (DialogUtils.openPropertiesDialog(parentElement, (ExceptionHandler) selection.getFirstElement(), true) == Dialog.OK) { configsViewer.refresh(); } } } } }); deleteButton = new Button(buttonArea, SWT.PUSH); deleteButton.setText("Delete"); data1 = new GridData(GridData.HORIZONTAL_ALIGN_FILL); deleteButton.setLayoutData(data1); deleteButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { IStructuredSelection selection = (IStructuredSelection) configsViewer .getSelection(); if (selection.getFirstElement() != null && selection.getFirstElement() instanceof ExceptionHandler) { ExceptionHandler actionElement = (ExceptionHandler) selection .getFirstElement(); exceptionHandler.remove(actionElement); configsViewer.refresh(true); } } }); editButton.setEnabled(false); deleteButton.setEnabled(false); return groupActionType; } protected void handleTableSelectionChanged() { IStructuredSelection selection = (IStructuredSelection) configsViewer .getSelection(); if (selection.isEmpty()) { this.editButton.setEnabled(false); this.deleteButton.setEnabled(false); } else { this.editButton.setEnabled(true); this.deleteButton.setEnabled(true); } } }