/******************************************************************************* * Copyright (c) 2008 Dennis Schenk, Peter Siska. * 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: * Dennis Schenk - initial implementation * Peter Siska - initial implementation *******************************************************************************/ package ch.unibe.iam.scg.archie.model; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import ch.elexis.core.ui.util.Log; import ch.unibe.iam.scg.archie.ArchieActivator; /** * <p> * An abstract class for data providers used by this plugin. An * <code>AbstractDataProvider</code> is being constructed with a name, which is * also the name of the background job being run when the provider is collecting * its data. The provider holds a <code>DataSet</code> object which provides * convenience methods for presenting and retrieving statistical data. Each * provider also has to set the size of its elements accordingly so the * <code>Job</code> so progress information is being displayed accurately. * </p> * * <p> * Providers have to <strong>initialize additional default values</strong> of * their properties either in the constructor or as part of the class * definition. There is no abstract method that binds the implementors to * initialize their default values. An error will be thrown in the GUI when no * default value has been initialized for a provider property. * </p> * * $Id: AbstractDataProvider.java 258 2008-10-06 17:51:15Z psiska * * @author Peter Siska * @author Dennis Schenk * @version $Rev: 258 */ public abstract class AbstractDataProvider extends Job { /** * DataSet which stores results of this query in matrix form. */ protected DataSet dataSet; private ILabelProvider labelProvider; private IStructuredContentProvider contentProvider; /** * Public constructor. * * @param jobName */ public AbstractDataProvider(String jobName) { super(jobName); this.dataSet = new DataSet(); // initialize providers this.initializeProviders(); assert (this.labelProvider != null); assert (this.contentProvider != null); } /** * Returns the description for this data provider. * * @return Returns the description for this data provider. */ public abstract String getDescription(); /** * Creates headings for each column in the dataset object of this provider. * * @return A list of strings (List<String>) containing the headings. */ protected abstract List<String> createHeadings(); /** * This method should do all the work necessary to populate the dataset's * content. It's called in the job's execute method after some * initializations have been done. * * @return The status of the current job. * @see org.eclipse.core.runtime.IStatus */ protected abstract IStatus createContent(IProgressMonitor monitor); /** {@inheritDoc} */ @Override protected IStatus run(IProgressMonitor monitor) { ArchieActivator.LOG.log("Job + " + this.getName(), Log.INFOS); return this.execute(monitor); } /** * Executes this job. * * @param monitor * @return The status of the current job. */ public IStatus execute(final IProgressMonitor monitor) { // Set headings in the dataset. this.dataSet.setHeadings(this.createHeadings()); // Return the status coming from the content creation method. return this.createContent(monitor); } /** * Returns the content provider for this data provider. * * @return IStructuredContentProvider * * @see org.eclipse.jface.viewers.IStructuredContentProvider */ public IStructuredContentProvider getContentProvider() { return this.contentProvider; } /** * Returns the label provider for this data provider. * * @see org.eclipse.jface.viewers.LabelProvider * @return LabelProvider A label provider for this object. */ public ILabelProvider getLabelProvider() { return this.labelProvider; } /** * Returns the DataSet being held by this data provider. * * @see ch.unibe.iam.scg.archie.model.DataSet * @return The DataSet object for this provider. */ public DataSet getDataSet() { return this.dataSet; } /** * Initializes content and label providers and sets them accordingly. This * is a generic method using two default providers for labels and content. * Every class that has custom providers needs to override this method. */ protected void initializeProviders() { QueryContentProvider content = new QueryContentProvider(this.dataSet); QueryLabelProvider label = new QueryLabelProvider(); this.setContentProvider(content); this.setLabelProvider(label); } /** * Sets the label provider for this data provider. * * @see org.eclipse.jface.viewers.LabelProvider * @param labelProvider * A label provider. */ protected void setLabelProvider(ILabelProvider labelProvider) { this.labelProvider = labelProvider; } /** * Sets the content provider for this data provider. * * @see org.eclipse.jface.viewers.IStructuredContentProvider * @param contentProvider * A content provider for this object. */ protected void setContentProvider(IStructuredContentProvider contentProvider) { this.contentProvider = contentProvider; } }