Project

General

Profile

Download (10.7 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2013 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10
package eu.etaxonomy.taxeditor.view.derivateSearch;
11

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

    
16
import org.eclipse.jface.viewers.ColumnLabelProvider;
17
import org.eclipse.jface.viewers.TreeNode;
18
import org.eclipse.swt.graphics.Image;
19
import org.hibernate.LazyInitializationException;
20

    
21
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
22
import eu.etaxonomy.cdm.model.common.DefinedTerm;
23
import eu.etaxonomy.cdm.model.molecular.DnaSample;
24
import eu.etaxonomy.cdm.model.molecular.Sequence;
25
import eu.etaxonomy.cdm.model.molecular.SingleRead;
26
import eu.etaxonomy.cdm.model.occurrence.Collection;
27
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
28
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
29
import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
30
import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
31
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
32
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
33
import eu.etaxonomy.taxeditor.model.ImageResources;
34
import eu.etaxonomy.taxeditor.store.CdmStore;
35

    
36
/**
37
 * Label provider for the views to show {@link SpecimenOrObservationBase}s.<br>
38
 * <br>
39
 * <b>Note:</b> If you use this label provider you need to assure that you
40
 * created a {@link ConversationHolder} resp. have an open session because
41
 * the labels are generated from various fields of the derivate hierarchy which
42
 * are lazy loaded and could therefore throw a {@link LazyInitializationException}.
43
 */
44
public class DerivateLabelProvider extends ColumnLabelProvider {
45

    
46
    private Set<SingleRead> multiLinkSingleReads;
47

    
48
    private static DefinedTerm photoTerm = null;
49
    private static DefinedTerm drawingTerm = null;
50
    private static DefinedTerm specimenScanTerm = null;
51

    
52
    private static void initializeTerms() {
53
        List<DefinedTerm> preferredTerms = CdmStore.getTermManager().getPreferredTerms(DefinedTerm.class);
54
        for (DefinedTerm definedTerm : preferredTerms) {
55
            if(definedTerm.getUuid().equals(UUID.fromString("04673952-dab1-42ff-b47a-5e847c350eaf"))){//photo
56
                photoTerm = definedTerm;
57
            }
58
            else if(definedTerm.getUuid().equals(UUID.fromString("76204a15-098f-4afe-9e8f-fa344ee3fdbb"))){//drawing
59
                drawingTerm = definedTerm;
60
            }
61
            else if(definedTerm.getUuid().equals(UUID.fromString("c0b127d6-c849-48f9-bbc3-29e3337c1d03"))){//cover TODO temporary until new term is created
62
                specimenScanTerm = definedTerm;
63
            }
64
        }
65
    }
66

    
67
    public static DefinedTerm getLivingPlantPhotoTerm(){
68
        if(photoTerm==null){
69
            initializeTerms();
70
        }
71
        return photoTerm;
72
    }
73

    
74
    public static DefinedTerm getArtworkTerm(){
75
        if(drawingTerm==null){
76
            initializeTerms();
77
        }
78
        return drawingTerm;
79
    }
80

    
81
    public static DefinedTerm getSpecimenScanTerm(){
82
        if(specimenScanTerm==null){
83
            initializeTerms();
84
        }
85
        return specimenScanTerm;
86
    }
87

    
88

    
89
    /** {@inheritDoc} */
90
    @Override
91
    public String getText(Object element) {
92
        return getDerivateText(element);
93
    }
94

    
95
    /** {@inheritDoc} */
96
    @Override
97
    public String getToolTipText(Object element) {
98
        return getDerivateText(element);
99
    }
100

    
101
    /**
102
     *
103
     * @param element
104
     * @return
105
     */
106
    public static String getDerivateText(Object element){
107
        TreeNode parentNode = null;
108
        if(element instanceof TreeNode){
109
            parentNode = ((TreeNode) element).getParent();
110
            //unwrap specimen from TreeNode
111
            element = ((TreeNode) element).getValue();
112
        }
113

    
114
        String label = "";
115
        if(element instanceof FieldUnit){
116
            FieldUnit fieldUnit = (FieldUnit)element;
117
            GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent();
118
            if(gatheringEvent!=null){
119
                label += gatheringEvent.getCountry()!=null?gatheringEvent.getCountry().getLabel()+", ":"";
120
                label += gatheringEvent.getLocality()!=null?gatheringEvent.getLocality().getText()+", ":"";
121
                label += gatheringEvent.getGatheringDate()!=null?gatheringEvent.getGatheringDate()+", ":"";
122
                label += gatheringEvent.getCollector()!=null?gatheringEvent.getCollector()+", ":"";
123
            }
124
            label += fieldUnit.getFieldNumber()!=null?fieldUnit.getFieldNumber():"";
125
        }
126
        else if(element instanceof MediaSpecimen){
127
            MediaSpecimen mediaSpecimen = (MediaSpecimen)element;
128
            label += mediaSpecimen.getMediaSpecimen().getTitle()!=null?mediaSpecimen.getMediaSpecimen().getTitle().getText()+", ":"[no motif]";
129
            label += mediaSpecimen.getMediaSpecimen().getArtist()!=null?mediaSpecimen.getMediaSpecimen().getArtist()+", ":"";
130
            label += mediaSpecimen.getAccessionNumber()!=null?mediaSpecimen.getAccessionNumber()+", ":"";
131
            Collection collection = mediaSpecimen.getCollection();
132
            if(collection!=null){
133
                label += collection.getName()!=null?collection.getName()+" ":"";
134
            }
135
        }
136
        else if(element instanceof DnaSample
137
                || (element instanceof DerivedUnit
138
                        && ((SpecimenOrObservationBase<?>) element).getRecordBasis()==SpecimenOrObservationType.DnaSample)){
139
            //TODO implement
140
            label += element.toString();
141

    
142
        }
143
        else if(element instanceof DerivedUnit){
144
            DerivedUnit derivedUnit = (DerivedUnit)element;
145
            if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){
146
                if(parentNode!=null && parentNode.getValue() instanceof FieldUnit){
147
                    FieldUnit fieldUnit = (FieldUnit) parentNode.getValue();
148
                    GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent();
149
                    if(gatheringEvent!=null){
150
                        label += gatheringEvent.getCollector()!=null?gatheringEvent.getCollector()+", ":"";
151
                    }
152
                    label += fieldUnit.getFieldNumber()!=null?fieldUnit.getFieldNumber()+", ":"";
153
                }
154
                Collection collection = derivedUnit.getCollection();
155
                if(collection!=null){
156
                    label += collection.getName()!=null?collection.getName()+" ":"";
157
                    label += collection.getCode()!=null?"("+collection.getCode()+"), ":"";
158
                }
159
                label += derivedUnit.getAccessionNumber()!=null?derivedUnit.getAccessionNumber()+", ":"";
160
                label += derivedUnit.getBarcode()!=null?derivedUnit.getBarcode():"";
161
            }
162
            else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.TissueSample){
163
                //TODO: implement
164
//                kindofTissue + SampleDesignation
165
            }
166
        }
167
        else if(element instanceof Sequence){
168
            Sequence sequence = (Sequence)element;
169
            label += "SampleDesignation?"+", ";
170
            label += sequence.getDnaMarker()!=null?sequence.getDnaMarker():"";
171
        }
172
        else if(element instanceof SingleRead){
173
            SingleRead singleRead = (SingleRead)element;
174
            label += singleRead.getPrimer()!=null?singleRead.getPrimer().getLabel()+", ":"";
175
            label += "Marker?";
176
        }
177
        else if(element instanceof SpecimenOrObservationBase){
178
            SpecimenOrObservationBase<?> derivate = (SpecimenOrObservationBase<?>) element;
179
            SpecimenOrObservationType type = derivate.getRecordBasis();
180
            return derivate.getTitleCache() + (type!=null?" ["+type.toString()+"]":"");
181
        }
182
        if(label.isEmpty()){
183
            label = element.toString();
184
        }
185
        //remove last comma
186
        else if(label.endsWith(", ")){
187
            label = label.substring(0, label.length()-2);
188
        }
189
        return label;
190
    }
191

    
192
    /* (non-Javadoc)
193
     * @see org.eclipse.jface.viewers.ColumnLabelProvider#getImage(java.lang.Object)
194
     */
195
    @Override
196
    public Image getImage(Object element) {
197
        if(element instanceof TreeNode){
198
            element = ((TreeNode) element).getValue();
199
        }
200
        if(element instanceof FieldUnit){
201
            return ImageResources.getImage(ImageResources.FIELD_UNIT);
202
        }
203
        else if(element instanceof DerivedUnit){
204
            DerivedUnit derivedUnit = (DerivedUnit)element;
205
            if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.FieldUnit){
206
                return ImageResources.getImage(ImageResources.FIELD_UNIT);
207
            }
208
            else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.DnaSample){
209
                return ImageResources.getImage(ImageResources.DNA_SAMPLE_DERIVATE);
210
            }
211
            else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.TissueSample){
212
                return ImageResources.getImage(ImageResources.TISSUE_SAMPLE_DERIVATE);
213
            }
214
            else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){
215
                return ImageResources.getImage(ImageResources.SPECIMEN_DERIVATE);
216
            }
217
            else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.StillImage){
218
                if(derivedUnit.getKindOfUnit()!=null){
219
                    if(derivedUnit.getKindOfUnit().equals(getArtworkTerm())){
220
                        return ImageResources.getImage(ImageResources.ARTWORK_DERIVATE);
221
                    }
222
                    else if(derivedUnit.getKindOfUnit().equals(getLivingPlantPhotoTerm())){
223
                        return ImageResources.getImage(ImageResources.LIVING_PLANT_PHOTO_DERIVATE);
224
                    }
225
                    else if(derivedUnit.getKindOfUnit().equals(getSpecimenScanTerm())){
226
                        return ImageResources.getImage(ImageResources.SPECIMEN_SCAN_DERIVATE);
227
                    }
228
                }
229
            }
230
        }
231
        else if(element instanceof Sequence){
232
            return ImageResources.getImage(ImageResources.SEQUENCE_DERIVATE);
233
        }
234

    
235
        else if(element instanceof SingleRead){
236
            if(multiLinkSingleReads.contains(element)){
237
                return ImageResources.getImage(ImageResources.SINGLE_READ_DERIVATE_MULTILINK);
238
            }
239
            else{
240
                return ImageResources.getImage(ImageResources.SINGLE_READ_DERIVATE);
241
            }
242
        }
243
        return super.getImage(element);
244
    }
245

    
246
    /**
247
     * @param multiLinkSingleReads2
248
     */
249
    public void setMultiLinkSingleReads(Set<SingleRead> multiLinkSingleReads) {
250
        this.multiLinkSingleReads = multiLinkSingleReads;
251
    }
252

    
253
}
(1-1/4)