Project

General

Profile

Download (5.24 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
                for (DefinedTermBase termBase: includes){
41
                    allChildrenWrapper.add(new NamedAreaWrapper(termBase, false, wrapper));
42
                }
43
                Set<DefinedTermBase> generalizationOfs = term.getGeneralizationOf();
44
                for (DefinedTermBase termBase: generalizationOfs){
45
                    allChildrenWrapper.add(new NamedAreaWrapper(termBase, false, wrapper));
46
                }
47
                if(allChildrenWrapper.size()>0){
48
                    allChildrenWrapper.add(new NamedAreaWrapper(term, true, wrapper));
49
                }
50
                wrapper.children = allChildrenWrapper;
51
                return allChildrenWrapper.toArray();
52
            }else{
53
               return wrapper.children.toArray();
54
            }
55
        }
56
        return null;
57
    }
58

    
59

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

    
68
   private Object[] getTopLevelElements(TermVocabulary vocabulary) {
69

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

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

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

    
102
   }
103

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

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

    
146
       }
147

    
148
       return false;
149
   }
150
}
(10-10/13)