/* * Copyright (c) 2009 Lockheed Martin Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.eurekastreams.server.service.actions.strategies.directory; import org.eurekastreams.commons.search.ProjectionSearchRequestBuilder; import org.eurekastreams.commons.search.modelview.ModelView; import org.eurekastreams.server.domain.EntityType; import org.eurekastreams.server.search.modelview.DomainGroupModelView; import org.eurekastreams.server.search.modelview.OrganizationModelView; import org.eurekastreams.server.search.modelview.PersonModelView; /** * Factory to return an organization child getter strategy based on child type. */ public final class OrgChildrenGetterFactory { /** * Build an OrgChildrenGetter strategy for the type of children described with the input OrgChildType. * * @param childType * value * @param inQueryBuilder * the strategy to build a Lucene query string for searching the directory * @param inSearchRequestBuilder * the search request builder to build our query * @param inSortFieldBuilder * the query sort builder * @param inIsRecursive * whether we're searching for entities recursively from the org with the input shortName * @return an OrgChildrenGetter strategy */ public OrgChildrenGetter< ? extends ModelView> buildOrgChildrenGetter(final EntityType childType, final DirectorySearchLuceneQueryBuilder inQueryBuilder, final ProjectionSearchRequestBuilder inSearchRequestBuilder, final SortFieldBuilder inSortFieldBuilder, final boolean inIsRecursive) { switch (childType) { case GROUP: return new OrgChildrenGetter<DomainGroupModelView>(inQueryBuilder, inSearchRequestBuilder, inSortFieldBuilder, inIsRecursive); case PERSON: return new OrgChildrenGetter<PersonModelView>(inQueryBuilder, inSearchRequestBuilder, inSortFieldBuilder, inIsRecursive); case ORGANIZATION: return new OrgChildrenGetter<OrganizationModelView>(inQueryBuilder, inSearchRequestBuilder, inSortFieldBuilder, inIsRecursive); default: throw new RuntimeException("Unhandled OrgChildType: " + childType.toString()); } } }