1bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2009 The Guava Authors 3bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 4bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * Licensed under the Apache License, Version 2.0 (the "License"); 5bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * you may not use this file except in compliance with the License. 6bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * You may obtain a copy of the License at 7bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 8bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * http://www.apache.org/licenses/LICENSE-2.0 9bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 10bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * Unless required by applicable law or agreed to in writing, software 11bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * distributed under the License is distributed on an "AS IS" BASIS, 12bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * See the License for the specific language governing permissions and 14bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * limitations under the License. 15bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor */ 16bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 17bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnorpackage com.google.common.util.concurrent; 18bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.Beta; 20bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnorimport com.google.common.collect.ForwardingObject; 21bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 22bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor/** 23bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * A {@link Service} that forwards all method calls to another service. 24bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 25bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * @author Chris Nokleberg 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @since 1.0 27bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor */ 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@Beta 29bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnorpublic abstract class ForwardingService extends ForwardingObject 30bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor implements Service { 31bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** Constructor for use by subclasses. */ 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected ForwardingService() {} 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 35bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor @Override protected abstract Service delegate(); 36bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public ListenableFuture<State> start() { 38bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor return delegate().start(); 39bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 40bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public State state() { 42bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor return delegate().state(); 43bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 44bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public ListenableFuture<State> stop() { 46bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor return delegate().stop(); 47bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 48bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public State startAndWait() { 50bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor return delegate().startAndWait(); 51bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 52bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public State stopAndWait() { 54bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor return delegate().stopAndWait(); 55bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 56bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean isRunning() { 58bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor return delegate().isRunning(); 59bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * A sensible default implementation of {@link #startAndWait()}, in terms of 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@link #start}. If you override {@link #start}, you may wish to override 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@link #startAndWait()} to forward to this implementation. 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @since 9.0 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected State standardStartAndWait() { 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Futures.getUnchecked(start()); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * A sensible default implementation of {@link #stopAndWait()}, in terms of 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@link #stop}. If you override {@link #stop}, you may wish to override 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@link #stopAndWait()} to forward to this implementation. 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @since 9.0 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected State standardStopAndWait() { 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Futures.getUnchecked(stop()); 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 80bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor} 81