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;
* @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";
private ISelectionService selectionService;
+ private ConversationHolder conversation;
+
+ private boolean dirty;
+
+
+ public OccurrenceView() {
+ if(conversation==null && CdmStore.isActive()){
+ conversation = CdmStore.createConversation();
+ }
+ }
+
/**
* {@inheritDoc}
*/
*/
@Override
public void setFocus() {
+ if(!conversation.isBound()){
+ conversation.bind();
+ }
}
/**
@Override
public void dispose() {
selectionService.removeSelectionListener(this);
+ if(conversation!=null){
+ conversation.close();
+ }
}
/**
}
}
}
+
+ @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;
+ }
}