1 package eu
.etaxonomy
.taxeditor
.editor
.view
.checklist
.edit
;
3 import java
.util
.Arrays
;
6 import java
.util
.SortedSet
;
8 import org
.apache
.log4j
.Logger
;
9 import org
.eclipse
.jface
.viewers
.ArrayContentProvider
;
10 import org
.eclipse
.jface
.viewers
.CellEditor
;
11 import org
.eclipse
.jface
.viewers
.ComboBoxViewerCellEditor
;
12 import org
.eclipse
.jface
.viewers
.EditingSupport
;
13 import org
.eclipse
.jface
.viewers
.LabelProvider
;
14 import org
.eclipse
.jface
.viewers
.TableViewer
;
15 import org
.eclipse
.swt
.SWT
;
16 import org
.eclipse
.swt
.widgets
.Composite
;
17 import org
.eclipse
.swt
.widgets
.TableColumn
;
19 import eu
.etaxonomy
.cdm
.api
.service
.IDescriptionService
;
20 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTermBase
;
21 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionElementBase
;
22 import eu
.etaxonomy
.cdm
.model
.description
.Distribution
;
23 import eu
.etaxonomy
.cdm
.model
.description
.PresenceAbsenceTermBase
;
24 import eu
.etaxonomy
.cdm
.model
.description
.TaxonDescription
;
25 import eu
.etaxonomy
.cdm
.model
.location
.NamedArea
;
26 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
27 import eu
.etaxonomy
.taxeditor
.editor
.view
.checklist
.ChecklistEditor
;
28 import eu
.etaxonomy
.taxeditor
.editor
.view
.checklist
.ChecklistLabelProvider
;
29 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
31 public final class DistributionEditingSupport
extends EditingSupport
{
33 private ComboBoxViewerCellEditor cellEditor
= null;
34 private final TableViewer viewer
;
35 private final ChecklistEditor editor
;
36 private final IDescriptionService descriptionService
;
37 private final int columnIndex
;
39 private static final Logger logger
= Logger
.getLogger(DistributionEditingSupport
.class);
41 public DistributionEditingSupport(TableViewer viewer
, ChecklistEditor checklistEditor
, int columnIndex
) {
44 this.columnIndex
= columnIndex
;
45 descriptionService
= CdmStore
.getService(IDescriptionService
.class);
46 editor
= checklistEditor
;
47 cellEditor
= new ComboBoxViewerCellEditor((Composite
) viewer
.getControl(), SWT
.READ_ONLY
);
48 cellEditor
.setLabelProvider(new LabelProvider());
49 cellEditor
.setContentProvider(new ArrayContentProvider());
51 List
<PresenceAbsenceTermBase
> input
= CdmStore
.getTermManager()
52 .getPreferredTerms(PresenceAbsenceTermBase
.class);
53 cellEditor
.setInput(input
);
57 protected CellEditor
getCellEditor(Object element
) {
62 protected boolean canEdit(Object element
) {
67 protected Object
getValue(Object element
) {
68 if (element
instanceof Taxon
) {
69 Taxon taxon
= (Taxon
) element
;
70 Distribution distributionForColumn
= getDistributionForColumn(taxon
);
71 if (distributionForColumn
!= null) {
72 distributionForColumn
.getStatus().getTitleCache();
74 // return PresenceAbsenceTerms
80 protected void setValue(Object element
, Object value
) {
81 if (element
instanceof Taxon
&& value
instanceof PresenceAbsenceTermBase
) {
82 Taxon taxon
= (Taxon
) element
;
83 PresenceAbsenceTermBase occurenceStatus
= (PresenceAbsenceTermBase
) value
;
84 Distribution distribution
= getDistributionForColumn(taxon
);
85 if (distribution
!= null) {
86 // change status for already exsiting distribution
87 distribution
.setStatus(occurenceStatus
);
89 createDistributionForColumn(taxon
, occurenceStatus
);
91 // viewer.update(distribution, null);
92 viewer
.update(element
, null);
94 editor
.setDirty(true);
95 editor
.changed(element
);
100 private static final List
<String
> DESC_INIT_STRATEGY
= Arrays
.asList(new String
[] { "descriptions",
101 "descriptions.*", "description.state" });
108 private Distribution
getDistributionForColumn(Taxon taxon
) {
109 List
<TaxonDescription
> listTaxonDescriptions
= descriptionService
.listTaxonDescriptions(taxon
, null, null,
110 null, null, null, DESC_INIT_STRATEGY
);
111 TableColumn column
= viewer
.getTable().getColumn(columnIndex
);
112 for (TaxonDescription td
: listTaxonDescriptions
) {
113 for (DescriptionElementBase deb
: td
.getElements()) {
114 if (deb
instanceof Distribution
) {
115 Distribution distribution
= (Distribution
) deb
;
116 if (column
.getText().equalsIgnoreCase(distribution
.getArea().getTitleCache())) {
125 private void createDistributionForColumn(Taxon taxon
, PresenceAbsenceTermBase occurenceStatus
) {
126 TableColumn column
= viewer
.getTable().getColumn(columnIndex
);
128 ChecklistLabelProvider labelProvider
= new ChecklistLabelProvider();
129 List
<DefinedTermBase
<?
>> namedAreas
= labelProvider
.getNamedAreas();
130 SortedSet
<DefinedTermBase
<?
>> terms
= (SortedSet
<DefinedTermBase
<?
>>) labelProvider
.getTermsOrderedByLabels(
131 namedAreas
, CdmStore
.getDefaultLanguage());
134 for (DefinedTermBase term
: terms
) {
135 if (column
.getText().equalsIgnoreCase(term
.getTitleCache())) {
136 NamedArea area
= (NamedArea
) term
;
137 Distribution distribution
= Distribution
.NewInstance(area
, occurenceStatus
);
138 Set
<TaxonDescription
> descriptions
= taxon
.getDescriptions();
139 if (descriptions
!= null) {
140 for (TaxonDescription desc
: descriptions
) {
141 // add to first taxon description
142 desc
.addElement(distribution
);
145 } else {// there are no TaxonDescription yet.
146 TaxonDescription td
= TaxonDescription
.NewInstance(taxon
);
147 td
.addElement(distribution
);