Project

General

Profile

Download (11.9 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.api.service.IOccurrenceService;
23
import eu.etaxonomy.cdm.model.common.DefinedTerm;
24
import eu.etaxonomy.cdm.model.molecular.DnaSample;
25
import eu.etaxonomy.cdm.model.molecular.Sequence;
26
import eu.etaxonomy.cdm.model.molecular.SingleRead;
27
import eu.etaxonomy.cdm.model.occurrence.Collection;
28
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
29
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
30
import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
31
import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
32
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
33
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
34
import eu.etaxonomy.taxeditor.model.ImageResources;
35
import eu.etaxonomy.taxeditor.store.CdmStore;
36

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

    
48
    private Set<SingleRead> multiLinkSingleReads;
49

    
50
    private ConversationHolder conversation;
51

    
52
    private static DefinedTerm photoTerm = null;
53
    private static DefinedTerm drawingTerm = null;
54
    private static DefinedTerm specimenScanTerm = null;
55
    private static DefinedTerm detailImageTerm = null;
56

    
57
    private static void initializeTerms() {
58
        List<DefinedTerm> preferredTerms = CdmStore.getTermManager().getPreferredTerms(DefinedTerm.class);
59
        for (DefinedTerm definedTerm : preferredTerms) {
60
            if(definedTerm.getUuid().equals(UUID.fromString("c5c59c42-f254-471e-96c6-09f459f7c903"))){
61
                photoTerm = definedTerm;
62
            }
63
            else if(definedTerm.getUuid().equals(UUID.fromString("669b0409-4aa4-4695-aae4-a95ed27bad4c"))){
64
                drawingTerm = definedTerm;
65
            }
66
            else if(definedTerm.getUuid().equals(UUID.fromString("acda15be-c0e2-4ea8-8783-b9b0c4ad7f03"))){
67
                specimenScanTerm = definedTerm;
68
            }
69
            else if(definedTerm.getUuid().equals(UUID.fromString("31eb8d02-bf5d-437c-bcc6-87a626445f34"))){
70
                detailImageTerm = definedTerm;
71
            }
72
        }
73
    }
74

    
75
    public static DefinedTerm getLivingPlantPhotoTerm(){
76
        if(photoTerm==null){
77
            initializeTerms();
78
        }
79
        return photoTerm;
80
    }
81

    
82
    public static DefinedTerm getArtworkTerm(){
83
        if(drawingTerm==null){
84
            initializeTerms();
85
        }
86
        return drawingTerm;
87
    }
88

    
89
    public static DefinedTerm getSpecimenScanTerm(){
90
        if(specimenScanTerm==null){
91
            initializeTerms();
92
        }
93
        return specimenScanTerm;
94
    }
95

    
96
    public static DefinedTerm getDetailImageTerm(){
97
        if(detailImageTerm==null){
98
            initializeTerms();
99
        }
100
        return detailImageTerm;
101
    }
102

    
103

    
104
    /** {@inheritDoc} */
105
    @Override
106
    public String getText(Object element) {
107
        return getDerivateText(element);
108
    }
109

    
110
    /** {@inheritDoc} */
111
    @Override
112
    public String getToolTipText(Object element) {
113
        return getDerivateText(element);
114
    }
115

    
116
    /**
117
     * @param conversation the conversation to set
118
     */
119
    public void setConversation(ConversationHolder conversation) {
120
        this.conversation = conversation;
121
    }
122

    
123
    /**
124
     *
125
     * @param element
126
     * @return
127
     */
128
    public String getDerivateText(Object element){
129
        if(element instanceof TreeNode){
130
            //unwrap specimen from TreeNode
131
            element = ((TreeNode) element).getValue();
132
        }
133

    
134
        conversation.bind();
135

    
136
        String label = "";
137
        if(element instanceof FieldUnit){
138
            FieldUnit fieldUnit = (FieldUnit)element;
139
            if(fieldUnit.getGatheringEvent()!=null){
140
                GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent();
141
                if(!conversation.getSession().contains(gatheringEvent)){
142
                    fieldUnit = (FieldUnit) CdmStore.getService(IOccurrenceService.class).load(fieldUnit.getUuid());
143
                    gatheringEvent = fieldUnit.getGatheringEvent();
144
                }
145
                label += gatheringEvent.getCountry()!=null?gatheringEvent.getCountry().getLabel()+", ":"";
146
                label += gatheringEvent.getLocality()!=null?gatheringEvent.getLocality().getText()+", ":"";
147
                label += gatheringEvent.getGatheringDate()!=null?gatheringEvent.getGatheringDate()+", ":"";
148
                label += gatheringEvent.getCollector()!=null?gatheringEvent.getCollector()+", ":"";
149
            }
150
            label += fieldUnit.getFieldNumber()!=null?fieldUnit.getFieldNumber():"";
151
        }
152
        else if(element instanceof MediaSpecimen){
153
            MediaSpecimen mediaSpecimen = (MediaSpecimen)element;
154
            label += mediaSpecimen.getMediaSpecimen().getTitle()!=null?mediaSpecimen.getMediaSpecimen().getTitle().getText()+", ":"[no motif]";
155
            label += mediaSpecimen.getMediaSpecimen().getArtist()!=null?mediaSpecimen.getMediaSpecimen().getArtist()+", ":"";
156
            label += mediaSpecimen.getAccessionNumber()!=null?mediaSpecimen.getAccessionNumber()+", ":"";
157
            Collection collection = mediaSpecimen.getCollection();
158
            if(collection!=null){
159
                label += collection.getName()!=null?collection.getName()+" ":"";
160
            }
161
        }
162
        else if(element instanceof DnaSample
163
                || (element instanceof DerivedUnit
164
                        && ((SpecimenOrObservationBase<?>) element).getRecordBasis()==SpecimenOrObservationType.DnaSample)){
165
            //TODO implement
166
            label += element.toString();
167

    
168
        }
169
        else if(element instanceof DerivedUnit){
170
            DerivedUnit derivedUnit = (DerivedUnit)element;
171
            if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){
172
                java.util.Collection<FieldUnit> fieldUnits = CdmStore.getService(IOccurrenceService.class).getFieldUnits(derivedUnit.getUuid());
173
                if(fieldUnits!=null && !fieldUnits.isEmpty()){
174
                    FieldUnit fieldUnit = fieldUnits.iterator().next();
175
                    GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent();
176
                    if(gatheringEvent!=null){
177
                        label += gatheringEvent.getCollector()!=null?gatheringEvent.getCollector()+", ":"";
178
                    }
179
                    label += fieldUnit.getFieldNumber()!=null?fieldUnit.getFieldNumber()+", ":"";
180
                }
181
                Collection collection = derivedUnit.getCollection();
182
                if(collection!=null){
183
                    label += collection.getName()!=null?collection.getName()+" ":"";
184
                    label += collection.getCode()!=null?"("+collection.getCode()+"), ":"";
185
                }
186
                label += derivedUnit.getAccessionNumber()!=null?derivedUnit.getAccessionNumber()+", ":"";
187
                label += derivedUnit.getBarcode()!=null?derivedUnit.getBarcode():"";
188
            }
189
            else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.TissueSample){
190
                //TODO: implement
191
//                kindofTissue + SampleDesignation
192
            }
193
        }
194
        else if(element instanceof Sequence){
195
            Sequence sequence = (Sequence)element;
196
            label += "SampleDesignation?"+", ";
197
            label += sequence.getDnaMarker()!=null?sequence.getDnaMarker():"";
198
        }
199
        else if(element instanceof SingleRead){
200
            SingleRead singleRead = (SingleRead)element;
201
            label += singleRead.getPrimer()!=null?singleRead.getPrimer().getLabel()+", ":"";
202
            label += "Marker?";
203
        }
204
        else if(element instanceof SpecimenOrObservationBase){
205
            SpecimenOrObservationBase<?> derivate = (SpecimenOrObservationBase<?>) element;
206
            SpecimenOrObservationType type = derivate.getRecordBasis();
207
            return derivate.getTitleCache() + (type!=null?" ["+type.toString()+"]":"");
208
        }
209
        if(label.isEmpty()){
210
            label = element.toString();
211
        }
212
        //remove last comma
213
        else if(label.endsWith(", ")){
214
            label = label.substring(0, label.length()-2);
215
        }
216
        return label;
217
    }
218

    
219
    /* (non-Javadoc)
220
     * @see org.eclipse.jface.viewers.ColumnLabelProvider#getImage(java.lang.Object)
221
     */
222
    @Override
223
    public Image getImage(Object element) {
224
        if(element instanceof TreeNode){
225
            element = ((TreeNode) element).getValue();
226
        }
227
        if(element instanceof FieldUnit){
228
            return ImageResources.getImage(ImageResources.FIELD_UNIT);
229
        }
230
        else if(element instanceof DerivedUnit){
231
            DerivedUnit derivedUnit = (DerivedUnit)element;
232
            if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.FieldUnit){
233
                return ImageResources.getImage(ImageResources.FIELD_UNIT);
234
            }
235
            else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.DnaSample){
236
                return ImageResources.getImage(ImageResources.DNA_SAMPLE_DERIVATE);
237
            }
238
            else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.TissueSample){
239
                return ImageResources.getImage(ImageResources.TISSUE_SAMPLE_DERIVATE);
240
            }
241
            else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){
242
                return ImageResources.getImage(ImageResources.SPECIMEN_DERIVATE);
243
            }
244
            else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.Media){
245
                if(derivedUnit.getKindOfUnit()!=null){
246
                    if(derivedUnit.getKindOfUnit().equals(getArtworkTerm())){
247
                        return ImageResources.getImage(ImageResources.ARTWORK_DERIVATE);
248
                    }
249
                    else if(derivedUnit.getKindOfUnit().equals(getLivingPlantPhotoTerm())){
250
                        return ImageResources.getImage(ImageResources.LIVING_PLANT_PHOTO_DERIVATE);
251
                    }
252
                    else if(derivedUnit.getKindOfUnit().equals(getSpecimenScanTerm())){
253
                        return ImageResources.getImage(ImageResources.SPECIMEN_SCAN_DERIVATE);
254
                    }
255
                    else if(derivedUnit.getKindOfUnit().equals(getDetailImageTerm())){
256
                        return ImageResources.getImage(ImageResources.DETAIL_IMAGE_DERIVATE);
257
                    }
258
                }
259
            }
260
        }
261
        else if(element instanceof Sequence){
262
            return ImageResources.getImage(ImageResources.SEQUENCE_DERIVATE);
263
        }
264

    
265
        else if(element instanceof SingleRead){
266
            if(multiLinkSingleReads.contains(element)){
267
                return ImageResources.getImage(ImageResources.SINGLE_READ_DERIVATE_MULTILINK);
268
            }
269
            else{
270
                return ImageResources.getImage(ImageResources.SINGLE_READ_DERIVATE);
271
            }
272
        }
273
        return super.getImage(element);
274
    }
275

    
276
    /**
277
     * @param multiLinkSingleReads2
278
     */
279
    public void setMultiLinkSingleReads(Set<SingleRead> multiLinkSingleReads) {
280
        this.multiLinkSingleReads = multiLinkSingleReads;
281
    }
282

    
283
}
(1-1/4)