Project

General

Profile

Download (11 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
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.
8
*/
9

    
10
package eu.etaxonomy.taxeditor.ui.dialog.selection;
11

    
12
import java.util.ArrayList;
13
import java.util.HashMap;
14
import java.util.HashSet;
15
import java.util.List;
16
import java.util.Map;
17
import java.util.Set;
18
import java.util.UUID;
19

    
20
import org.apache.commons.lang.StringUtils;
21
import org.eclipse.jface.viewers.ILabelProvider;
22
import org.eclipse.swt.SWT;
23
import org.eclipse.swt.events.SelectionAdapter;
24
import org.eclipse.swt.events.SelectionEvent;
25
import org.eclipse.swt.widgets.Button;
26
import org.eclipse.swt.widgets.Composite;
27
import org.eclipse.swt.widgets.Control;
28
import org.eclipse.swt.widgets.Shell;
29
import org.eclipse.swt.widgets.Text;
30

    
31
import eu.etaxonomy.cdm.api.service.IReferenceService;
32
import eu.etaxonomy.cdm.api.service.dto.IdentifiedEntityDTO;
33
import eu.etaxonomy.cdm.api.service.dto.IdentifiedEntityDTO.AlternativeIdentifier;
34
import eu.etaxonomy.cdm.model.reference.Reference;
35
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
36
import eu.etaxonomy.cdm.persistence.query.MatchMode;
37
import eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard;
38
import eu.etaxonomy.taxeditor.newWizard.NewReferenceWizard;
39
import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
40
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
41
import eu.etaxonomy.taxeditor.store.CdmStore;
42

    
43
/**
44
 * <p>FilteredReferenceSelectionDialog class.</p>
45
 *
46
 * @author n.hoffmann
47
 * @created 04.06.2009
48
 * @version 1.0
49
 */
50
public class ReferenceSelectionDialog extends AbstractFilteredCdmResourceSelectionDialog<Reference> {
51

    
52
    protected static boolean isInReference = false;
53
    private Reference currentReference;
54
    List<String> lastSelectedReferences = null;
55
    Map<UUID, AlternativeIdentifier> identifierMap;
56

    
57
	/**
58
	 * <p>select</p>
59
	 *
60
	 * @param reference a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
61
	 * @param shell a {@link org.eclipse.swt.widgets.Shell} object.
62
	 * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
63
	 * @return a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
64
	 */
65
	public static Reference select(Shell shell, //ConversationHolder conversation,
66
	        Reference reference, boolean isInReference) {
67
		ReferenceSelectionDialog dialog = new ReferenceSelectionDialog(shell, //conversation,
68
				"Choose a reference", false, reference, isInReference);
69
		return getSelectionFromDialog(dialog);
70
	}
71

    
72
	/**
73
     * <p>select</p>
74
     *
75
     * @param reference a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
76
     * @param shell a {@link org.eclipse.swt.widgets.Shell} object.
77
     * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
78
     * @return a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
79
     */
80
    public static Reference select(Shell shell, //ConversationHolder conversation,
81
            Reference reference) {
82
        ReferenceSelectionDialog dialog = new ReferenceSelectionDialog(shell, //conversation,
83
                "Choose a reference", false, reference);
84
        return getSelectionFromDialog(dialog);
85
    }
86

    
87

    
88

    
89
	/**
90
	 * <p>Constructor for FilteredReferenceSelectionDialog.</p>
91
	 *
92
	 * @param shell a {@link org.eclipse.swt.widgets.Shell} object.
93
	 * @param title a {@link java.lang.String} object.
94
	 * @param reference a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
95
	 * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
96
	 * @param multi a boolean.
97
	 */
98
	protected ReferenceSelectionDialog(Shell shell, //ConversationHolder conversation,
99
	        String title, boolean multi, Reference reference) {
100
		super(shell, //conversation,
101
		        title, multi, ReferenceSelectionDialog.class.getCanonicalName(), reference);
102
		this.currentReference = reference;
103

    
104

    
105
	}
106

    
107

    
108

    
109

    
110
	/**
111
     * <p>Constructor for FilteredReferenceSelectionDialog.</p>
112
     *
113
     * @param shell a {@link org.eclipse.swt.widgets.Shell} object.
114
     * @param title a {@link java.lang.String} object.
115
     * @param reference a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
116
     * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
117
     * @param multi a boolean.
118
     */
119
    protected ReferenceSelectionDialog(Shell shell, //ConversationHolder conversation,
120
            String title, boolean multi, Reference reference, boolean isInReference) {
121
        super(shell, //conversation,
122
                title, multi, ReferenceSelectionDialog.class.getCanonicalName(), null);
123
        this.isInReference = isInReference;
124
        this.currentReference = reference;
125

    
126
    }
127

    
128

    
129
	/* (non-Javadoc)
130
	 * @see eu.etaxonomy.taxeditor.dialogs.AbstractFilteredCdmResourceSelectionDialog#getPersistentObject(java.util.UUID)
131
	 */
132
	/** {@inheritDoc} */
133
	@Override
134
	protected Reference getPersistentObject(UUID cdmUuid) {
135
	    if (lastSelectedReferences == null){
136
	        lastSelectedReferences = new ArrayList<>();
137
	    }
138
	    if (lastSelectedReferences.size()<6){
139
	        lastSelectedReferences.add(cdmUuid.toString());
140
	    }else{
141
	        lastSelectedReferences.remove(0);
142
	        lastSelectedReferences.add(cdmUuid.toString());
143
	    }
144

    
145
	    PreferencesUtil.setLastSelectedReference(lastSelectedReferences);
146
		return CdmStore.getService(IReferenceService.class).load(cdmUuid);
147
	}
148

    
149
	/* (non-Javadoc)
150
	 * @see eu.etaxonomy.taxeditor.dialogs.AbstractFilteredCdmResourceSelectionDialog#search
151
	 */
152
	/** {@inheritDoc} */
153
	@Override
154
	protected void callService(String pattern) {
155

    
156
	    if (StringUtils.isBlank(pattern) && lastSelectedReferences == null){
157
	        lastSelectedReferences = PreferencesUtil.getLastSelectedReferences();
158
	        Set<UUID> uuids = new HashSet<>();
159
	        for (String uuidString: lastSelectedReferences){
160
	            uuids.add(UUID.fromString(uuidString));
161
	        }
162
	        if (!uuids.isEmpty()){
163
	            model = CdmStore.getService(IReferenceService.class).getUuidAndTitleCacheForUUIDS(uuids);
164
	        }
165

    
166
	    } else if (isInReference && currentReference != null){
167

    
168
            if (isUseIdentifier()){
169
                List<IdentifiedEntityDTO<Reference>> list = CdmStore.getService(IReferenceService.class).listByIdentifierAbbrev(pattern, null, MatchMode.BEGINNING, limitOfInitialElements);
170
                if (model!= null){
171
                    model.clear();
172
                }
173
                for (IdentifiedEntityDTO dto: list){
174

    
175
                    model.add(dto.getCdmEntity());
176
                }
177
            }else{
178
                model = CdmStore.getService(IReferenceService.class).getUuidAndTitleCache(limitOfInitialElements,pattern, currentReference.getType());
179
            }
180

    
181
        }else{
182
            if (isUseIdentifier() && PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SEARCH_FOR_IDENTIFIER_AND_TITLECACHE)){
183
                List<IdentifiedEntityDTO<Reference>> list = CdmStore.getService(IReferenceService.class).listByIdentifierAndTitleCacheAbbrev(pattern, null, MatchMode.BEGINNING, limitOfInitialElements);
184
                if (model!= null){
185
                    model.clear();
186
                }
187
                identifierMap = new HashMap();
188
                for (IdentifiedEntityDTO dto: list){
189
                    if (dto.getIdentifier() != null){
190
                        identifierMap.put(dto.getCdmEntity().getUuid(), dto.getIdentifier());
191
                    }
192
                    model.add(dto.getCdmEntity());
193

    
194
                }
195
            }else if (isUseIdentifier() ){
196
                List<IdentifiedEntityDTO<Reference>> list = CdmStore.getService(IReferenceService.class).listByIdentifierAbbrev(pattern, null, MatchMode.BEGINNING, limitOfInitialElements);
197
                if (model!= null){
198
                    model.clear();
199
                }
200
                identifierMap = new HashMap();
201
                for (IdentifiedEntityDTO dto: list){
202
                    identifierMap.put(dto.getCdmEntity().getUuid(), dto.getIdentifier());
203
                    model.add(dto.getCdmEntity());
204

    
205
                }
206
            }else {
207
                model = CdmStore.getService(IReferenceService.class).getUuidAndTitleCache(limitOfInitialElements,pattern);
208
            }
209

    
210
        }
211

    
212
	}
213

    
214
	@Override
215
    protected void addIdentifierCheckButton(Composite searchAndFilter) {
216
        Button btnCheckButton = new Button(searchAndFilter, SWT.CHECK);
217
        btnCheckButton.setText("Use Identifier");
218
        if (PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.IS_SEARCH_FOR_IDENTIFIER_AS_DEFAULT)){
219
            btnCheckButton.setSelection(true);
220
            useIdentifier = true;
221
        }
222
        btnCheckButton.addSelectionListener(new SelectionAdapter() {
223
            @Override
224
            public void widgetSelected(SelectionEvent e) {
225
                useIdentifier = btnCheckButton.getSelection();
226
            }
227
        });
228
    }
229
	/** {@inheritDoc} */
230
	@Override
231
	protected String getTitle(Reference cdmObject) {
232
		if(cdmObject == null){
233
			return "";
234
		}else{
235
		    return super.getTitle(cdmObject);
236
		}
237
//		}else{
238
//			return DefaultReferenceCacheStrategy.putAuthorToEndOfString(cdmObject.getTitleCache(), cdmObject.getAuthorship().getTitleCache());
239
//		}
240
	}
241

    
242
	/** {@inheritDoc} */
243
	@Override
244
	protected AbstractNewEntityWizard getNewEntityWizard(String parameter) {
245
		return new NewReferenceWizard();
246
	}
247

    
248
	/** {@inheritDoc} */
249
	@Override
250
	protected String[] getNewWizardText() {
251
		return new String[]{"New Reference"};
252
	}
253

    
254
	/** {@inheritDoc} */
255
    @Override
256
    protected void search() {
257
        Control control =getSearchField();
258
        String pattern = null;
259
        if (control != null){
260
            pattern = ((Text)control).getText();
261
            callService(pattern);
262

    
263
            fillContentProvider(null);
264
        }
265
    }
266
    @Override
267
    protected ILabelProvider createListLabelProvider() {
268
        return new FilteredReferenceLabelProvider();
269
    }
270

    
271
    public class FilteredReferenceLabelProvider extends FilteredCdmResourceLabelProvider {
272
        @Override
273
        public String getText(Object element) {
274
            if (element == null) {
275
                return null;
276
            }
277
            UuidAndTitleCache uuidAndTitleCache = (UuidAndTitleCache) element;
278
            String titleCache = uuidAndTitleCache.getTitleCache();
279
            if(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_ID_IN_ENTITY_SELECTION_DIAOLOG)){
280
                titleCache += " ["+uuidAndTitleCache.getId()+"]";
281
            }
282
            if (isUseIdentifier()){
283
                if (identifierMap != null){
284
                    AlternativeIdentifier identifier = identifierMap.get(uuidAndTitleCache.getUuid());
285
                    if (identifier != null){
286
                        titleCache += " (" + identifier.getTypeLabel() +": " + identifier.getIdentifier() + ")";
287
                    }else{
288
                        titleCache += " (-)";
289
                    }
290
                }
291

    
292
            }
293

    
294
            return titleCache;
295
        }
296
    };
297

    
298
}
(32-32/44)