/** * Copyright (C) 2014-2016 LinkedIn Corp. (pinot-core@linkedin.com) * * 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 com.linkedin.pinot.common.query; import com.linkedin.pinot.common.response.BrokerResponse; import com.linkedin.pinot.common.response.BrokerResponseFactory; import java.util.HashMap; import java.util.Map; /** * Registry for ReduceService based on BrokerResponse */ public class ReduceServiceRegistry { ReduceService<? extends BrokerResponse> _defaultReduceService; Map<BrokerResponseFactory.ResponseType, ReduceService<? extends BrokerResponse>> _registry; public ReduceServiceRegistry() { _defaultReduceService = null; _registry = new HashMap<BrokerResponseFactory.ResponseType, ReduceService<? extends BrokerResponse>>(); } /** * Register the ReduceService for the given broker response type. * * @param responseType BrokerResponseType for which to register the reduce service. * @param reduceService Reduce service to register */ public synchronized void register(BrokerResponseFactory.ResponseType responseType, ReduceService<? extends BrokerResponse> reduceService) { _registry.put(responseType, reduceService); } /** * Register a default ReduceService, to be returned when asked for an un-registered service. * @param reduceService */ public void registerDefault(ReduceService<? extends BrokerResponse> reduceService) { _defaultReduceService = reduceService; } /** * Return the ReduceService registered for the given BrokerResponseType. * If specified response type was not registered, the default registry is returned. * Returns null if a default was not registered. * * @param responseType * @return */ public ReduceService<? extends BrokerResponse> get(BrokerResponseFactory.ResponseType responseType) { ReduceService<? extends BrokerResponse> reduceService = _registry.get(responseType); return (reduceService == null) ? _defaultReduceService : reduceService; } }