Project

General

Profile

« Previous | Next » 

Revision 0df7b52d

Added by Patrick Plitzner about 6 years ago

ref #7095 Show tabular info in specimen selection dialog

View differences:

eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/matrix/SpecimenSelectionDialog.java
10 10

  
11 11
import java.util.ArrayList;
12 12
import java.util.Collection;
13
import java.util.HashSet;
14 13
import java.util.List;
15
import java.util.Set;
16 14
import java.util.UUID;
15
import java.util.stream.Collectors;
17 16

  
18 17
import org.eclipse.jface.dialogs.Dialog;
19
import org.eclipse.jface.viewers.ArrayContentProvider;
18
import org.eclipse.jface.layout.GridDataFactory;
19
import org.eclipse.jface.viewers.IStructuredContentProvider;
20 20
import org.eclipse.jface.viewers.IStructuredSelection;
21
import org.eclipse.jface.viewers.ITableLabelProvider;
21 22
import org.eclipse.jface.viewers.LabelProvider;
22 23
import org.eclipse.jface.viewers.TableViewer;
24
import org.eclipse.jface.viewers.TableViewerColumn;
23 25
import org.eclipse.swt.SWT;
24 26
import org.eclipse.swt.events.SelectionAdapter;
25 27
import org.eclipse.swt.events.SelectionEvent;
28
import org.eclipse.swt.graphics.Image;
26 29
import org.eclipse.swt.layout.GridData;
27 30
import org.eclipse.swt.layout.GridLayout;
28 31
import org.eclipse.swt.widgets.Button;
......
38 41
import eu.etaxonomy.cdm.filter.TaxonNodeFilter;
39 42
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
40 43
import eu.etaxonomy.cdm.model.taxon.Taxon;
44
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
41 45
import eu.etaxonomy.taxeditor.editor.l10n.Messages;
42 46
import eu.etaxonomy.taxeditor.model.ImageResources;
43 47
import eu.etaxonomy.taxeditor.store.CdmStore;
......
80 84

  
81 85
        comboTaxon = new TaxonNodeCombo(composite_1, SWT.NONE);
82 86
        comboTaxon.setInput(matrix.getWorkingSet().getTaxonSubtreeFilter());
87
        comboTaxon.addSelectionChangedListener(e->
88
        list.setInput(
89
                matrix.getSpecimenCache()
90
                .stream()
91
                .filter(wrapper->wrapper.getTaxonNode().equals(comboTaxon.getSelection()))
92
                .collect(Collectors.toList()))
93
        );
83 94

  
84 95
        Button btnRefreshButton = new Button(composite_1, SWT.NONE);
85 96
        btnRefreshButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
......
92 103
                list.setInput(matrix.getSpecimenCache());
93 104
            }
94 105
        });
95
        list = new TableViewer(composite);
106
        //table
107
        list = new TableViewer(composite, SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
96 108
        Table table = list.getTable();
97
        table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
98
        list.setContentProvider(new DescriptionContentProvider());
99
        list.setLabelProvider(new LabelProvider());
100

  
101
        //gather descriptions
109
        table.setLayoutData(GridDataFactory.fillDefaults().create());
110
        //table columns
111
        TableViewerColumn columnTaxon = new TableViewerColumn(list, SWT.NONE);
112
        columnTaxon.getColumn().setText("Taxon");
113
        columnTaxon.getColumn().setWidth(200);
114
        columnTaxon.getColumn().setResizable(true);
115
        columnTaxon.getColumn().setMoveable(true);
116
        TableViewerColumn columnSpecimen = new TableViewerColumn(list, SWT.NONE);
117
        columnSpecimen.getColumn().setText("Specimen");
118
        columnSpecimen.getColumn().setWidth(200);
119
        columnSpecimen.getColumn().setResizable(true);
120
        columnSpecimen.getColumn().setMoveable(true);
121
        table.setHeaderVisible(true);
122
        table.setLinesVisible(true);
123
        list.setContentProvider(new SpecimenListContentProvider());
124
        list.setLabelProvider(new SpecimenListLabelProvider());
125

  
126
        //gather specimens
102 127
        if(matrix.getSpecimenCache()==null){
103 128
            loadSpecimens();
104 129
        }
......
107 132
    }
108 133

  
109 134
    private void loadSpecimens(){
110
        Set<SpecimenOrObservationBase> specimens = new HashSet<>();
135
        List<SpecimenWrapper> specimenCache = new ArrayList<>();
111 136
        //set filter parameters
112 137
        TaxonNodeFilter filter = TaxonNodeFilter.NewRankInstance(matrix.getWorkingSet().getMinRank(), matrix.getWorkingSet().getMaxRank());
113 138
        matrix.getWorkingSet().getGeoFilter().forEach(area -> filter.orArea(area.getUuid()));
......
119 144
        for (UUID uuid : filteredNodes) {
120 145
            //TODO implement occurrence service for taxon nodes
121 146
            // let it return UuidAndTitleCache
122
            Taxon taxon = taxonNodeService.load(uuid).getTaxon();
147
            TaxonNode taxonNode = taxonNodeService.load(uuid);
148
            Taxon taxon = taxonNode.getTaxon();
123 149
            if(taxon!=null){
124 150
                FindOccurrencesConfigurator config = new FindOccurrencesConfigurator();
125 151
                config.setAssociatedTaxonUuid(taxon.getUuid());
126
                specimens.addAll(CdmStore.getService(IOccurrenceService.class).findByTitle(config).getRecords());
152
                List<SpecimenOrObservationBase> specimensForTaxon = CdmStore.getService(IOccurrenceService.class).findByTitle(config).getRecords();
153
                specimensForTaxon.forEach(specimen->specimenCache.add(new SpecimenWrapper(specimen, taxonNode, specimen.getTitleCache())));
127 154
            }
128 155
        }
129
        matrix.setSpecimenCache(specimens);
156
        matrix.setSpecimenCache(specimenCache);
130 157
    }
131 158

  
132 159
    @Override
......
136 163
        newShell.setMinimumSize(500, 400);
137 164
    }
138 165

  
139
    /**
140
     * {@inheritDoc}
141
     */
142 166
    @Override
143 167
    protected void okPressed() {
144
        selectedSpecimens = ((IStructuredSelection)list.getSelection()).toList();
168
        selectedSpecimens.clear();
169
        List<SpecimenWrapper> wrappers = ((IStructuredSelection)list.getSelection()).toList();
170
        wrappers.forEach(element->selectedSpecimens.add(element.getSpecimen()));
145 171
        super.okPressed();
146 172
    }
147 173

  
174
    @Override
175
    protected boolean isResizable() {
176
        return true;
177
    }
178

  
148 179
    public Collection<SpecimenOrObservationBase> getSpecimen(){
149 180
        return selectedSpecimens;
150 181
    }
151 182

  
152
    private class DescriptionContentProvider extends ArrayContentProvider{
153

  
154
        /**
155
         * {@inheritDoc}
156
         */
183
    private class SpecimenListContentProvider implements IStructuredContentProvider{
157 184
        @Override
158 185
        public Object[] getElements(Object inputElement) {
159
            return ((Collection<SpecimenOrObservationBase>) inputElement).stream().filter(specimen ->
160
                specimen.getDescriptions().stream().noneMatch(description ->
186
            return ((List<SpecimenWrapper>) inputElement).stream().filter(wrapper ->
187
                wrapper.getSpecimen().getDescriptions().stream().noneMatch(description ->
161 188
                matrix.getWorkingSet().getDescriptions().contains(description))).toArray();
162 189
        }
163 190
    }
191

  
192
    private class SpecimenListLabelProvider extends LabelProvider implements ITableLabelProvider{
193

  
194
        @Override
195
        public Image getColumnImage(Object element, int columnIndex) {
196
            return null;
197
        }
198

  
199
        @Override
200
        public String getColumnText(Object element, int columnIndex) {
201
            if(element instanceof SpecimenWrapper){
202
                SpecimenWrapper wrapper = (SpecimenWrapper)element;
203
                switch (columnIndex) {
204
                case 0:
205
                    return wrapper.getTaxonNode().getTaxon().getName().getTitleCache();
206
                case 1:
207
                    return wrapper.getSpecimen().getTitleCache();
208
                default:
209
                    break;
210
                }
211
            }
212
            return "";
213
        }
214
    }
164 215
}

Also available in: Unified diff