ch.elexis.actions.FlatDataLoader.java Source code

Java tutorial

Introduction

Here is the source code for ch.elexis.actions.FlatDataLoader.java

Source

/*******************************************************************************
 * Copyright (c) 2009-2010, 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
 * 
 *******************************************************************************/

package ch.elexis.actions;

import java.util.HashMap;
import java.util.List;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.viewers.ILazyContentProvider;
import org.eclipse.jface.viewers.TableViewer;

import ch.elexis.Desk;
import ch.elexis.data.PersistentObject;
import ch.elexis.data.Query;
import ch.elexis.util.viewers.CommonViewer;
import ch.elexis.util.viewers.ViewerConfigurer.ControlFieldProvider;

/**
 * A PersistentObjectLoader for flat tables. This is also an ILazyContentProvider for Structured
 * Viewers and a ContentProvider for @see CommonViewer
 * 
 * @author Gerry
 * 
 */
public class FlatDataLoader extends PersistentObjectLoader implements ILazyContentProvider {
    //private static final String LOADMESSAGE = "Lade Daten..."; //$NON-NLS-1$
    private List<? extends PersistentObject> raw = null;
    private List<? extends PersistentObject> filtered = null;

    public FlatDataLoader(CommonViewer cv, Query<? extends PersistentObject> qbe) {
        super(cv, qbe);
    }

    /**
     * Constructor without CommonViewer. Do not in Connection with CommonViewers
     * 
     * @param qbe
     */
    public FlatDataLoader(Query<? extends PersistentObject> qbe) {
        super(null, qbe);
    }

    /**
     * From @see DelayableJob.IWorker
     */
    public IStatus work(IProgressMonitor monitor, HashMap<String, Object> params) {
        if (isSuspended()) {
            return Status.CANCEL_STATUS;
        }
        final TableViewer tv = (TableViewer) cv.getViewerWidget();
        if (filtered != null) {
            filtered.clear();
        }
        filtered = null;
        setQuery();
        applyQueryFilters();
        if (orderFields != null) {
            qbe.orderBy(false, orderFields);
        }
        if (monitor.isCanceled()) {
            return Status.CANCEL_STATUS;
        }
        raw = qbe.execute();
        if (monitor.isCanceled()) {
            return Status.CANCEL_STATUS;
        }
        Desk.asyncExec(new Runnable() {
            public void run() {
                // Avoid access to disposed table
                if (tv != null && !tv.getTable().isDisposed()) {
                    tv.setItemCount(0);
                    filtered = raw;
                    tv.setItemCount(raw.size());
                }
            }
        });

        return Status.OK_STATUS;
    }

    public void setResult(List<PersistentObject> res) {
        raw = res;
    }

    /**
     * prepare the query so it returns the appropriate Objects on execute(). The default
     * implemetation lets the ControlFieldProvider set the query. Subclasses may override
     */
    protected void setQuery() {
        qbe.clear();
        ControlFieldProvider cfp = cv.getConfigurer().getControlFieldProvider();
        if (cfp != null) {
            cfp.setQuery(qbe);
        }
    }

    public void updateElement(int index) {
        if (filtered != null) {
            if (index >= 0 && index < filtered.size()) {
                Object o = filtered.get(index);
                if (o != null) {
                    TableViewer tv = (TableViewer) cv.getViewerWidget();
                    tv.replace(filtered.get(index), index);
                }
            }
        }
    }

}