/** * 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.web.internal.resources; import com.google.common.collect.Lists; import io.nuun.kernel.api.plugin.InitState; import io.nuun.kernel.api.plugin.context.InitContext; import org.seedstack.seed.core.internal.AbstractSeedPlugin; import org.seedstack.seed.web.WebConfig; import org.seedstack.seed.web.spi.FilterDefinition; import org.seedstack.seed.web.spi.ListenerDefinition; import org.seedstack.seed.web.spi.SeedFilterPriority; import org.seedstack.seed.web.spi.ServletDefinition; import org.seedstack.seed.web.spi.WebProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; /** * This plugin serves static resources under META-INF/resources with several benefits over the default servlet. * * @see WebResourcesFilter */ public class WebResourcesPlugin extends AbstractSeedPlugin implements WebProvider { private static final Logger LOGGER = LoggerFactory.getLogger(WebResourcesPlugin.class); private WebConfig.StaticResourcesConfig staticResourcesConfig; @Override public String name() { return "web-resources"; } @Override public InitState initialize(InitContext initContext) { staticResourcesConfig = getConfiguration(WebConfig.StaticResourcesConfig.class); return InitState.INITIALIZED; } @Override public Object nativeUnitModule() { if (staticResourcesConfig.isEnabled()) { return new WebResourcesModule(); } else { return null; } } @Override public List<ServletDefinition> servlets() { return null; } @Override public List<FilterDefinition> filters() { if (staticResourcesConfig.isEnabled()) { LOGGER.info("Static Web resources served on /*"); FilterDefinition resourcesFilter = new FilterDefinition("web-resources", WebResourcesFilter.class); resourcesFilter.setPriority(SeedFilterPriority.RESOURCES); resourcesFilter.setAsyncSupported(true); resourcesFilter.addMappings(new FilterDefinition.Mapping("/*")); return Lists.newArrayList(resourcesFilter); } else { return null; } } @Override public List<ListenerDefinition> listeners() { return null; } }