Merge branch 'develop' into LibrAlign
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / dialog / selection / NomenclaturalReferenceSelectionDialog.java
1 package eu.etaxonomy.taxeditor.ui.dialog.selection;
2
3 import java.text.Collator;
4 import java.util.Comparator;
5
6 import org.eclipse.jface.viewers.ILabelProvider;
7 import org.eclipse.jface.viewers.LabelProvider;
8 import org.eclipse.swt.widgets.Control;
9 import org.eclipse.swt.widgets.Shell;
10 import org.eclipse.swt.widgets.Text;
11
12 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
13 import eu.etaxonomy.cdm.api.service.IReferenceService;
14 import eu.etaxonomy.cdm.model.reference.Reference;
15 import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
16 import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
17 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
18 import eu.etaxonomy.taxeditor.store.CdmStore;
19
20 public class NomenclaturalReferenceSelectionDialog extends
21 ReferenceSelectionDialog {
22
23 protected NomenclaturalReferenceSelectionDialog(Shell shell,
24 ConversationHolder conversation, String title, boolean multi,
25 Reference reference) {
26 super(shell, conversation, title, multi, reference);
27 // TODO Auto-generated constructor stub
28 }
29
30 /* (non-Javadoc)
31 * @see eu.etaxonomy.taxeditor.dialogs.AbstractFilteredCdmResourceSelectionDialog#initModel()
32 */
33 /** {@inheritDoc} */
34 @Override
35 protected void initModel() {
36 Control control = getPatternControl();
37 String pattern = null;
38 if (control != null){
39 pattern = ((Text)control).getText();
40 }
41
42 if (pattern == null || pattern.equals("?")){
43 model = CdmStore.getService(IReferenceService.class).getUuidAndAbbrevTitleCache(null, null);
44 }else{
45 model = CdmStore.getService(IReferenceService.class).getUuidAndAbbrevTitleCache(limitOfInitialElements, pattern);
46 }
47 }
48
49 /**
50 *
51 * @return
52 */
53 @Override
54 protected ILabelProvider createListLabelProvider() {
55 return new FilteredCdmResourceAbbrevLabelProvider();
56 }
57
58 /**
59 * <p>select</p>
60 *
61 * @param reference a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
62 * @param shell a {@link org.eclipse.swt.widgets.Shell} object.
63 * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
64 * @return a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
65 */
66
67 public static Reference select(Shell shell, ConversationHolder conversation, Reference reference) {
68 NomenclaturalReferenceSelectionDialog dialog = new NomenclaturalReferenceSelectionDialog(shell, conversation,
69 "Choose a reference", false, reference);
70 return getSelectionFromDialog(dialog);
71 }
72
73 /* (non-Javadoc)
74 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createFilter()
75 */
76 /** {@inheritDoc} */
77 @Override
78 protected ItemsFilter createFilter() {
79 return new ItemsFilter() {
80
81 /**
82 * Always returns false to enforce refiltering even if the pattern is equal
83 */
84 @Override
85 public boolean equalsFilter(ItemsFilter filter) {
86 return false;
87 }
88
89 @Override
90 public boolean isConsistentItem(Object item) {
91 return false;
92 }
93
94 @Override
95 public boolean matchItem(Object item) {
96 return true;
97 // String text = null;
98 // if(item instanceof UuidAndTitleCache){
99 // if (((UuidAndTitleCache) item).getAbbrevTitleCache() != null){
100 // text = ((UuidAndTitleCache) item).getAbbrevTitleCache();
101 // } else{
102 // text = ((UuidAndTitleCache) item).getTitleCache();
103 // }
104 // }else if(item instanceof String){
105 // text = (String) item;
106 // }
107 // return text != null ? matches(text) : false;
108 }
109
110 };
111 }
112
113
114
115 public class FilteredCdmResourceAbbrevLabelProvider extends LabelProvider {
116 @Override
117 public String getText(Object element) {
118 if (element == null) {
119 return null;
120 }
121 UuidAndTitleCache uuidAndTitleCache = (UuidAndTitleCache) element;
122 String titleCache = uuidAndTitleCache.getTitleCache();
123 String abbrevTitleCache = uuidAndTitleCache.getAbbrevTitleCache();
124 if (!abbrevTitleCache.equals(titleCache)){
125 abbrevTitleCache += " - " + titleCache;
126 }
127 if(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_ID_IN_ENTITY_SELECTION_DIAOLOG)){
128 abbrevTitleCache += " ["+uuidAndTitleCache.getId()+"]";
129 }
130 return abbrevTitleCache;
131 }
132 };
133
134 @Override
135 protected Comparator getItemsComparator() {
136 return new Comparator<UuidAndTitleCache>() {
137 @Override
138 public int compare(UuidAndTitleCache entity1,
139 UuidAndTitleCache entity2) {
140 Collator collator = Collator.getInstance();
141 String compareString1 = "";
142 if (entity1.getAbbrevTitleCache() != null){
143 compareString1 = entity1.getAbbrevTitleCache();
144 }
145 if (entity1.getTitleCache() != null){
146 compareString1 += entity1.getTitleCache();
147 }
148 String compareString2 = "";
149 if (entity2.getAbbrevTitleCache() != null){
150 compareString2 = entity2.getAbbrevTitleCache();
151 }
152 if (entity2.getTitleCache() != null){
153 compareString2 += entity2.getTitleCache();
154 }
155 return collator.compare(compareString1, compareString2);
156 }
157 };
158 }
159
160 @Override
161 protected String getTitle(Reference cdmObject) {
162 if(cdmObject == null){
163 return "";
164 }
165 if (cdmObject.getAbbrevTitle() != null){
166 return cdmObject.getAbbrevTitleCache();
167 }else{
168 return cdmObject.getTitleCache();
169 }
170
171
172
173 }
174
175
176
177
178 }