*/
package eu.etaxonomy.taxeditor.editor.workingSet;
+import java.util.HashSet;
+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.core.contexts.ContextInjectionFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
+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.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.service.IWorkingSetService;
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
import eu.etaxonomy.cdm.model.description.WorkingSet;
+import eu.etaxonomy.cdm.model.location.NamedArea;
+import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.taxeditor.store.CdmStore;
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart;
/**
* @author pplitzner
* @since Nov 21, 2017
*
*/
-public class WorkingSetEditor {
+public class WorkingSetEditor implements IE4SavablePart{
private WorkingSetComposite composite;
+ private ConversationHolder conversation;
+
+ private WorkingSet workingSet;
+
+ @Inject
+ private MDirtyable dirty;
+
@PostConstruct
public void create(Composite parent, IEclipseContext context){
+ if(CdmStore.isActive() && conversation==null){
+ conversation = CdmStore.createConversation();
+ }
+ else{
+ return;
+ }
CdmFormFactory cdmFormFactory = new CdmFormFactory(Display.getCurrent());
ContextInjectionFactory.inject(cdmFormFactory, context);
composite = new WorkingSetComposite(parent, SWT.NONE);
+ dirty.setDirty(true);
}
public void init(WorkingSet workingSet) {
+ this.workingSet = workingSet;
composite.getTxt_label().setText(workingSet.getLabel());
}
+ /**
+ * {@inheritDoc}
+ */
+ @Persist
+ @Override
+ public void save(IProgressMonitor monitor) {
+ NamedArea area = composite.getArea();
+ Set<NamedArea> areas = new HashSet<>();
+ if(area!=null){
+ areas.add(area);
+ }
+ TaxonNode taxonNode = composite.getTaxonNode();
+ FeatureTree characters = composite.getCharacters();
+ DefinedTermBase rankMaxSelection = composite.getComboRankMax().getSelection();
+ Rank rankMax = null;
+ if(rankMaxSelection instanceof Rank){
+ rankMax = (Rank) rankMaxSelection;
+ }
+ DefinedTermBase rankMinSelection = composite.getComboRankMin().getSelection();
+ Rank rankMin = null;
+ if(rankMinSelection instanceof Rank){
+ rankMin = (Rank) rankMinSelection;
+ }
+
+ workingSet.setMaxRank(rankMax);
+ workingSet.setMinRank(rankMin);
+ workingSet.setDescriptiveSystem(characters);
+ workingSet.addTaxonSubtree(taxonNode);
+ workingSet.setGeoFilter(areas);
+
+ conversation.commit();
+ CdmStore.getService(IWorkingSetService.class).merge(workingSet, true);
+
+ dirty.setDirty(false);
+ }
+
+ @Focus
+ public void setFocus(){
+ if(conversation!=null){
+ conversation.bind();
+ }
+ }
+
+ @PreDestroy
+ public void dispose(){
+ if(conversation!=null){
+ conversation.close();
+ conversation = null;
+ }
+ }
+
}