Project

General

Profile

Download (9.72 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9

    
10
package eu.etaxonomy.taxeditor.store;
11

    
12
import java.util.ArrayList;
13
import java.util.Arrays;
14
import java.util.List;
15

    
16
import org.eclipse.jface.dialogs.MessageDialog;
17
import org.eclipse.swt.widgets.Display;
18

    
19
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
20
import eu.etaxonomy.cdm.api.service.IAgentService;
21
import eu.etaxonomy.cdm.api.service.IGroupService;
22
import eu.etaxonomy.cdm.api.service.IMediaService;
23
import eu.etaxonomy.cdm.api.service.INameService;
24
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
25
import eu.etaxonomy.cdm.api.service.IReferenceService;
26
import eu.etaxonomy.cdm.api.service.ITaxonService;
27
import eu.etaxonomy.cdm.api.service.ITermService;
28
import eu.etaxonomy.cdm.api.service.IUserService;
29
import eu.etaxonomy.cdm.api.service.config.IFindTaxaAndNamesConfigurator;
30
import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
31
import eu.etaxonomy.cdm.model.agent.AgentBase;
32
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
33
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
34
import eu.etaxonomy.cdm.model.location.NamedArea;
35
import eu.etaxonomy.cdm.model.media.Media;
36
import eu.etaxonomy.cdm.model.name.NameRelationship;
37
import eu.etaxonomy.cdm.model.name.TaxonName;
38
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
39
import eu.etaxonomy.cdm.model.permission.Group;
40
import eu.etaxonomy.cdm.model.permission.User;
41
import eu.etaxonomy.cdm.model.reference.Reference;
42
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
43
import eu.etaxonomy.cdm.model.term.TermVocabulary;
44
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
45
import eu.etaxonomy.taxeditor.l10n.Messages;
46
import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
47
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
48

    
49
/**
50
 * @author n.hoffmann
51
 * @created Dec 8, 2010
52
 */
53
public class SearchManager {
54

    
55
	public static final List NO_RESULTS = Arrays.asList(new Object[]{});
56

    
57
	public static final String WILDCARD = "*"; //$NON-NLS-1$
58

    
59
	public static int NO_COUNT = -1;
60

    
61
    private static final int MAX_RESULTS_BEFORE_WARNING = 500;
62

    
63
	public List<TaxonName> findNames(IIdentifiableEntityServiceConfigurator configurator, ConversationHolder conversation){
64
	    List<TaxonName> records = CdmStore.getService(INameService.class).findByTitle(configurator).getRecords();
65
	    return records;
66
	}
67

    
68
	public List<NameRelationship> findNameRelationships(
69
			IIdentifiableEntityServiceConfigurator configurator) {
70
		if(true){
71
		    //if activated again remember to add uuid search results like in other searches
72
			return NO_RESULTS;
73
		}
74

    
75
		List<NameRelationship> relationships = new ArrayList<>();
76

    
77
//		TODO: the method getAllRelationships does not exist anymore.
78
//		This method is not used anymore because there is no NameRelationship Bulkeditor
79

    
80
		//		List<RelationshipBase> all = CdmStore.getService(INameService.class).getAllRelationships(0, 0);
81
//
82
//		for (RelationshipBase<?,?,?> relationship : all){
83
//			if(relationship instanceof NameRelationship){
84
//				relationships.add((NameRelationship) relationship);
85
//			}
86
//		}
87
		return relationships;
88
	}
89

    
90
	public List<UuidAndTitleCache<? extends IdentifiableEntity>> findTaxaAndNames(IFindTaxaAndNamesConfigurator configurator){
91
		return CdmStore.getService(ITaxonService.class).findTaxaAndNamesForEditor(configurator);
92
	}
93

    
94

    
95
	@SuppressWarnings("unchecked")
96
    public List<Reference> findReferences(IIdentifiableEntityServiceConfigurator configurator){
97
		List<Reference> records = CdmStore.getService(IReferenceService.class).findByTitle(configurator).getRecords();
98
	    return records;
99
	}
100

    
101
	public List<AgentBase> findAgents(IIdentifiableEntityServiceConfigurator configurator){
102
	    List<AgentBase> records = CdmStore.getService(IAgentService.class).findByTitle(configurator).getRecords();
103
	    return records;
104
	}
105

    
106
	@SuppressWarnings("unchecked")
107
	public List<TeamOrPersonBase> findTeamOrPersons(IIdentifiableEntityServiceConfigurator configurator){
108
	    configurator.setClazz(TeamOrPersonBase.class);
109
	    return (List)findAgents(configurator);
110
	}
111

    
112
	/**
113
	 * Searches for {@link SpecimenOrObservationBase} with the parameters specified in the
114
	 * {@link IIdentifiableEntityServiceConfigurator}<br>
115
	 * <br>
116
	 * Note: FieldUnits are omitted by default. See {@link #findOccurrences(IIdentifiableEntityServiceConfigurator, boolean)}
117
	 *
118
	 * @param configurator the configurator to use for the search
119
	 * @return a list of the SpecimenOrObservationBases matching the search parameters found
120
	 */
121
	public List<SpecimenOrObservationBase> findOccurrences(IIdentifiableEntityServiceConfigurator configurator, boolean showCountWarning){
122
	    // by default we do not show field units. This may be configured via preferences
123
	    return findOccurrences(configurator, PreferencesUtil.getBooleanValue(IPreferenceKeys.BULK_EDITOR_OCCURRENCE_SHOW_FIELD_UNITS), showCountWarning);
124
	}
125

    
126

    
127
	/**
128
	 * Searches for {@link SpecimenOrObservationBase} with the parameters specified in the
129
	 * {@link IIdentifiableEntityServiceConfigurator}
130
	 *
131
	 * @param configurator the configurator to use for the search
132
	 * @return a list of the SpecimenOrObservationBases found
133
	 * @param showFieldUnits if <code>true</code> then also FieldUnits are searched
134
	 * @return
135
	 */
136
	public List<SpecimenOrObservationBase> findOccurrences(IIdentifiableEntityServiceConfigurator<SpecimenOrObservationBase> configurator, boolean showFieldUnits,
137
	        boolean showCountWarning){
138
	    List<SpecimenOrObservationBase> records = new ArrayList<SpecimenOrObservationBase>();
139
		final List<String> BASE_OCCURRENCE_INIT_STRATEGY = Arrays.asList(new String[] {
140
		        "collection", //$NON-NLS-1$
141
		        "descriptions", //$NON-NLS-1$
142
		        "identifiers", //$NON-NLS-1$
143
		        "derivationEvents.originals", //$NON-NLS-1$
144
		        "derivedFrom.originals", //$NON-NLS-1$
145
		        "gatheringEvent.country.representations", //$NON-NLS-1$
146
		        "gatheringEvent.collector", //$NON-NLS-1$
147
		        "gatheringEvent.locality", //$NON-NLS-1$
148
		        "descriptions.descriptionElements", //$NON-NLS-1$
149
		        "kindOfUnit", //$NON-NLS-1$
150
		        "amplificationResults", //$NON-NLS-1$
151
		        "sequences.singleReadAlignments", //$NON-NLS-1$
152
		        "mediaSpecimen" //$NON-NLS-1$
153
		});
154

    
155
		List<String> occurrencePropertyPaths = new ArrayList<String>();
156
		occurrencePropertyPaths.addAll(BASE_OCCURRENCE_INIT_STRATEGY);
157
		for(String propertyPath:BASE_OCCURRENCE_INIT_STRATEGY) {
158
		    occurrencePropertyPaths.add("derivationEvents.derivatives." + propertyPath); //$NON-NLS-1$
159
		}
160
		configurator.setPropertyPaths(occurrencePropertyPaths);
161

    
162
        if(showCountWarning && checkLargeResult(CdmStore.getService(IOccurrenceService.class).countOccurrences(configurator))){
163
            records = CdmStore.getService(IOccurrenceService.class).findByTitle(configurator).getRecords();
164
        }
165
        else{
166
            records = CdmStore.getService(IOccurrenceService.class).findByTitle(configurator).getRecords();
167
        }
168
		return records;
169
	}
170

    
171
	public List<User> findUsers(IIdentifiableEntityServiceConfigurator configurator){
172
		String userNameSearchString = sqlizeTitleSearchString(configurator);
173
		// TODO why are users not identifiable entities?
174
        List<User> records = CdmStore.getService(IUserService.class).listByUsername(userNameSearchString,
175
                configurator.getMatchMode(), configurator.getCriteria(), configurator.getPageSize(),
176
                configurator.getPageNumber(), configurator.getOrderHints(), configurator.getPropertyPaths());
177
        return records;
178
	}
179

    
180

    
181

    
182
    private boolean checkLargeResult(long count) {
183
        return checkLargeResult(count, MAX_RESULTS_BEFORE_WARNING);
184
    }
185

    
186
    private boolean checkLargeResult(long count, int maxBeforWarning) {
187
        if(count > maxBeforWarning){
188
            return MessageDialog.openConfirm(Display.getDefault().getActiveShell(), Messages.SearchManager_LARGE_RESULT_EXPECTED,
189
                    String.format(Messages.SearchManager_LONG_SEARCH_WARNING, count));
190
        }else{
191
            return true;
192
        }
193
    }
194

    
195
	public List<Group> findGroups(IIdentifiableEntityServiceConfigurator configurator){
196
		String groupNameSearchString = sqlizeTitleSearchString(configurator);
197
		// TODO why are groups not identifiable entities?
198
        List<Group> records = CdmStore.getService(IGroupService.class).listByName(groupNameSearchString,
199
                configurator.getMatchMode(), configurator.getCriteria(), configurator.getPageSize(),
200
                configurator.getPageNumber(), configurator.getOrderHints(), configurator.getPropertyPaths());
201
        return records;
202
	}
203

    
204

    
205
	private String sqlizeTitleSearchString(IIdentifiableEntityServiceConfigurator configurator){
206
		return configurator.getTitleSearchString().replace(WILDCARD, "%"); //$NON-NLS-1$
207
	}
208

    
209
	public List findTaxa(IIdentifiableEntityServiceConfigurator configurator) {
210
	    List<TaxonBase> records = CdmStore.getService(ITaxonService.class).findByTitle(configurator).getRecords();
211
	    return records;
212
	}
213

    
214
	public List findMedia(IIdentifiableEntityServiceConfigurator configurator) {
215
	    List<Media> records = CdmStore.getService(IMediaService.class).findByTitle(configurator).getRecords();
216
	    return records;
217
    }
218

    
219
    /**
220
     * @param searchConfigurator
221
     * @return
222
     */
223
    public List<UuidAndTitleCache<NamedArea>> findNamedAreas(
224
            IIdentifiableEntityServiceConfigurator searchConfigurator, List<TermVocabulary> vocs) {
225
        List<UuidAndTitleCache<NamedArea>> entities = CdmStore.getService(ITermService.class).getUuidAndTitleCacheNamedArea(vocs, null, searchConfigurator.getTitleSearchString(), PreferencesUtil.getGlobalLanguage());
226
        return entities;
227
    }
228

    
229
}
(9-9/14)