/** * Copyright (c) 2013-2016, The SeedStack authors <http://seedstack.org> * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.seedstack.seed.core.internal; import com.google.common.collect.Lists; import io.nuun.kernel.api.plugin.InitState; import io.nuun.kernel.api.plugin.context.InitContext; import io.nuun.kernel.core.AbstractPlugin; import org.seedstack.coffig.Coffig; import org.seedstack.seed.Application; import org.seedstack.seed.core.SeedRuntime; import org.seedstack.seed.spi.ApplicationProvider; import java.util.ArrayList; import java.util.Collection; import java.util.List; public abstract class AbstractSeedPlugin extends AbstractPlugin { private Application application; @Override public final void provideContainerContext(Object containerContext) { setup(((SeedRuntime) containerContext)); } @Override public final Collection<Class<?>> requiredPlugins() { List<Class<?>> dependencies = new ArrayList<>(dependencies()); dependencies.add(ApplicationProvider.class); return dependencies; } @Override public final InitState init(InitContext initContext) { application = initContext.dependency(ApplicationProvider.class).getApplication(); return initialize(initContext); } protected void setup(SeedRuntime seedRuntime) { } protected InitState initialize(InitContext initContext) { return InitState.INITIALIZED; } protected Collection<Class<?>> dependencies() { return Lists.newArrayList(); } protected Application getApplication() { if (application == null) { throw new IllegalStateException("Configuration is not available before plugin initialization"); } return application; } protected Coffig getConfiguration() { return getApplication().getConfiguration(); } protected <T> T getConfiguration(Class<T> configClass, String... path) { return getConfiguration().get(configClass, path); } }