Project

General

Profile

« Previous | Next » 

Revision f6ba2ccb

Added by Katja Luther over 3 years ago

ref 9337: rename all termtree related classes

View differences:

eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/DescriptiveDataSetComposite.java
29 29
import eu.etaxonomy.cdm.model.term.TermType;
30 30
import eu.etaxonomy.cdm.persistence.dto.TermDto;
31 31
import eu.etaxonomy.taxeditor.editor.l10n.Messages;
32
import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditorComposite;
32
import eu.etaxonomy.taxeditor.featuretree.e4.TermTreeEditorComposite;
33 33
import eu.etaxonomy.taxeditor.model.ImageResources;
34 34
import eu.etaxonomy.taxeditor.ui.combo.term.TermUuidComboViewer;
35 35
import eu.etaxonomy.taxeditor.util.TaxonTreeNodeContentProvider;
......
44 44
    private Text txtDescriptiveDataSet;
45 45
    private TermUuidComboViewer comboRankMin;
46 46
    private TermUuidComboViewer comboRankMax;
47
    private FeatureTreeEditorComposite<Feature> featureTreeEditorComposite;
47
    private TermTreeEditorComposite<Feature> TermTreeEditorComposite;
48 48
    private TreeViewer taxonNodeTree;
49 49
    private List<TermDto> areas = new ArrayList<>();
50 50
    private Text textAreaText;
......
135 135
        btnChooseArea = new Button(composite, SWT.NONE);
136 136
        btnChooseArea.setImage(ImageResources.getImage(ImageResources.BROWSE_ICON));
137 137

  
138
        featureTreeEditorComposite = new FeatureTreeEditorComposite<>(this, SWT.NONE);
139
        featureTreeEditorComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
138
        TermTreeEditorComposite = new TermTreeEditorComposite<>(this, SWT.NONE);
139
        TermTreeEditorComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
140 140
    }
141 141

  
142 142
    @Override
......
161 161
        comboRankMax.setElement(max);
162 162
    }
163 163

  
164
    public FeatureTreeEditorComposite<Feature> getFeatureTreeEditorComposite() {
165
        return featureTreeEditorComposite;
164
    public TermTreeEditorComposite<Feature> getTermTreeEditorComposite() {
165
        return TermTreeEditorComposite;
166 166
    }
167 167

  
168 168
    public TermTree<Feature> getCharacters(){
169
        return featureTreeEditorComposite.getFeatureTree();
169
        return TermTreeEditorComposite.getFeatureTree();
170 170
    }
171 171
    public void setCharacters(TermTree<Feature> characters) {
172
        featureTreeEditorComposite.setSelectedTree(characters);
172
        TermTreeEditorComposite.setSelectedTree(characters);
173 173
    }
174 174

  
175 175
    public TreeViewer getTaxonNodeTree() {
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/DescriptiveDataSetEditor.java
174 174
            }
175 175
        });
176 176

  
177
        composite.getFeatureTreeEditorComposite().init("Character Tree",
177
        composite.getTermTreeEditorComposite().init("Character Tree",
178 178
                TermType.Character,
179 179
                null,
180 180
                null,
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterDragListener.java
24 24
import eu.etaxonomy.cdm.model.description.Character;
25 25
import eu.etaxonomy.cdm.model.term.TermNode;
26 26
import eu.etaxonomy.taxeditor.featuretree.CharacterTransfer;
27
import eu.etaxonomy.taxeditor.featuretree.e4.FeatureNodeDragListener;
27
import eu.etaxonomy.taxeditor.featuretree.e4.TermNodeDragListener;
28 28

  
29 29
/**
30 30
 * @author pplitzner
31 31
 * @since Jun 2, 2017
32 32
 *
33 33
 */
34
public class CharacterDragListener extends FeatureNodeDragListener {
34
public class CharacterDragListener extends TermNodeDragListener {
35 35

  
36 36
    private TreeViewer structureViewer;
37 37
    private TreeViewer propertyViewer;
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterDropAdapter.java
19 19
import eu.etaxonomy.cdm.persistence.dto.TermNodeDto;
20 20
import eu.etaxonomy.cdm.persistence.dto.TermTreeDto;
21 21
import eu.etaxonomy.taxeditor.featuretree.CharacterTransfer;
22
import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeDtoDropAdapter;
22
import eu.etaxonomy.taxeditor.featuretree.e4.TermTreeDtoDropAdapter;
23 23
import eu.etaxonomy.taxeditor.store.CdmStore;
24 24
import eu.etaxonomy.taxeditor.store.StoreUtil;
25 25

  
......
29 29
 * @date Jun 1, 2017
30 30
 *
31 31
 */
32
public class CharacterDropAdapter extends FeatureTreeDtoDropAdapter {
32
public class CharacterDropAdapter extends TermTreeDtoDropAdapter {
33 33

  
34 34
	private CharacterEditor characterEditor;
35 35

  
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterEditor.java
85 85
import eu.etaxonomy.taxeditor.editor.l10n.Messages;
86 86
import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
87 87
import eu.etaxonomy.taxeditor.featuretree.CharacterTransfer;
88
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
89
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
90
import eu.etaxonomy.taxeditor.featuretree.e4.FeatureNodeDtoDragListener;
91
import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeDtoDropAdapter;
88
import eu.etaxonomy.taxeditor.featuretree.TermTreeContentProvider;
89
import eu.etaxonomy.taxeditor.featuretree.TermTreeLabelProvider;
92 90
import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeDtoEditorComposite;
93 91
import eu.etaxonomy.taxeditor.featuretree.e4.ICharacterEditor;
92
import eu.etaxonomy.taxeditor.featuretree.e4.TermNodeDtoDragListener;
93
import eu.etaxonomy.taxeditor.featuretree.e4.TermTreeDtoDropAdapter;
94 94
import eu.etaxonomy.taxeditor.featuretree.e4.TermTreeEditor;
95 95
import eu.etaxonomy.taxeditor.model.AbstractUtility;
96 96
import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
......
265 265
        });
266 266

  
267 267
        characterTreeEditorComposite = addFeatureTreeEditor(composite_3);
268
        initFeatureTreeComposite(TermType.Character, characterTreeEditorComposite, new FeatureNodeDtoDragListener(characterTreeEditorComposite.getViewer()),
269
                new FeatureTreeDtoDropAdapter(this, characterTreeEditorComposite.getViewer(), sync),
268
        initFeatureTreeComposite(TermType.Character, characterTreeEditorComposite, new TermNodeDtoDragListener(characterTreeEditorComposite.getViewer()),
269
                new TermTreeDtoDropAdapter(this, characterTreeEditorComposite.getViewer(), sync),
270 270
                null);
271 271

  
272 272
        characterTreeEditorComposite.getLabel_title().setText(Messages.CharacterEditor_CHARACTERS);
......
290 290

  
291 291
        TreeViewer viewer = new TreeViewer(composite);
292 292
        viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
293
        viewer.setContentProvider(new FeatureTreeContentProvider());
294
        viewer.setLabelProvider(new FeatureTreeLabelProvider());
293
        viewer.setContentProvider(new TermTreeContentProvider());
294
        viewer.setLabelProvider(new TermTreeLabelProvider());
295 295
        viewer.setComparator(new FeatureTreeViewerComparator());
296 296
        viewer.addSelectionChangedListener(this);
297 297
        viewer.setInput(CdmStore.getService(ITermTreeService.class).list(termType, null, null, null, TermTreeEditor.TREE_PROPERTY_PATH));
......
307 307
    }
308 308

  
309 309
    private <T extends DefinedTermBase> FeatureTreeDtoEditorComposite<T> addFeatureTreeEditor(Composite composite_3) {
310
        FeatureTreeDtoEditorComposite<T> featureTreeEditorComposite = new FeatureTreeDtoEditorComposite<>(composite_3, SWT.NONE);
311
        featureTreeEditorComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
312
        return featureTreeEditorComposite;
310
        FeatureTreeDtoEditorComposite<T> TermTreeEditorComposite = new FeatureTreeDtoEditorComposite<>(composite_3, SWT.NONE);
311
        TermTreeEditorComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
312
        return TermTreeEditorComposite;
313 313
    }
314 314

  
315 315
    private void initFeatureTreeComposite(
316 316
            TermType termType,
317
            FeatureTreeDtoEditorComposite featureTreeEditorComposite,
318
            FeatureNodeDtoDragListener featureNodeDragListener,
319
            FeatureTreeDtoDropAdapter featureNodeDropAdapter,
317
            FeatureTreeDtoEditorComposite TermTreeEditorComposite,
318
            TermNodeDtoDragListener featureNodeDragListener,
319
            TermTreeDtoDropAdapter featureNodeDropAdapter,
320 320
            Transfer[] transfers) {
321 321

  
322
        featureTreeEditorComposite.init(
322
        TermTreeEditorComposite.init(
323 323
                featureNodeDragListener,
324 324
                featureNodeDropAdapter,
325 325
                transfers,
326 326
                this,
327
                new FeatureTreeChooserListener(featureTreeEditorComposite, termType),
327
                new FeatureTreeChooserListener(TermTreeEditorComposite, termType),
328 328
                this);
329 329
    }
330 330

  
......
539 539
    }
540 540

  
541 541
    private class FeatureTreeChooserListener extends SelectionAdapter{
542
        private FeatureTreeDtoEditorComposite<Feature> featureTreeEditorComposite;
542
        private FeatureTreeDtoEditorComposite<Feature> TermTreeEditorComposite;
543 543
        private TermType termType;
544 544

  
545
        public FeatureTreeChooserListener(FeatureTreeDtoEditorComposite<Feature> featureTreeEditorComposite, TermType termType) {
545
        public FeatureTreeChooserListener(FeatureTreeDtoEditorComposite<Feature> TermTreeEditorComposite, TermType termType) {
546 546
            super();
547
            this.featureTreeEditorComposite = featureTreeEditorComposite;
547
            this.TermTreeEditorComposite = TermTreeEditorComposite;
548 548
            this.termType = termType;
549 549
        }
550 550

  
551 551
        @Override
552 552
        public void widgetSelected(SelectionEvent e) {
553
            TermTree tree = FeatureTreeSelectionDialog.select(featureTreeEditorComposite.getDisplay().getActiveShell(), null, termType);
553
            TermTree tree = FeatureTreeSelectionDialog.select(TermTreeEditorComposite.getDisplay().getActiveShell(), null, termType);
554 554
            if(tree!=null){
555 555
                cdmEntitySession.load(tree, true);
556
                featureTreeEditorComposite.setSelectedTree(tree);
556
                TermTreeEditorComposite.setSelectedTree(tree);
557 557
            }
558 558
        }
559 559
    }
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/handler/AddFeatureToCharacterTreeHandler.java
22 22
import org.eclipse.swt.widgets.Shell;
23 23

  
24 24
import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.character.CharacterEditor;
25
import eu.etaxonomy.taxeditor.featuretree.e4.handler.AddFeatureHandler;
25
import eu.etaxonomy.taxeditor.featuretree.e4.handler.AddTermHandler;
26 26

  
27 27
/**
28 28
 * @author pplitzner
29 29
 * @since Jul 12, 2017
30 30
 *
31 31
 */
32
public class AddFeatureToCharacterTreeHandler extends AddFeatureHandler {
32
public class AddFeatureToCharacterTreeHandler extends AddTermHandler {
33 33

  
34 34
    @Execute
35 35
    @Override
eu.etaxonomy.taxeditor.printpublisher/src/main/java/eu/etaxonomy/taxeditor/printpublisher/wizard/SelectFeatureTreeWizardPage.java
69 69

  
70 70
		viewer = new ListViewer(composite);
71 71
		viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
72
		viewer.setContentProvider(new FeatureTreeContentProvider());
73
		viewer.setLabelProvider(new FeatureTreeLabelProvider());
72
		viewer.setContentProvider(new TermTreeContentProvider());
73
		viewer.setLabelProvider(new TermTreeLabelProvider());
74 74

  
75 75
		viewer.addSelectionChangedListener(this);
76 76

  
......
175 175
		viewer.setInput(realFeatureTrees);
176 176
	}
177 177

  
178
	private class FeatureTreeContentProvider implements IStructuredContentProvider {
178
	private class TermTreeContentProvider implements IStructuredContentProvider {
179 179

  
180 180
		@Override
181 181
		public void dispose() {}
......
193 193

  
194 194
	}
195 195

  
196
	private class FeatureTreeLabelProvider extends LabelProvider {
196
	private class TermTreeLabelProvider extends LabelProvider {
197 197

  
198 198
		/*
199 199
		 * (non-Javadoc)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/AvailableFeaturesWizard.java
1
/**
2
* Copyright (C) 2007 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

  
10
package eu.etaxonomy.taxeditor.featuretree;
11

  
12
import java.util.List;
13
import java.util.Set;
14

  
15
import org.eclipse.jface.wizard.Wizard;
16

  
17
import eu.etaxonomy.cdm.api.service.IVocabularyService;
18
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
19
import eu.etaxonomy.cdm.model.term.TermType;
20
import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
21
import eu.etaxonomy.taxeditor.model.MessagingUtils;
22
import eu.etaxonomy.taxeditor.store.CdmStore;
23

  
24
/**
25
 * <p>AvailableFeaturesWizard class.</p>
26
 *
27
 * @author n.hoffmann
28
 * @created Aug 5, 2010
29
 * @version 1.0
30
 */
31
public class AvailableFeaturesWizard extends Wizard {
32

  
33
	private AvailableFeaturesWizardPage page;
34

  
35
	private Set<DefinedTermBase> additionalFeatures;
36

  
37
    private List<TermVocabularyDto> vocabularyDtos;
38

  
39
    private boolean singleSelection = false;
40

  
41
	public AvailableFeaturesWizard(TermType termType){
42
        vocabularyDtos = CdmStore.getService(IVocabularyService.class).findVocabularyDtoByTermType(termType);
43
	}
44

  
45
	public AvailableFeaturesWizard(List<TermVocabularyDto> vocabularyDtos){
46
	    this.vocabularyDtos = vocabularyDtos;
47
	}
48

  
49
	/** {@inheritDoc} */
50
	@Override
51
	public void addPages() {
52
		page = new AvailableFeaturesWizardPage(vocabularyDtos,singleSelection);
53
		addPage(page);
54
	}
55

  
56
	@Override
57
	public boolean canFinish() {
58
        int size = page.getSelectedFeatures().size();
59
        return singleSelection?size==1:size>0;
60
	}
61

  
62
	/** {@inheritDoc} */
63
	@Override
64
	public boolean performFinish() {
65
		additionalFeatures = page.getSelectedFeatures();
66
		if(singleSelection && additionalFeatures.size()>1){
67
		    MessagingUtils.warningDialog("Too many terms selected", this, "You can only select 1 term");
68
		}
69
		return additionalFeatures.size() > 0;
70
	}
71

  
72
	public Set<DefinedTermBase> getAdditionalFeatures() {
73
		return additionalFeatures;
74
	}
75

  
76
    public void setSingleSelection(boolean singleSelection) {
77
        this.singleSelection = singleSelection;
78
    }
79
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/AvailableFeaturesWizardPage.java
1
/**
2
* Copyright (C) 2007 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

  
10
package eu.etaxonomy.taxeditor.featuretree;
11

  
12
import java.util.Arrays;
13
import java.util.HashSet;
14
import java.util.List;
15
import java.util.Set;
16
import java.util.stream.Collectors;
17

  
18
import org.eclipse.jface.wizard.WizardPage;
19
import org.eclipse.swt.SWT;
20
import org.eclipse.swt.layout.GridData;
21
import org.eclipse.swt.widgets.Composite;
22

  
23
import eu.etaxonomy.cdm.api.service.ITermService;
24
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
25
import eu.etaxonomy.cdm.persistence.dto.TermDto;
26
import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
27
import eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermSorter;
28
import eu.etaxonomy.taxeditor.editor.definedterm.TermDtoContentProvider;
29
import eu.etaxonomy.taxeditor.editor.definedterm.TermDtoLabelProvider;
30
import eu.etaxonomy.taxeditor.preference.wizard.CheckBoxTreeComposite;
31
import eu.etaxonomy.taxeditor.store.CdmStore;
32

  
33
/**
34
 * @author n.hoffmann
35
 * @created Aug 5, 2010
36
 * @version 1.0
37
 */
38
public class AvailableFeaturesWizardPage extends WizardPage {
39

  
40
    private CheckBoxTreeComposite treeComposite;
41
    private List<TermVocabularyDto> vocabularies;
42

  
43
	protected AvailableFeaturesWizardPage(List<TermVocabularyDto> vocabularies, boolean singleSelection) {
44
		super("Available Terms Wizard Page");
45
		this.vocabularies = vocabularies;
46
		setTitle("Available Terms");
47
		if(singleSelection){
48
		    setDescription("Please select one single term");
49
		}
50
		else{
51
		    setDescription("Please select terms.");
52
		}
53
	}
54

  
55
	/** {@inheritDoc} */
56
	@Override
57
	public void createControl(Composite parent) {
58
        treeComposite = new CheckBoxTreeComposite(parent, new TermDtoContentProvider(), new TermDtoLabelProvider(), SWT.NONE);
59
        treeComposite.getViewer().setComparator(new DefinedTermSorter());
60
        treeComposite.getViewer().setInput(vocabularies);
61
        treeComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
62
        treeComposite.getViewer().addSelectionChangedListener(e->getWizard().getContainer().updateButtons());
63

  
64
		setControl(treeComposite);
65
	}
66

  
67
	public Set<DefinedTermBase> getSelectedFeatures() {
68

  
69
        List<Object> checkedElements = Arrays.asList(treeComposite.getViewer().getCheckedElements());
70
        checkedElements = checkedElements.stream().filter(element->element instanceof TermDto).collect(Collectors.toList());
71

  
72
		Set<DefinedTermBase> terms = new HashSet<>();
73

  
74
		for(Object element : checkedElements){
75
		    if(element instanceof TermDto){
76
		        DefinedTermBase term = CdmStore.getService(ITermService.class).load(((TermDto) element).getUuid());
77
		        terms.add(term);
78
		    }
79
		}
80
		return terms;
81
	}
82

  
83
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/AvailableTermsWizard.java
1
/**
2
* Copyright (C) 2007 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

  
10
package eu.etaxonomy.taxeditor.featuretree;
11

  
12
import java.util.List;
13
import java.util.Set;
14

  
15
import org.eclipse.jface.wizard.Wizard;
16

  
17
import eu.etaxonomy.cdm.api.service.IVocabularyService;
18
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
19
import eu.etaxonomy.cdm.model.term.TermType;
20
import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
21
import eu.etaxonomy.taxeditor.model.MessagingUtils;
22
import eu.etaxonomy.taxeditor.store.CdmStore;
23

  
24
/**
25
 * <p>AvailableFeaturesWizard class.</p>
26
 *
27
 * @author n.hoffmann
28
 * @created Aug 5, 2010
29
 * @version 1.0
30
 */
31
public class AvailableTermsWizard extends Wizard {
32

  
33
	private AvailableTermsWizardPage page;
34

  
35
	private Set<DefinedTermBase> additionalFeatures;
36

  
37
    private List<TermVocabularyDto> vocabularyDtos;
38

  
39
    private boolean singleSelection = false;
40

  
41
	public AvailableTermsWizard(TermType termType){
42
        vocabularyDtos = CdmStore.getService(IVocabularyService.class).findVocabularyDtoByTermType(termType);
43
	}
44

  
45
	public AvailableTermsWizard(List<TermVocabularyDto> vocabularyDtos){
46
	    this.vocabularyDtos = vocabularyDtos;
47
	}
48

  
49
	/** {@inheritDoc} */
50
	@Override
51
	public void addPages() {
52
		page = new AvailableTermsWizardPage(vocabularyDtos,singleSelection);
53
		addPage(page);
54
	}
55

  
56
	@Override
57
	public boolean canFinish() {
58
        int size = page.getSelectedFeatures().size();
59
        return singleSelection?size==1:size>0;
60
	}
61

  
62
	/** {@inheritDoc} */
63
	@Override
64
	public boolean performFinish() {
65
		additionalFeatures = page.getSelectedFeatures();
66
		if(singleSelection && additionalFeatures.size()>1){
67
		    MessagingUtils.warningDialog("Too many terms selected", this, "You can only select 1 term");
68
		}
69
		return additionalFeatures.size() > 0;
70
	}
71

  
72
	public Set<DefinedTermBase> getAdditionalFeatures() {
73
		return additionalFeatures;
74
	}
75

  
76
    public void setSingleSelection(boolean singleSelection) {
77
        this.singleSelection = singleSelection;
78
    }
79
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/AvailableTermsWizardPage.java
1
/**
2
* Copyright (C) 2007 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

  
10
package eu.etaxonomy.taxeditor.featuretree;
11

  
12
import java.util.Arrays;
13
import java.util.HashSet;
14
import java.util.List;
15
import java.util.Set;
16
import java.util.stream.Collectors;
17

  
18
import org.eclipse.jface.wizard.WizardPage;
19
import org.eclipse.swt.SWT;
20
import org.eclipse.swt.layout.GridData;
21
import org.eclipse.swt.widgets.Composite;
22

  
23
import eu.etaxonomy.cdm.api.service.ITermService;
24
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
25
import eu.etaxonomy.cdm.persistence.dto.TermDto;
26
import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
27
import eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermSorter;
28
import eu.etaxonomy.taxeditor.editor.definedterm.TermDtoContentProvider;
29
import eu.etaxonomy.taxeditor.editor.definedterm.TermDtoLabelProvider;
30
import eu.etaxonomy.taxeditor.preference.wizard.CheckBoxTreeComposite;
31
import eu.etaxonomy.taxeditor.store.CdmStore;
32

  
33
/**
34
 * @author n.hoffmann
35
 * @created Aug 5, 2010
36
 * @version 1.0
37
 */
38
public class AvailableTermsWizardPage extends WizardPage {
39

  
40
    private CheckBoxTreeComposite treeComposite;
41
    private List<TermVocabularyDto> vocabularies;
42

  
43
	protected AvailableTermsWizardPage(List<TermVocabularyDto> vocabularies, boolean singleSelection) {
44
		super("Available Terms Wizard Page");
45
		this.vocabularies = vocabularies;
46
		setTitle("Available Terms");
47
		if(singleSelection){
48
		    setDescription("Please select one single term");
49
		}
50
		else{
51
		    setDescription("Please select terms.");
52
		}
53
	}
54

  
55
	/** {@inheritDoc} */
56
	@Override
57
	public void createControl(Composite parent) {
58
        treeComposite = new CheckBoxTreeComposite(parent, new TermDtoContentProvider(), new TermDtoLabelProvider(), SWT.NONE);
59
        treeComposite.getViewer().setComparator(new DefinedTermSorter());
60
        treeComposite.getViewer().setInput(vocabularies);
61
        treeComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
62
        treeComposite.getViewer().addSelectionChangedListener(e->getWizard().getContainer().updateButtons());
63

  
64
		setControl(treeComposite);
65
	}
66

  
67
	public Set<DefinedTermBase> getSelectedFeatures() {
68

  
69
        List<Object> checkedElements = Arrays.asList(treeComposite.getViewer().getCheckedElements());
70
        checkedElements = checkedElements.stream().filter(element->element instanceof TermDto).collect(Collectors.toList());
71

  
72
		Set<DefinedTermBase> terms = new HashSet<>();
73

  
74
		for(Object element : checkedElements){
75
		    if(element instanceof TermDto){
76
		        DefinedTermBase term = CdmStore.getService(ITermService.class).load(((TermDto) element).getUuid());
77
		        terms.add(term);
78
		    }
79
		}
80
		return terms;
81
	}
82

  
83
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureNodeDtoTransfer.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;
10

  
11
import java.io.ByteArrayInputStream;
12
import java.io.ByteArrayOutputStream;
13
import java.io.DataInputStream;
14
import java.io.DataOutputStream;
15
import java.io.EOFException;
16
import java.io.IOException;
17
import java.util.ArrayList;
18
import java.util.List;
19
import java.util.UUID;
20

  
21
import org.eclipse.swt.SWTException;
22
import org.eclipse.swt.dnd.ByteArrayTransfer;
23
import org.eclipse.swt.dnd.TransferData;
24

  
25
import eu.etaxonomy.cdm.api.service.ITermNodeService;
26
import eu.etaxonomy.cdm.model.description.Feature;
27
import eu.etaxonomy.cdm.model.term.TermNode;
28
import eu.etaxonomy.cdm.persistence.dto.TermNodeDto;
29
import eu.etaxonomy.taxeditor.model.MessagingUtils;
30
import eu.etaxonomy.taxeditor.store.CdmStore;
31

  
32
/**
33
 * @author k.luther
34
 * @since Oct 13, 2020
35
 */
36
public class FeatureNodeDtoTransfer extends ByteArrayTransfer {
37

  
38
    private static FeatureNodeDtoTransfer instance = new FeatureNodeDtoTransfer();
39
    private static final String TYPE_NAME = "featureNodeDto-transfer-format";
40
    private static final int TYPEID = registerType(TYPE_NAME);
41

  
42
    /**
43
     * <p>Getter for the field <code>instance</code>.</p>
44
     *
45
     * @return a {@link eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer} object.
46
     */
47
    public static synchronized FeatureNodeDtoTransfer getInstance() {
48
        return instance;
49
    }
50

  
51
    private FeatureNodeDtoTransfer() {
52
    }
53

  
54
    /** {@inheritDoc} */
55
    @Override
56
    protected int[] getTypeIds() {
57
        return new int[] { TYPEID };
58
    }
59

  
60
    /** {@inheritDoc} */
61
    @Override
62
    protected String[] getTypeNames() {
63
        return new String[] { TYPE_NAME };
64
    }
65
    @Override
66
    protected void javaToNative(Object object, TransferData transferData) {
67
        if (object != null){
68
            byte[] bytes = toByteArray((TermNodeDto[]) object);
69
            if (bytes != null) {
70
                super.javaToNative(bytes, transferData);
71
            }
72
        }
73
    }
74

  
75
    @Override
76
    protected Object nativeToJava(TransferData transferData) {
77
        try{
78
            byte[] bytes = (byte[]) super.nativeToJava(transferData);
79
            if (bytes != null){
80
                return fromByteArray(bytes);
81
            }
82
        }catch (SWTException e){
83
            MessagingUtils.warningDialog("The new imported node needs to be saved first", this, "Newly created nodes can not be moved without saving");
84
        }
85

  
86
        return null;
87
    }
88

  
89

  
90
    protected byte[] toByteArray(TermNodeDto[] elements) {
91
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
92
        DataOutputStream out = new DataOutputStream(byteOut);
93

  
94
        byte[] bytes = null;
95

  
96
        try {
97
            for(TermNodeDto element : elements){
98
                if (element.getUuid() == null){
99
                //  MessagingUtils.warningDialog("The new imported node needs to be saved first", this, "Newly created nodes can not be moved without saving");
100

  
101
                }else{
102
                    writeElementUuid(element, out);
103
                }
104
            }
105
            out.close();
106
            bytes = byteOut.toByteArray();
107
        } catch (IOException e) {
108

  
109
            // when in doubt send nothing
110
        }
111
        return bytes;
112
    }
113

  
114
    protected Object[] fromByteArray(byte[] bytes) {
115
        DataInputStream in = new DataInputStream(
116
                new ByteArrayInputStream(bytes));
117

  
118
        try {
119
            List<TermNodeDto> elements = new ArrayList<TermNodeDto>();
120

  
121
            try{
122
                while(true){
123
                    UUID uuid = readElementUuid(in);
124
                    elements.add(loadElement(uuid));
125
                }
126
            }catch(EOFException e){
127
                return  elements.toArray();
128
            }
129
        } catch (IOException e) {
130
            return null;
131
        }
132
    }
133

  
134
    public TermNodeDto loadElement(UUID uuid){
135
        TermNode<Feature> node = CdmStore.getService(ITermNodeService.class).load(uuid);
136
        return TermNodeDto.fromNode(node, null);
137
    }
138

  
139
    public UUID readElementUuid(DataInputStream in) throws IOException{
140
        return UUID.fromString(in.readUTF());
141
    }
142

  
143
    private void writeElementUuid(TermNodeDto element, DataOutputStream out) throws IOException {
144
        out.writeUTF(element.getUuid().toString());
145
    }
146

  
147

  
148
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureNodeTransfer.java
1
/**
2
 * Copyright (C) 2007 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

  
10
package eu.etaxonomy.taxeditor.featuretree;
11

  
12
import java.io.ByteArrayInputStream;
13
import java.io.ByteArrayOutputStream;
14
import java.io.DataInputStream;
15
import java.io.DataOutputStream;
16
import java.io.EOFException;
17
import java.io.IOException;
18
import java.util.ArrayList;
19
import java.util.List;
20
import java.util.UUID;
21

  
22
import org.eclipse.swt.SWTException;
23
import org.eclipse.swt.dnd.ByteArrayTransfer;
24
import org.eclipse.swt.dnd.TransferData;
25

  
26
import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
27
import eu.etaxonomy.cdm.model.description.Feature;
28
import eu.etaxonomy.cdm.model.term.TermNode;
29
import eu.etaxonomy.taxeditor.model.MessagingUtils;
30
import eu.etaxonomy.taxeditor.store.CdmStore;
31

  
32
/**
33
 * <p>FeatureNodeTransfer class.</p>
34
 *
35
 * @author n.hoffmann
36
 * @created Aug 5, 2010
37
 */
38
public class FeatureNodeTransfer extends ByteArrayTransfer {
39

  
40
	private static FeatureNodeTransfer instance = new FeatureNodeTransfer();
41
	private static final String TYPE_NAME = "featureNode-transfer-format";
42
	private static final int TYPEID = registerType(TYPE_NAME);
43

  
44
	/**
45
	 * <p>Getter for the field <code>instance</code>.</p>
46
	 *
47
	 * @return a {@link eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer} object.
48
	 */
49
	public static synchronized FeatureNodeTransfer getInstance() {
50
		return instance;
51
	}
52

  
53
	private FeatureNodeTransfer() {
54
	}
55

  
56
	/** {@inheritDoc} */
57
	@Override
58
	protected int[] getTypeIds() {
59
		return new int[] { TYPEID };
60
	}
61

  
62
	/** {@inheritDoc} */
63
	@Override
64
	protected String[] getTypeNames() {
65
		return new String[] { TYPE_NAME };
66
	}
67
	@Override
68
    protected void javaToNative(Object object, TransferData transferData) {
69
        if (object != null){
70
            byte[] bytes = toByteArray((TermNode[]) object);
71
            if (bytes != null) {
72
                super.javaToNative(bytes, transferData);
73
            }
74
        }
75
    }
76

  
77
    @Override
78
    protected Object nativeToJava(TransferData transferData) {
79
        try{
80
            byte[] bytes = (byte[]) super.nativeToJava(transferData);
81
            if (bytes != null){
82
                return fromByteArray(bytes);
83
            }
84
        }catch (SWTException e){
85
            MessagingUtils.warningDialog("The new imported node needs to be saved first", this, "Newly created nodes can not be moved without saving");
86
        }
87

  
88
        return null;
89
    }
90

  
91

  
92
    protected byte[] toByteArray(TermNode[] elements) {
93
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
94
        DataOutputStream out = new DataOutputStream(byteOut);
95

  
96
        byte[] bytes = null;
97

  
98
        try {
99
            for(TermNode element : elements){
100
                if (element.getUuid() == null){
101
                //                    MessagingUtils.warningDialog("The new imported node needs to be saved first", this, "Newly created nodes can not be moved without saving");
102

  
103
                }else{
104
                    writeElementUuid(element, out);
105
                }
106
            }
107
            out.close();
108
            bytes = byteOut.toByteArray();
109
        } catch (IOException e) {
110

  
111
            // when in doubt send nothing
112
        }
113
        return bytes;
114
    }
115

  
116
    protected Object[] fromByteArray(byte[] bytes) {
117
        DataInputStream in = new DataInputStream(
118
                new ByteArrayInputStream(bytes));
119

  
120
        try {
121
            List<TermNode> elements = new ArrayList<TermNode>();
122

  
123
            try{
124
                while(true){
125
                    UUID uuid = readElementUuid(in);
126
                    elements.add(loadElement(uuid));
127
                }
128
            }catch(EOFException e){
129
                return  elements.toArray();
130
            }
131
        } catch (IOException e) {
132
            return null;
133
        }
134
    }
135

  
136
    public TermNode loadElement(UUID uuid){
137
        TermNode<Feature> node = CdmStore.getService(IFeatureNodeService.class).load(uuid);
138
        return node;
139
    }
140

  
141
    public UUID readElementUuid(DataInputStream in) throws IOException{
142
        return UUID.fromString(in.readUTF());
143
    }
144

  
145
    private void writeElementUuid(Object element, DataOutputStream out) throws IOException {
146
        out.writeUTF(((TermNode)element).getUuid().toString());
147
    }
148

  
149
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeContentProvider.java
1
/**
2
* Copyright (C) 2007 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

  
10
package eu.etaxonomy.taxeditor.featuretree;
11

  
12
import java.util.HashMap;
13
import java.util.List;
14
import java.util.Map;
15
import java.util.UUID;
16

  
17
import org.eclipse.jface.viewers.ITreeContentProvider;
18
import org.eclipse.jface.viewers.Viewer;
19

  
20
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
21
import eu.etaxonomy.cdm.model.term.TermNode;
22
import eu.etaxonomy.cdm.model.term.TermTree;
23
import eu.etaxonomy.cdm.persistence.dto.TermNodeDto;
24
import eu.etaxonomy.cdm.persistence.dto.TermTreeDto;
25

  
26
/**
27
 * <p>FeatureTreeContentProvider class.</p>
28
 *
29
 * @author n.hoffmann
30
 * @created Aug 5, 2010
31
 * @version 1.0
32
 */
33
public class FeatureTreeContentProvider<T extends DefinedTermBase> implements ITreeContentProvider {
34

  
35
    Viewer viewer;
36
    TermNodeDto oldInput;
37
    TermNodeDto newInput;
38
    Map<UUID, TermNodeDto> uuidTermMap = new HashMap<>();
39

  
40
	/* (non-Javadoc)
41
	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
42
	 */
43
	/** {@inheritDoc} */
44
	@Override
45
	public void dispose() {
46

  
47
	}
48

  
49
	/* (non-Javadoc)
50
	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
51
	 */
52
	/** {@inheritDoc} */
53
	@Override
54
	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
55
	    this.viewer = viewer;
56
	    if (oldInput instanceof TermNodeDto){
57
	        this.oldInput = (TermNodeDto)oldInput;
58
	    }
59
	    if (newInput instanceof TermNodeDto){
60
	        this.newInput = (TermNodeDto)newInput;
61
	    }
62
	    if (oldInput instanceof TermTreeDto){
63
	        this.oldInput = ((TermTreeDto)oldInput).getRoot();
64
	    }
65
	    if (newInput instanceof TermTreeDto){
66
            this.newInput = ((TermTreeDto)newInput).getRoot();
67
        }
68

  
69
	}
70

  
71
	/** {@inheritDoc} */
72
	@Override
73
	public Object[] getElements(Object inputElement) {
74
		return this.getChildren(inputElement);
75
	}
76

  
77
	/** {@inheritDoc} */
78
	@Override
79
	public Object[] getChildren(Object parentElement) {
80
	    if(parentElement instanceof TermTree){
81
            List<TermNode> children = ((TermTree) parentElement).getRootChildren();
82
            return children.toArray();
83
        }else if(parentElement instanceof TermNode){
84
            List<TermNode> children = ((TermNode) parentElement).getChildNodes();
85
            return children.toArray();
86
        }
87
		if(parentElement instanceof TermTreeDto){
88
		    if (((TermTreeDto) parentElement).getRoot() != null){
89
		        List<TermNodeDto> children = ((TermTreeDto) parentElement).getRoot().getChildren();
90
		        return children.toArray();
91
		    }
92
			return new Object[]{};
93
		}else if(parentElement instanceof TermNodeDto){
94
			List<TermNodeDto> children = ((TermNodeDto) parentElement).getChildren();
95
			return children.toArray();
96
		}else if(parentElement instanceof List){
97
			return ((List<TermNodeDto>) parentElement).toArray();
98
		}else{
99
			return new Object[]{};
100
		}
101
	}
102

  
103
	/** {@inheritDoc} */
104
	@Override
105
	public Object getParent(Object element) {
106
	    if(element instanceof TermNode){
107
            return ((TermNode) element).getParent();
108
        }
109
	    if(element instanceof TermNodeDto){
110
	        TermNodeDto parent = uuidTermMap.get(((TermNodeDto) element).getParentUuid());
111
	        return parent;
112
	    }
113
		return null;
114
	}
115

  
116
	public Map<UUID, TermNodeDto> getUuidTermMap() {
117
        return uuidTermMap;
118
    }
119

  
120
	public void setUuidTermMap(Map<UUID, TermNodeDto> uuidTermMap) {
121
        this.uuidTermMap = uuidTermMap;
122
    }
123

  
124

  
125
    /** {@inheritDoc} */
126
	@Override
127
	public boolean hasChildren(Object element) {
128
		return getChildren(element).length != 0;
129
	}
130

  
131

  
132
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeLabelProvider.java
1
/**
2
* Copyright (C) 2007 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

  
10
package eu.etaxonomy.taxeditor.featuretree;
11

  
12
import java.util.ArrayList;
13

  
14
import eu.etaxonomy.cdm.model.common.Language;
15
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
16
import eu.etaxonomy.cdm.model.term.Representation;
17
import eu.etaxonomy.cdm.model.term.TermNode;
18
import eu.etaxonomy.cdm.model.term.TermTree;
19
import eu.etaxonomy.cdm.persistence.dto.TermDto;
20
import eu.etaxonomy.cdm.persistence.dto.TermNodeDto;
21
import eu.etaxonomy.cdm.persistence.dto.TermTreeDto;
22
import eu.etaxonomy.taxeditor.editor.definedterm.TermDtoLabelProvider;
23
import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
24
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
25

  
26
/**
27
 *
28
 * @author n.hoffmann
29
 * @created Aug 5, 2010
30
 * @version 1.0
31
 */
32
public class FeatureTreeLabelProvider extends TermDtoLabelProvider{
33

  
34
	/** {@inheritDoc} */
35
	@Override
36
	public String getText(Object element, boolean showIdInVoc) {
37
		if(element instanceof TermTreeDto){
38
			return ((TermTreeDto) element).getRepresentation_L10n() != null? ((TermTreeDto) element).getRepresentation_L10n() :((TermTreeDto) element).getTitleCache()  ;
39
		}else if(element instanceof TermNodeDto){
40
		    TermDto term = ((TermNodeDto) element).getTerm();
41
		    if(term!=null){
42
		        showIdInVoc = PreferencesUtil.getBooleanValue(IPreferenceKeys.SHOW_VOCABULARY_ID_FOR_TERM_LABELS_IN_TREE_EDITOR, true);
43
		        return super.getText(term, showIdInVoc);
44
		    }
45

  
46
		}else if(element instanceof TermNode){
47
            DefinedTermBase term = ((TermNode) element).getTerm();
48
            if(term!=null){
49
                Representation rep = term.getRepresentation(PreferencesUtil.getGlobalLanguage());
50
                if (rep == null){
51
                    rep = term.getPreferredRepresentation(new ArrayList<Language>());
52
                }
53
                return rep != null? rep.getLabel() : term.getTitleCache();
54
            }
55

  
56
        }else if(element instanceof TermTree){
57
            return ((TermTree) element).getTitleCache();
58

  
59
        }
60
		return "No label provided";
61
	}
62

  
63
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreePropertyTester.java
1
/**
2
 *
3
 */
4
package eu.etaxonomy.taxeditor.featuretree;
5

  
6
import org.eclipse.core.expressions.PropertyTester;
7
import org.eclipse.jface.viewers.IStructuredSelection;
8

  
9
import eu.etaxonomy.cdm.model.term.TermTree;
10

  
11
/**
12
 * Property tester used by the feature tree menu.
13
 *
14
 * @author pplitzner
15
 * @since Jan 30, 2019
16
 *
17
 */
18
public class FeatureTreePropertyTester extends PropertyTester {
19

  
20
	private static final String FEATURE_TREE= "isFeatureTree"; //$NON-NLS-1$
21

  
22
	@Override
23
    public boolean test(Object receiver, String property, Object[] args,
24
			Object expectedValue) {
25

  
26
	    Object[] selectedElements = ((IStructuredSelection) receiver).toArray();
27

  
28
	    if(selectedElements.length == 0){
29
			// nothing selected so all tests should fail
30
			return false;
31
		}
32

  
33
		if(FEATURE_TREE.equals(property)){
34
		    return isFeatureTree(selectedElements);
35
		}
36
		else{
37
			return false;
38
		}
39
	}
40

  
41
	private boolean isFeatureTree(Object[] selectedElements) {
42
	    for (Object object : selectedElements){
43
	        if(!(object instanceof TermTree)){
44
	            return false;
45
	        }
46
	    }
47
	    return true;
48
	}
49

  
50
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/TermNodeDtoTransfer.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;
10

  
11
import java.io.ByteArrayInputStream;
12
import java.io.ByteArrayOutputStream;
13
import java.io.DataInputStream;
14
import java.io.DataOutputStream;
15
import java.io.EOFException;
16
import java.io.IOException;
17
import java.util.ArrayList;
18
import java.util.List;
19
import java.util.UUID;
20

  
21
import org.eclipse.swt.SWTException;
22
import org.eclipse.swt.dnd.ByteArrayTransfer;
23
import org.eclipse.swt.dnd.TransferData;
24

  
25
import eu.etaxonomy.cdm.api.service.ITermNodeService;
26
import eu.etaxonomy.cdm.model.description.Feature;
27
import eu.etaxonomy.cdm.model.term.TermNode;
28
import eu.etaxonomy.cdm.persistence.dto.TermNodeDto;
29
import eu.etaxonomy.taxeditor.model.MessagingUtils;
30
import eu.etaxonomy.taxeditor.store.CdmStore;
31

  
32
/**
33
 * @author k.luther
34
 * @since Oct 13, 2020
35
 */
36
public class TermNodeDtoTransfer extends ByteArrayTransfer {
37

  
38
    private static TermNodeDtoTransfer instance = new TermNodeDtoTransfer();
39
    private static final String TYPE_NAME = "featureNodeDto-transfer-format";
40
    private static final int TYPEID = registerType(TYPE_NAME);
41

  
42
    /**
43
     * <p>Getter for the field <code>instance</code>.</p>
44
     *
45
     * @return a {@link eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer} object.
46
     */
47
    public static synchronized TermNodeDtoTransfer getInstance() {
48
        return instance;
49
    }
50

  
51
    private TermNodeDtoTransfer() {
52
    }
53

  
54
    /** {@inheritDoc} */
55
    @Override
56
    protected int[] getTypeIds() {
57
        return new int[] { TYPEID };
58
    }
59

  
60
    /** {@inheritDoc} */
61
    @Override
62
    protected String[] getTypeNames() {
63
        return new String[] { TYPE_NAME };
64
    }
65
    @Override
66
    protected void javaToNative(Object object, TransferData transferData) {
67
        if (object != null){
68
            byte[] bytes = toByteArray((TermNodeDto[]) object);
69
            if (bytes != null) {
70
                super.javaToNative(bytes, transferData);
71
            }
72
        }
73
    }
74

  
75
    @Override
76
    protected Object nativeToJava(TransferData transferData) {
77
        try{
78
            byte[] bytes = (byte[]) super.nativeToJava(transferData);
79
            if (bytes != null){
80
                return fromByteArray(bytes);
81
            }
82
        }catch (SWTException e){
83
            MessagingUtils.warningDialog("The new imported node needs to be saved first", this, "Newly created nodes can not be moved without saving");
84
        }
85

  
86
        return null;
87
    }
88

  
89

  
90
    protected byte[] toByteArray(TermNodeDto[] elements) {
91
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
92
        DataOutputStream out = new DataOutputStream(byteOut);
93

  
94
        byte[] bytes = null;
95

  
96
        try {
97
            for(TermNodeDto element : elements){
98
                if (element.getUuid() == null){
99
                //  MessagingUtils.warningDialog("The new imported node needs to be saved first", this, "Newly created nodes can not be moved without saving");
100

  
101
                }else{
102
                    writeElementUuid(element, out);
103
                }
104
            }
105
            out.close();
106
            bytes = byteOut.toByteArray();
107
        } catch (IOException e) {
108

  
109
            // when in doubt send nothing
110
        }
111
        return bytes;
112
    }
113

  
114
    protected Object[] fromByteArray(byte[] bytes) {
115
        DataInputStream in = new DataInputStream(
116
                new ByteArrayInputStream(bytes));
117

  
118
        try {
119
            List<TermNodeDto> elements = new ArrayList<TermNodeDto>();
120

  
121
            try{
122
                while(true){
123
                    UUID uuid = readElementUuid(in);
124
                    elements.add(loadElement(uuid));
125
                }
126
            }catch(EOFException e){
127
                return  elements.toArray();
128
            }
129
        } catch (IOException e) {
130
            return null;
131
        }
132
    }
133

  
134
    public TermNodeDto loadElement(UUID uuid){
135
        TermNode<Feature> node = CdmStore.getService(ITermNodeService.class).load(uuid);
136
        return TermNodeDto.fromNode(node, null);
137
    }
138

  
139
    public UUID readElementUuid(DataInputStream in) throws IOException{
140
        return UUID.fromString(in.readUTF());
141
    }
142

  
143
    private void writeElementUuid(TermNodeDto element, DataOutputStream out) throws IOException {
144
        out.writeUTF(element.getUuid().toString());
145
    }
146

  
147

  
148
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/TermNodeTransfer.java
1
/**
2
 * Copyright (C) 2007 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

  
10
package eu.etaxonomy.taxeditor.featuretree;
11

  
12
import java.io.ByteArrayInputStream;
13
import java.io.ByteArrayOutputStream;
14
import java.io.DataInputStream;
15
import java.io.DataOutputStream;
16
import java.io.EOFException;
17
import java.io.IOException;
18
import java.util.ArrayList;
19
import java.util.List;
20
import java.util.UUID;
21

  
22
import org.eclipse.swt.SWTException;
23
import org.eclipse.swt.dnd.ByteArrayTransfer;
24
import org.eclipse.swt.dnd.TransferData;
25

  
26
import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
27
import eu.etaxonomy.cdm.model.description.Feature;
28
import eu.etaxonomy.cdm.model.term.TermNode;
29
import eu.etaxonomy.taxeditor.model.MessagingUtils;
30
import eu.etaxonomy.taxeditor.store.CdmStore;
31

  
32
/**
33
 * <p>FeatureNodeTransfer class.</p>
34
 *
35
 * @author n.hoffmann
36
 * @created Aug 5, 2010
37
 */
38
public class TermNodeTransfer extends ByteArrayTransfer {
39

  
40
	private static TermNodeTransfer instance = new TermNodeTransfer();
41
	private static final String TYPE_NAME = "featureNode-transfer-format";
42
	private static final int TYPEID = registerType(TYPE_NAME);
43

  
44
	/**
45
	 * <p>Getter for the field <code>instance</code>.</p>
46
	 *
47
	 * @return a {@link eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer} object.
48
	 */
49
	public static synchronized TermNodeTransfer getInstance() {
50
		return instance;
51
	}
52

  
53
	private TermNodeTransfer() {
54
	}
55

  
56
	/** {@inheritDoc} */
57
	@Override
58
	protected int[] getTypeIds() {
59
		return new int[] { TYPEID };
60
	}
61

  
62
	/** {@inheritDoc} */
63
	@Override
64
	protected String[] getTypeNames() {
65
		return new String[] { TYPE_NAME };
66
	}
67
	@Override
68
    protected void javaToNative(Object object, TransferData transferData) {
69
        if (object != null){
70
            byte[] bytes = toByteArray((TermNode[]) object);
71
            if (bytes != null) {
72
                super.javaToNative(bytes, transferData);
73
            }
74
        }
75
    }
76

  
77
    @Override
78
    protected Object nativeToJava(TransferData transferData) {
79
        try{
80
            byte[] bytes = (byte[]) super.nativeToJava(transferData);
81
            if (bytes != null){
82
                return fromByteArray(bytes);
83
            }
84
        }catch (SWTException e){
85
            MessagingUtils.warningDialog("The new imported node needs to be saved first", this, "Newly created nodes can not be moved without saving");
86
        }
87

  
88
        return null;
89
    }
90

  
91

  
92
    protected byte[] toByteArray(TermNode[] elements) {
93
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
94
        DataOutputStream out = new DataOutputStream(byteOut);
95

  
96
        byte[] bytes = null;
97

  
98
        try {
99
            for(TermNode element : elements){
100
                if (element.getUuid() == null){
101
                //                    MessagingUtils.warningDialog("The new imported node needs to be saved first", this, "Newly created nodes can not be moved without saving");
102

  
103
                }else{
104
                    writeElementUuid(element, out);
105
                }
106
            }
107
            out.close();
108
            bytes = byteOut.toByteArray();
109
        } catch (IOException e) {
110

  
111
            // when in doubt send nothing
112
        }
113
        return bytes;
114
    }
115

  
116
    protected Object[] fromByteArray(byte[] bytes) {
117
        DataInputStream in = new DataInputStream(
118
                new ByteArrayInputStream(bytes));
119

  
120
        try {
121
            List<TermNode> elements = new ArrayList<TermNode>();
122

  
123
            try{
124
                while(true){
125
                    UUID uuid = readElementUuid(in);
126
                    elements.add(loadElement(uuid));
127
                }
128
            }catch(EOFException e){
129
                return  elements.toArray();
130
            }
131
        } catch (IOException e) {
132
            return null;
133
        }
134
    }
135

  
136
    public TermNode loadElement(UUID uuid){
137
        TermNode<Feature> node = CdmStore.getService(IFeatureNodeService.class).load(uuid);
138
        return node;
139
    }
140

  
141
    public UUID readElementUuid(DataInputStream in) throws IOException{
142
        return UUID.fromString(in.readUTF());
143
    }
144

  
145
    private void writeElementUuid(Object element, DataOutputStream out) throws IOException {
146
        out.writeUTF(((TermNode)element).getUuid().toString());
147
    }
148

  
149
}
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff