Project

General

Profile

Download (11 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.hibernate.HibernateProxyHelper;
24
import eu.etaxonomy.cdm.model.common.DefinedTerm;
25
import eu.etaxonomy.cdm.model.molecular.DnaSample;
26
import eu.etaxonomy.cdm.model.molecular.Sequence;
27
import eu.etaxonomy.cdm.model.molecular.SingleRead;
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}.
44
 */
45
public class DerivateLabelProvider extends ColumnLabelProvider {
46

    
47
    private Set<SingleRead> multiLinkSingleReads;
48

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

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

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

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

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

    
89

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

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

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

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

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

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

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

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

    
254
}
(1-1/4)