/** * Copyright 2014 Sunny Gleason and original author or authors * * 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 io.kazuki.v0.store.lifecycle; import io.kazuki.v0.internal.helper.LogTranslation; import org.slf4j.Logger; /** * Abstract base class to make it easy to implement Lifecycle support by only overriding one or two * methods. */ public abstract class LifecycleSupportBase implements LifecycleRegistration, LifecycleAware { protected final Logger log = LogTranslation.getLogger(getClass()); protected volatile Lifecycle lifecycle; @Override public Lifecycle getLifecycle() { return this.lifecycle; } @Override public void register(Lifecycle lifecycle) { if (this.lifecycle != null && !this.lifecycle.equals(lifecycle)) { throw new IllegalStateException("lifecycle already registered with " + System.identityHashCode(this.lifecycle)); } this.lifecycle = lifecycle; this.lifecycle.register(this); } public void init() {} public void start() {} public void announce() {} public void unannounce() {} public void shutdown() {} public void stop() {} @Override public void eventFired(LifecycleEvent event) { switch (event) { case INIT: init(); break; case START: start(); break; case ANNOUNCE: announce(); break; case UNANNOUNCE: unannounce(); break; case SHUTDOWN: shutdown(); break; case STOP: stop(); break; } } }