Project

General

Profile

Download (8.17 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 *
3
 */
4
package eu.etaxonomy.taxeditor.ui.dialog.selection;
5

    
6
import java.util.Collections;
7
import java.util.Comparator;
8
import java.util.List;
9
import java.util.UUID;
10

    
11
import org.eclipse.jface.viewers.ILabelProvider;
12
import org.eclipse.swt.SWT;
13
import org.eclipse.swt.events.SelectionAdapter;
14
import org.eclipse.swt.events.SelectionEvent;
15
import org.eclipse.swt.events.SelectionListener;
16
import org.eclipse.swt.layout.GridData;
17
import org.eclipse.swt.layout.GridLayout;
18
import org.eclipse.swt.widgets.Combo;
19
import org.eclipse.swt.widgets.Composite;
20
import org.eclipse.swt.widgets.Control;
21
import org.eclipse.swt.widgets.Label;
22
import org.eclipse.swt.widgets.Shell;
23

    
24
import eu.etaxonomy.cdm.api.service.IClassificationService;
25
import eu.etaxonomy.cdm.model.taxon.Classification;
26
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
27
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
28
import eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard;
29
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
30
import eu.etaxonomy.taxeditor.store.CdmStore;
31

    
32
/**
33
 * @author p.ciardelli
34
 * @version $Id: $
35
 */
36
public class TaxonNodeSelectionDialog extends AbstractFilteredCdmResourceSelectionDialog<TaxonNode> implements SelectionListener{
37

    
38
	public static TaxonNode select(Shell shell, //ConversationHolder conversation,
39
	        String title, List<UUID> excludeTaxa, TaxonNode node, UUID classificationUUID, boolean allowSelectClassification) {
40
		TaxonNodeSelectionDialog dialog = new TaxonNodeSelectionDialog(shell,
41
				//conversation,
42
				title,
43
				excludeTaxa,
44
				false,
45
				node,
46
				classificationUUID, allowSelectClassification);
47
		return getSelectionFromDialog(dialog);
48
	}
49
	public static TaxonNode select(Shell shell, //ConversationHolder conversation,
50
            String title, List<UUID> excludeTaxa, TaxonNode node, UUID classificationUUID) {
51
        TaxonNodeSelectionDialog dialog = new TaxonNodeSelectionDialog(shell,
52
                //conversation,
53
                title,
54
                excludeTaxa,
55
                false,
56
                node,
57
                classificationUUID);
58
        return getSelectionFromDialog(dialog);
59
    }
60

    
61
	public static UuidAndTitleCache<TaxonNode> selectUuidAndTitleCache(Shell shell, //ConversationHolder conversation,
62
            String title, List<UUID> excludeTaxa, TaxonNode node, UUID classificationUUID) {
63
        TaxonNodeSelectionDialog dialog = new TaxonNodeSelectionDialog(shell,
64
                //conversation,
65
                title,
66
                excludeTaxa,
67
                false,
68
                node,
69
                classificationUUID, false);
70
        return getUuidAndTitleCacheSelectionFromDialog(dialog);
71
    }
72

    
73
	private Combo classificationSelectionCombo;
74

    
75
	private List<Classification> classifications;
76

    
77
	private Classification selectedClassification;
78
	private UUID selectedUuid;
79
	private final List<UUID> excludeTaxa;
80
	private boolean allowClassificationSelection = false;
81

    
82
	protected TaxonNodeSelectionDialog(Shell shell, //ConversationHolder conversation,
83
	        String title, List<UUID> excludeTaxa, boolean multi, TaxonNode node, UUID classificationUUID, boolean allowSelectClassification) {
84
		super(shell, //conversation,
85
		        title, multi, TaxonNodeSelectionDialog.class.getCanonicalName(), node);
86

    
87
		ILabelProvider labelProvider = new FilteredCdmResourceLabelProvider();
88

    
89
		setListLabelProvider(labelProvider);
90
//		setDetailsLabelProvider(labelProvider);
91
		this.excludeTaxa = excludeTaxa;
92
		if(classificationUUID != null){
93
            selectedUuid = classificationUUID;
94
        }
95

    
96
		fillClassifications();
97
		this.allowClassificationSelection = allowSelectClassification;
98

    
99
		createClassificationSelectionCombo(shell);
100
	}
101
	protected TaxonNodeSelectionDialog(Shell shell, //ConversationHolder conversation,
102
            String title, List<UUID> excludeTaxa, boolean multi, TaxonNode node, UUID classificationUUID) {
103
	    this(shell, title, excludeTaxa, multi, node, classificationUUID, false);
104
	}
105

    
106
	/** {@inheritDoc} */
107
	@Override
108
	protected Control createDialogArea(Composite parent) {
109
	    Composite container = (Composite) super.createDialogArea(parent);
110
		return createClassificationSelectionCombo(container);
111
	}
112

    
113
	/*
114
	 * currently disabled tree selection composite
115
	 */
116
	private Control createClassificationSelectionCombo(Composite parent){
117
//		classifications = CdmStore.getTaxonTreeService().list(null, null, null, null, null);
118

    
119
		Composite classificationSelection = new Composite(parent, SWT.NULL);
120
		classificationSelection.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
121

    
122
		GridLayout layout = new GridLayout();
123
		classificationSelection.setLayout(layout);
124

    
125
		Label label = new Label(classificationSelection, SWT.NULL);
126
		// TODO not working is not really true but leave it here to remind everyone that this is under construction
127
		label.setText("Select Classification");
128
		classificationSelectionCombo = new Combo(classificationSelection, SWT.BORDER | SWT.READ_ONLY);
129
		classificationSelectionCombo.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));
130

    
131
		for(Classification tree : classifications){
132
			classificationSelectionCombo.add(tree.getName().getText(), classifications.indexOf(tree));
133
			if (tree.getUuid().equals(selectedUuid)){
134
			    selectedClassification = tree;
135
			}
136

    
137
		}
138

    
139
		classificationSelectionCombo.select(classifications.indexOf(selectedClassification));
140

    
141
		// TODO remember last selection
142
		classificationSelectionCombo.addSelectionListener(this);
143

    
144

    
145

    
146
		return classificationSelection;
147
	}
148

    
149
	/** {@inheritDoc} */
150
	@Override
151
	protected String getTitle(TaxonNode taxonNode) {
152
		if(taxonNode != null && taxonNode.getTaxon() != null){
153
			return taxonNode.getTaxon().getTitleCache();
154
		}
155

    
156
		return "";
157
	}
158

    
159
	@Override
160
    protected SelectionListener getNewWizardButtonSelectionListener(){
161
        return new SelectionAdapter() {
162

    
163
            @Override
164
            public void widgetSelected(SelectionEvent e) {
165
                Classification tree = selectedClassification;
166
                setPattern(tree.getRootNode());
167

    
168
            }
169
        };
170
    }
171

    
172

    
173
	/** {@inheritDoc} */
174
	@Override
175
	protected TaxonNode getPersistentObject(UUID uuid) {
176
		return CdmStore.getService(IClassificationService.class).getTaxonNodeByUuid(uuid);
177
	}
178

    
179
	/** {@inheritDoc} */
180
	@Override
181
	protected void callService(String pattern) {
182
	    model = CdmStore.getService(IClassificationService.class).getTaxonNodeUuidAndTitleCacheOfAcceptedTaxaByClassification(selectedClassification.getUuid(), limitOfInitialElements, pattern, allowClassificationSelection);
183
	}
184
	@Override
185
	protected void sort() {
186
	    if(!PreferencesUtil.isSortTaxaByRankAndName()){
187
            Collections.sort(model, getItemsComparator());
188
        }
189
      // otherwise result is already sorted
190
    }
191

    
192
    private void fillClassifications() {
193
        if(classifications == null){
194
			classifications = CdmStore.getService(IClassificationService.class).list(null, null, null, null, null);
195
			Collections.sort(classifications, new Comparator<Classification>() {
196

    
197
                @Override
198
                public int compare(Classification o1, Classification o2) {
199
                    if (o1.equals(o2)){
200
                        return 0;
201
                    }
202
                    int result = o1.getTitleCache().compareTo(o2.getTitleCache());
203
                    if (result == 0){
204
                        return o1.getUuid().compareTo(o2.getUuid());
205
                    }
206
                    return result;
207
                }
208
            });
209
			if (selectedClassification == null){
210
			    if (this.cdmBaseToBeFiltered == null){
211
			        selectedClassification = classifications.iterator().next();
212
			    } else {
213
			        selectedClassification = this.cdmBaseToBeFiltered.getClassification();
214
			    }
215
			}
216
		}
217
    }
218

    
219
	/** {@inheritDoc} */
220
	@Override
221
	protected AbstractNewEntityWizard getNewEntityWizard(String parameter) {
222
		return null;
223
	}
224

    
225
	/** {@inheritDoc} */
226
	@Override
227
	protected String[] getNewWizardText() {
228
		return null;
229
	}
230

    
231
	/** {@inheritDoc} */
232
	@Override
233
    public void widgetSelected(SelectionEvent e) {
234
		selectedClassification = classifications.get(classificationSelectionCombo.getSelectionIndex());
235

    
236
//		refresh();
237
		if (getSearchField().getText() != null){
238
		    search();
239
		}
240
	}
241

    
242
	/** {@inheritDoc} */
243
	@Override
244
    public void widgetDefaultSelected(SelectionEvent e) {}
245

    
246

    
247
}
(37-37/41)