Index: org/hibernate/eclipse/console/views/QueryPageViewer.java =================================================================== RCS file: /cvsroot/hibernate/HibernateExt/org.hibernate.eclipse.console/src/org/hibernate/eclipse/console/views/QueryPageViewer.java,v retrieving revision 1.5 diff -u -r1.5 QueryPageViewer.java --- org/hibernate/eclipse/console/views/QueryPageViewer.java 18 Jun 2005 23:37:42 -0000 1.5 +++ org/hibernate/eclipse/console/views/QueryPageViewer.java 10 Nov 2005 18:43:33 -0000 @@ -7,6 +7,8 @@ import java.beans.PropertyChangeEvent; import java.util.List; +import org.eclipse.core.runtime.jobs.IJobChangeEvent; +import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; @@ -26,11 +28,11 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.ui.ISelectionService; import org.hibernate.console.QueryPage; import org.hibernate.eclipse.console.HibernateConsolePlugin; @@ -171,7 +173,18 @@ this.tableViewer = new TableViewer(table); this.tableViewer.setLabelProvider(new LabelProviderImpl() ); this.tableViewer.setContentProvider(new ContentProviderImpl() ); - this.tableViewer.setInput(this.queryPage); + + QueryPageListJob queryPageListJob = new QueryPageListJob(queryPage, "Execute query"); + queryPageListJob.addJobChangeListener(new JobChangeAdapter() { + public void done(IJobChangeEvent event) { + Display.getDefault().asyncExec(new Runnable() { + public void run() { + QueryPageViewer.this.tableViewer.setInput(QueryPageViewer.this.queryPage); + } + }); + } + }); + queryPageListJob.schedule(); this.tableViewer.addDoubleClickListener(new IDoubleClickListener () { public void doubleClick(DoubleClickEvent event) { Index: org/hibernate/eclipse/console/views/QueryPageListJob.java =================================================================== RCS file: org/hibernate/eclipse/console/views/QueryPageListJob.java diff -N org/hibernate/eclipse/console/views/QueryPageListJob.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ org/hibernate/eclipse/console/views/QueryPageListJob.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,61 @@ +package org.hibernate.eclipse.console.views; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.hibernate.console.QueryPage; +import org.hibernate.console.QueryProgressMonitor; + +public class QueryPageListJob extends Job { + + QueryPage queryPage; + + public QueryPageListJob(QueryPage queryPage, String jobName) { + super(jobName); + this.queryPage = queryPage; + } + + protected IStatus run(IProgressMonitor monitor) { + ProgressMonitorAdapter internalMonitor = new ProgressMonitorAdapter("Executing query..", monitor); + queryPage.setProgressMonitor(internalMonitor); + try { + queryPage.getList(); + } catch (Throwable thr) { + thr.printStackTrace(); + } + return Status.OK_STATUS; + } + + + class ProgressMonitorAdapter implements QueryProgressMonitor { + + IProgressMonitor monitor; + String taskName; + int totalWork; + + public ProgressMonitorAdapter(String taskName, IProgressMonitor monitor) { + this.monitor = monitor; + this.taskName = taskName; + + } + + public void setSteps(int steps) { + monitor.beginTask(taskName, steps); + totalWork = steps; + } + + public int getSteps() { + return totalWork; + } + + public void startNextStep(int stepNumber, String progressMade) { + monitor.subTask(progressMade); + int worked = stepNumber-1<0?0:stepNumber-1; + monitor.worked(worked); + + } + + } + +}