import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
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.ITermService;
import eu.etaxonomy.cdm.api.service.IWorkingSetService;
-import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
import eu.etaxonomy.cdm.model.description.FeatureTree;
-import eu.etaxonomy.cdm.model.description.SpecimenDescription;
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.occurrence.SpecimenOrObservationBase;
import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
-import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.editor.l10n.Messages;
import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
import eu.etaxonomy.taxeditor.store.CdmStore;
import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart;
/**
+ * Editor for configuring WorkingSets
* @author pplitzner
* @since Nov 21, 2017
*
labelModifyListener = new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
+ workingSet.setLabel(composite.getTxt_label().getText());
dirty.setDirty(true);
}
};
composite.getRankMin().addSelectionChangedListener(event->dirty.setDirty(true));
composite.getRankMax().addSelectionChangedListener(event->dirty.setDirty(true));
- composite.getTextAreaText().addListener(SWT.MouseDown, event-> {
- NamedArea area = NamedAreaSelectionDialog.select(shell, null, null);
- if(area!=null){
- composite.setArea(area);
+ composite.getBtnChooseArea().addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
+ NamedArea area = NamedAreaSelectionDialog.select(shell, null, null);
+ if(area!=null){
+ composite.setArea(area);
+ }
+ dirty.setDirty(true);
+ }
+ });
+ composite.getBtnRemoveArea().addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
+ composite.removeArea();
+ dirty.setDirty(true);
}
- dirty.setDirty(true);
});
- composite.getFeatureTreeEditorComposite().init(null, null, e->selectionService.setSelection(e.getSelection()), null);
+ composite.getFeatureTreeEditorComposite().init(null, null, e->selectionService.setSelection(e.getSelection()), null, null);
//add drag'n'drop support
Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getTransfer()};
public void keyPressed(KeyEvent e) {
if(e.character==SWT.DEL){
IStructuredSelection selection = (IStructuredSelection) composite.getTaxonNodeTree().getSelection();
- Iterator<TaxonNode> iterator = selection.iterator();
+ if(selection.toList().stream().anyMatch(object->!(object instanceof TaxonNode))){
+ MessagingUtils.warningDialog(Messages.WorkingSetEditor_DELETE_FAIL_TITLE, this.getClass(), Messages.WorkingSetEditor_DELETE_FAIL_MESSAGE);
+ return;
+ }
+ Iterator<Object> iterator = selection.iterator();
while(iterator.hasNext()){
- TaxonNode taxonNode = iterator.next();
+ Object next = iterator.next();
+ TaxonNode taxonNode = (TaxonNode) next;
removeTaxonNode(taxonNode);
}
}
public void init(UUID workingSetUuid) {
this.workingSet = CdmStore.getService(IWorkingSetService.class).load(workingSetUuid);
- if(workingSet.getTitleCache()!=null){
- composite.getTxt_label().setText(workingSet.getTitleCache());
+ if(workingSet.getLabel()!=null){
+ composite.getTxt_label().setText(workingSet.getLabel());
}
if(workingSet.getDescriptiveSystem()!=null){
composite.setCharacters(workingSet.getDescriptiveSystem());
Viewer taxonTreeViewer = getTaxonTreeViewer();
Collection<TaxonNode> input = (Collection<TaxonNode>) taxonTreeViewer.getInput();
input.remove(taxonNode);
+ workingSet.removeTaxonSubtree(taxonNode);
taxonTreeViewer.setInput(input);
dirty.setDirty(true);
}
- /**
- * {@inheritDoc}
- */
@Persist
@Override
public void save(IProgressMonitor monitor) {
if(taxonTreeNode instanceof TaxonNode){
TaxonNode taxonNode = (TaxonNode)taxonTreeNode;
workingSet.addTaxonSubtree(taxonNode);
- if(taxonNode.getTaxon()!=null){
- Taxon taxon = HibernateProxyHelper.deproxy(taxonNode.getTaxon(), Taxon.class);
- Collection<SpecimenOrObservationBase> specimens = CdmStore.getService(IOccurrenceService.class).listByAssociatedTaxon(SpecimenOrObservationBase.class, null, taxon, null, null, null, null, null);
- for (SpecimenOrObservationBase specimen : specimens) {
- Set<SpecimenDescription> specimenDescriptions = specimen.getSpecimenDescriptions();
- for (SpecimenDescription specimenDescription : specimenDescriptions) {
- workingSet.addDescription(specimenDescription);
- }
- }
- }
}
}
}
FeatureTree characters = composite.getCharacters();
- //save characters because they can be modified in this editor
- characters.getDistinctFeatures().forEach(character->CdmStore.getService(ITermService.class).merge(character,true));
+ if(characters!=null){
+ //save characters because they can be modified in this editor
+ characters.getDistinctFeatures().forEach(character->CdmStore.getService(ITermService.class).merge(character,true));
+ }
DefinedTermBase rankMaxSelection = composite.getRankMax().getSelection();
dirty.setDirty(false);
}
- /** {@inheritDoc} */
@PreDestroy
public void dispose() {
if (conversation != null) {
dirty.setDirty(false);
}
- /** {@inheritDoc} */
@Focus
public void setFocus() {
if (getConversationHolder() != null) {
return composite.getTaxonNodeTree();
}
- /**
- * {@inheritDoc}
- */
+ public WorkingSet getWorkingSet() {
+ return workingSet;
+ }
+
@Override
public void update(CdmDataChangeMap arg0) {
}
- /**
- * {@inheritDoc}
- */
@Override
public ICdmEntitySession getCdmEntitySession() {
return cdmEntitySession;
}
- /**
- * {@inheritDoc}
- */
@Override
public Collection<WorkingSet> getRootEntities() {
return null;
}
- /**
- * {@inheritDoc}
- */
@Override
public Map<Object, List<String>> getPropertyPathsMap() {
return null;
}
- /**
- * {@inheritDoc}
- */
@Override
public ConversationHolder getConversationHolder() {
return conversation;
}
- /**
- * {@inheritDoc}
- */
@Override
public void changed(Object element) {
dirty.setDirty(true);
}
- /**
- * {@inheritDoc}
- */
@Override
public void forceDirty() {
dirty.setDirty(true);