[jboss-svn-commits] JBL Code SVN: r20519 - labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jun 16 06:45:17 EDT 2008


Author: KrisVerlaenen
Date: 2008-06-16 06:45:17 -0400 (Mon, 16 Jun 2008)
New Revision: 20519

Added:
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/EmailCustomEditor.java
Log:
JBRULES-1497: Email GUI for email work item
 - added custom email editor

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/EmailCustomEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/EmailCustomEditor.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/EmailCustomEditor.java	2008-06-16 10:45:17 UTC (rev 20519)
@@ -0,0 +1,399 @@
+package org.drools.eclipse.flow.common.editor.editpart.work;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.drools.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
+import org.drools.process.core.Work;
+import org.drools.process.core.WorkDefinition;
+import org.drools.process.core.WorkEditor;
+import org.drools.process.core.impl.WorkImpl;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.ComboBoxCellEditor;
+import org.eclipse.jface.viewers.EditingSupport;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Custom Work editor for email work item.
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class EmailCustomEditor extends EditBeanDialog implements WorkEditor {
+
+    private List<Recipient> recipients = new ArrayList<Recipient>();
+    private Text fromText;
+    private Text subjectText;
+    private Text bodyText;
+
+    public EmailCustomEditor(Shell parentShell) {
+        super(parentShell, "Custom Work Editor");
+    }
+
+    protected Control createDialogArea(Composite parent) {
+        Work work = (Work) getValue();
+        String from = (String) work.getParameter("From");
+        String to = (String)work.getParameter("To");
+        String body = (String)work.getParameter("Text");
+        String subject = (String)work.getParameter("Subject");
+        if (to != null) {
+            for (String email: to.split(";")) {
+                if (!"".equals(email)) {
+                    Recipient recipient = new Recipient();
+                    recipient.setEmail(email);
+                    recipients.add(recipient);
+                }
+            }
+        }
+        
+        Composite composite = (Composite) super.createDialogArea(parent);
+        composite.setLayout(new FillLayout());
+        final TabFolder tabFolder = new TabFolder(composite, SWT.NONE);
+        createHeadersTab(tabFolder);
+        createBodyTab(tabFolder);
+        
+        if (from != null) {
+            fromText.setText(from);
+        }
+        if (subject != null) {
+            subjectText.setText(subject);
+        }
+        if (body != null) {
+            bodyText.setText(body);
+        }
+        
+        return composite;
+    }
+
+    public void createHeadersTab(TabFolder tabFolder) {
+        final TabItem headersTabItem = new TabItem(tabFolder, SWT.NONE);
+        headersTabItem.setText("Header");
+        final Composite container = new Composite(tabFolder, SWT.NONE);
+        final GridLayout gridLayout = new GridLayout();
+        gridLayout.numColumns = 2;
+        gridLayout.horizontalSpacing = 2;
+        container.setLayout(gridLayout);
+        headersTabItem.setControl(container);
+
+        final Label recipientsLabel = new Label(container, SWT.NONE);
+        final GridData gd_recipientsLabel = new GridData();
+        recipientsLabel.setLayoutData(gd_recipientsLabel);
+        recipientsLabel.setText("Recipients");
+        new Label(container, SWT.NONE);
+
+        // create main table
+        final TableViewer tableViewer = new TableViewer(container, SWT.BORDER
+                | SWT.FULL_SELECTION);
+
+//        // Type column
+//        TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.NONE);
+//        column.setLabelProvider(new TypeLabelProvider());
+//        column.setEditingSupport(new TypeEditing(tableViewer));
+//        column.getColumn().setWidth(70);
+//        column.getColumn().setText("Type");
+//        column.getColumn().setMoveable(true);
+//
+//        // Display Name column
+//        column = new TableViewerColumn(tableViewer, SWT.NONE);
+//        column.setLabelProvider(new DisplayNameLabelProvider());
+//        column.setEditingSupport(new DisplayNameEditing(tableViewer));
+//        column.getColumn().setWidth(200);
+//        column.getColumn().setText("Display Name");
+//        column.getColumn().setMoveable(true);
+
+        // Email column
+        TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.NONE);
+        column.setLabelProvider(new EmailLabelProvider());
+        column.setEditingSupport(new EmailEditing(tableViewer));
+        column.getColumn().setText("Email Address");
+        column.getColumn().setWidth(200);
+        column.getColumn().setMoveable(true);
+
+        final Table table = tableViewer.getTable();
+        final GridData gd_table = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
+        gd_table.heightHint = 128;
+        table.setLayoutData(gd_table);
+        table.setLinesVisible(true);
+        table.setHeaderVisible(true);
+
+        tableViewer.setContentProvider(new RecipientsContentProvider());
+        tableViewer.setInput(recipients);
+        
+        // add/delete buttons
+        final Composite composite = new Composite(container, SWT.NONE);
+        composite.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
+        composite.setLayout(new RowLayout());
+        final Button addButton = new Button(composite, SWT.NONE);
+        addButton.setText("Add");
+        addButton.addSelectionListener(new SelectionListener() {
+            public void widgetDefaultSelected(SelectionEvent e) {
+                Recipient recipient = new Recipient();
+                recipients.add(recipient);
+                tableViewer.add(recipient);
+                tableViewer.refresh();
+            }
+            public void widgetSelected(SelectionEvent e) {
+                Recipient recipient = new Recipient();
+                recipients.add(recipient);
+                tableViewer.add(recipient);
+                tableViewer.refresh();
+            }
+        });
+        final Button deleteButton = new Button(composite, SWT.NONE);
+        deleteButton.setText("Remove");
+        deleteButton.addSelectionListener(new SelectionListener() {
+            public void widgetSelected(SelectionEvent event) {
+                TableItem[] items = table.getSelection();
+                if (items != null && items.length > 0) {
+                    recipients.remove((Recipient) items[0].getData());
+                    tableViewer.remove(items[0]);
+                    tableViewer.refresh();
+                }
+            }
+            public void widgetDefaultSelected(SelectionEvent event) {
+                TableItem[] items = table.getSelection();
+                if (items != null && items.length > 0) {
+                    recipients.remove((Recipient) items[0].getData());
+                    tableViewer.remove(items[0]);
+                    tableViewer.refresh();
+                }
+            }
+        });
+        
+        // from label and text field
+        final Label fromLabel = new Label(container, SWT.NONE);
+        fromLabel.setLayoutData(new GridData());
+        fromLabel.setText("From");
+        fromText = new Text(container, SWT.BORDER);
+        fromText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+    }
+
+    public void createBodyTab(TabFolder tabFolder) {
+        final TabItem headersTabItem = new TabItem(tabFolder, SWT.NONE);
+        headersTabItem.setText("Body");
+
+        final Composite container = new Composite(tabFolder, SWT.NONE);
+        final GridLayout gridLayout = new GridLayout();
+        gridLayout.horizontalSpacing = 2;
+        container.setLayout(gridLayout);
+        headersTabItem.setControl(container);
+
+        // subject label and text field
+        final Label subjectLabel = new Label(container, SWT.NONE);
+        subjectLabel.setLayoutData(new GridData());
+        subjectLabel.setText("Subject");
+
+        subjectText = new Text(container, SWT.BORDER);
+        subjectText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+
+        final Label bodyLabel = new Label(container, SWT.NONE);
+        bodyLabel.setText("Body");
+
+        bodyText = new Text(container, SWT.MULTI | SWT.BORDER);
+        final GridData gd_bodyText = new GridData(SWT.FILL, SWT.CENTER, true, false);
+        gd_bodyText.heightHint = 175;
+        bodyText.setLayoutData(gd_bodyText);
+    }
+
+    protected Object updateValue(Object value) {
+        Work work = getWork();
+        work.setName(((Work) value).getName());
+        work.setParameter("From", fromText.getText());
+        String to = "";
+        for (int i = 0; i < recipients.size(); i++) {
+            to += recipients.get(i).getEmail();
+            if (i != recipients.size() - 1) {
+                to += ";";
+            }
+        }
+        work.setParameter("To", to);
+        work.setParameter("Subject", subjectText.getText());
+        work.setParameter("Text", bodyText.getText());
+        return work;
+    }
+
+    public Work getWork() {
+        return (Work) getValue();
+    }
+
+    public void setWork(Work work) {
+        setValue(work);
+    }
+
+    public void setWorkDefinition(WorkDefinition workDefinition) {
+        if (!"Email".equals(workDefinition.getName())) {
+            DroolsEclipsePlugin.log(new IllegalArgumentException(
+                "The emailCustomEditor can only handle email work items."));
+        }
+    }
+
+    public void show() {
+        open();
+    }
+
+    private class TypeLabelProvider extends ColumnLabelProvider {
+        public String getText(Object element) {
+            return ((Recipient) element).getType();
+        }
+    }
+
+    private class TypeEditing extends EditingSupport {
+        private ComboBoxCellEditor cellEditor;
+
+        private String[] values = new String[] { "to", "cc", "bcc" };
+
+        public TypeEditing(TableViewer viewer) {
+            super(viewer);
+            cellEditor = new ComboBoxCellEditor(viewer.getTable(), values);
+        }
+
+        protected boolean canEdit(Object element) {
+            return true;
+        }
+
+        protected CellEditor getCellEditor(Object element) {
+            return cellEditor;
+        }
+
+        protected Object getValue(Object element) {
+            Recipient p = ((Recipient) element);
+            return new Integer(Arrays.binarySearch(this.values, p.getType()));
+        }
+
+        protected void setValue(Object element, Object value) {
+            int i = ((Integer) value).intValue();
+            if (i != -1) {
+                ((Recipient) element).setType(this.values[i]);
+            }
+            getViewer().update(element, null);
+        }
+    }
+
+    private class DisplayNameLabelProvider extends ColumnLabelProvider {
+        public String getText(Object element) {
+            return ((Recipient) element).getDisplayName();
+        }
+    }
+
+    private class DisplayNameEditing extends EditingSupport {
+        private TextCellEditor cellEditor;
+
+        public DisplayNameEditing(TableViewer viewer) {
+            super(viewer);
+            cellEditor = new TextCellEditor(viewer.getTable());
+        }
+
+        protected boolean canEdit(Object element) {
+            return true;
+        }
+
+        protected CellEditor getCellEditor(Object element) {
+            return cellEditor;
+        }
+
+        protected Object getValue(Object element) {
+            return ((Recipient) element).getDisplayName();
+        }
+
+        protected void setValue(Object element, Object value) {
+            ((Recipient) element).setDisplayName(value.toString());
+            getViewer().update(element, null);
+        }
+    }
+
+    private class EmailLabelProvider extends ColumnLabelProvider {
+        public String getText(Object element) {
+            return ((Recipient) element).getEmail();
+        }
+    }
+
+    private class EmailEditing extends EditingSupport {
+        private TextCellEditor cellEditor;
+
+        public EmailEditing(TableViewer viewer) {
+            super(viewer);
+            cellEditor = new TextCellEditor(viewer.getTable());
+        }
+
+        protected boolean canEdit(Object element) {
+            return true;
+        }
+
+        protected CellEditor getCellEditor(Object element) {
+            return cellEditor;
+        }
+
+        protected Object getValue(Object element) {
+            return ((Recipient) element).getEmail();
+        }
+
+        protected void setValue(Object element, Object value) {
+            ((Recipient) element).setEmail(value.toString());
+            getViewer().update(element, null);
+        }
+    }
+
+    private class Recipient {
+        
+        private String type = "to";
+        private String displayName = "";
+        private String email = "john.doe at mail.com";
+
+        public String getType() {
+            return type;
+        }
+
+        public void setType(String type) {
+            this.type = type;
+        }
+
+        public String getDisplayName() {
+            return displayName;
+        }
+
+        public void setDisplayName(String displayName) {
+            this.displayName = displayName;
+        }
+
+        public String getEmail() {
+            return email;
+        }
+
+        public void setEmail(String email) {
+            this.email = email;
+        }
+    }
+
+    private class RecipientsContentProvider implements IStructuredContentProvider {
+        public Object[] getElements(Object inputElement) {
+            return recipients.toArray();
+        }
+        public void dispose() {
+        }
+        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+        }
+    }
+}




More information about the jboss-svn-commits mailing list