tikhomirov@520: /* tikhomirov@520: * Copyright (c) 2012 TMate Software Ltd tikhomirov@520: * tikhomirov@520: * This program is free software; you can redistribute it and/or modify tikhomirov@520: * it under the terms of the GNU General Public License as published by tikhomirov@520: * the Free Software Foundation; version 2 of the License. tikhomirov@520: * tikhomirov@520: * This program is distributed in the hope that it will be useful, tikhomirov@520: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@520: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@520: * GNU General Public License for more details. tikhomirov@520: * tikhomirov@520: * For information on how to redistribute this software under tikhomirov@520: * the terms of a license other than GNU General Public License tikhomirov@520: * contact TMate Software at support@hg4j.com tikhomirov@520: */ tikhomirov@520: package org.tmatesoft.hg.internal; tikhomirov@520: tikhomirov@520: import org.tmatesoft.hg.util.Adaptable; tikhomirov@520: tikhomirov@520: /** tikhomirov@520: * Save callback and delegate to another lifecycle instance, if any tikhomirov@520: * tikhomirov@520: * @author Artem Tikhomirov tikhomirov@520: * @author TMate Software Ltd. tikhomirov@520: */ tikhomirov@520: public class LifecycleProxy implements Lifecycle { tikhomirov@520: tikhomirov@520: private Callback lifecycleCallback; tikhomirov@520: private Lifecycle target; tikhomirov@520: tikhomirov@520: public LifecycleProxy() { tikhomirov@520: } tikhomirov@520: tikhomirov@520: public LifecycleProxy(Object delegate) { tikhomirov@520: init(delegate); tikhomirov@520: } tikhomirov@520: tikhomirov@520: tikhomirov@520: public void start(int count, Callback callback, Object token) { tikhomirov@520: lifecycleCallback = callback; tikhomirov@520: if (target != null) { tikhomirov@520: target.start(count, callback, token); tikhomirov@520: } tikhomirov@520: } tikhomirov@520: tikhomirov@520: public void finish(Object token) { tikhomirov@520: if (target != null) { tikhomirov@520: target.finish(token); tikhomirov@520: } tikhomirov@520: lifecycleCallback = null; tikhomirov@520: } tikhomirov@520: tikhomirov@520: public void init(Object delegate) { tikhomirov@520: target = Adaptable.Factory.getAdapter(delegate, Lifecycle.class, null); tikhomirov@520: } tikhomirov@520: tikhomirov@520: public void stop() { tikhomirov@520: assert lifecycleCallback != null; tikhomirov@520: if (lifecycleCallback != null) { tikhomirov@520: lifecycleCallback.stop(); tikhomirov@520: } tikhomirov@520: } tikhomirov@520: }