import javax.inject.Inject;
import javax.inject.Named;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.IOperationHistory;
+import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.IMemento;
+import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
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.ITaxonService;
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
-import eu.etaxonomy.cdm.model.molecular.Sequence;
import eu.etaxonomy.cdm.model.molecular.SingleRead;
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
import eu.etaxonomy.taxeditor.editor.l10n.Messages;
import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
import eu.etaxonomy.taxeditor.editor.view.derivate.searchFilter.DerivateSearchCompositeController;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.IContextListener;
import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
import eu.etaxonomy.taxeditor.view.search.derivative.DerivateContentProvider;
import eu.etaxonomy.taxeditor.view.search.derivative.DerivateLabelProvider;
import eu.etaxonomy.taxeditor.workbench.part.ICollapsableExpandable;
private ISelectionChangedListener selectionChangedListener;
+ private Set<AbstractPostOperation> operations = new HashSet<>();
+
@Inject
private MPart thisPart;
// commit the conversation and start a new transaction immediately
conversation.commit(true);
+ for(AbstractPostOperation entry:operations){
+ IStatus status = Status.CANCEL_STATUS;
+ final IAdaptable uiInfoAdapter = WorkspaceUndoUtil
+ .getUIInfoAdapter(AbstractUtility.getShell());
+ String operationlabel = entry.getLabel();
+ try {
+ entry.addContext(IOperationHistory.GLOBAL_UNDO_CONTEXT);
+ status = entry.execute(new NullProgressMonitor(), uiInfoAdapter);
+ } catch (ExecutionException e) {
+
+ MessagingUtils.operationDialog(AbstractUtility.class, e, TaxeditorStorePlugin.PLUGIN_ID, operationlabel, null);
+
+ }
+
+ String statusString = status.equals(Status.OK_STATUS) ? "completed"
+ : "cancelled";
+
+ IPostOperationEnabled postOperationEnabled = entry
+ .getPostOperationEnabled();
+ if (postOperationEnabled != null) {
+ postOperationEnabled.onComplete();
+ }
+
+
+ //AbstractUtility.executeOperation(entry,sync);
+ }
+
+ operations.clear();
CdmStore.getService(IOccurrenceService.class).merge(new ArrayList<>(rootElements), true);
monitor.worked(1);
dirty.setDirty(isDirty);
}
+ public Set<AbstractPostOperation> getOperations() {
+ return operations;
+ }
+
+ public void addOperation(AbstractPostOperation operation) {
+ this.operations.add(operation);
+ }
+
@Focus
public void setFocus() {
//make sure to bind again if maybe in another view the conversation was unbound
}
+ @Override
public boolean isDirty() {
return dirty.isDirty();
}
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Shell;
+import eu.etaxonomy.cdm.api.service.DeleteResult;
+import eu.etaxonomy.cdm.api.service.IDescriptionService;
+import eu.etaxonomy.cdm.api.service.UpdateResult.Status;
+import eu.etaxonomy.cdm.model.description.DescriptionBase;
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
import eu.etaxonomy.cdm.model.description.SpecimenDescription;
import eu.etaxonomy.cdm.model.description.TaxonDescription;
import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
+import eu.etaxonomy.taxeditor.bulkeditor.e4.BulkEditorE4;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
-import eu.etaxonomy.taxeditor.editor.l10n.Messages;
import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
+import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
import eu.etaxonomy.taxeditor.editor.view.descriptive.e4.FactualDataPartE4;
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.DeleteDescriptionElementOperation;
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.DeleteSpecimenDescriptionOperation;
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.DeleteTaxonDescriptionOperation;
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.DeleteTaxonNameDescriptionOperation;
-import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
+import eu.etaxonomy.taxeditor.store.CdmStore;
/**
*
IUndoContext undoContext = EditorUtil.getUndoContext();
List<AbstractPostOperation> operations = new ArrayList();
-
+ AbstractPostOperation operation = null;
for(Iterator iter = selection.iterator();iter.hasNext();){
Object object = iter.next();
-
- // TaxonDescription
- if(object instanceof TaxonDescription ){
- DeleteTaxonDescriptionOperation operation = new DeleteTaxonDescriptionOperation(label, undoContext, (TaxonDescription) object, factualDataPart, cdmEntitySessionEnabled);
-
- operations.add(operation);
- ((TaxonDescription) object).getTaxon().removeDescription((TaxonDescription) object);
- operation.getPostOperationEnabled().postOperation(object);
+ if (object == null){
+ continue;
}
- if(object instanceof TaxonNameDescription ){
- DeleteTaxonNameDescriptionOperation operation = new DeleteTaxonNameDescriptionOperation(label, undoContext, (TaxonNameDescription) object, factualDataPart, cdmEntitySessionEnabled);
- operations.add(operation);
- ((TaxonNameDescription) object).getTaxonName().removeDescription((TaxonNameDescription) object);
- operation.getPostOperationEnabled().postOperation(object);
+ DescriptionBase description = null;
+ DeleteResult result = new DeleteResult();
+ if (object instanceof DescriptionBase){
+ result = CdmStore.getService(IDescriptionService.class).isDeletable(((DescriptionBase) object).getUuid());
+ description = (DescriptionBase) object;
+ } else if (object instanceof DescriptionElementBase){
+ description = ((DescriptionElementBase)object).getInDescription();
}
- else if(object instanceof SpecimenDescription){
- DeleteSpecimenDescriptionOperation operation = new DeleteSpecimenDescriptionOperation(label, undoContext, (SpecimenDescription) object, factualDataPart, cdmEntitySessionEnabled);
- operations.add(operation) ;
- ((SpecimenDescription) object).getDescribedSpecimenOrObservation().removeDescription((SpecimenDescription) object);
+ if (result.getStatus().equals(Status.OK)){
+ // TaxonDescription
+ if(object instanceof TaxonDescription ){
- }
- // DescriptionElementBase
- else if(object instanceof DescriptionElementBase){
- DeleteDescriptionElementOperation operation = new DeleteDescriptionElementOperation(label, undoContext, (DescriptionElementBase) object, factualDataPart, cdmEntitySessionEnabled);
- AbstractUtility.executeOperation(operation, sync);
- }
- else if(object instanceof FeatureNodeContainer){
- List<DescriptionElementBase> descriptions = ((FeatureNodeContainer) object).getDescriptionElementsForEntireBranch();
+ operation = new DeleteTaxonDescriptionOperation(label, undoContext, (TaxonDescription) object, factualDataPart, cdmEntitySessionEnabled);
+
+ ((TaxonDescription) object).getTaxon().removeDescription((TaxonDescription) object);
+
+ } else if(object instanceof TaxonNameDescription ){
+ operation = new DeleteTaxonNameDescriptionOperation(label, undoContext, (TaxonNameDescription) object, factualDataPart, cdmEntitySessionEnabled);
+
+ ((TaxonNameDescription) object).getTaxonName().removeDescription((TaxonNameDescription) object);
+
+ } else if(object instanceof SpecimenDescription){
+ operation = new DeleteSpecimenDescriptionOperation(label, undoContext, (SpecimenDescription) object, factualDataPart, cdmEntitySessionEnabled);
+
+ ((SpecimenDescription) object).getDescribedSpecimenOrObservation().removeDescription((SpecimenDescription) object);
- for(DescriptionElementBase description : descriptions){
- DeleteDescriptionElementOperation operation = new DeleteDescriptionElementOperation(label, undoContext, description, factualDataPart, cdmEntitySessionEnabled);
+ } else if(object instanceof DescriptionElementBase){
+ // DescriptionElementBase
+ operation = new DeleteDescriptionElementOperation(label, undoContext, (DescriptionElementBase) object, factualDataPart, cdmEntitySessionEnabled);
+ ((DescriptionElementBase) object).getInDescription().removeElement((DescriptionElementBase) object);
+ } else if(object instanceof FeatureNodeContainer){
+ List<DescriptionElementBase> descriptions = ((FeatureNodeContainer) object).getDescriptionElementsForEntireBranch();
- AbstractUtility.executeOperation(operation, sync);
+ for(DescriptionElementBase descriptionElement : descriptions){
+ operation = new DeleteDescriptionElementOperation(label, undoContext, descriptionElement, factualDataPart, cdmEntitySessionEnabled);
+
+ }
+ }
+// if (operation != null){
+// operation.getPostOperationEnabled().postOperation(object);
+// }
+ if (factualDataPart.getSelectionProvidingPart().getObject() instanceof TaxonNameEditorE4){
+ ((TaxonNameEditorE4)factualDataPart.getSelectionProvidingPart().getObject()).getEditorInput().addOperation(operation);
+ ((TaxonNameEditorE4)factualDataPart.getSelectionProvidingPart().getObject()).setDirty();
+ ((TaxonNameEditorE4)factualDataPart.getSelectionProvidingPart().getObject()).redraw();
+ }
+ if (factualDataPart.getSelectionProvidingPart().getObject() instanceof DerivateView){
+ ((DerivateView)factualDataPart.getSelectionProvidingPart().getObject()).addOperation(operation);
+ ((DerivateView)factualDataPart.getSelectionProvidingPart().getObject()).setDirty(true);
+ if (object instanceof DescriptionBase){
+ ((DerivateView)factualDataPart.getSelectionProvidingPart().getObject()).changed(((SpecimenDescription)object).getDescribedSpecimenOrObservation());
+ } else if (object instanceof DescriptionElementBase){
+ if (description != null){
+ factualDataPart.changed(description);
+ }
+ }
+ }
+ if (factualDataPart.getSelectionProvidingPart().getObject() instanceof BulkEditorE4){
+ ((BulkEditorE4)factualDataPart.getSelectionProvidingPart().getObject()).addOperation(operation);
+ ((BulkEditorE4)factualDataPart.getSelectionProvidingPart().getObject()).setDirty(true);
+ ((BulkEditorE4)factualDataPart.getSelectionProvidingPart().getObject()).changed(((SpecimenDescription)object).getDescribedSpecimenOrObservation());
}
}
-
else{
- MessagingUtils.error(getClass(), Messages.DeleteHandler_INVALID_SELECTION, null);
- }
- }
+ Exception e = result.getExceptions() != null && !result.getExceptions().isEmpty()? result.getExceptions().iterator().next() : null;
+
+ MessagingUtils.informationDialog("Delete not possible", e.getMessage());
+ break;
- // execute all cumulated operations
- for(AbstractPostOperation operation : operations){
- if (factualDataPart.getSelectionProvidingPart().getObject() instanceof TaxonNameEditorE4){
- ((TaxonNameEditorE4)factualDataPart.getSelectionProvidingPart().getObject()).getEditorInput().addOperation(operation);
- ((TaxonNameEditorE4)factualDataPart.getSelectionProvidingPart().getObject()).setDirty();
- ((TaxonNameEditorE4)factualDataPart.getSelectionProvidingPart().getObject()).redraw();
}
- // AbstractUtility.executeOperation(operation, sync);
}
+
+
}