ch.elexis.preferences.LaborPrefs.java Source code

Java tutorial

Introduction

Here is the source code for ch.elexis.preferences.LaborPrefs.java

Source

/*******************************************************************************
 * Copyright (c) 2005-2008, G. Weirich and Elexis
 * 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:
 *    G. Weirich - initial implementation
 *    M. Descher - adapted layout
 *    
 *******************************************************************************/

package ch.elexis.preferences;

import java.util.List;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
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.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

import ch.elexis.Hub;
import ch.elexis.admin.AccessControlDefaults;
import ch.elexis.data.LabItem;
import ch.elexis.data.LabResult;
import ch.elexis.data.Query;
import ch.elexis.dialogs.EditLabItem;
import ch.elexis.util.SWTHelper;

public class LaborPrefs extends PreferencePage implements IWorkbenchPreferencePage {

    // DynamicListDisplay params;
    // Composite definition;
    // FormToolkit tk;
    private TableViewer tableViewer;
    private Table table;
    int sortC = 1;
    private String[] headers = { Messages.LaborPrefs_lab, Messages.LaborPrefs_name, Messages.LaborPrefs_short,
            Messages.LaborPrefs_type, Messages.LaborPrefs_unit, Messages.LaborPrefs_refM, Messages.LaborPrefs_refF,
            Messages.LaborPrefs_sortmode };
    private int[] colwidth = { 18, 16, 6, 6, 6, 16, 16, 16 };

    public LaborPrefs() {
        super(Messages.LaborPrefs_labTitle);

    }

    protected Control createContents(Composite parn) {
        noDefaultAndApplyButton();

        Composite tableComposite = new Composite(parn, SWT.NONE);
        GridData gd = new GridData();
        tableComposite.setLayoutData(gd);
        TableColumnLayout tableColumnLayout = new TableColumnLayout();
        tableComposite.setLayout(tableColumnLayout);
        tableViewer = new TableViewer(tableComposite, SWT.BORDER | SWT.FULL_SELECTION);
        table = tableViewer.getTable();

        for (int i = 0; i < headers.length; i++) {
            TableColumn tc = new TableColumn(table, SWT.LEFT);
            tc.setText(headers[i]);
            tableColumnLayout.setColumnData(tc, new ColumnWeightData(colwidth[i], true));
            tc.setData(i);
            tc.addSelectionListener(new SelectionAdapter() {
                @Override
                public void widgetSelected(SelectionEvent e) {
                    sortC = (Integer) ((TableColumn) e.getSource()).getData();
                    tableViewer.refresh(true);
                }

            });
        }
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
        table.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true));
        tableViewer.setContentProvider(new IStructuredContentProvider() {

            public Object[] getElements(Object inputElement) {
                return LabItem.getLabItems().toArray();
            }

            public void dispose() {
            }

            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            }

        });
        tableViewer.setLabelProvider(new LabListLabelProvider());
        tableViewer.addDoubleClickListener(new IDoubleClickListener() {

            public void doubleClick(DoubleClickEvent event) {
                IStructuredSelection sel = (IStructuredSelection) tableViewer.getSelection();
                Object o = sel.getFirstElement();
                if (o instanceof LabItem) {
                    LabItem li = (LabItem) o;
                    EditLabItem eli = new EditLabItem(getShell(), li);
                    eli.create();
                    if (eli.open() == Dialog.OK) {
                        tableViewer.refresh();
                    }
                }
            }

        });
        tableViewer.setSorter(new ViewerSorter() {

            @Override
            public int compare(Viewer viewer, Object e1, Object e2) {
                LabItem li1 = (LabItem) e1;
                LabItem li2 = (LabItem) e2;
                String s1 = "", s2 = ""; //$NON-NLS-1$ //$NON-NLS-2$
                switch (sortC) {
                case 0:
                    s1 = li1.getLabor().getLabel();
                    s2 = li2.getLabor().getLabel();
                    break;
                case 2:
                    s1 = li1.getKuerzel();
                    s2 = li2.getKuerzel();
                    break;
                case 3:
                    s1 = li1.getTyp().toString();
                    s2 = li2.getTyp().toString();
                    break;
                case 7:
                    s1 = li1.getGroup();
                    s2 = li2.getGroup();
                    break;
                default:
                    s1 = li1.getName();
                    s2 = li2.getName();
                }
                int res = s1.compareToIgnoreCase(s2);
                if (res == 0) {
                    return li1.getPrio().compareToIgnoreCase(li2.getPrio());
                }
                return res;
            }

        });
        tableViewer.setInput(this);
        return tableComposite;
    }

    static class LabListLabelProvider extends LabelProvider implements ITableLabelProvider {

        public Image getColumnImage(Object element, int columnIndex) {
            // TODO Automatisch erstellter Methoden-Stub
            return null;
        }

        public String getColumnText(Object element, int columnIndex) {
            LabItem li = (LabItem) element;
            switch (columnIndex) {
            case 0:
                return li.getLabor() == null ? Messages.LaborPrefs_unkown : li.getLabor().getLabel();
            case 1:
                return li.getName();
            case 2:
                return li.getKuerzel();
            case 3:
                LabItem.typ typ = li.getTyp();
                if (typ == LabItem.typ.NUMERIC) {
                    return Messages.LaborPrefs_numeric;
                } else if (typ == LabItem.typ.TEXT) {
                    return Messages.LaborPrefs_alpha;
                } else if (typ == LabItem.typ.FORMULA) {
                    return Messages.LaborPrefs_formula;
                } else if (typ == LabItem.typ.DOCUMENT) {
                    return Messages.LaborPrefs_document;
                }
                return Messages.LaborPrefs_absolute;
            case 4:
                return li.getEinheit();
            case 5:
                return li.get("RefMann"); //$NON-NLS-1$
            case 6:
                return li.getRefW();
            case 7:
                return li.getGroup() + " - " + li.getPrio(); //$NON-NLS-1$
            default:
                return "?col?"; //$NON-NLS-1$
            }
        }

    };

    @Override
    protected void contributeButtons(Composite parent) {
        ((GridLayout) parent.getLayout()).numColumns++;
        Button bNewItem = new Button(parent, SWT.PUSH);
        bNewItem.setText(Messages.LaborPrefs_labValue);
        bNewItem.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                EditLabItem eli = new EditLabItem(getShell(), null);
                eli.create();
                if (eli.open() == Dialog.OK) {
                    tableViewer.refresh();
                }
            }

        });
        ((GridLayout) parent.getLayout()).numColumns++;
        Button bDelItem = new Button(parent, SWT.PUSH);
        bDelItem.setText(Messages.LaborPrefs_deleteItem);
        bDelItem.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                IStructuredSelection sel = (IStructuredSelection) tableViewer.getSelection();
                Object o = sel.getFirstElement();
                if (o instanceof LabItem) {
                    LabItem li = (LabItem) o;
                    Query<LabResult> qbe = new Query<LabResult>(LabResult.class);
                    qbe.add("ItemID", "=", li.getId()); //$NON-NLS-1$ //$NON-NLS-2$
                    List<LabResult> list = qbe.execute();
                    for (LabResult po : list) {
                        po.delete();
                    }
                    li.delete();
                    tableViewer.remove(o);
                }
            }
        });
        ((GridLayout) parent.getLayout()).numColumns++;
        Button bDelAllItems = new Button(parent, SWT.PUSH);
        bDelAllItems.setText(Messages.LaborPrefs_deleteAllItems);
        bDelAllItems.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                if (SWTHelper.askYesNo(Messages.LaborPrefs_deleteReallyAllItems,
                        Messages.LaborPrefs_deleteAllExplain)) {
                    Query<LabItem> qbli = new Query<LabItem>(LabItem.class);
                    List<LabItem> items = qbli.execute();
                    for (LabItem li : items) {
                        Query<LabResult> qbe = new Query<LabResult>(LabResult.class);
                        qbe.add("ItemID", "=", li.getId()); //$NON-NLS-1$ //$NON-NLS-2$
                        List<LabResult> list = qbe.execute();
                        for (LabResult po : list) {
                            po.delete();
                        }
                        li.delete();
                    }
                    tableViewer.refresh();
                }
            }
        });
        if (Hub.acl.request(AccessControlDefaults.DELETE_LABITEMS) == false) {
            bDelAllItems.setEnabled(false);
        }
    }

    public void init(IWorkbench workbench) {
        // Nothing to initialize
    }

    @Override
    public Point computeSize() {
        // TODO Auto-generated method stub
        return new Point(350, 350);
    }
}