Project

General

Profile

Download (9.49 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
import java.util.UUID;
16

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

    
46
/**
47
 * @author n.hoffmann
48
 * @created Dec 8, 2010
49
 */
50
public class SearchManager {
51

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

    
54
	public static final String WILDCARD = "*"; //$NON-NLS-1$
55

    
56
	public static int NO_COUNT = -1;
57

    
58
	public List<TaxonName> findNames(IIdentifiableEntityServiceConfigurator configurator, ConversationHolder conversation){
59
	    List<TaxonName> records = CdmStore.getService(INameService.class).findByTitle(configurator).getRecords();
60
	    addUuidSearchResults(records, configurator, INameService.class);
61
	    return records;
62
	}
63

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

    
71
		List<NameRelationship> relationships = new ArrayList<NameRelationship>();
72
		List<RelationshipBase> all = CdmStore.getService(INameService.class).getAllRelationships(0, 0);
73

    
74
		for (RelationshipBase relationship : all){
75
			if(relationship instanceof NameRelationship){
76
				relationships.add((NameRelationship) relationship);
77
			}
78
		}
79
		return relationships;
80
	}
81

    
82
	public List<UuidAndTitleCache<IdentifiableEntity>> findTaxaAndNames(IFindTaxaAndNamesConfigurator<TaxonBase> configurator){
83
		return CdmStore.getService(ITaxonService.class).findTaxaAndNamesForEditor(configurator);
84
	}
85

    
86
	public List<Reference> findReferences(IIdentifiableEntityServiceConfigurator configurator){
87
	    List<Reference> records = CdmStore.getService(IReferenceService.class).findByTitle(configurator).getRecords();
88
	    addUuidSearchResults(records, configurator, IReferenceService.class);
89
	    return records;
90
	}
91

    
92
	public List<AgentBase> findAgents(IIdentifiableEntityServiceConfigurator configurator){
93
	    List<AgentBase> records = CdmStore.getService(IAgentService.class).findByTitle(configurator).getRecords();
94
	    addUuidSearchResults(records, configurator, IAgentService.class);
95
	    return records;
96
	}
97

    
98
    /**
99
     * Check search string if it is a {@link UUID} and, if <code>true</code>, search for the corresponding entity.
100
     * @param records the list to which the search results are added
101
     * @param configurator the configurator holding the search string
102
     * @param service the service to use for searching
103
     */
104
    private <T extends ICdmBase> void addUuidSearchResults(List<T> records, IIdentifiableEntityServiceConfigurator configurator, Class<? extends IService<T>> service) {
105
        String titleSearchString = configurator.getTitleSearchString();
106
		try {
107
		    UUID uuid = UUID.fromString(titleSearchString);
108
		    T foundRecord = (T) CdmStore.getService(service).load(uuid, configurator.getPropertyPaths());
109
		    if(foundRecord!=null){
110
		        records.add(foundRecord);
111
		    }
112
		} catch (IllegalArgumentException e) {
113
		    //search string was no UUID
114
		}
115
    }
116

    
117
	@SuppressWarnings("unchecked")
118
	public List<TeamOrPersonBase> findTeamOrPersons(IIdentifiableEntityServiceConfigurator configurator){
119
	    configurator.setClazz(TeamOrPersonBase.class);
120
	    return (List)findAgents(configurator);
121
	}
122

    
123
	/**
124
	 * Searches for {@link SpecimenOrObservationBase} with the parameters specified in the
125
	 * {@link IIdentifiableEntityServiceConfigurator}<br>
126
	 * <br>
127
	 * Note: FieldUnits are omitted by default. See {@link #findOccurrences(IIdentifiableEntityServiceConfigurator, boolean)}
128
	 *
129
	 * @param configurator the configurator to use for the search
130
	 * @return a list of the SpecimenOrObservationBases matching the search parameters found
131
	 */
132
	public List<SpecimenOrObservationBase> findOccurrences(IIdentifiableEntityServiceConfigurator configurator){
133
	    // by default we do not show field units. This may be configured via preferences
134
	    return findOccurrences(configurator, PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.BULK_EDITOR_OCCURRENCE_SHOW_FIELD_UNITS));
135
	}
136

    
137

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

    
165
		List<String> occurrencePropertyPaths = new ArrayList<String>();
166
		occurrencePropertyPaths.addAll(BASE_OCCURRENCE_INIT_STRATEGY);
167
		for(String propertyPath:BASE_OCCURRENCE_INIT_STRATEGY) {
168
		    occurrencePropertyPaths.add("derivationEvents.derivatives." + propertyPath); //$NON-NLS-1$
169
		}
170
		configurator.setPropertyPaths(occurrencePropertyPaths);
171

    
172
		records = CdmStore.getService(IOccurrenceService.class).findByTitle(configurator).getRecords();
173
		addUuidSearchResults(records, configurator, IOccurrenceService.class);
174
		return records;
175
	}
176

    
177
	public List<User> findUsers(IIdentifiableEntityServiceConfigurator configurator){
178
		String userNameSearchString = sqlizeTitleSearchString(configurator);
179
		// TODO why are users not identifiable entities?
180
        List<User> records = CdmStore.getService(IUserService.class).listByUsername(userNameSearchString,
181
                configurator.getMatchMode(), configurator.getCriteria(), configurator.getPageSize(),
182
                configurator.getPageNumber(), configurator.getOrderHints(), configurator.getPropertyPaths());
183
        addUuidSearchResults(records, configurator, IUserService.class);
184
        return records;
185
	}
186

    
187

    
188
	public List<Group> findGroups(IIdentifiableEntityServiceConfigurator configurator){
189
		String groupNameSearchString = sqlizeTitleSearchString(configurator);
190
		// TODO why are groups not identifiable entities?
191
        List<Group> records = CdmStore.getService(IGroupService.class).listByName(groupNameSearchString,
192
                configurator.getMatchMode(), configurator.getCriteria(), configurator.getPageSize(),
193
                configurator.getPageNumber(), configurator.getOrderHints(), configurator.getPropertyPaths());
194
        addUuidSearchResults(records, configurator, IGroupService.class);
195
        return records;
196
	}
197

    
198

    
199
	private String sqlizeTitleSearchString(IIdentifiableEntityServiceConfigurator configurator){
200
		return configurator.getTitleSearchString().replace(WILDCARD, "%"); //$NON-NLS-1$
201
	}
202

    
203
	public List findTaxa(IIdentifiableEntityServiceConfigurator configurator) {
204
	    List<TaxonBase> records = CdmStore.getService(ITaxonService.class).findByTitle(configurator).getRecords();
205
	    addUuidSearchResults(records, configurator, ITaxonService.class);
206
	    return records;
207
	}
208

    
209
	public List findMedia(IIdentifiableEntityServiceConfigurator configurator) {
210
	    List<Media> records = CdmStore.getService(IMediaService.class).findByTitle(configurator).getRecords();
211
	    addUuidSearchResults(records, configurator, IMediaService.class);
212
	    return records;
213
    }
214

    
215

    
216
}
(9-9/14)