Project

General

Profile

Download (5.13 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2018 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.preference.wizard;
10

    
11
import java.util.HashSet;
12
import java.util.Set;
13
import java.util.SortedSet;
14

    
15
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
16
import eu.etaxonomy.cdm.model.common.TermVocabulary;
17
import eu.etaxonomy.taxeditor.editor.definedterm.TermContentProvider;
18
import eu.etaxonomy.taxeditor.store.CdmStore;
19

    
20
/**
21
 * @author k.luther
22
 * @since 04.10.2018
23
 *
24
 */
25
public class DistributionContentProvider extends TermContentProvider {
26

    
27
    /* (non-Javadoc)
28
     * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
29
     */
30
    @Override
31
    public Object[] getChildren(Object parentElement) {
32
        Set<NamedAreaWrapper> allChildrenWrapper = new HashSet();
33
        if(parentElement instanceof TermVocabulary){
34
            return getTopLevelElements((TermVocabulary)parentElement);
35
        } else if (parentElement instanceof NamedAreaWrapper && !((NamedAreaWrapper)parentElement).isBaseElement) {
36
            NamedAreaWrapper wrapper = (NamedAreaWrapper)parentElement;
37
            if (wrapper.children == null){
38
                DefinedTermBase term = wrapper.getNamedArea();
39
                Set<DefinedTermBase> includes = term.getIncludes();
40
                Set<DefinedTermBase> generalizationOfs = term.getGeneralizationOf();
41
                generalizationOfs.addAll(includes);
42
                for (DefinedTermBase termBase: generalizationOfs){
43
                    allChildrenWrapper.add(new NamedAreaWrapper(termBase, false, wrapper));
44
                }
45
                if(allChildrenWrapper.size()>0){
46
                    allChildrenWrapper.add(new NamedAreaWrapper(term, true, wrapper));
47
                }
48
                wrapper.children = allChildrenWrapper;
49
                return allChildrenWrapper.toArray();
50
            }else{
51
               return wrapper.children.toArray();
52
            }
53
        }
54
        return null;
55
    }
56

    
57

    
58
    /**
59
    *
60
    * @param vocabulary
61
    * @return An array of DefinedTermBase objects that do not have parents
62
    *
63
    * TODO: Needs to be implemented in cdmlib
64
    */
65

    
66
   private Object[] getTopLevelElements(TermVocabulary vocabulary) {
67

    
68
       SortedSet<DefinedTermBase> terms = vocabulary.getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
69
       Set<NamedAreaWrapper> topLevelTerms = new HashSet();
70
       NamedAreaWrapper wrapper;
71
       for (DefinedTermBase term : terms){
72
            if (term.getPartOf() == null && term.getKindOf() == null){
73
                wrapper = new NamedAreaWrapper(term, false, vocabulary);
74
                topLevelTerms.add(wrapper);
75
            }
76
       }
77
       return topLevelTerms.toArray();
78
   }
79

    
80
   /* (non-Javadoc)
81
    * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
82
    */
83
   @Override
84
   public Object getParent(Object element) {
85

    
86
       if(element instanceof NamedAreaWrapper){
87
           if (((NamedAreaWrapper)element).parent!= null){
88
               return ((NamedAreaWrapper)element).parent;
89
           }else{
90
               NamedAreaWrapper child = (NamedAreaWrapper)element;
91
               DefinedTermBase parent = child.getNamedArea().getKindOf();
92
               if (parent == null){
93
                   return child.getNamedArea().getVocabulary();
94
               }
95
               return new NamedAreaWrapper(parent, false, null);
96
           }
97
       }
98
       return null;
99

    
100
   }
101

    
102
   /* (non-Javadoc)
103
    * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
104
    */
105
   @Override
106
   public boolean hasChildren(Object element) {
107
       if (element instanceof TermVocabulary){
108
           if (((TermVocabulary)element).getTerms() != null){
109
               return((TermVocabulary)element).getTerms().size()>0;
110
           }else{
111
               return false;
112
           }
113
       }else if (element instanceof DefinedTermBase){
114
           boolean hasChildren = false;
115
           if (((DefinedTermBase)element).getGeneralizationOf()!= null){
116
               if (((DefinedTermBase)element).getGeneralizationOf().size()>0){
117
                   return true;
118
               }
119
           }
120
           if (((DefinedTermBase)element).getIncludes()!= null){
121
               if (((DefinedTermBase)element).getIncludes().size()>0){
122
                   return true;
123
               }
124
           }
125
           return false;
126
       }else if (element instanceof NamedAreaWrapper){
127
           NamedAreaWrapper wrapper = (NamedAreaWrapper)element;
128
           if (wrapper.isBaseElement){
129
               return false;
130
           }
131

    
132
           if (wrapper.getNamedArea().getGeneralizationOf()!= null){
133
               if (wrapper.getNamedArea().getGeneralizationOf().size()>0){
134
                   return true;
135
               }
136
           }
137
           if (wrapper.getNamedArea().getIncludes()!= null){
138
               if (wrapper.getNamedArea().getIncludes().size()>0){
139
                   return true;
140
               }
141
           }
142
           return false;
143

    
144
       }
145

    
146
       return false;
147
   }
148
}
(8-8/11)