Add conversation/session support to OccurenceView
authorPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 26 Oct 2015 07:40:00 +0000 (08:40 +0100)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 26 Oct 2015 07:40:00 +0000 (08:40 +0100)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivative/OccurrenceView.java

index 046c24b913d26b291323cc46e48674630798d806..5ac2313a53b5b65821217ead32f99f049842beaa 100644 (file)
@@ -11,27 +11,31 @@ package eu.etaxonomy.taxeditor.view.derivative;
 
 import java.util.Collection;
 
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.viewers.AbstractTreeViewer;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.Tree;
-import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.ISaveablePart2;
 import org.eclipse.ui.ISelectionService;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.part.ViewPart;
 
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
 import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.view.AbstractCdmViewPart;
 import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateContentProvider;
 import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
 
@@ -40,7 +44,7 @@ import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
  * @date Oct 7, 2015
  *
  */
-public class OccurrenceView extends ViewPart implements ISelectionListener, IPartContentHasDetails{
+public class OccurrenceView extends AbstractCdmViewPart implements IPartContentHasDetails, ISaveablePart2{
 
     public static String ID = "eu.etaxonomy.taxeditor.view.derivative.OccurrenceView";
 
@@ -50,6 +54,17 @@ public class OccurrenceView extends ViewPart implements ISelectionListener, IPar
 
     private ISelectionService selectionService;
 
+    private ConversationHolder conversation;
+
+    private boolean dirty;
+
+
+    public OccurrenceView() {
+        if(conversation==null && CdmStore.isActive()){
+            conversation = CdmStore.createConversation();
+        }
+    }
+
     /**
      * {@inheritDoc}
      */
@@ -90,6 +105,9 @@ public class OccurrenceView extends ViewPart implements ISelectionListener, IPar
      */
     @Override
     public void setFocus() {
+        if(!conversation.isBound()){
+            conversation.bind();
+        }
     }
 
     /**
@@ -98,6 +116,9 @@ public class OccurrenceView extends ViewPart implements ISelectionListener, IPar
     @Override
     public void dispose() {
         selectionService.removeSelectionListener(this);
+        if(conversation!=null){
+            conversation.close();
+        }
     }
 
     /**
@@ -113,4 +134,59 @@ public class OccurrenceView extends ViewPart implements ISelectionListener, IPar
             }
         }
     }
+
+    @Override
+    public boolean onComplete() {
+        return false;
+    }
+
+    @Override
+    public Viewer getViewer() {
+        return viewer;
+    }
+
+    @Override
+    public void createViewer(Composite parent) {
+    }
+
+    @Override
+    public void changed(Object object) {
+        this.dirty = true;
+        firePropertyChange(PROP_DIRTY);
+    }
+
+    @Override
+    public void doSave(IProgressMonitor monitor) {
+        if(conversation.isBound()){
+//            input.merge(); TODO remote merging
+            conversation.commit(true);
+        }
+        this.dirty = false;
+        firePropertyChange(PROP_DIRTY);
+    }
+
+    @Override
+    public void doSaveAs() {
+        doSave(new NullProgressMonitor());
+    }
+
+    @Override
+    public boolean isDirty() {
+        return this.dirty;
+    }
+
+    @Override
+    public boolean isSaveAsAllowed() {
+        return false;
+    }
+
+    @Override
+    public boolean isSaveOnCloseNeeded() {
+        return isDirty();
+    }
+
+    @Override
+    public int promptToSaveOnClose() {
+        return ISaveablePart2.DEFAULT;
+    }
 }