2 * Copyright (C) 2019 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.taxeditor
.view
.search
.facet
.term
;
11 import java
.io
.InputStream
;
12 import java
.util
.Collection
;
13 import java
.util
.HashSet
;
14 import java
.util
.UUID
;
15 import java
.util
.stream
.Collectors
;
17 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
18 import org
.eclipse
.core
.runtime
.IStatus
;
19 import org
.eclipse
.core
.runtime
.Status
;
20 import org
.eclipse
.core
.runtime
.jobs
.Job
;
21 import org
.eclipse
.jface
.layout
.GridDataFactory
;
22 import org
.eclipse
.jface
.resource
.JFaceResources
;
23 import org
.eclipse
.swt
.SWT
;
24 import org
.eclipse
.swt
.events
.ControlAdapter
;
25 import org
.eclipse
.swt
.events
.ControlEvent
;
26 import org
.eclipse
.swt
.events
.PaintEvent
;
27 import org
.eclipse
.swt
.events
.PaintListener
;
28 import org
.eclipse
.swt
.graphics
.Image
;
29 import org
.eclipse
.swt
.layout
.FillLayout
;
30 import org
.eclipse
.swt
.layout
.GridData
;
31 import org
.eclipse
.swt
.layout
.GridLayout
;
32 import org
.eclipse
.swt
.widgets
.Composite
;
33 import org
.eclipse
.swt
.widgets
.Display
;
34 import org
.eclipse
.swt
.widgets
.Label
;
36 import eu
.etaxonomy
.cdm
.api
.service
.IMediaService
;
37 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
38 import eu
.etaxonomy
.cdm
.common
.URI
;
39 import eu
.etaxonomy
.cdm
.common
.UriUtils
;
40 import eu
.etaxonomy
.cdm
.model
.media
.Media
;
41 import eu
.etaxonomy
.cdm
.model
.media
.MediaUtils
;
42 import eu
.etaxonomy
.cdm
.persistence
.dto
.AbstractTermDto
;
43 import eu
.etaxonomy
.cdm
.persistence
.dto
.TermDto
;
44 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
45 import eu
.etaxonomy
.taxeditor
.view
.search
.facet
.CheckBoxSearchResultComposite
;
51 public class TermSearchResultComposite
extends CheckBoxSearchResultComposite
<AbstractTermDto
, TermSearchResult
> {
53 private Collection
<Image
> imageBuffer
;
57 public TermSearchResultComposite(TermSearchResult result
, Composite parent
, int style
) {
58 super(result
, parent
, style
);
63 public void dispose() {
64 for (Image image
: imageBuffer
) {
73 public Composite
createContent(Composite parent
) {
74 Composite content
= new Composite(this, SWT
.NONE
);
75 content
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, false, false, 1, 1));
76 GridLayout layout
= new GridLayout(1, false);
77 content
.setLayout(layout
);
78 Label label
= new Label(content
, SWT
.WRAP
);
79 label
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, false, false, 1, 1));
80 label
.setText(result
.getContent().getRepresentation_L10n());
81 label
.setFont(JFaceResources
.getFontRegistry().getBold(JFaceResources
.DEFAULT_FONT
));
82 GridDataFactory
.fillDefaults().applyTo(label
);
85 String facetText
= result
.getFacets().stream()
86 .map(facet
-> (facet
.getFacet() != null ? facet
.getFacet() : "")
87 + (facet
.getCategory() != null ?
" (" + facet
.getCategory() + ")" : ""))
88 .collect(Collectors
.joining(","));
89 if (CdmUtils
.isNotBlank(facetText
)) {
90 Label labelFacets
= new Label(content
, SWT
.WRAP
);
91 labelFacets
.setText(facetText
);
92 labelFacets
.setFont(JFaceResources
.getFontRegistry().getItalic(JFaceResources
.DEFAULT_FONT
));
95 String representation_L10n_text
= result
.getContent().getRepresentation_L10n_text();
96 if(representation_L10n_text
!=null){
97 Label lblDescription
= new Label(content
, SWT
.WRAP
);
98 GridData layoutData
= new GridData();
99 lblDescription
.setLayoutData(layoutData
);
100 parent
.addControlListener(new ControlAdapter() {
102 public void controlResized(ControlEvent e
) {
103 layoutData
.widthHint
= parent
.getClientArea().width
- (6*layout
.marginWidth
);
107 lblDescription
.setText(representation_L10n_text
);
110 if (result
.getContent() instanceof TermDto
){
111 Collection
<UUID
> mediaUuids
= ((TermDto
)result
.getContent()).getMedia();
112 if(mediaUuids
!=null){
113 if(imageBuffer
==null){
114 imageBuffer
= new HashSet
<>();
116 new Job("Load term media") {
118 protected IStatus
run(IProgressMonitor monitor
) {
119 Collection
<URI
> mediaUris
= new HashSet
<>();
120 for (UUID uuid
: mediaUuids
) {
121 Media media
= CdmStore
.getService(IMediaService
.class).load(uuid
);
125 URI uri
= MediaUtils
.getFirstMediaRepresentationPart(media
).getUri();
128 TermSearchResultComposite
.this.getDisplay().asyncExec(()->
130 for (URI uri
: mediaUris
) {
132 InputStream imageStream
= UriUtils
.getInputStream(uri
);
133 imageBuffer
.add(new Image(Display
.getCurrent(), imageStream
));
134 } catch (Exception e1
) {
138 Composite mediaContainer
= new Composite(content
, SWT
.NONE
);
139 mediaContainer
.setLayout(new FillLayout());
140 for (Image image
: imageBuffer
) {
141 Composite composite
= new Composite(mediaContainer
, SWT
.NONE
);
142 composite
.addPaintListener(new PaintListener() {
144 public void paintControl(PaintEvent e
) {
146 e
.gc
.setAntialias(SWT
.ON
);
147 e
.gc
.setInterpolation(SWT
.HIGH
);
148 e
.gc
.drawImage(image
, 0, 0,image
.getBounds().width
, image
.getBounds().height
,0, 0, 40, 40);
155 TermSearchResultComposite
.this.getParent().layout();
157 return Status
.OK_STATUS
;