Solving a problem where the datasource view would hang and thus render the whole...
authorn.hoffmann <n.hoffmann@localhost>
Wed, 28 Sep 2011 15:52:03 +0000 (15:52 +0000)
committern.hoffmann <n.hoffmann@localhost>
Wed, 28 Sep 2011 15:52:03 +0000 (15:52 +0000)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/CdmDataSourceViewPart.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/CdmMetaDataAwareDataSourceContainer.java

index 6221e4e187d8446d886186a946198ee44d55a82e..00f19ba0aff81ea00f64752c3580c9e1adf8b7ba 100644 (file)
@@ -110,15 +110,14 @@ public class CdmDataSourceViewPart extends ViewPart{
                @Override
                public IStatus run(final IProgressMonitor monitor) {
                        try{
-                               monitor.beginTask("Retrieving datasources", dataSources.size());
+                               monitor.beginTask("Retrieving datasources", dataSources.size() + 1);
                        
                                List<ICdmDataSource> dataSources = CdmDataSourceRepository.getAll();
                                
                                final List<CdmMetaDataAwareDataSourceContainer> containers = new ArrayList<CdmMetaDataAwareDataSourceContainer>();
                                
                                for(ICdmDataSource dataSource : dataSources){
-                                       containers.add(new CdmMetaDataAwareDataSourceContainer(dataSource, CdmDataSourceViewPart.this));
-                                       monitor.worked(1);
+                                       containers.add(new CdmMetaDataAwareDataSourceContainer(dataSource));
                                }
                                
                                Display.getDefault().asyncExec(new Runnable() {
@@ -127,8 +126,21 @@ public class CdmDataSourceViewPart extends ViewPart{
                                        public void run() {
                                                viewer.setInput(containers);
                                        }
-                               });                             
-//                             viewer.setInput(containers);
+                               });
+                               monitor.worked(1);
+                               
+                               for(final CdmMetaDataAwareDataSourceContainer container : containers){
+                                       
+                                       container.getMetaDataFromDataSource();
+                                       Display.getDefault().asyncExec(new Runnable() {
+                                               
+                                               @Override
+                                               public void run() {
+                                                       viewer.update(container, null);
+                                               }
+                                       });
+                                       monitor.worked(1);
+                               }
                                
                        }finally{
                                monitor.done();
@@ -257,7 +269,7 @@ public class CdmDataSourceViewPart extends ViewPart{
         * <p>refresh</p>
         */
        public void refresh(){          
-               getService().schedule(new DataSourceJob("Loading datasources", CdmDataSourceRepository.getAll()), Job.SHORT);
+               getService().schedule(new DataSourceJob("Loading datasources", CdmDataSourceRepository.getAll()), Job.LONG);
        }
 
        /** {@inheritDoc} */
index ad4e6ccfeeedcd5fb025766979e57873698c2e75..9c3097df4bd2b6a6ce70950d95f414c90d985c97 100644 (file)
@@ -14,13 +14,6 @@ import java.sql.SQLException;
 import java.util.HashMap;
 import java.util.Map;
 
-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.eclipse.jface.viewers.StructuredViewer;
-import org.eclipse.swt.widgets.Display;
-
 import eu.etaxonomy.cdm.database.ICdmDataSource;
 import eu.etaxonomy.cdm.model.common.CdmMetaData;
 import eu.etaxonomy.cdm.model.common.CdmMetaData.MetaDataPropertyName;
@@ -35,47 +28,7 @@ import eu.etaxonomy.taxeditor.store.StoreUtil;
  */
 public class CdmMetaDataAwareDataSourceContainer {
        
-       private class MetaDataJob extends Job{
-
-               /**
-                * @param name
-                */
-               public MetaDataJob(String dataSourceName) {
-                       super("Retrieving meta data for datasource: " + dataSourceName);
-               }
-
-               /* (non-Javadoc)
-                * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
-                */
-               @Override
-               protected IStatus run(IProgressMonitor monitor) {
-                       if(!monitor.isCanceled()){
-                               try {
-                                       running = dataSource.testConnection();
-                               } catch (Exception e) {
-                                       running = false;
-                               }
-                       }
-                       
-                       if(!monitor.isCanceled()){
-                               getMetaDataFromDataSource(dataSource);
-                       }
-                       
-                       if(!monitor.isCanceled()){
-                               Display.getDefault().asyncExec(new Runnable(){
        
-                                       @Override
-                                       public void run() {
-                                               viewer.update(CdmMetaDataAwareDataSourceContainer.this, null);
-                                       }
-                                       
-                               });
-                       }
-                       
-                       return monitor.isCanceled() ? Status.CANCEL_STATUS : Status.OK_STATUS;
-               }
-               
-       }
        
        /** Constant <code>DEFAULT_ENTRY="-"</code> */
        public static final String DEFAULT_ENTRY = "-";
@@ -85,10 +38,6 @@ public class CdmMetaDataAwareDataSourceContainer {
        private boolean running;
        
        private Map<MetaDataPropertyName, String> metaDataMap;
-
-       private StructuredViewer viewer;
-
-       private MetaDataJob job;
        
        /**
         * <p>Constructor for CdmMetaDataAwareDataSourceContainer.</p>
@@ -96,15 +45,11 @@ public class CdmMetaDataAwareDataSourceContainer {
         * @param dataSource a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
         * @param view a {@link eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart} object.
         */
-       public CdmMetaDataAwareDataSourceContainer(ICdmDataSource dataSource, CdmDataSourceViewPart view){
+       public CdmMetaDataAwareDataSourceContainer(ICdmDataSource dataSource){
                this.dataSource = dataSource;
-               this.viewer = view.getViewer();
                
                metaDataMap = getDefaultMetaDataMap();
                
-               job = new MetaDataJob(dataSource.getName());
-               job.setPriority(Job.DECORATE);
-               view.getService().schedule(job);
        }
 
        /**
@@ -116,7 +61,13 @@ public class CdmMetaDataAwareDataSourceContainer {
                return dataSource;
        }
        
-       private void getMetaDataFromDataSource(ICdmDataSource dataSource){
+       public void getMetaDataFromDataSource(){
+               try {
+                       running = dataSource.testConnection();
+               } catch (Exception e) {
+                       running = false;
+               }
+               
                try {
                        if(isRunning()){
                        
@@ -194,11 +145,4 @@ public class CdmMetaDataAwareDataSourceContainer {
        public String toString() {
                return dataSource.getName();
        }
-       
-       /**
-        * <p>dispose</p>
-        */
-       public void dispose(){
-               job.cancel();
-       }
 }