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