Project

General

Profile

« Previous | Next » 

Revision e4a5c66f

Added by Katja Luther over 3 years ago

ref #8774: do not allow duplicates in term tree editors if voc does not allow

View differences:

eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterEditor.java
630 630
        return this.characterTreeEditorComposite.getViewer();
631 631
    }
632 632

  
633
    @Override
634
    public TermTreeDto getTreeDtoForUuid(UUID treeUuid) {
635
        if (this.characterTreeEditorComposite.getFeatureTree().getUuid().equals(treeUuid)){
636
            return this.characterTreeEditorComposite.getFeatureTree();
637
        }
638
        return null;
639
    }
640

  
641
    @Override
642
    public boolean checkDuplicates(UUID termUuid, UUID treeUuid) {
643
//        for (TermDto dto: characterTreeEditorComposite.getFeatureTree().getTerms()){
644
//            if (dto.getUuid().equals(termUuid)){
645
//                return true;
646
//            }
647
//        }
648
        return false;
649
    }
650

  
633 651

  
634 652

  
635 653

  
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/AbstractTermTreeEditor.java
53 53
import eu.etaxonomy.cdm.api.service.ITermTreeService;
54 54
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
55 55
import eu.etaxonomy.cdm.model.term.TermNode;
56
import eu.etaxonomy.cdm.model.term.TermType;
56
import eu.etaxonomy.cdm.persistence.dto.TermDto;
57 57
import eu.etaxonomy.cdm.persistence.dto.TermNodeDto;
58 58
import eu.etaxonomy.cdm.persistence.dto.TermTreeDto;
59 59
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
......
115 115

  
116 116
    private TreeViewer viewer;
117 117

  
118
    List<TermTreeDto> trees;
118
    Map<UUID,TermTreeDto> trees;
119 119

  
120 120
    Map<UUID, TermNodeDto> uuidTermMap = new HashMap<>();
121 121
    List<AbstractPostOperation<TermNode>> operationList = new ArrayList<>();
......
163 163

  
164 164
        updateTrees();
165 165
        viewer.setComparator(new FeatureTreeViewerComparator());
166
        viewer.setInput(trees);
166
        viewer.setInput(getTrees());
167 167
        contentProvider.setUuidTermMap(uuidTermMap);
168 168
        //create context menu
169 169
        menuService.registerContextMenu(viewer.getControl(), AppModelId.POPUPMENU_EU_ETAXONOMY_TAXEDITOR_STORE_POPUPMENU_FEATURETREEEDITOR);
......
294 294
        CdmStore.getService(ITermNodeService.class).saveTermNodeDtoList(listToUpdate);
295 295
        listToUpdate.clear();
296 296
        List<TermTreeDto> rootEntities = getRootEntities();
297
        for (TermTreeDto featureTree : rootEntities) {
298
            if(featureTree.getTermType().equals(TermType.Character)){
299
                TermTreeDto characterTree = featureTree;
300
                //save characters because they can be modified in this editor
301
//                TODO!!!!
302
//                characterTree.getDistinctTerms().forEach(character->CdmStore.getService(ITermService.class).merge(character,true));
303
            }
304
        }
297
        CdmStore.getService(ITermTreeService.class).saveOrUpdateTermTreeDtoList(rootEntities);
298

  
299

  
305 300
        conversation.commit(true);
306 301
//        initializeTrees();
307 302

  
......
312 307
        Object[] expandedElements = viewer.getExpandedElements();
313 308
        viewer.getTree().removeAll();
314 309
        updateTrees();
315
        viewer.setInput(trees);
310
        viewer.setInput(getTrees());
316 311
        viewer.setExpandedElements(expandedElements);
317 312
    }
318 313

  
......
415 410
    protected void addAllNodesToMap(TermNodeDto root){
416 411
        if (!uuidTermMap.containsKey(root.getUuid())){
417 412
            uuidTermMap.put(root.getUuid(), root);
413
            if (root.getTerm() != null){
414
                getTreeDtoForUuid(root.getTree().getUuid()).addTerm(root.getTerm());
415
            }
418 416
        }
419 417
        for (TermNodeDto child: root.getChildren()){
420 418
            uuidTermMap.put(child.getUuid(), child);
419
            if (child.getTerm() != null){
420
                getTreeDtoForUuid(child.getTree().getUuid()).addTerm(child.getTerm());
421
            }
421 422
            if (child.getChildren() != null && !child.getChildren().isEmpty()){
422 423
                addAllNodesToMap(child);
423 424
            }
424 425
        }
425 426
    }
426 427

  
428
    /**
429
     * @param term
430
     * @param treeUuid
431
     */
432
    @Override
433
    public boolean checkDuplicates(UUID termUuid, UUID treeUuid) {
434
        TermTreeDto tree = this.getTreeDtoForUuid(treeUuid);
435
        for (TermDto dto: tree.getTerms()){
436
            if (dto.getUuid().equals(termUuid)) {
437
                return true;
438
            }
439
        }
440
        return false;
441
    }
442

  
427 443
    protected void updateTrees(){
428 444
        uuidTermMap.clear();
429 445
        if (trees != null && !trees.isEmpty()){
430 446
            trees.clear();
431 447
        }
432 448
        if (trees == null){
433
            trees = new ArrayList<>();
449
            trees = new HashMap<>();
434 450
        }
435
        trees.addAll(CdmStore.getService(ITermTreeService.class).listTermTreeDtosByTermType(getTermType()));
436
        for (TermTreeDto tree: trees){
451
        List<TermTreeDto> treeList = CdmStore.getService(ITermTreeService.class).listTermTreeDtosByTermType(getTermType());
452
        treeList.stream().forEach(tree -> trees.put(tree.getUuid(), tree));
453
//        trees.addAll(CdmStore.getService(ITermTreeService.class).listTermTreeDtosByTermType(getTermType()));
454
        for (TermTreeDto tree: trees.values()){
437 455
            addAllNodesToMap(tree.getRoot());
438 456
        }
439 457
        ((FeatureTreeContentProvider<T>)viewer.getContentProvider()).setUuidTermMap(uuidTermMap);
......
442 460
    }
443 461

  
444 462
    public List<TermTreeDto> getTrees(){
445
        return trees;
463
        List<TermTreeDto> treeList = new ArrayList<>(trees.values());
464
        return treeList;
465
    }
466

  
467
    @Override
468
    public TermTreeDto getTreeDtoForUuid(UUID treeUuid){
469
        return trees.get(treeUuid);
446 470
    }
447 471

  
448 472
    @Override
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/IFeatureTreeEditor.java
16 16
import eu.etaxonomy.cdm.model.term.TermNode;
17 17
import eu.etaxonomy.cdm.model.term.TermType;
18 18
import eu.etaxonomy.cdm.persistence.dto.TermNodeDto;
19
import eu.etaxonomy.cdm.persistence.dto.TermTreeDto;
19 20
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
20 21
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
21 22
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
......
31 32
    public TermType getTermType();
32 33

  
33 34
    public TermNodeDto getNodeDtoForUuid(UUID nodeUuid);
35
    public TermTreeDto getTreeDtoForUuid(UUID treeUuid);
36
    public boolean checkDuplicates(UUID termUuid, UUID treeUuid) ;
37

  
34 38

  
35 39
    public void addOperation(AbstractPostOperation<TermNode> operation);
36 40

  
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/AbstractAddFeatureHandler.java
1
/**
2
* Copyright (C) 2020 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.taxeditor.featuretree.e4.handler;
10

  
11
import java.util.Collection;
12

  
13
import javax.inject.Named;
14

  
15
import org.eclipse.core.runtime.IStatus;
16
import org.eclipse.e4.core.di.annotations.Execute;
17
import org.eclipse.e4.ui.di.UISynchronize;
18
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
19
import org.eclipse.e4.ui.services.IServiceConstants;
20
import org.eclipse.jface.viewers.IStructuredSelection;
21
import org.eclipse.jface.wizard.WizardDialog;
22
import org.eclipse.swt.widgets.Shell;
23

  
24
import eu.etaxonomy.cdm.model.description.Character;
25
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
26
import eu.etaxonomy.cdm.persistence.dto.CharacterDto;
27
import eu.etaxonomy.cdm.persistence.dto.CharacterNodeDto;
28
import eu.etaxonomy.cdm.persistence.dto.TermDto;
29
import eu.etaxonomy.cdm.persistence.dto.TermNodeDto;
30
import eu.etaxonomy.taxeditor.featuretree.AvailableFeaturesWizard;
31
import eu.etaxonomy.taxeditor.featuretree.e4.AbstractTermTreeEditor;
32
import eu.etaxonomy.taxeditor.featuretree.e4.ICharacterEditor;
33
import eu.etaxonomy.taxeditor.featuretree.e4.IFeatureTreeEditor;
34
import eu.etaxonomy.taxeditor.featuretree.e4.operation.AddFeatureOperation;
35
import eu.etaxonomy.taxeditor.model.MessagingUtils;
36
import eu.etaxonomy.taxeditor.store.StoreUtil;
37

  
38
/**
39
 * @author k.luther
40
 * @since Nov 10, 2020
41
 */
42
public abstract class AbstractAddFeatureHandler {
43
    @Execute
44
    public void execute(@Named(IServiceConstants.ACTIVE_SHELL) Shell shell,
45
            @Named(IServiceConstants.ACTIVE_PART)MPart thisPart,
46
            @Named(IServiceConstants.ACTIVE_SELECTION)IStructuredSelection selection,
47
            UISynchronize sync) {
48
        IFeatureTreeEditor editor = ((IFeatureTreeEditor) thisPart.getObject());
49
        if (StoreUtil.promptCheckIsDirty(editor)) {
50
            return;
51
        }
52
        TermNodeDto parent = getParent(selection);
53
        AvailableFeaturesWizard wizard = new AvailableFeaturesWizard(parent.getTerm().getTermType());
54
        WizardDialog dialog = new WizardDialog(shell, wizard);
55

  
56
        if (dialog.open() == IStatus.OK) {
57
            Collection<DefinedTermBase> additionalTerms = wizard.getAdditionalFeatures();
58
            for (DefinedTermBase term : additionalTerms) {
59

  
60
                if (!parent.getTree().isAllowDuplicate()){
61
                    boolean isDuplicate = editor.checkDuplicates(term.getUuid(), parent.getTree().getUuid());
62
                    if (isDuplicate){
63
                        MessagingUtils.informationDialog("No duplicates allowed", "This term tree does not allow duplicates.");
64
                        return;
65
                    }
66
                }
67

  
68
                AddFeatureOperation operation = new AddFeatureOperation(term.getUuid(), parent, editor, editor);
69
//                AbstractUtility.executeOperation(operation, sync);
70
                editor.addOperation(operation);
71
                editor.setDirty();
72

  
73
                if (editor instanceof ICharacterEditor){
74
                    CharacterNodeDto newDto = new CharacterNodeDto(CharacterDto.fromCharacter((Character)term), parent, 0, parent.getTree(), null, null, null);
75
                }else{
76
                    TermNodeDto newDto = new TermNodeDto(TermDto.fromTerm(term), parent, 0, parent.getTree(), null, null, null);
77
                }
78

  
79
//                ((AbstractTermTreeEditor)editor).getViewer().refresh();
80
                if (editor instanceof ICharacterEditor){
81
                    editor.refresh();
82
                }else{
83
                    Object[] expandedElements = ((AbstractTermTreeEditor)editor).getViewer().getExpandedElements();
84
                    ((AbstractTermTreeEditor)editor).getViewer().setInput(((AbstractTermTreeEditor)editor).getTrees());
85
                    ((AbstractTermTreeEditor)editor).getViewer().setExpandedElements(expandedElements);
86
                }
87
            }
88
        }
89
    }
90

  
91
    /**
92
     * @param selection
93
     * @return
94
     */
95
    abstract protected TermNodeDto getParent(IStructuredSelection selection);
96
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/AddChildFeatureHandler.java
8 8
*/
9 9
package eu.etaxonomy.taxeditor.featuretree.e4.handler;
10 10

  
11
import java.util.Collection;
12

  
13 11
import javax.inject.Named;
14 12

  
15
import org.eclipse.core.runtime.IStatus;
16 13
import org.eclipse.e4.core.di.annotations.CanExecute;
17
import org.eclipse.e4.core.di.annotations.Execute;
18 14
import org.eclipse.e4.core.di.annotations.Optional;
19
import org.eclipse.e4.ui.di.UISynchronize;
20 15
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
21 16
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
22 17
import org.eclipse.e4.ui.services.IServiceConstants;
23 18
import org.eclipse.jface.viewers.IStructuredSelection;
24
import org.eclipse.jface.wizard.WizardDialog;
25
import org.eclipse.swt.widgets.Shell;
26 19

  
27
import eu.etaxonomy.cdm.model.description.Character;
28
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
29
import eu.etaxonomy.cdm.persistence.dto.CharacterDto;
30
import eu.etaxonomy.cdm.persistence.dto.CharacterNodeDto;
31
import eu.etaxonomy.cdm.persistence.dto.TermDto;
32 20
import eu.etaxonomy.cdm.persistence.dto.TermNodeDto;
33
import eu.etaxonomy.taxeditor.featuretree.AvailableFeaturesWizard;
34
import eu.etaxonomy.taxeditor.featuretree.e4.AbstractTermTreeEditor;
35
import eu.etaxonomy.taxeditor.featuretree.e4.ICharacterEditor;
36 21
import eu.etaxonomy.taxeditor.featuretree.e4.IFeatureTreeEditor;
37
import eu.etaxonomy.taxeditor.featuretree.e4.operation.AddFeatureOperation;
38
import eu.etaxonomy.taxeditor.store.StoreUtil;
39 22

  
40 23
/**
41 24
 * @author pplitzner
42 25
 * @since Jul 12, 2017
43 26
 */
44
public class AddChildFeatureHandler {
45

  
46
    @Execute
47
    public void execute(@Named(IServiceConstants.ACTIVE_SHELL) Shell shell,
48
            @Named(IServiceConstants.ACTIVE_PART)MPart thisPart,
49
            @Named(IServiceConstants.ACTIVE_SELECTION)IStructuredSelection selection,
50
            UISynchronize sync) {
51
        IFeatureTreeEditor editor = ((IFeatureTreeEditor) thisPart.getObject());
52
        if (StoreUtil.promptCheckIsDirty(editor)) {
53
            return;
54
        }
55
        TermNodeDto parent = (TermNodeDto)selection.getFirstElement();
56

  
57
//        TermChooseWizard wizard = new TermChooseWizard(parent.getTermType());
58
//        WizardDialog dialog = new WizardDialog(shell, wizard);
59
//
60
//        if (dialog.open() == IStatus.OK) {
61
//            List<TermDto> selectedTerms = wizard.getSelectedTerms();
62
//            for (TermDto termDto: selectedTerms) {
63
//                AddFeatureOperation operation = new AddFeatureOperation(termDto.getUuid(), parent, editor, editor);
64
//                AbstractUtility.executeOperation(operation, sync);
65
//            }
66
//        }
67

  
68
        AvailableFeaturesWizard wizard = new AvailableFeaturesWizard(parent.getTerm().getTermType());
69
        WizardDialog dialog = new WizardDialog(shell, wizard);
70

  
71
        if (dialog.open() == IStatus.OK) {
72
            Collection<DefinedTermBase> additionalTerms = wizard.getAdditionalFeatures();
73
            for (DefinedTermBase term : additionalTerms) {
74
                AddFeatureOperation operation = new AddFeatureOperation(term.getUuid(), parent, editor, editor);
75
//                AbstractUtility.executeOperation(operation, sync);
76
                editor.addOperation(operation);
77
                editor.setDirty();
78

  
79
                if (editor instanceof ICharacterEditor){
80
                    CharacterNodeDto newDto = new CharacterNodeDto(CharacterDto.fromCharacter((Character)term), parent, 0, parent.getTree(), null, null, null);
81
                }else{
82
                    TermNodeDto newDto = new TermNodeDto(TermDto.fromTerm(term), parent, 0, parent.getTree(), null, null, null);
83
                }
84

  
85
//                ((AbstractTermTreeEditor)editor).getViewer().refresh();
86
                if (editor instanceof ICharacterEditor){
87
                    editor.refresh();
88
                }else{
89
                    ((AbstractTermTreeEditor)editor).getViewer().setInput(((AbstractTermTreeEditor)editor).getTrees());
90
                }
91
            }
92
        }
93
    }
27
public class AddChildFeatureHandler extends AbstractAddFeatureHandler{
94 28

  
95 29
    @CanExecute
96 30
    public boolean canExecute(
......
105 39
        menuItem.setVisible(canExecute);
106 40
        return canExecute;
107 41
    }
42

  
43
    @Override
44
    protected TermNodeDto getParent(IStructuredSelection selection) {
45
        return (TermNodeDto)selection.getFirstElement();
46
    }
108 47
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/AddFeatureHandler.java
8 8
*/
9 9
package eu.etaxonomy.taxeditor.featuretree.e4.handler;
10 10

  
11
import java.util.Collection;
12

  
13 11
import javax.inject.Named;
14 12

  
15
import org.eclipse.core.runtime.IStatus;
16 13
import org.eclipse.e4.core.di.annotations.CanExecute;
17 14
import org.eclipse.e4.core.di.annotations.Execute;
18 15
import org.eclipse.e4.core.di.annotations.Optional;
......
21 18
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
22 19
import org.eclipse.e4.ui.services.IServiceConstants;
23 20
import org.eclipse.jface.viewers.IStructuredSelection;
24
import org.eclipse.jface.wizard.WizardDialog;
25 21
import org.eclipse.swt.widgets.Shell;
26 22

  
27
import eu.etaxonomy.cdm.model.description.Character;
28
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
29
import eu.etaxonomy.cdm.persistence.dto.CharacterDto;
30
import eu.etaxonomy.cdm.persistence.dto.CharacterNodeDto;
31
import eu.etaxonomy.cdm.persistence.dto.TermDto;
32 23
import eu.etaxonomy.cdm.persistence.dto.TermNodeDto;
33 24
import eu.etaxonomy.cdm.persistence.dto.TermTreeDto;
34
import eu.etaxonomy.taxeditor.featuretree.AvailableFeaturesWizard;
35
import eu.etaxonomy.taxeditor.featuretree.e4.AbstractTermTreeEditor;
36
import eu.etaxonomy.taxeditor.featuretree.e4.ICharacterEditor;
37 25
import eu.etaxonomy.taxeditor.featuretree.e4.IFeatureTreeEditor;
38
import eu.etaxonomy.taxeditor.featuretree.e4.operation.AddFeatureOperation;
39
import eu.etaxonomy.taxeditor.store.StoreUtil;
40 26

  
41 27
/**
42 28
 * @author pplitzner
43 29
 * @since Jul 12, 2017
44 30
 *
45 31
 */
46
public class AddFeatureHandler {
32
public class AddFeatureHandler extends AbstractAddFeatureHandler{
47 33

  
48 34
    @Execute
49 35
    public void execute(@Named(IServiceConstants.ACTIVE_SHELL) Shell shell,
50 36
            @Named(IServiceConstants.ACTIVE_SELECTION)IStructuredSelection selection,
51 37
            @Named(IServiceConstants.ACTIVE_PART)MPart thisPart, UISynchronize sync) {
52
        IFeatureTreeEditor editor = ((IFeatureTreeEditor) thisPart.getObject());
53
        if (StoreUtil.promptCheckIsDirty(editor)) {
54
            return;
55
        }
56
        TermTreeDto tree = (TermTreeDto) selection.getFirstElement();
38
        super.execute(shell, thisPart, selection, sync);
39
    }
40
//        IFeatureTreeEditor editor = ((IFeatureTreeEditor) thisPart.getObject());
41
//        if (StoreUtil.promptCheckIsDirty(editor)) {
42
//            return;
43
//        }
44
//        TermTreeDto tree = (TermTreeDto) selection.getFirstElement();
45
////
46
////        TermChooseWizard wizard = new TermChooseWizard(tree.getTermType());
47
////        WizardDialog dialog = new WizardDialog(shell, wizard);
48
////
49
////        if (dialog.open() == IStatus.OK) {
50
////            List<TermDto> selectedTerms = wizard.getSelectedTerms();
51
////            for (TermDto termDto: selectedTerms) {
52
////                AddFeatureOperation operation = new AddFeatureOperation(termDto.getUuid(), tree.getRoot(), editor, editor);
53
////                AbstractUtility.executeOperation(operation, sync);
54
////            }
55
////        }
57 56
//
58
//        TermChooseWizard wizard = new TermChooseWizard(tree.getTermType());
57
//        AvailableFeaturesWizard wizard = new AvailableFeaturesWizard(tree.getTermType());
59 58
//        WizardDialog dialog = new WizardDialog(shell, wizard);
60 59
//
61 60
//        if (dialog.open() == IStatus.OK) {
62
//            List<TermDto> selectedTerms = wizard.getSelectedTerms();
63
//            for (TermDto termDto: selectedTerms) {
64
//                AddFeatureOperation operation = new AddFeatureOperation(termDto.getUuid(), tree.getRoot(), editor, editor);
65
//                AbstractUtility.executeOperation(operation, sync);
61
//            Collection<DefinedTermBase> additionalTerms = wizard.getAdditionalFeatures();
62
//            for (DefinedTermBase term : additionalTerms) {
63
////                if (tree.getRoot().getUuid()== null){
64
////                    TermTree termTree = CdmStore.getService(ITermTreeService.class).load(tree.getUuid());
65
////                    tree = TermTreeDto.fromTree(termTree);
66
////                }
67
//                if (!tree.isAllowDuplicate()){
68
//                    boolean isDuplicate = editor.checkDuplicates(term.getUuid(), tree.getUuid());
69
//                    if (isDuplicate){
70
//                        MessagingUtils.informationDialog("No duplicates allowed", "This term tree does not allow duplicates.");
71
//                        return;
72
//                    }
73
//                }
74
//
75
//                AddFeatureOperation operation = new AddFeatureOperation(term.getUuid(), tree.getRoot(), editor, editor);
76
//                editor.addOperation(operation);
77
//                editor.setDirty();
78
//                if (editor instanceof ICharacterEditor){
79
//                    CharacterNodeDto newDto = new CharacterNodeDto(CharacterDto.fromCharacter((Character)term), tree.getRoot(), 0, tree, null, null, null);
80
//                }else{
81
//                    TermNodeDto newDto = new TermNodeDto(TermDto.fromTerm(term), tree.getRoot(), 0, tree, null, null, null);
82
//                }
83
//
84
////                ((AbstractTermTreeEditor)editor).getViewer().refresh();
85
//                if (editor instanceof ICharacterEditor){
86
//                    editor.refresh();
87
//                }else{
88
//                    Object[] expandedElements = ((AbstractTermTreeEditor)editor).getViewer().getExpandedElements();
89
//                    ((AbstractTermTreeEditor)editor).getViewer().setInput(((AbstractTermTreeEditor)editor).getTrees());
90
//                    ((AbstractTermTreeEditor)editor).getViewer().setExpandedElements(expandedElements);
91
//                }
66 92
//            }
67 93
//        }
68

  
69
        AvailableFeaturesWizard wizard = new AvailableFeaturesWizard(tree.getTermType());
70
        WizardDialog dialog = new WizardDialog(shell, wizard);
71

  
72
        if (dialog.open() == IStatus.OK) {
73
            Collection<DefinedTermBase> additionalTerms = wizard.getAdditionalFeatures();
74
            for (DefinedTermBase term : additionalTerms) {
75
//                if (tree.getRoot().getUuid()== null){
76
//                    TermTree termTree = CdmStore.getService(ITermTreeService.class).load(tree.getUuid());
77
//                    tree = TermTreeDto.fromTree(termTree);
78
//                }
79
                AddFeatureOperation operation = new AddFeatureOperation(term.getUuid(), tree.getRoot(), editor, editor);
80
                editor.addOperation(operation);
81
                editor.setDirty();
82
                if (editor instanceof ICharacterEditor){
83
                    CharacterNodeDto newDto = new CharacterNodeDto(CharacterDto.fromCharacter((Character)term), tree.getRoot(), 0, tree, null, null, null);
84
                }else{
85
                    TermNodeDto newDto = new TermNodeDto(TermDto.fromTerm(term), tree.getRoot(), 0, tree, null, null, null);
86
                }
87

  
88
//                ((AbstractTermTreeEditor)editor).getViewer().refresh();
89
                if (editor instanceof ICharacterEditor){
90
                    editor.refresh();
91
                }else{
92
                    ((AbstractTermTreeEditor)editor).getViewer().setInput(((AbstractTermTreeEditor)editor).getTrees());
93
                }
94
            }
95
        }
96
    }
94
//    }
97 95

  
98 96
    @CanExecute
99 97
    public boolean canExecute(
......
108 106
        menuItem.setVisible(canExecute);
109 107
        return canExecute;
110 108
    }
109

  
110
    @Override
111
    protected TermNodeDto getParent(IStructuredSelection selection) {
112
        return ((TermTreeDto) selection.getFirstElement()).getRoot();
113
    }
111 114
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureTreeDetailElement.java
63 63

  
64 64
	@Override
65 65
	public void handleEvent(Object eventSource) {
66
//	    if (eventSource == titleCacheText) {
67
//	            handleToggleableCacheField();
68
//        }
69
//	    else
66
	    if (eventSource == titleCacheText) {
67
	            getEntity().setTitleCache(titleCacheText.getText());
68
        }
69
	    else
70 70
	    if (eventSource == allowDuplicates) {
71 71
	        getEntity().setAllowDuplicate(allowDuplicates.getSelection());
72 72
	    }
......
76 76
	    else if (eventSource == isFlat) {
77 77
	        getEntity().setFlat(isFlat.getSelection());
78 78
	    }
79

  
79 80
	}
80 81

  
81 82
}

Also available in: Unified diff