/* * Copyright © 2014 Cask Data, Inc. * * 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 co.cask.cdap.api.service; import co.cask.cdap.api.Resources; import co.cask.cdap.api.service.http.HttpServiceHandler; import co.cask.cdap.internal.api.AbstractPluginConfigurable; import java.util.Arrays; /** * An abstract implementation of {@link Service}. Users may extend this to write a {@link Service}. * * The default no-op constructor must be implemented. */ public abstract class AbstractService extends AbstractPluginConfigurable<ServiceConfigurer> implements Service { private ServiceConfigurer configurer; @Override public final void configure(ServiceConfigurer serviceConfigurer) { this.configurer = serviceConfigurer; configure(); } /** * Set the name for the Service. * @param name of the service. */ protected void setName(String name) { configurer.setName(name); } /** * Set the description of the Service. * @param description of the service. */ protected void setDescription(String description) { configurer.setDescription(description); } /** * Add handler to the Service. * @param handler to serve requests with. */ protected void addHandler(HttpServiceHandler handler) { addHandlers(Arrays.asList(handler)); } /** * Add a list of handlers to the Service. * @param handlers to service requests with. */ protected void addHandlers(Iterable<? extends HttpServiceHandler> handlers) { configurer.addHandlers(handlers); } /** * Sets the number of instances needed for the server that runs all {@link HttpServiceHandler}s of this Service. * @param instances Number of instances, must be > 0. */ protected void setInstances(int instances) { configurer.setInstances(instances); } /** * Sets the resources requirements for the server that runs all {@link HttpServiceHandler}s of this Service. * @param resources The requirements. */ protected void setResources(Resources resources) { configurer.setResources(resources); } /** * Returns the {@link ServiceConfigurer}, only available at configuration time. */ @Override protected final ServiceConfigurer getConfigurer() { return configurer; } /** * Implements this method to configure this Service. */ protected abstract void configure(); }