ref #7095 Make matrix editable vie DetailsView
authorPatrick Plitzner <p.plitzner@bgbm.org>
Fri, 1 Dec 2017 10:54:46 +0000 (11:54 +0100)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Fri, 1 Dec 2017 10:54:46 +0000 (11:54 +0100)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/matrix/CharacterMatrix.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/matrix/SpecimenColumnPropertyAccessor.java

index 7d10e91619c1f5e6218e628f3aa94f644efe1bc2..84b56c3d0d8619b59ba5518d01389215a598dbc0 100644 (file)
@@ -21,6 +21,8 @@ import org.eclipse.core.runtime.IProgressMonitor;
 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.jface.layout.GridDataFactory;
 import org.eclipse.nebula.widgets.nattable.NatTable;
 import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
@@ -34,12 +36,17 @@ import org.eclipse.nebula.widgets.nattable.grid.layer.GridLayer;
 import org.eclipse.nebula.widgets.nattable.grid.layer.RowHeaderLayer;
 import org.eclipse.nebula.widgets.nattable.layer.DataLayer;
 import org.eclipse.nebula.widgets.nattable.layer.ILayer;
+import org.eclipse.nebula.widgets.nattable.layer.ILayerListener;
+import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell;
+import org.eclipse.nebula.widgets.nattable.layer.event.ILayerEvent;
 import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer;
+import org.eclipse.nebula.widgets.nattable.selection.event.CellSelectionEvent;
 import org.eclipse.nebula.widgets.nattable.viewport.ViewportLayer;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
 import eu.etaxonomy.cdm.api.service.IWorkingSetService;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
@@ -48,6 +55,9 @@ import eu.etaxonomy.cdm.model.description.WorkingSet;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
+import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart;
 
@@ -56,7 +66,7 @@ import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart;
  * @since Nov 26, 2017
  *
  */
-public class CharacterMatrix implements IE4SavablePart{
+public class CharacterMatrix implements IE4SavablePart, IPartContentHasDetails, IConversationEnabled, IDirtyMarkable{
 
     private WorkingSet workingSet;
 
@@ -64,9 +74,17 @@ public class CharacterMatrix implements IE4SavablePart{
 
     private ConversationHolder conversation;
 
+    @Inject
+    private ESelectionService selService;
+
     @Inject
     private MDirtyable dirty;
 
+    @Inject
+    private MPart thisPart;
+
+    private NatTable natTable;
+
     @PostConstruct
     public void create(Composite parent) {
         if(CdmStore.isActive() && conversation==null){
@@ -82,6 +100,7 @@ public class CharacterMatrix implements IE4SavablePart{
 
     public void init(WorkingSet workingSet) {
         this.workingSet = workingSet;
+        thisPart.setLabel(workingSet.getLabel());
 
         // create the data provider
         SpecimenColumnPropertyAccessor columnPropertyAccessor = new SpecimenColumnPropertyAccessor(workingSet);
@@ -110,7 +129,21 @@ public class CharacterMatrix implements IE4SavablePart{
         // create the grid layer composed with the prior created layer stacks
         GridLayer gridLayer = new GridLayer(viewportLayer, columnHeaderLayer, rowHeaderLayer, cornerLayer);
 
-        NatTable natTable = new NatTable(parent, gridLayer);
+        natTable = new NatTable(parent, gridLayer);
+        natTable.addLayerListener(new ILayerListener() {
+
+            @Override
+            public void handleLayerEvent(ILayerEvent event) {
+                if(event instanceof CellSelectionEvent){
+                    CellSelectionEvent cellSelectionEvent = (CellSelectionEvent)event;
+                    Collection<ILayerCell> selectedCells = cellSelectionEvent.getSelectionLayer().getSelectedCells();
+                    if(selectedCells.size()==1){
+                        ILayerCell cell = selectedCells.iterator().next();
+                        selService.setSelection(cell.getDataValue());
+                    }
+                }
+            }
+        });
 
         GridDataFactory.fillDefaults().grab(true, true).applyTo(natTable);
 
@@ -158,4 +191,40 @@ public class CharacterMatrix implements IE4SavablePart{
         }
     }
 
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void update(CdmDataChangeMap arg0) {
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public ConversationHolder getConversationHolder() {
+        return conversation;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void changed(Object element) {
+        dirty.setDirty(true);
+        natTable.refresh();
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void forceDirty() {
+        dirty.setDirty(true);
+    }
+
 }
index 45ed51f1db88f71590e39dab8b95f391192a6e61..8432c4479c272fa09a4aa78191d0924b39bc402a 100644 (file)
@@ -21,7 +21,6 @@ import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.FeatureTree;
 import eu.etaxonomy.cdm.model.description.SpecimenDescription;
 import eu.etaxonomy.cdm.model.description.WorkingSet;
-import eu.etaxonomy.taxeditor.model.DescriptionHelper;
 
 /**
  * @author pplitzner
@@ -53,12 +52,12 @@ public class SpecimenColumnPropertyAccessor implements IColumnPropertyAccessor<S
      * {@inheritDoc}
      */
     @Override
-    public Object getDataValue(SpecimenDescription rowObject, int columnIndex) {
+    public DescriptionElementBase getDataValue(SpecimenDescription rowObject, int columnIndex) {
         Feature feature = features.get(columnIndex);
         Set<DescriptionElementBase> elements = rowObject.getElements();
         for (DescriptionElementBase descriptionElementBase : elements) {
             if(descriptionElementBase.getFeature().equals(feature)){
-                return DescriptionHelper.getLabel(descriptionElementBase);
+                return descriptionElementBase;
             }
         }
         return null;