Project

General

Profile

Download (7.33 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.List;
6

    
7
import org.eclipse.jface.viewers.ILabelProvider;
8
import org.eclipse.jface.viewers.LabelProvider;
9
import org.eclipse.swt.SWT;
10
import org.eclipse.swt.events.SelectionAdapter;
11
import org.eclipse.swt.events.SelectionEvent;
12
import org.eclipse.swt.widgets.Button;
13
import org.eclipse.swt.widgets.Composite;
14
import org.eclipse.swt.widgets.Control;
15
import org.eclipse.swt.widgets.Shell;
16
import org.eclipse.swt.widgets.Text;
17

    
18
import eu.etaxonomy.cdm.api.service.IReferenceService;
19
import eu.etaxonomy.cdm.api.service.dto.EntityDTOBase.CdmEntity;
20
import eu.etaxonomy.cdm.api.service.dto.IdentifiedEntityDTO;
21
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
22
import eu.etaxonomy.cdm.model.reference.Reference;
23
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
24
import eu.etaxonomy.cdm.persistence.query.MatchMode;
25
import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
26
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
27
import eu.etaxonomy.taxeditor.store.CdmStore;
28

    
29
public class NomenclaturalReferenceSelectionDialog extends
30
		ReferenceSelectionDialog {
31

    
32
    private TeamOrPersonBase author;
33
    private boolean firstCall = true;
34

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

    
43
	}
44

    
45
	/* (non-Javadoc)
46
	 * @see eu.etaxonomy.taxeditor.dialogs.AbstractFilteredCdmResourceSelectionDialog#search
47
	 */
48
	/** {@inheritDoc} */
49
	@Override
50
	protected void callService(String pattern) {
51
        Control control =getSearchField();
52

    
53
        if (firstCall && author != null){
54
            pattern = author.getNomenclaturalTitle();
55
            if (control!= null){
56
                firstCall = false;
57
                ((Text)control).setText(pattern);
58
            }
59

    
60
        }
61

    
62
            if (isUseIdentifier()){
63
                List<IdentifiedEntityDTO<Reference>> list = CdmStore.getService(IReferenceService.class).listByIdentifierAbbrev(pattern, null, MatchMode.EXACT, limitOfInitialElements);
64
                if (model!= null){
65
                    model.clear();
66
                }
67
                for (IdentifiedEntityDTO dto: list){
68

    
69
                    model.add(dto.getCdmEntity());
70
                }
71
            }else{
72
                model = CdmStore.getService(IReferenceService.class).getUuidAndAbbrevTitleCache(limitOfInitialElements, pattern);
73
            }
74

    
75

    
76

    
77

    
78

    
79

    
80
	}
81

    
82
	/**
83
	 *
84
	 * @return
85
	 */
86
   @Override
87
	protected ILabelProvider createListLabelProvider() {
88
		return new FilteredCdmResourceAbbrevLabelProvider();
89
	}
90
   @Override
91
   protected void addIdentifierCheckButton(Composite searchAndFilter) {
92
       Button btnCheckButton = new Button(searchAndFilter, SWT.CHECK);
93
       btnCheckButton.setText("Use Identifier");
94
       btnCheckButton.addSelectionListener(new SelectionAdapter() {
95
           @Override
96
           public void widgetSelected(SelectionEvent e) {
97
               useIdentifier = btnCheckButton.getSelection();
98
           }
99
       });
100
   }
101

    
102
	/**
103
	 * <p>select</p>
104
	 *
105
	 * @param reference a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
106
	 * @param shell a {@link org.eclipse.swt.widgets.Shell} object.
107
	 * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
108
	 * @return a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
109
	 */
110

    
111
	public static Reference select(Shell shell, //ConversationHolder conversation,
112
	        Reference reference, TeamOrPersonBase author) {
113
		NomenclaturalReferenceSelectionDialog dialog = new NomenclaturalReferenceSelectionDialog(shell,// conversation,
114
				"Choose a reference", isInReference, reference, false, author);
115
		return getSelectionFromDialog(dialog);
116
	}
117

    
118
	/* (non-Javadoc)
119
	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createFilter()
120
	 */
121
	/** {@inheritDoc} */
122
//	@Override
123
//	protected ItemsFilter createFilter() {
124
//		return new ItemsFilter() {
125
//
126
//			/**
127
//			 * Always returns false to enforce refiltering even if the pattern is equal
128
//			 */
129
//			@Override
130
//			public boolean equalsFilter(ItemsFilter filter) {
131
//				return false;
132
//			}
133
//
134
//			@Override
135
//			public boolean isConsistentItem(Object item) {
136
//				return false;
137
//			}
138
//
139
//			@Override
140
//			public boolean matchItem(Object item) {
141
//				return true;
142
////				String text = null;
143
////				if(item instanceof UuidAndTitleCache){
144
////					if (((UuidAndTitleCache) item).getAbbrevTitleCache() != null){
145
////						text = ((UuidAndTitleCache) item).getAbbrevTitleCache();
146
////					} else{
147
////						text = ((UuidAndTitleCache) item).getTitleCache();
148
////					}
149
////				}else if(item instanceof String){
150
////					text = (String) item;
151
////				}
152
////				return text != null ? matches(text) : false;
153
//			}
154
//
155
//		};
156
//	}
157

    
158

    
159

    
160
	public class FilteredCdmResourceAbbrevLabelProvider extends LabelProvider {
161
		@Override
162
		public String getText(Object element) {
163
			if (element == null) {
164
				return null;
165
			}
166
			UuidAndTitleCache uuidAndTitleCache;
167
			if (element instanceof CdmEntity){
168
			    uuidAndTitleCache = (CdmEntity)element;
169
			}else{
170
			    uuidAndTitleCache = (UuidAndTitleCache) element;
171
			}
172
			String titleCache = uuidAndTitleCache.getTitleCache();
173
			String abbrevTitleCache = uuidAndTitleCache.getAbbrevTitleCache();
174
			if (!abbrevTitleCache.equals(titleCache)){
175
				abbrevTitleCache += " - " + titleCache;
176
			}
177
			if(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_ID_IN_ENTITY_SELECTION_DIAOLOG)){
178
				abbrevTitleCache += " ["+uuidAndTitleCache.getId()+"]";
179
			}
180
            return abbrevTitleCache;
181
		}
182
	};
183

    
184
	@Override
185
    protected Comparator getItemsComparator() {
186
        return new Comparator<UuidAndTitleCache>() {
187
            @Override
188
            public int compare(UuidAndTitleCache entity1,
189
                    UuidAndTitleCache entity2) {
190

    
191
                if (entity1.getUuid().equals(entity2.getUuid())){
192
                    return 0;
193
                }
194
                Collator collator = Collator.getInstance();
195
                String compareString1 = "";
196
                if (entity1.getAbbrevTitleCache() != null){
197
                    compareString1 = entity1.getAbbrevTitleCache();
198
                }
199
                if (entity1.getTitleCache() != null){
200
                    compareString1 += entity1.getTitleCache();
201
                }
202

    
203

    
204
                String compareString2 = "";
205
                if (entity2.getAbbrevTitleCache() != null){
206
                    compareString2 = entity2.getAbbrevTitleCache();
207
                }
208
                if (entity2.getTitleCache() != null){
209
                    compareString2 += entity2.getTitleCache();
210
                }
211

    
212

    
213
                int result =collator.compare(compareString1, compareString2);
214
                if (result == 0){
215
                    result = entity1.getUuid().compareTo(entity2.getUuid());
216
                }
217
                return result;
218
            }
219
        };
220
    }
221
	@Override
222
	protected String getTitle(Reference cdmObject) {
223
        if(cdmObject == null){
224
            return "";
225
        }
226
        if (cdmObject.getAbbrevTitle() != null){
227
            return cdmObject.getAbbrevTitleCache();
228
        }else{
229
            return cdmObject.getTitleCache();
230
        }
231

    
232

    
233

    
234
    }
235

    
236

    
237

    
238

    
239
}
(24-24/39)