Add loading label to character matrix
authorPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 16 Jul 2018 09:20:40 +0000 (11:20 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 16 Jul 2018 09:20:40 +0000 (11:20 +0200)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrix.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrixPart.java

index caf4e7c170bdcbcc604ad6a8c0740d15c1c500c3..0235b81d6fa78daee92fe58b8a53e03cdcd44ce4 100644 (file)
@@ -19,11 +19,16 @@ import java.util.Set;
 import java.util.UUID;
 import java.util.stream.Collectors;
 
+import javax.inject.Inject;
+
 import org.apache.commons.collections4.map.LinkedMap;
 import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
 import org.eclipse.core.runtime.ICoreRunnable;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
 import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.e4.ui.di.UISynchronize;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.viewers.ComboViewer;
 import org.eclipse.nebula.widgets.nattable.NatTable;
@@ -113,6 +118,9 @@ public class CharacterMatrix extends Composite {
 
     static final String LABEL_TAXON_ROW = "TAXON_ROW"; //$NON-NLS-1$
 
+    @Inject
+    private UISynchronize sync;
+
     private DescriptiveDataSet descriptiveDataSet;
 
     private NatTable natTable;
@@ -512,7 +520,7 @@ public class CharacterMatrix extends Composite {
         UUID monitorUuid = CdmStore.getService(IDescriptiveDataSetService.class).monitGetRowWrapper(descriptiveDataSet);
         IProgressMonitorService progressMonitorService = CdmApplicationState.getCurrentAppConfig().getProgressMonitorService();
 
-
+        final Collection<RowWrapperDTO> wrappers = new ArrayList<>();
         String jobLabel = "Load character data";
         Job job = Job.create(jobLabel, (ICoreRunnable) monitor -> {
             monitor.beginTask(jobLabel, IProgressMonitor.UNKNOWN);
@@ -524,14 +532,26 @@ public class CharacterMatrix extends Composite {
             IRemotingProgressMonitor remotingMonitor = progressMonitorService.getRemotingMonitor(monitorUuid);
             Object result = remotingMonitor.getResult();
             if(result instanceof Collection){
-                Collection<RowWrapperDTO> wrappers = (Collection<RowWrapperDTO>) result;
-                wrappers.forEach(wrapper->CharacterMatrix.this.descriptions.add(wrapper));
+                wrappers.addAll((Collection<RowWrapperDTO>) result);
             }
             monitor.done();
         });
+        job.addJobChangeListener(new JobChangeAdapter(){
+            @Override
+            public void done(IJobChangeEvent event) {
+                sync.syncExec(()->{
+                    wrappers.forEach(wrapper->CharacterMatrix.this.descriptions.add(wrapper));
+                    loadingDone();
+                });
+            }
+        });
         job.schedule(1000);
     }
 
+    private void loadingDone() {
+        this.part.loadingDone();
+    }
+
     public List<State> getSupportedStatesForCategoricalFeature(Feature feature){
         return categoricalFeatureToStateMap.get(feature);
     }
index 353214603fecf875759f9abca36e0eef0b77408f..d898036e2a278a5c485f224d4cef5c9245ca822c 100644 (file)
@@ -25,13 +25,18 @@ import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.e4.core.contexts.ContextInjectionFactory;
+import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.ui.di.Focus;
 import org.eclipse.e4.ui.di.Persist;
 import org.eclipse.e4.ui.model.application.ui.MDirtyable;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
 import org.eclipse.nebula.widgets.nattable.NatTable;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StackLayout;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
@@ -105,8 +110,10 @@ ICdmEntitySessionEnabled{
 
     private CharacterMatrix matrix;
 
+    private StackLayout stackLayout;
+
     @PostConstruct
-    public void create(Composite parent) {
+    public void create(Composite parent, IEclipseContext context) {
         if(CdmStore.isActive() && conversation==null){
             conversation = CdmStore.createConversation();
         }
@@ -116,7 +123,13 @@ ICdmEntitySessionEnabled{
         else{
             return;
         }
+        stackLayout = new StackLayout();
+        parent.setLayout(stackLayout);
         matrix = new CharacterMatrix(parent, this);
+        Label label = new Label(parent, SWT.NONE);
+        label.setText("Loading matrix...");
+        stackLayout.topControl = label;
+        ContextInjectionFactory.inject(matrix, context);
     }
 
     public void init(UUID descriptiveDataSetUuid, boolean treeView) {
@@ -253,4 +266,9 @@ ICdmEntitySessionEnabled{
         updateResults.add(result);
     }
 
+    public void loadingDone() {
+        stackLayout.topControl = matrix;
+        matrix.getParent().layout();
+    }
+
 }