blob: 20a99b33a5317bfe92c4cc9f30edc0fabd7c3a0f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.camel.quarkus.servlet.runtime;
import java.util.List;
import java.util.Map;
import io.quarkus.runtime.annotations.ConfigGroup;
import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigPhase;
import io.quarkus.runtime.annotations.ConfigRoot;
/**
* {@link ConfigRoot} for {@link #defaultServlet}.
*/
@ConfigRoot(name = "camel", phase = ConfigPhase.BUILD_AND_RUN_TIME_FIXED)
public final class CamelServletConfig {
/** {@code camel-servlet} component configuration */
public ServletsConfig servlet;
@ConfigGroup
public static class ServletsConfig {
/** The default servlet with implicit name {@value ServletConfig.DEFAULT_SERVLET_NAME} */
@ConfigItem(name = ConfigItem.PARENT)
public ServletConfig defaultServlet;
/** A collection of named servlets */
@ConfigItem(name = ConfigItem.PARENT)
public Map<String, ServletConfig> namedServlets;
}
/** {@code camel-servlet} component configuration */
@ConfigGroup
public static class ServletConfig {
public static final String DEFAULT_SERVLET_NAME = "CamelServlet";
public static final String DEFAULT_SERVLET_CLASS = "org.apache.camel.component.servlet.CamelHttpTransportServlet";
/**
* A comma separated list of path patterns under which the CamelServlet should be accessible. Example path
* patterns: {@code /*}, {@code /services/*}
*/
@ConfigItem
public List<String> urlPatterns;
/** A fully qualified name of a servlet class to serve paths that match {@link #urlPatterns} */
@ConfigItem(defaultValue = DEFAULT_SERVLET_CLASS)
public String servletClass;
/**
* A servletName as it would be defined in a `web.xml` file or in the
* {@link javax.servlet.annotation.WebServlet#name()} annotation.
*/
@ConfigItem(defaultValue = DEFAULT_SERVLET_NAME)
public String servletName;
/**
* @return {@code true} if this {@link ServletConfig} is valid as a whole. This currently translates to
* {@link #urlPatterns} being non-empty because {@link #servletClass} and {@link #servletName} have
* default values. Otherwise returns {@code false}.
*/
public boolean isValid() {
return !urlPatterns.isEmpty();
}
/**
* Setting the servlet name is possible both via {@link #servletName} and the key in the
* {@link org.apache.camel.quarkus.servlet.runtime.CamelServletConfig.ServletsConfig#namedServlets} map. This method
* sets the precedence: the {@link #servletName} gets effective only if it has a non-default value; otherwise
* the {@code key} is returned as the servlet name.
*
* @param key the key used in
* {@link org.apache.camel.quarkus.servlet.runtime.CamelServletConfig.ServletsConfig#namedServlets}
* @return the effective servlet name to use
*/
public String getEffectiveServletName(final String key) {
return DEFAULT_SERVLET_NAME.equals(servletName) ? key : servletName;
}
}
}