Merge branch 'release/4.7.0'
[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.agent.TeamOrPersonBase;
15 import eu.etaxonomy.cdm.model.reference.Reference;
16 import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
17 import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
18 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
19 import eu.etaxonomy.taxeditor.store.CdmStore;
20
21 public class NomenclaturalReferenceSelectionDialog extends
22 ReferenceSelectionDialog {
23
24 private TeamOrPersonBase author;
25 private boolean firstCall = true;
26
27 protected NomenclaturalReferenceSelectionDialog(Shell shell,
28 ConversationHolder conversation, String title, boolean multi,
29 Reference reference, boolean inReference, TeamOrPersonBase author) {
30 super(shell, conversation, title, multi, reference);
31 this.author = author;
32 firstCall = true;
33
34 }
35
36 /* (non-Javadoc)
37 * @see eu.etaxonomy.taxeditor.dialogs.AbstractFilteredCdmResourceSelectionDialog#initModel()
38 */
39 /** {@inheritDoc} */
40 @Override
41 protected void initModel() {
42 Control control = getPatternControl();
43 String pattern = null;
44 if (control != null){
45 pattern = ((Text)control).getText();
46
47 }
48 if (firstCall && author != null){
49 pattern = author.getNomenclaturalTitle();
50 if (control!= null){
51 firstCall = false;
52 ((Text)control).setText(pattern);
53 }
54
55 }
56
57 if (pattern == null || pattern.equals("?")){
58 model = CdmStore.getService(IReferenceService.class).getUuidAndAbbrevTitleCache(null, null);
59 }else{
60 model = CdmStore.getService(IReferenceService.class).getUuidAndAbbrevTitleCache(limitOfInitialElements, pattern);
61 }
62 System.out.println("2");
63 }
64
65 /**
66 *
67 * @return
68 */
69 @Override
70 protected ILabelProvider createListLabelProvider() {
71 return new FilteredCdmResourceAbbrevLabelProvider();
72 }
73
74 /**
75 * <p>select</p>
76 *
77 * @param reference a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
78 * @param shell a {@link org.eclipse.swt.widgets.Shell} object.
79 * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
80 * @return a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
81 */
82
83 public static Reference select(Shell shell, ConversationHolder conversation, Reference reference, TeamOrPersonBase author) {
84 NomenclaturalReferenceSelectionDialog dialog = new NomenclaturalReferenceSelectionDialog(shell, conversation,
85 "Choose a reference", isInReference, reference, false, author);
86 return getSelectionFromDialog(dialog);
87 }
88
89 /* (non-Javadoc)
90 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createFilter()
91 */
92 /** {@inheritDoc} */
93 @Override
94 protected ItemsFilter createFilter() {
95 return new ItemsFilter() {
96
97 /**
98 * Always returns false to enforce refiltering even if the pattern is equal
99 */
100 @Override
101 public boolean equalsFilter(ItemsFilter filter) {
102 return false;
103 }
104
105 @Override
106 public boolean isConsistentItem(Object item) {
107 return false;
108 }
109
110 @Override
111 public boolean matchItem(Object item) {
112 return true;
113 // String text = null;
114 // if(item instanceof UuidAndTitleCache){
115 // if (((UuidAndTitleCache) item).getAbbrevTitleCache() != null){
116 // text = ((UuidAndTitleCache) item).getAbbrevTitleCache();
117 // } else{
118 // text = ((UuidAndTitleCache) item).getTitleCache();
119 // }
120 // }else if(item instanceof String){
121 // text = (String) item;
122 // }
123 // return text != null ? matches(text) : false;
124 }
125
126 };
127 }
128
129
130
131 public class FilteredCdmResourceAbbrevLabelProvider extends LabelProvider {
132 @Override
133 public String getText(Object element) {
134 if (element == null) {
135 return null;
136 }
137 UuidAndTitleCache uuidAndTitleCache = (UuidAndTitleCache) element;
138 String titleCache = uuidAndTitleCache.getTitleCache();
139 String abbrevTitleCache = uuidAndTitleCache.getAbbrevTitleCache();
140 if (!abbrevTitleCache.equals(titleCache)){
141 abbrevTitleCache += " - " + titleCache;
142 }
143 if(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_ID_IN_ENTITY_SELECTION_DIAOLOG)){
144 abbrevTitleCache += " ["+uuidAndTitleCache.getId()+"]";
145 }
146 return abbrevTitleCache;
147 }
148 };
149
150 @Override
151 protected Comparator getItemsComparator() {
152 return new Comparator<UuidAndTitleCache>() {
153 @Override
154 public int compare(UuidAndTitleCache entity1,
155 UuidAndTitleCache entity2) {
156
157 if (entity1.getUuid().equals(entity2.getUuid())){
158 return 0;
159 }
160 Collator collator = Collator.getInstance();
161 String compareString1 = "";
162 if (entity1.getAbbrevTitleCache() != null){
163 compareString1 = entity1.getAbbrevTitleCache();
164 }
165 if (entity1.getTitleCache() != null){
166 compareString1 += entity1.getTitleCache();
167 }
168
169
170 String compareString2 = "";
171 if (entity2.getAbbrevTitleCache() != null){
172 compareString2 = entity2.getAbbrevTitleCache();
173 }
174 if (entity2.getTitleCache() != null){
175 compareString2 += entity2.getTitleCache();
176 }
177
178
179 int result =collator.compare(compareString1, compareString2);
180 if (result == 0){
181 result = entity1.getUuid().compareTo(entity2.getUuid());
182 }
183 return result;
184 }
185 };
186 }
187 @Override
188 protected String getTitle(Reference cdmObject) {
189 if(cdmObject == null){
190 return "";
191 }
192 if (cdmObject.getAbbrevTitle() != null){
193 return cdmObject.getAbbrevTitleCache();
194 }else{
195 return cdmObject.getTitleCache();
196 }
197
198
199
200 }
201
202
203
204
205 }