3 * Copyright (C) 2013 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.taxeditor
.view
.derivateSearch
;
12 import java
.util
.List
;
14 import java
.util
.UUID
;
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
;
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
.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
;
37 * Label provider for the views to show {@link SpecimenOrObservationBase}s.<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}.<br>
43 * Use <b>{@link #setConversation(ConversationHolder)}</b> to assign the session to this provider.
45 public class DerivateLabelProvider
extends ColumnLabelProvider
{
47 private Set
<SingleRead
> multiLinkSingleReads
;
49 private ConversationHolder conversation
;
51 private static DefinedTerm photoTerm
= null;
52 private static DefinedTerm drawingTerm
= null;
53 private static DefinedTerm specimenScanTerm
= null;
54 private static DefinedTerm detailImageTerm
= null;
55 private static DefinedTerm sampleDesignationTerm
= null;
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
;
63 else if(definedTerm
.getUuid().equals(UUID
.fromString("669b0409-4aa4-4695-aae4-a95ed27bad4c"))){
64 drawingTerm
= definedTerm
;
66 else if(definedTerm
.getUuid().equals(UUID
.fromString("acda15be-c0e2-4ea8-8783-b9b0c4ad7f03"))){
67 specimenScanTerm
= definedTerm
;
69 else if(definedTerm
.getUuid().equals(UUID
.fromString("31eb8d02-bf5d-437c-bcc6-87a626445f34"))){
70 detailImageTerm
= definedTerm
;
72 else if(definedTerm
.getUuid().equals(UUID
.fromString("fadeba12-1be3-4bc7-9ff5-361b088d86fc"))){
73 sampleDesignationTerm
= definedTerm
;
78 public static DefinedTerm
getLivingPlantPhotoTerm(){
85 public static DefinedTerm
getArtworkTerm(){
86 if(drawingTerm
==null){
92 public static DefinedTerm
getSpecimenScanTerm(){
93 if(specimenScanTerm
==null){
96 return specimenScanTerm
;
99 public static DefinedTerm
getDetailImageTerm(){
100 if(detailImageTerm
==null){
103 return detailImageTerm
;
106 public static DefinedTerm
getSampleDesignationTerm(){
107 if(sampleDesignationTerm
==null){
110 return sampleDesignationTerm
;
116 public String
getText(Object element
) {
117 return getDerivateText(element
);
122 public String
getToolTipText(Object element
) {
123 return getDerivateText(element
);
127 * @param conversation the conversation to set
129 public void setConversation(ConversationHolder conversation
) {
130 this.conversation
= conversation
;
138 public String
getDerivateText(Object element
){
139 TreeNode parentNode
= null;
140 if(element
instanceof TreeNode
){
141 parentNode
= ((TreeNode
) element
).getParent();
142 //unwrap specimen from TreeNode
143 element
= ((TreeNode
) element
).getValue();
149 if(element
instanceof FieldUnit
){
150 FieldUnit fieldUnit
= (FieldUnit
)element
;
151 if(fieldUnit
.getGatheringEvent()!=null){
152 GatheringEvent gatheringEvent
= fieldUnit
.getGatheringEvent();
153 if(!conversation
.getSession().contains(gatheringEvent
)){
154 fieldUnit
= (FieldUnit
) CdmStore
.getService(IOccurrenceService
.class).load(fieldUnit
.getUuid());
155 gatheringEvent
= fieldUnit
.getGatheringEvent();
157 label
+= gatheringEvent
.getCountry()!=null?gatheringEvent
.getCountry().getLabel()+", ":"";
158 label
+= gatheringEvent
.getLocality()!=null?gatheringEvent
.getLocality().getText()+", ":"";
159 label
+= gatheringEvent
.getGatheringDate()!=null?gatheringEvent
.getGatheringDate()+", ":"";
160 label
+= gatheringEvent
.getCollector()!=null?gatheringEvent
.getCollector()+", ":"";
162 label
+= fieldUnit
.getFieldNumber()!=null?fieldUnit
.getFieldNumber():"";
164 else if(element
instanceof MediaSpecimen
){
165 MediaSpecimen mediaSpecimen
= (MediaSpecimen
)element
;
166 if(mediaSpecimen
.getMediaSpecimen()!=null){
167 label
+= mediaSpecimen
.getMediaSpecimen().getTitle()!=null?mediaSpecimen
.getMediaSpecimen().getTitle().getText()+", ":"[no motif]";
168 label
+= mediaSpecimen
.getMediaSpecimen().getArtist()!=null?mediaSpecimen
.getMediaSpecimen().getArtist()+", ":"";
170 eu
.etaxonomy
.cdm
.model
.occurrence
.Collection collection
= mediaSpecimen
.getCollection();
171 if(collection
!=null){
172 label
+= collection
.getName()!=null?collection
.getName()+" ":"";
173 label
+= collection
.getCode()!=null?
"("+collection
.getCode()+"), ":"";
175 label
+= mediaSpecimen
.getAccessionNumber()!=null?mediaSpecimen
.getAccessionNumber()+", ":"";
177 else if(element
instanceof DnaSample
178 || (element
instanceof DerivedUnit
179 && ((SpecimenOrObservationBase
<?
>) element
).getRecordBasis()==SpecimenOrObservationType
.DnaSample
)){
180 DerivedUnit derivedUnit
= (DerivedUnit
)element
;
181 Set
<String
> identifiers
= derivedUnit
.getIdentifiers(getSampleDesignationTerm());
182 if(identifiers
.isEmpty()){
183 label
+= "[no sample designation]";
186 String identifier
= identifiers
.iterator().next();
187 label
+= identifier
==null?
"":identifier
;
191 else if(element
instanceof DerivedUnit
){
192 DerivedUnit derivedUnit
= (DerivedUnit
)element
;
193 if(derivedUnit
.getRecordBasis()==SpecimenOrObservationType
.PreservedSpecimen
){
194 java
.util
.Collection
<FieldUnit
> fieldUnits
= CdmStore
.getService(IOccurrenceService
.class).getFieldUnits(derivedUnit
.getUuid());
195 if(fieldUnits
!=null && !fieldUnits
.isEmpty()){
196 FieldUnit fieldUnit
= fieldUnits
.iterator().next();
197 GatheringEvent gatheringEvent
= fieldUnit
.getGatheringEvent();
198 // gatheringEvent = HibernateProxyHelper.deproxy(gatheringEvent, GatheringEvent.class);
199 if(gatheringEvent
!=null){
200 label
+= gatheringEvent
.getCollector()!=null?gatheringEvent
.getCollector()+", ":"";
202 label
+= fieldUnit
.getFieldNumber()!=null?fieldUnit
.getFieldNumber()+", ":"";
204 eu
.etaxonomy
.cdm
.model
.occurrence
.Collection collection
= derivedUnit
.getCollection();
205 if(collection
!=null){
206 label
+= collection
.getName()!=null?collection
.getName()+" ":"";
207 label
+= collection
.getCode()!=null?
"("+collection
.getCode()+"), ":"";
209 label
+= derivedUnit
.getAccessionNumber()!=null?derivedUnit
.getAccessionNumber()+", ":"";
210 label
+= derivedUnit
.getBarcode()!=null?derivedUnit
.getBarcode():"";
212 else if(derivedUnit
.getRecordBasis()==SpecimenOrObservationType
.TissueSample
){
214 label
+= "kindofTissue? + [no sample designation]";
217 else if(element
instanceof Sequence
){
218 Sequence sequence
= (Sequence
)element
;
219 label
+= "[no sample designation]"+", ";
220 label
+= sequence
.getDnaMarker()!=null?sequence
.getDnaMarker():"";
222 else if(element
instanceof SingleRead
){
223 SingleRead singleRead
= (SingleRead
)element
;
224 label
+= "[no sample designation]"+", ";
225 label
+= singleRead
.getPrimer()!=null?singleRead
.getPrimer().getLabel()+", ":"";
226 if(parentNode
!=null && parentNode
.getValue() instanceof Sequence
){
227 Sequence sequence
= (Sequence
) parentNode
.getValue();
228 label
+= sequence
.getDnaMarker()!=null?sequence
.getDnaMarker():"";
231 else if(element
instanceof SpecimenOrObservationBase
){
232 SpecimenOrObservationBase
<?
> derivate
= (SpecimenOrObservationBase
<?
>) element
;
233 SpecimenOrObservationType type
= derivate
.getRecordBasis();
234 return derivate
.getTitleCache() + (type
!=null?
" ["+type
.toString()+"]":"");
237 label
= element
.toString();
240 else if(label
.endsWith(", ")){
241 label
= label
.substring(0, label
.length()-2);
247 * @see org.eclipse.jface.viewers.ColumnLabelProvider#getImage(java.lang.Object)
250 public Image
getImage(Object element
) {
251 if(element
instanceof TreeNode
){
252 element
= ((TreeNode
) element
).getValue();
254 if(element
instanceof FieldUnit
){
255 return ImageResources
.getImage(ImageResources
.FIELD_UNIT
);
257 else if(element
instanceof DerivedUnit
){
258 DerivedUnit derivedUnit
= (DerivedUnit
)element
;
259 if(derivedUnit
.getRecordBasis()==SpecimenOrObservationType
.FieldUnit
){
260 return ImageResources
.getImage(ImageResources
.FIELD_UNIT
);
262 else if(derivedUnit
.getRecordBasis()==SpecimenOrObservationType
.DnaSample
){
263 return ImageResources
.getImage(ImageResources
.DNA_SAMPLE_DERIVATE
);
265 else if(derivedUnit
.getRecordBasis()==SpecimenOrObservationType
.TissueSample
){
266 return ImageResources
.getImage(ImageResources
.TISSUE_SAMPLE_DERIVATE
);
268 else if(derivedUnit
.getRecordBasis()==SpecimenOrObservationType
.PreservedSpecimen
){
269 return ImageResources
.getImage(ImageResources
.SPECIMEN_DERIVATE
);
271 else if(derivedUnit
.getRecordBasis()==SpecimenOrObservationType
.Media
){
272 if(derivedUnit
.getKindOfUnit()!=null){
273 if(derivedUnit
.getKindOfUnit().equals(getArtworkTerm())){
274 return ImageResources
.getImage(ImageResources
.ARTWORK_DERIVATE
);
276 else if(derivedUnit
.getKindOfUnit().equals(getLivingPlantPhotoTerm())){
277 return ImageResources
.getImage(ImageResources
.LIVING_PLANT_PHOTO_DERIVATE
);
279 else if(derivedUnit
.getKindOfUnit().equals(getSpecimenScanTerm())){
280 return ImageResources
.getImage(ImageResources
.SPECIMEN_SCAN_DERIVATE
);
282 else if(derivedUnit
.getKindOfUnit().equals(getDetailImageTerm())){
283 return ImageResources
.getImage(ImageResources
.DETAIL_IMAGE_DERIVATE
);
288 else if(element
instanceof Sequence
){
289 return ImageResources
.getImage(ImageResources
.SEQUENCE_DERIVATE
);
292 else if(element
instanceof SingleRead
){
293 if(multiLinkSingleReads
.contains(element
)){
294 return ImageResources
.getImage(ImageResources
.SINGLE_READ_DERIVATE_MULTILINK
);
297 return ImageResources
.getImage(ImageResources
.SINGLE_READ_DERIVATE
);
300 return super.getImage(element
);
304 * @param multiLinkSingleReads2
306 public void setMultiLinkSingleReads(Set
<SingleRead
> multiLinkSingleReads
) {
307 this.multiLinkSingleReads
= multiLinkSingleReads
;