baad25d457b4510f88f30aa531799b6c88e86a32
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / dialog / selection / NomenclaturalAuthorSelectionDialog.java
1 // $Id$
2 /**
3 * Copyright (C) 2016 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10 package eu.etaxonomy.taxeditor.ui.dialog.selection;
11
12
13
14 import java.text.Collator;
15 import java.util.Comparator;
16
17 import org.eclipse.core.runtime.Assert;
18 import org.eclipse.core.runtime.ListenerList;
19 import org.eclipse.jface.viewers.IColorProvider;
20 import org.eclipse.jface.viewers.IFontProvider;
21 import org.eclipse.jface.viewers.ILabelDecorator;
22 import org.eclipse.jface.viewers.ILabelProvider;
23 import org.eclipse.jface.viewers.ILabelProviderListener;
24 import org.eclipse.jface.viewers.LabelProvider;
25 import org.eclipse.jface.viewers.LabelProviderChangedEvent;
26 import org.eclipse.jface.viewers.StyledCellLabelProvider;
27 import org.eclipse.jface.viewers.StyledString;
28 import org.eclipse.jface.viewers.ViewerCell;
29 import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
30 import org.eclipse.swt.SWT;
31 import org.eclipse.swt.graphics.Color;
32 import org.eclipse.swt.graphics.Font;
33 import org.eclipse.swt.graphics.GC;
34 import org.eclipse.swt.graphics.Image;
35 import org.eclipse.swt.graphics.Rectangle;
36 import org.eclipse.swt.widgets.Control;
37 import org.eclipse.swt.widgets.Display;
38 import org.eclipse.swt.widgets.Shell;
39 import org.eclipse.swt.widgets.Text;
40 import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
41 import org.eclipse.ui.internal.WorkbenchImages;
42
43 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
44 import eu.etaxonomy.cdm.api.service.IAgentService;
45 import eu.etaxonomy.cdm.model.agent.AgentBase;
46 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
47 import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
48 import eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard;
49 import eu.etaxonomy.taxeditor.newWizard.NewPersonWizard;
50 import eu.etaxonomy.taxeditor.newWizard.NewTeamWizard;
51 import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
52 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
53 import eu.etaxonomy.taxeditor.store.CdmStore;
54 import eu.etaxonomy.taxeditor.ui.dialog.selection.AbstractFilteredCdmResourceSelectionDialog.FilteredCdmResourceLabelProvider;
55 import eu.etaxonomy.taxeditor.ui.dialog.selection.CdmFilteredItemsSelectionDialog.ItemsFilter;
56 import eu.etaxonomy.taxeditor.ui.dialog.selection.CdmFilteredItemsSelectionDialog.ItemsListSeparator;
57
58 /**
59 * @author k.luther
60 * @date 25.05.2016
61 *
62 */
63 public class NomenclaturalAuthorSelectionDialog extends AgentSelectionDialog {
64
65
66 /**
67 * @param shell
68 * @param conversation
69 * @param title
70 * @param multi
71 * @param settings
72 * @param agent
73 */
74 protected NomenclaturalAuthorSelectionDialog(Shell shell, ConversationHolder conversation, String title,
75 boolean multi, String settings, AgentBase agent, boolean teamMemberSelection) {
76 super(shell, conversation, title, multi, settings, agent, teamMemberSelection);
77 // TODO Auto-generated constructor stub
78 }
79
80 @Override
81 protected void initModel() {
82 Control control = getPatternControl();
83 String pattern = null;
84 if (control != null){
85 pattern = ((Text)control).getText();
86 }
87
88 model = CdmStore.getService(IAgentService.class).getUuidAndAbbrevTitleCache(limitOfInitialElements, pattern, null);
89 }
90
91 /** {@inheritDoc} */
92 @Override
93 protected AbstractNewEntityWizard getNewEntityWizard(String parameter) {
94 if(TEAM.equals(parameter)){
95 return new NewTeamWizard(true);
96 }
97 else if(PERSON.equals(parameter)){
98 return new NewPersonWizard();
99 }
100 else{
101 throw new IllegalArgumentException("Could not determine the desired wizard.");
102 }
103 }
104 /**
105 *
106 * @return
107 */
108 @Override
109 protected ILabelProvider createListLabelProvider() {
110 return new FilteredCdmResourceAbbrevLabelProvider();
111 }
112
113 /**
114 * <p>select</p>
115 *
116 * @param shell a {@link org.eclipse.swt.widgets.Shell} object.
117 * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
118 * @param entity a {@link eu.etaxonomy.cdm.model.agent.AgentBase} object.
119 * @return a {@link eu.etaxonomy.cdm.model.agent.AgentBase} object.
120 */
121 public static AgentBase select(Shell shell, ConversationHolder conversation, AgentBase entity, boolean teamMemberSelection) {
122 NomenclaturalAuthorSelectionDialog dialog = new NomenclaturalAuthorSelectionDialog(shell, conversation,
123 "Choose Agent", false, NomenclaturalAuthorSelectionDialog.class.getCanonicalName(), entity, teamMemberSelection);
124 return getSelectionFromDialog(dialog);
125 }
126
127 /**
128 * <p>getTitle</p>
129 *
130 * @param cdmObject a T object.
131 * @return a {@link java.lang.String} object.
132 */
133 @Override
134 protected String getTitle(AgentBase cdmObject) {
135 if(cdmObject == null){
136 return "";
137 }
138
139 if (cdmObject instanceof TeamOrPersonBase) {
140 return ((TeamOrPersonBase) cdmObject).getNomenclaturalTitle();
141 } else if (cdmObject instanceof AgentBase){
142 return ((TeamOrPersonBase) cdmObject).getTitleCache();
143 }
144
145 throw new IllegalArgumentException("Generic method only" +
146 " supports cdmObject of type IIdentifiableEntity." +
147 " Please implement specific method in subclass.");
148 }
149
150
151
152 public class FilteredCdmResourceAbbrevLabelProvider extends LabelProvider {
153 @Override
154 public String getText(Object element) {
155 if (element == null) {
156 return null;
157 }
158 UuidAndTitleCache uuidAndTitleCache = (UuidAndTitleCache) element;
159 String titleCache = uuidAndTitleCache.getTitleCache();
160 String abbrevTitleCache = uuidAndTitleCache.getAbbrevTitleCache();
161 if (!titleCache.equals(abbrevTitleCache)){
162 abbrevTitleCache += " - " + titleCache;
163 }
164 if(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_ID_IN_ENTITY_SELECTION_DIAOLOG)){
165 abbrevTitleCache += " ["+uuidAndTitleCache.getId()+"]";
166 }
167 return abbrevTitleCache;
168 }
169 };
170
171 /** {@inheritDoc} */
172 @Override
173 protected ItemsFilter createFilter() {
174 return new ItemsFilter() {
175
176 /**
177 * Always returns false to enforce refiltering even if the pattern is equal
178 */
179 @Override
180 public boolean equalsFilter(ItemsFilter filter) {
181 return false;
182 }
183
184 @Override
185 public boolean isConsistentItem(Object item) {
186 return false;
187 }
188
189 @Override
190 public boolean matchItem(Object item) {
191 String text = null;
192 if(item instanceof UuidAndTitleCache){
193 if (((UuidAndTitleCache) item).getAbbrevTitleCache() != null){
194 text = ((UuidAndTitleCache) item).getAbbrevTitleCache();
195 } else{
196 text = ((UuidAndTitleCache) item).getTitleCache();
197 }
198 }else if(item instanceof String){
199 text = (String) item;
200 }
201 return text != null ? matches(text) : false;
202 }
203
204 };
205 }
206
207 @Override
208 protected Comparator getItemsComparator() {
209 return new Comparator<UuidAndTitleCache>() {
210 @Override
211 public int compare(UuidAndTitleCache entity1,
212 UuidAndTitleCache entity2) {
213 Collator collator = Collator.getInstance();
214 return collator.compare(entity1.getAbbrevTitleCache(), entity2.getAbbrevTitleCache());
215 }
216 };
217 }
218
219
220 }