ref #7095 Add editor capabilities to character matrix editor
authorPatrick Plitzner <p.plitzner@bgbm.org>
Fri, 1 Dec 2017 10:07:57 +0000 (11:07 +0100)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Fri, 1 Dec 2017 10:07:57 +0000 (11:07 +0100)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/matrix/CharacterMatrix.java

index 11199dd95061a3965c6c82bf7b6fbb4ae341ae88..7d10e91619c1f5e6218e628f3aa94f644efe1bc2 100644 (file)
@@ -8,10 +8,19 @@
 */
 package eu.etaxonomy.taxeditor.editor.workingSet.matrix;
 
-import java.util.Date;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
 
 import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
 
+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.jface.layout.GridDataFactory;
 import org.eclipse.nebula.widgets.nattable.NatTable;
 import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
@@ -30,25 +39,53 @@ 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.service.IOccurrenceService;
+import eu.etaxonomy.cdm.api.service.IWorkingSetService;
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.description.SpecimenDescription;
 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.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart;
 
 /**
  * @author pplitzner
  * @since Nov 26, 2017
  *
  */
-public class CharacterMatrix {
+public class CharacterMatrix implements IE4SavablePart{
 
     private WorkingSet workingSet;
 
+    private Composite parent;
+
+    private ConversationHolder conversation;
+
+    @Inject
+    private MDirtyable dirty;
+
     @PostConstruct
     public void create(Composite parent) {
+        if(CdmStore.isActive() && conversation==null){
+            conversation = CdmStore.createConversation();
+        }
+        else{
+            return;
+        }
         parent.setLayout(new GridLayout());
+        this.parent = parent;
+    }
+
+
+    public void init(WorkingSet workingSet) {
+        this.workingSet = workingSet;
 
         // create the data provider
-        SpecimenColumnPropertyAccessor columnPropertyAccessor = new SpecimenColumnPropertyAccessor(DataSource.getWorkingSet());
-        IDataProvider bodyDataProvider = new ListDataProvider<SpecimenDescription>(DataSource.getDescriptions(), columnPropertyAccessor);
+        SpecimenColumnPropertyAccessor columnPropertyAccessor = new SpecimenColumnPropertyAccessor(workingSet);
+        IDataProvider bodyDataProvider = new ListDataProvider<SpecimenDescription>(getDescriptions(workingSet), columnPropertyAccessor);
 
         DataLayer bodyDataLayer = new DataLayer(bodyDataProvider);
         SelectionLayer selectionLayer = new SelectionLayer(bodyDataLayer);
@@ -77,46 +114,48 @@ public class CharacterMatrix {
 
         GridDataFactory.fillDefaults().grab(true, true).applyTo(natTable);
 
+        parent.layout();
     }
 
-    public void init(WorkingSet workingSet) {
-        this.workingSet = workingSet;
-    }
-
-    public class Person {
-        private int id;
-        private String name;
-        private Date birthDate;
-
-        public Person(int id, String name, Date birthDate) {
-            this.id = id;
-            this.name = name;
-            this.birthDate = birthDate;
-        }
-
-        public int getId() {
-            return id;
+    private List<SpecimenDescription> getDescriptions(WorkingSet workingSet) {
+        List<SpecimenDescription> descriptions = new ArrayList<>();
+        Set<TaxonNode> taxonSubtreeFilter = workingSet.getTaxonSubtreeFilter();
+        for (TaxonNode taxonNode : taxonSubtreeFilter) {
+            Taxon taxon = taxonNode.getTaxon();
+            if(taxon!=null){
+                taxon = HibernateProxyHelper.deproxy(taxon, Taxon.class);
+                Collection<SpecimenOrObservationBase> specimens = CdmStore.getService(IOccurrenceService.class).listByAssociatedTaxon(SpecimenOrObservationBase.class, null, taxon, null, null, null, null, null);
+                for (SpecimenOrObservationBase specimen : specimens) {
+                    descriptions.addAll(specimen.getSpecimenDescriptions());
+                }
+            }
         }
+        return descriptions;
+    }
 
-        public void setId(int id) {
-            this.id = id;
-        }
 
-        public String getName() {
-            return name;
-        }
+    @Persist
+    @Override
+    public void save(IProgressMonitor monitor) {
+        conversation.commit();
+        CdmStore.getService(IWorkingSetService.class).merge(workingSet, true);
 
-        public void setName(String name) {
-            this.name = name;
-        }
+        dirty.setDirty(false);
+    }
 
-        public Date getBirthDate() {
-            return birthDate;
+    @Focus
+    public void setFocus(){
+        if(conversation!=null){
+            conversation.bind();
         }
+    }
 
-        public void setBirthDate(Date birthDate) {
-            this.birthDate = birthDate;
+    @PreDestroy
+    public void dispose(){
+        if(conversation!=null){
+            conversation.close();
+            conversation = null;
         }
-
     }
+
 }