Project

General

Profile

Download (6.79 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.SelectionEvent;
14
import org.eclipse.swt.events.SelectionListener;
15
import org.eclipse.swt.layout.GridData;
16
import org.eclipse.swt.layout.GridLayout;
17
import org.eclipse.swt.widgets.Combo;
18
import org.eclipse.swt.widgets.Composite;
19
import org.eclipse.swt.widgets.Control;
20
import org.eclipse.swt.widgets.Label;
21
import org.eclipse.swt.widgets.Shell;
22

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

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

    
37
	public static TaxonNode select(Shell shell, //ConversationHolder conversation,
38
	        String title, List<UUID> excludeTaxa, TaxonNode node, UUID classificationUUID) {
39
		TaxonNodeSelectionDialog dialog = new TaxonNodeSelectionDialog(shell,
40
				//conversation,
41
				title,
42
				excludeTaxa,
43
				false,
44
				node,
45
				classificationUUID);
46
		return getSelectionFromDialog(dialog);
47
	}
48

    
49
	public static UuidAndTitleCache<TaxonNode> selectUuidAndTitleCache(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 getUuidAndTitleCacheSelectionFromDialog(dialog);
59
    }
60

    
61
	private Combo classificationSelectionCombo;
62

    
63
	private List<Classification> classifications;
64

    
65
	private Classification selectedClassification;
66
	private UUID selectedUuid;
67
	private final List<UUID> excludeTaxa;
68

    
69
	protected TaxonNodeSelectionDialog(Shell shell, //ConversationHolder conversation,
70
	        String title, List<UUID> excludeTaxa, boolean multi, TaxonNode node, UUID classificationUUID) {
71
		super(shell, //conversation,
72
		        title, multi, TaxonNodeSelectionDialog.class.getCanonicalName(), node);
73

    
74
		ILabelProvider labelProvider = new FilteredCdmResourceLabelProvider();
75

    
76
		setListLabelProvider(labelProvider);
77
//		setDetailsLabelProvider(labelProvider);
78
		this.excludeTaxa = excludeTaxa;
79
		if(classificationUUID != null){
80
            selectedUuid = classificationUUID;
81
        }
82

    
83
		fillClassifications();
84

    
85
		createClassificationSelectionCombo(shell);
86
	}
87

    
88
	/** {@inheritDoc} */
89
	@Override
90
	protected Control createDialogArea(Composite parent) {
91
	    Composite container = (Composite) super.createDialogArea(parent);
92
		return createClassificationSelectionCombo(container);
93
	}
94

    
95
	/*
96
	 * currently disabled tree selection composite
97
	 */
98
	private Control createClassificationSelectionCombo(Composite parent){
99
//		classifications = CdmStore.getTaxonTreeService().list(null, null, null, null, null);
100

    
101
		Composite classificationSelection = new Composite(parent, SWT.NULL);
102
		classificationSelection.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
103

    
104
		GridLayout layout = new GridLayout();
105
		classificationSelection.setLayout(layout);
106

    
107
		Label label = new Label(classificationSelection, SWT.NULL);
108
		// TODO not working is not really true but leave it here to remind everyone that this is under construction
109
		label.setText("Select Classification");
110
		classificationSelectionCombo = new Combo(classificationSelection, SWT.BORDER | SWT.READ_ONLY);
111
		classificationSelectionCombo.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));
112

    
113
		for(Classification tree : classifications){
114
			classificationSelectionCombo.add(tree.getName().getText(), classifications.indexOf(tree));
115
			if (tree.getUuid().equals(selectedUuid)){
116
			    selectedClassification = tree;
117
			}
118

    
119
		}
120

    
121
		classificationSelectionCombo.select(classifications.indexOf(selectedClassification));
122

    
123
		// TODO remember last selection
124
		classificationSelectionCombo.addSelectionListener(this);
125

    
126

    
127

    
128
		return classificationSelection;
129
	}
130

    
131
	/** {@inheritDoc} */
132
	@Override
133
	protected String getTitle(TaxonNode taxonNode) {
134
		if(taxonNode != null && taxonNode.getTaxon() != null){
135
			return taxonNode.getTaxon().getTitleCache();
136
		}
137

    
138
		return "";
139
	}
140

    
141
	/** {@inheritDoc} */
142
	@Override
143
	protected TaxonNode getPersistentObject(UUID uuid) {
144
		return CdmStore.getService(IClassificationService.class).getTaxonNodeByUuid(uuid);
145
	}
146

    
147
	/** {@inheritDoc} */
148
	@Override
149
	protected void callService(String pattern) {
150
	    model = CdmStore.getService(IClassificationService.class).getTaxonNodeUuidAndTitleCacheOfAcceptedTaxaByClassification(selectedUuid, limitOfInitialElements, pattern);
151
	}
152
	@Override
153
	protected void sort() {
154
	    if(!PreferencesUtil.isSortTaxaByRankAndName()){
155
            Collections.sort(model, getItemsComparator());
156
        }
157
      // otherwise result is already sorted
158
    }
159

    
160
    private void fillClassifications() {
161
        if(classifications == null){
162
			classifications = CdmStore.getService(IClassificationService.class).list(null, null, null, null, null);
163
			Collections.sort(classifications, new Comparator<Classification>() {
164

    
165
                @Override
166
                public int compare(Classification o1, Classification o2) {
167
                    if (o1.equals(o2)){
168
                        return 0;
169
                    }
170
                    int result = o1.getTitleCache().compareTo(o2.getTitleCache());
171
                    if (result == 0){
172
                        return o1.getUuid().compareTo(o2.getUuid());
173
                    }
174
                    return result;
175
                }
176
            });
177
			if (selectedClassification == null){
178
			    if (this.cdmBaseToBeFiltered == null){
179
			        selectedClassification = classifications.iterator().next();
180
			    } else {
181
			        selectedClassification = this.cdmBaseToBeFiltered.getClassification();
182
			    }
183
			}
184
		}
185
    }
186

    
187
	/** {@inheritDoc} */
188
	@Override
189
	protected AbstractNewEntityWizard getNewEntityWizard(String parameter) {
190
		return null;
191
	}
192

    
193
	/** {@inheritDoc} */
194
	@Override
195
	protected String[] getNewWizardText() {
196
		return null;
197
	}
198

    
199
	/** {@inheritDoc} */
200
	@Override
201
    public void widgetSelected(SelectionEvent e) {
202
		selectedClassification = classifications.get(classificationSelectionCombo.getSelectionIndex());
203

    
204
//		refresh();
205
		if (getSearchField().getText() != null){
206
		    search();
207
		}
208
	}
209

    
210
	/** {@inheritDoc} */
211
	@Override
212
    public void widgetDefaultSelected(SelectionEvent e) {}
213

    
214

    
215
}
(36-36/41)