Project

General

Profile

Download (8.79 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.taxeditor.ui.dialog.selection;
2

    
3
import java.text.Collator;
4
import java.util.Comparator;
5
import java.util.HashMap;
6
import java.util.List;
7

    
8
import org.apache.commons.lang3.StringUtils;
9
import org.eclipse.jface.viewers.ILabelProvider;
10
import org.eclipse.jface.viewers.LabelProvider;
11
import org.eclipse.swt.widgets.Control;
12
import org.eclipse.swt.widgets.Shell;
13
import org.eclipse.swt.widgets.Text;
14

    
15
import eu.etaxonomy.cdm.api.service.IReferenceService;
16
import eu.etaxonomy.cdm.api.service.dto.EntityDTOBase.CdmEntity;
17
import eu.etaxonomy.cdm.api.service.dto.IdentifiedEntityDTO;
18
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
19
import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
20
import eu.etaxonomy.cdm.model.reference.Reference;
21
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
22
import eu.etaxonomy.cdm.persistence.query.MatchMode;
23
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
24
import eu.etaxonomy.taxeditor.store.CdmStore;
25

    
26
public class NomenclaturalReferenceSelectionDialog extends
27
		ReferenceSelectionDialog {
28

    
29
    private TeamOrPersonBase author;
30
    private boolean firstCall = true;
31

    
32
	protected NomenclaturalReferenceSelectionDialog(Shell shell,//ConversationHolder conversation,
33
			 String title, boolean multi,
34
			Reference reference, boolean inReference, TeamOrPersonBase author) {
35
		super(shell, //conversation,
36
		        title, multi, reference, null);
37
		this.author = author;
38
		firstCall = true;
39

    
40
	}
41

    
42
	/* (non-Javadoc)
43
	 * @see eu.etaxonomy.taxeditor.dialogs.AbstractFilteredCdmResourceSelectionDialog#search
44
	 */
45
	/** {@inheritDoc} */
46
	@Override
47
	protected void callService(String pattern) {
48
        Control control =getSearchField();
49
        lastSelectedReferences = PreferencesUtil.getLastSelectedReferences();
50
        if (firstCall && author != null){
51
            pattern = author.getNomenclaturalTitleCache();
52
            if (control!= null){
53
                firstCall = false;
54
                model = CdmStore.getService(IReferenceService.class).getUuidAndAbbrevTitleCacheForAuthor(null, pattern, null);
55
            }
56

    
57
        }else{
58

    
59
            if (isUseIdentifier() && PreferencesUtil.getBooleanValue(PreferencePredicate.SearchForIdentifierAndTitleCache.getKey())){
60
                List<IdentifiedEntityDTO<Reference>> list = CdmStore.getService(IReferenceService.class).listByIdentifierAndTitleCacheAbbrev(pattern, null, MatchMode.BEGINNING, limitOfInitialElements);
61
                if (model!= null){
62
                    model.clear();
63
                }
64
                identifierMap = new HashMap();
65
                for (IdentifiedEntityDTO dto: list){
66
                    if (dto.getIdentifier() != null){
67
                        identifierMap.put(dto.getCdmEntity().getUuid(), dto.getIdentifier());
68
                    }
69
                    model.add(dto.getCdmEntity());
70

    
71
                }
72
            }else if (isUseIdentifier() ){
73
                List<IdentifiedEntityDTO<Reference>> list = CdmStore.getService(IReferenceService.class).listByIdentifierAbbrev(pattern, null, MatchMode.BEGINNING, limitOfInitialElements);
74
                if (model!= null){
75
                    model.clear();
76
                }
77
                identifierMap = new HashMap();
78
                for (IdentifiedEntityDTO dto: list){
79
                    identifierMap.put(dto.getCdmEntity().getUuid(), dto.getIdentifier());
80
                    model.add(dto.getCdmEntity());
81
                }
82

    
83
            }else{
84
                model = CdmStore.getService(IReferenceService.class).getUuidAndAbbrevTitleCache(null, pattern);
85
            }
86

    
87
        }
88

    
89

    
90

    
91

    
92
	}
93

    
94
	/**
95
	 *
96
	 * @return
97
	 */
98
   @Override
99
	protected ILabelProvider createListLabelProvider() {
100
		return new FilteredCdmResourceAbbrevLabelProvider();
101
	}
102
//   @Override
103
//   protected void addIdentifierCheckButton(Composite searchAndFilter) {
104
//       Button btnCheckButton = new Button(searchAndFilter, SWT.CHECK);
105
//       btnCheckButton.setText("Use Identifier");
106
//       btnCheckButton.addSelectionListener(new SelectionAdapter() {
107
//           @Override
108
//           public void widgetSelected(SelectionEvent e) {
109
//               useIdentifier = btnCheckButton.getSelection();
110
//           }
111
//       });
112
//   }
113

    
114
	/**
115
	 * <p>select</p>
116
	 *
117
	 * @param reference a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
118
	 * @param shell a {@link org.eclipse.swt.widgets.Shell} object.
119
	 * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
120
	 * @return a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
121
	 */
122

    
123
	public static Reference select(Shell shell, //ConversationHolder conversation,
124
	        Reference reference, TeamOrPersonBase author) {
125
		NomenclaturalReferenceSelectionDialog dialog = new NomenclaturalReferenceSelectionDialog(shell,// conversation,
126
				"Choose a reference", isInReference, reference, false, author);
127
		return getSelectionFromDialog(dialog);
128
	}
129

    
130
	/* (non-Javadoc)
131
	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createFilter()
132
	 */
133
	/** {@inheritDoc} */
134
//	@Override
135
//	protected ItemsFilter createFilter() {
136
//		return new ItemsFilter() {
137
//
138
//			/**
139
//			 * Always returns false to enforce refiltering even if the pattern is equal
140
//			 */
141
//			@Override
142
//			public boolean equalsFilter(ItemsFilter filter) {
143
//				return false;
144
//			}
145
//
146
//			@Override
147
//			public boolean isConsistentItem(Object item) {
148
//				return false;
149
//			}
150
//
151
//			@Override
152
//			public boolean matchItem(Object item) {
153
//				return true;
154
////				String text = null;
155
////				if(item instanceof UuidAndTitleCache){
156
////					if (((UuidAndTitleCache) item).getAbbrevTitleCache() != null){
157
////						text = ((UuidAndTitleCache) item).getAbbrevTitleCache();
158
////					} else{
159
////						text = ((UuidAndTitleCache) item).getTitleCache();
160
////					}
161
////				}else if(item instanceof String){
162
////					text = (String) item;
163
////				}
164
////				return text != null ? matches(text) : false;
165
//			}
166
//
167
//		};
168
//	}
169

    
170

    
171

    
172
	public class FilteredCdmResourceAbbrevLabelProvider extends LabelProvider {
173
		@Override
174
		public String getText(Object element) {
175
			if (element == null) {
176
				return null;
177
			}
178
			UuidAndTitleCache uuidAndTitleCache;
179
			if (element instanceof CdmEntity){
180
			    uuidAndTitleCache = (CdmEntity)element;
181
			}else{
182
			    uuidAndTitleCache = (UuidAndTitleCache) element;
183
			}
184
			String titleCache = uuidAndTitleCache.getTitleCache();
185
			String abbrevTitleCache = uuidAndTitleCache.getAbbrevTitleCache();
186
			if (!abbrevTitleCache.equals(titleCache)){
187
				abbrevTitleCache += " - " + titleCache;
188
			}
189
			if(PreferencesUtil.getBooleanValue(PreferencePredicate.ShowIdInSelectionDialog.getKey())){
190
				abbrevTitleCache += " ["+uuidAndTitleCache.getId()+"]";
191
			}
192
            return abbrevTitleCache;
193
		}
194
	};
195

    
196
	@Override
197
    protected Comparator getItemsComparator() {
198
        return new Comparator<UuidAndTitleCache>() {
199
            @Override
200
            public int compare(UuidAndTitleCache entity1,
201
                    UuidAndTitleCache entity2) {
202

    
203
                if (entity1.getUuid().equals(entity2.getUuid())){
204
                    return 0;
205
                }
206
                Collator collator = Collator.getInstance();
207
                String compareString1 = "";
208
                if (entity1.getAbbrevTitleCache() != null){
209
                    compareString1 = entity1.getAbbrevTitleCache();
210
                }
211
                if (entity1.getTitleCache() != null){
212
                    compareString1 += entity1.getTitleCache();
213
                }
214

    
215

    
216
                String compareString2 = "";
217
                if (entity2.getAbbrevTitleCache() != null){
218
                    compareString2 = entity2.getAbbrevTitleCache();
219
                }
220
                if (entity2.getTitleCache() != null){
221
                    compareString2 += entity2.getTitleCache();
222
                }
223

    
224

    
225
                int result =collator.compare(compareString1, compareString2);
226
                if (result == 0){
227
                    result = entity1.getUuid().compareTo(entity2.getUuid());
228
                }
229
                return result;
230
            }
231
        };
232
    }
233
	@Override
234
	protected String getTitle(Reference cdmObject) {
235
        if(cdmObject == null){
236
            return "";
237
        }
238
        if (cdmObject.getAbbrevTitleCache() != null){
239
            return cdmObject.getAbbrevTitleCache();
240
        }else{
241
            return cdmObject.getTitleCache();
242
        }
243

    
244

    
245

    
246
    }
247

    
248
	 @Override
249
	    protected void search() {
250
	        Control control =getSearchField();
251
	        String pattern = null;
252
	        if (control != null){
253
	            pattern = ((Text)control).getText();
254
	            if (pattern.equals("*") || pattern.equals("?")){
255
	                callService(null);
256
	            }else if (StringUtils.isNotBlank(pattern)){
257
	                callService(pattern);
258
	            } else if (firstCall){
259
	                callService(null);
260
	            }
261
	            fillContentProvider(null);
262
	        }
263
	 }
264

    
265

    
266

    
267

    
268

    
269
}
(28-28/46)