CPD Results
The following document contains the results of PMD's CPD 6.55.0.
Duplications
| File | Project | Line |
|---|---|---|
| org/apache/commons/chain/web/jakarta/ChainInit.java | Commons Chain :: Web :: Jakarta | 88 |
| org/apache/commons/chain/web/javax/ChainInit.java | Commons Chain :: Web :: Javax | 88 |
final class ChainInit {
/**
* The name of the context init parameter containing the name of the
* servlet context attribute under which our resulting {@link Catalog}
* will be stored.
*/
static final String CONFIG_ATTR =
"org.apache.commons.chain.CONFIG_ATTR";
/**
* The name of the context init parameter containing a comma-delimited
* list of class loader resources to be scanned.
*/
static final String CONFIG_CLASS_RESOURCE =
"org.apache.commons.chain.CONFIG_CLASS_RESOURCE";
/**
* The name of the context init parameter containing a comma-delimited
* list of web application resources to be scanned.
*/
static final String CONFIG_WEB_RESOURCE =
"org.apache.commons.chain.CONFIG_WEB_RESOURCE";
/**
* The name of the context init parameter containing the fully
* qualified class name of the {@code RuleSet} implementation
* for configuring our {@link ConfigParser}.
*/
static final String RULE_SET =
"org.apache.commons.chain.RULE_SET";
/**
* Remove the configured {@link Catalog} from the servlet context
* attributes for this web application.
*
* @param context the servlet-context
* @param attr the value of the {@code CONFIG_ATTR}
*/
static void destroy(ServletContext context, String attr) {
if (attr != null) {
context.removeAttribute(attr);
}
CatalogFactory.clear();
}
/**
* Private constructor.
*/
private ChainInit() {
}
/**
* Scan the required chain configuration resources, assemble the
* configured chains into a {@link Catalog}, and expose it as a
* servlet context attribute under the specified key.
*
* @param context the servlet-context
* @param attr the value of the {@code CONFIG_ATTR}
* @param logger to use for logging
* @param parseJarResources {@code true} to parse resources in jar-files
*/
@SuppressWarnings("deprecation")
static void initialize(ServletContext context, String attr, Logger logger, boolean parseJarResources) throws ServletException {
String classResources = context.getInitParameter(CONFIG_CLASS_RESOURCE);
String ruleSet = context.getInitParameter(RULE_SET);
String webResources = context.getInitParameter(CONFIG_WEB_RESOURCE);
// Retrieve or create the Catalog instance we may be updating
Catalog<?> catalog = null;
if (attr != null) {
catalog = (Catalog<?>) context.getAttribute(attr);
if (catalog == null) {
catalog = new CatalogBase<>();
}
}
// Construct the configuration resource parser we will use
ConfigParser parser = new ConfigParser();
if (ruleSet != null) {
try {
ClassLoader loader =
Thread.currentThread().getContextClassLoader();
if (loader == null) {
loader = ChainInit.class.getClassLoader();
}
Class<? extends RuleSet> clazz = loader
.loadClass(ruleSet)
.asSubclass(RuleSet.class);
parser.setRuleSet(clazz.getDeclaredConstructor().newInstance());
} catch (Exception e) {
throw new ServletException("Exception initalizing RuleSet '"
+ ruleSet + "' instance ", e);
}
}
// Parse the resources specified in our init parameters (if any)
final CheckedConsumer<URL, Exception> parse;
if (attr == null) {
parse = parser::parse;
} else {
final Catalog<?> cat = catalog;
parse = url -> parser.parse(cat, url);
}
if (parseJarResources) {
parseJarResources(context, parse, logger);
}
ChainResources.parseClassResources(classResources, parse);
ChainResources.parseWebResources(context, webResources, parse);
// Expose the completed catalog (if requested)
if (attr != null) {
context.setAttribute(attr, catalog);
}
}
// --------------------------------------------------------- Private Methods
/**
* Parse resources found in JAR files in the {@code /WEB-INF/lib}
* subdirectory (if any).
*
* @param <E> the type of the exception from parse-function
* @param context {@code ServletContext} for this web application
* @param parse parse-function to parse the XML document
* @param logger to use for logging
*/
private static <E extends Exception> void parseJarResources(ServletContext context,
CheckedConsumer<URL, E> parse, Logger logger) {
Set<String> jars = context.getResourcePaths("/WEB-INF/lib");
if (jars == null) {
jars = Collections.emptySet();
}
String path = null;
Iterator<String> paths = jars.iterator();
while (paths.hasNext()) {
path = paths.next();
if (!path.endsWith(".jar")) {
continue;
}
URL resourceURL = null;
try {
URL jarURL = context.getResource(path);
path = jarURL.toExternalForm();
resourceURL = new URL("jar:"
+ translate(path)
+ "!/META-INF/chain-config.xml");
path = resourceURL.toExternalForm();
InputStream is = null;
try {
is = resourceURL.openStream();
} catch (Exception e) {
// means there is no such resource
logger.atTrace().setMessage("OpenStream: {}").addArgument(resourceURL).setCause(e).log();
}
if (is == null) {
logger.debug("Not Found: {}", resourceURL);
continue;
} else {
is.close();
}
logger.debug("Parsing: {}", resourceURL);
parse.accept(resourceURL);
} catch (Exception e) {
throw new RuntimeException("Exception parsing chain config resource '"
+ path + "': " + e.getMessage());
}
}
}
/**
* Translate space character into {@code %20} to avoid problems
* with paths that contain spaces on some JVMs.
*
* @param value Value to translate
*
* @return the translated value
*/
private static String translate(String value) {
while (true) {
int index = value.indexOf(' ');
if (index < 0) {
break;
}
value = value.substring(0, index) + "%20" + value.substring(index + 1);
}
return value;
}
} | ||
| File | Project | Line |
|---|---|---|
| org/apache/commons/chain/web/jakarta/servlet/ServletWebContext.java | Commons Chain :: Web :: Jakarta :: Servlet | 36 |
| org/apache/commons/chain/web/javax/servlet/ServletWebContext.java | Commons Chain :: Web :: Javax :: Servlet | 36 |
public class ServletWebContext extends WebContext {
private static final long serialVersionUID = 5302874006663111922L;
// ------------------------------------------------------ Instance Variables
/**
* The lazily instantiated {@code Map} of application scope
* attributes.
*/
private transient Map<String, Object> applicationScope = null;
/**
* The {@code ServletContext} for this web application.
*/
private transient ServletContext context = null;
/**
* The lazily instantiated {@code Map} of header name-value
* combinations (immutable).
*/
private transient Map<String, String> header = null;
/**
* The lazily instantiated {@code Map} of header name-values
* combinations (immutable).
*/
private transient Map<String, String[]> headerValues = null;
/**
* The lazily instantiated {@code Map} of context initialization
* parameters.
*/
private transient Map<String, String> initParam = null;
/**
* The lazily instantiated {@code Map} of cookies.
*/
private transient Map<String, Cookie> cookieValues = null;
/**
* The lazily instantiated {@code Map} of request
* parameter name-value.
*/
private transient Map<String, String> param = null;
/**
* The lazily instantiated {@code Map} of request
* parameter name-values.
*/
private transient Map<String, String[]> paramValues = null;
/**
* The {@code HttpServletRequest} for this request.
*/
private transient HttpServletRequest request = null;
/**
* The lazily instantiated {@code Map} of request scope
* attributes.
*/
private transient Map<String, Object> requestScope = null;
/**
* The {@code HttpServletResponse} for this request.
*/
private transient HttpServletResponse response = null;
/**
* The lazily instantiated {@code Map} of session scope
* attributes.
*/
private transient Map<String, Object> sessionScope = null;
// ------------------------------------------------------------ Constructors
/**
* Construct an uninitialized {@link ServletWebContext} instance.
*/
public ServletWebContext() {
}
/**
* Construct a {@link ServletWebContext} instance that is initialized
* with the specified Servlet API objects.
*
* @param context The {@code ServletContext} for this web application
* @param request The {@code HttpServletRequest} for this request
* @param response The {@code HttpServletResponse} for this request
*/
public ServletWebContext(ServletContext context,
HttpServletRequest request,
HttpServletResponse response) {
initialize(context, request, response);
}
// ---------------------------------------------------------- Public Methods
/**
* Return the {@link ServletContext} for this context.
*
* @return The {@code ServletContext} for this context.
*/
public ServletContext getContext() {
return this.context;
}
/**
* Return the {@link HttpServletRequest} for this context.
*
* @return The {@code HttpServletRequest} for this context.
*/
public HttpServletRequest getRequest() {
return this.request;
}
/**
* Return the {@link HttpServletResponse} for this context.
*
* @return The {@code HttpServletResponse} for this context.
*/
public HttpServletResponse getResponse() {
return this.response;
}
/**
* Initialize (or reinitialize) this {@link ServletWebContext} instance
* for the specified Servlet API objects.
*
* @param context The {@code ServletContext} for this web application
* @param request The {@code HttpServletRequest} for this request
* @param response The {@code HttpServletResponse} for this request
*/
public void initialize(ServletContext context,
HttpServletRequest request,
HttpServletResponse response) {
// Save the specified Servlet API object references
this.context = context;
this.request = request;
this.response = response;
// Perform other setup as needed
}
/**
* Release references to allocated resources acquired in
* {@code initialize()} of via subsequent processing. After this
* method is called, subsequent calls to any other method than
* {@code initialize()} will return undefined results.
*/
public void release() {
// Release references to allocated collections
applicationScope = null;
header = null;
headerValues = null;
initParam = null;
param = null;
paramValues = null;
cookieValues = null;
requestScope = null;
sessionScope = null;
// Release references to Servlet API objects
context = null;
request = null;
response = null;
}
// ------------------------------------------------------ WebContext Methods
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Application scope Map.
*/
@Override
public Map<String, Object> getApplicationScope() {
if (applicationScope == null && context != null) {
applicationScope = new ServletApplicationScopeMap(context);
}
return applicationScope;
}
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Header values Map.
*/
@Override
public Map<String, String> getHeader() {
if (header == null && request != null) {
header = new ServletHeaderMap(request);
}
return header;
}
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Header values Map.
*/
@Override
public Map<String, String[]> getHeaderValues() {
if (headerValues == null && request != null) {
headerValues = new ServletHeaderValuesMap(request);
}
return headerValues;
}
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Initialization parameter Map.
*/
@Override
public Map<String, String> getInitParam() {
if (initParam == null && context != null) {
initParam = new ServletInitParamMap(context);
}
return initParam;
}
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Request parameter Map.
*/
@Override
public Map<String, String> getParam() {
if (param == null && request != null) {
param = new ServletParamMap(request);
}
return param;
}
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Request parameter Map.
*/
@Override
public Map<String, String[]> getParamValues() {
if (paramValues == null && request != null) {
paramValues = new ServletParamValuesMap(request);
}
return paramValues;
}
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Map of Cookies.
* @since Chain 1.1
*/
@Override
public Map<String, Cookie> getCookies() {
if (cookieValues == null && request != null) {
cookieValues = new ServletCookieMap(request);
}
return cookieValues;
}
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Request scope Map.
*/
@Override
public Map<String, Object> getRequestScope() {
if (requestScope == null && request != null) {
requestScope = new ServletRequestScopeMap(request);
}
return requestScope;
}
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Session scope Map.
*/
@Override
public Map<String, Object> getSessionScope() {
if (sessionScope == null && request != null) {
sessionScope = new ServletSessionScopeMap(request);
}
return sessionScope;
}
} | ||
| File | Project | Line |
|---|---|---|
| org/apache/commons/chain/web/jakarta/internal/CookieMap.java | Commons Chain :: Web :: Jakarta | 41 |
| org/apache/commons/chain/web/javax/internal/CookieMap.java | Commons Chain :: Web :: Javax | 41 |
public class CookieMap<P> extends ParameterMap<P, Cookie> {
/**
* Supplier to return the {@link Cookie}-Array in this object.
*/
private final Supplier<Cookie[]> cookiesSupplier;
/**
* The constructor for the {@code Map} for cookies.
*
* @param request the request with the cookies
* @param cookiesSupplier Supplier to return the {@link Cookie}-Array in this
* object
*/
public CookieMap(final P request, final Supplier<Cookie[]> cookiesSupplier) {
super(request, null, null);
this.cookiesSupplier = cookiesSupplier;
}
/**
* Returns {@code true} if this cookie-map contains a mapping
* for the specified cookie-name.
*
* @param key The key whose presence in this cookie-map is to
* be tested
*
* @return {@code true} if this cookie-map contains a mapping
* for the specified cookie-name.
*/
@Override
public boolean containsKey(Object key) {
return get(key) != null;
}
/**
* Returns {@code true} if this cookie-map maps one or more keys
* to the specified cookie.
*
* @param value cookie whose presence in this cookie-map is to be
* tested
*
* @return {@code true} if this cookie-map maps one or more keys
* to the specified cookie
*/
@Override
public boolean containsValue(Object value) {
for (Cookie cookie : values()) {
if (cookie.equals(value)) {
return true;
}
}
return false;
}
/**
* Returns a {@link Set} view of the mappings contained in this
* cookie-map. The set is not backed by the cookie-map, so
* changes to the cookie-map are not reflected in the set,
* and vice-versa.
*
* @return a set view of the mappings contained in this cookie-map
*/
@Override
public Set<Map.Entry<String, Cookie>> entrySet() {
final Set<Map.Entry<String, Cookie>> set = new HashSet<>();
for (Cookie cookie : values()) {
set.add(new MapEntry<>(cookie.getName(), cookie, false));
}
return set;
}
/**
* Returns the cookie to which the specified cookie-name is mapped,
* or {@code null} if this cookie-map contains no mapping for the
* cookie-name.
*
* @param key the cookie-name whose associated value is to be
* returned
*
* @return the value to which the specified key is mapped, or
* {@code null} if this cookie-map contains no mapping for
* the cookie-name
*
* @see #put(Object, Object)
*/
@Override
public Cookie get(Object key) {
final Collection<Cookie> cookies = values();
if (!cookies.isEmpty()) {
final String skey = key(key);
for (Cookie cookie : cookies) {
if (cookie.getName().equals(skey)) {
return cookie;
}
}
}
return null;
}
/**
* Returns {@code true} if this cookie-map contains no cookies.
*
* @return {@code true} if this cookie-map contains no cookies
*/
@Override
public boolean isEmpty() {
final Cookie[] cookies = cookiesSupplier.get();
return cookies == null || cookies.length == 0;
}
/**
* Returns a {@link Set} view of the cookies contained in this
* cookie-map. The set is not backed by the cookie-map, so
* changes to the cookie-map are not reflected in the set, and
* vice-versa.
*
* @return a set view of the cookies contained in this cookie-map
*/
@Override
public Set<String> keySet() {
final Collection<Cookie> cookies = values();
final Set<String> set = new HashSet<String>(Math.max((int) (cookies.size() / .75f) + 1, 16));
for (Cookie cookie : cookies) {
set.add(cookie.getName());
}
return set;
}
/**
* Returns the number of cookies in this cookie-map.
*
* @return the number of cookies in this cookie-map
*/
@Override
public int size() {
final Cookie[] cookies = cookiesSupplier.get();
return cookies == null ? 0 : cookies.length;
}
/**
* Returns a {@link Collection} view of the cookies contained in
* this cookie-map. The collection is not backed by the
* cookie-map, so changes to the cookie-map are not
* reflected in the collection, and vice-versa.
*
* @return a view of the cookies contained in this cookie-map
*/
@Override
public Collection<Cookie> values() {
final Cookie[] cookies = cookiesSupplier.get();
return cookies == null ? Collections.emptyList() : Arrays.asList(cookies);
}
/**
* Returns the hash code value for this cookie-map. The
* hash code of a cookie-map is defined to be the sum of
* the hash codes of each entry in the cookie-map's
* {@code entrySet()} view. This ensures that {@code m1.equals(m2)}
* implies that {@code m1.hashCode()==m2.hashCode()} for any two
* parameter-maps {@code m1} and {@code m2}, as required by the
* general contract of {@link Object#hashCode}.
*
* @implSpec
* This implementation calls the {@code hashCode()} from the
* parameter-map.
*
* @return the hash code value for this cookie-map
*/
@Override
public int hashCode() {
return super.hashCode();
}
/**
* Compares the specified object with this cookie-map for equality.
* Returns {@code true} if the given object is also a cookie-map
* and the two cookie-maps represent the same mappings. More formally,
* two cookie-maps {@code m1} and {@code m2} represent the same
* mappings if {@code m1.entrySet().equals(m2.entrySet())}.
*
* @param obj object to be compared for equality with this
* cookie-map
*
* @return {@code true} if the specified object is equal to this
* cookie-map
*/
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
} | ||
| File | Project | Line |
|---|---|---|
| org/apache/commons/chain/web/jakarta/ChainResources.java | Commons Chain :: Web :: Jakarta | 39 |
| org/apache/commons/chain/web/javax/ChainResources.java | Commons Chain :: Web :: Javax | 39 |
final class ChainResources {
/**
* This class uses a private constructor because it is a utility class.
*/
private ChainResources() {
}
// ---------------------------------------------------------- Static Methods
/**
* Parse the specified class loader resources.
*
* @param <E> the type of the exception from parse-function
* @param resources Comma-delimited list of resources (or {@code null})
* @param parse parse-function to parse the XML document
*/
static <E extends Exception> void parseClassResources(String resources,
CheckedConsumer<URL, E> parse) {
ClassLoader loader =
Thread.currentThread().getContextClassLoader();
if (loader == null) {
loader = ChainResources.class.getClassLoader();
}
parseResources(loader::getResource, resources, parse);
}
/**
* Parse the specified web application resources.
*
* @param <E> the type of the exception from parse-function
* @param context {@code ServletContext} for this web application
* @param resources Comma-delimited list of resources (or {@code null})
* @param parse parse-function to parse the XML document
*/
static <E extends Exception> void parseWebResources(ServletContext context,
String resources,
CheckedConsumer<URL, E> parse) {
parseResources(context::getResource, resources, parse);
}
/**
* Parse the specified resources with a resource-get-function.
*
* @param <ER> the type of the exception from resource-function
* @param <EP> the type of the exception from parse-function
* @param resourceFunction function to get the {@link URL} from a path
* @param resources Comma-delimited list of resources (or {@code null})
* @param parse parse-function to parse the XML document
*/
private static <ER extends Exception, EP extends Exception> void parseResources(
CheckedFunction<String, URL, ER> resourceFunction, String resources,
CheckedConsumer<URL, EP> parse) {
if (resources == null) {
return;
}
Logger logger = LoggerFactory.getLogger(ChainResources.class);
String[] paths = getResourcePaths(resources);
String path = null;
try {
for (String path2 : paths) {
path = path2;
URL url = resourceFunction.apply(path);
if (url == null) {
throw new IllegalStateException("Missing chain config resource '" + path + "'");
}
logger.debug("Loading chain config resource '{}'", path);
parse.accept(url);
}
} catch (Exception e) {
throw new RuntimeException("Exception parsing chain config resource '" + path + "': "
+ e.getMessage());
}
}
/**
* Parse the resource string into an array of paths. Empty entries will
* be skipped. (That is, all entries in the array are non-empty paths.)
*
* @param resources A comma-delimited list of resource paths (or
* {@code null}).
*
* @return An array of non-empty paths. The array itself may be empty.
*
* @since Chain 1.1
*/
static String[] getResourcePaths(String resources) {
final List<String> paths = new ArrayList<>();
if (resources != null) {
String path;
int comma;
int lastComma = 0;
while ((comma = resources.indexOf(',', lastComma)) >= 0) {
path = resources.substring(lastComma, comma).trim();
if (path.length() > 0) {
paths.add(path);
}
lastComma = comma + 1;
}
path = resources.substring(lastComma).trim();
if (path.length() > 0) {
paths.add(path);
}
}
return paths.toArray(new String[0]);
}
} | ||
| File | Project | Line |
|---|---|---|
| org/apache/commons/chain/web/jakarta/faces/FacesWebContext.java | Commons Chain :: Web :: Jakarta :: Faces | 37 |
| org/apache/commons/chain/web/javax/faces/FacesWebContext.java | Commons Chain :: Web :: Javax :: Faces | 37 |
public class FacesWebContext extends WebContext {
private static final long serialVersionUID = -1429681424077509130L;
// ------------------------------------------------------ Instance Variables
/**
* The {@code FacesContext} instance for the request represented
* by this {@link WebContext}.
*/
private transient FacesContext context = null;
/**
* The lazily instantiated {@code Map} of cookies.
*/
private transient Map<String, Cookie> cookieValues = null;
// ------------------------------------------------------------ Constructors
/**
* Construct an uninitialized {@link FacesWebContext} instance.
*/
public FacesWebContext() {
}
/**
* Construct a {@link FacesWebContext} instance that is initialized
* with the specified JavaServer Faces API objects.
*
* @param context The {@code FacesContext} for this request
*/
public FacesWebContext(FacesContext context) {
initialize(context);
}
// ---------------------------------------------------------- Public Methods
/**
* Return the {@code FacesContext} instance for the request
* associated with this {@link FacesWebContext}.
*
* @return The {@code FacesContext} for this request
*/
public FacesContext getContext() {
return this.context;
}
/**
* Initialize (or reinitialize) this {@link FacesWebContext} instance
* for the specified JavaServer Faces API objects.
*
* @param context The {@code FacesContext} for this request
*/
public void initialize(FacesContext context) {
this.context = context;
}
/**
* Release references to allocated resources acquired in
* {@code initialize()} of via subsequent processing. After this
* method is called, subsequent calls to any other method than
* {@code initialize()} will return undefined results.
*/
public void release() {
context = null;
cookieValues = null;
}
// ------------------------------------------------------ WebContext Methods
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Application scope Map.
*/
@Override
public Map<String, Object> getApplicationScope() {
return context.getExternalContext().getApplicationMap();
}
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Header values Map.
*/
@Override
public Map<String, String> getHeader() {
return context.getExternalContext().getRequestHeaderMap();
}
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Header values Map.
*/
@Override
public Map<String, String[]> getHeaderValues() {
return context.getExternalContext().getRequestHeaderValuesMap();
}
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Initialization parameter Map.
*/
@Override
public Map<String, String> getInitParam() {
return context.getExternalContext().getInitParameterMap();
}
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Request parameter Map.
*/
@Override
public Map<String, String> getParam() {
return context.getExternalContext().getRequestParameterMap();
}
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Request parameter Map.
*/
@Override
public Map<String, String[]> getParamValues() {
return context.getExternalContext().getRequestParameterValuesMap();
}
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Map of Cookies.
* @since Chain 1.1
*/
@Override
public Map<String, Cookie> getCookies() {
if (cookieValues == null) {
final Map<String, Object> cookiesSrc = context.getExternalContext().getRequestCookieMap();
final Map<String, Cookie> cookiesDest = new HashMap<>(cookiesSrc.size());
cookiesSrc.forEach((k, v) -> cookiesDest.put(k, (Cookie) v));
cookieValues = Collections.unmodifiableMap(cookiesDest);
}
return cookieValues;
}
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Request scope Map.
*/
@Override
public Map<String, Object> getRequestScope() {
return context.getExternalContext().getRequestMap();
}
/**
* See the {@link WebContext}'s Javadoc.
*
* @return Session scope Map.
*/
@Override
public Map<String, Object> getSessionScope() {
return context.getExternalContext().getSessionMap();
}
} | ||
| File | Project | Line |
|---|---|---|
| org/apache/commons/chain/web/jakarta/servlet/ChainProcessor.java | Commons Chain :: Web :: Jakarta :: Servlet | 57 |
| org/apache/commons/chain/web/javax/servlet/ChainProcessor.java | Commons Chain :: Web :: Javax :: Servlet | 57 |
public class ChainProcessor extends ChainServlet {
private static final long serialVersionUID = -6817532768031279260L;
// ------------------------------------------------------ Manifest Constants
/**
* The name of the servlet init parameter containing the name of the
* {@link Catalog} to use for processing incoming requests.
*/
public static final String CATALOG =
"org.apache.commons.chain.CATALOG";
/**
* The default request attribute under which we expose the
* {@link Catalog} being used to subordinate {@link Command}s.
*/
public static final String CATALOG_DEFAULT =
"org.apache.commons.chain.CATALOG";
/**
* The name of the servlet init parameter containing the name of the
* {@link Command} (loaded from our configured {@link Catalog} to use
* for processing each incoming request.
*/
public static final String COMMAND =
"org.apache.commons.chain.COMMAND";
/**
* The default command name.
*/
private static final String COMMAND_DEFAULT = "command";
// ------------------------------------------------------ Instance Variables
/**
* The name of the context attribute under which our {@link Catalog}
* is stored. This value is also used as the name of the context
* attribute under which the catalog is exposed to commands. If not
* specified, we will look up commands in the appropriate
* {@link Catalog} retrieved from our {@link CatalogFactory}
*/
private String attribute = null;
/**
* The name of the {@link Catalog} to retrieve from the
* {@link CatalogFactory} for this application, or {@code null}
* to select the default {@link Catalog}.
*/
private String catalog = null;
/**
* The name of the {@link Command} to be executed for each incoming
* request.
*/
private String command = null;
// ------------------------------------------------------------ Constructors
/**
* The Default-Constructor for this class.
*/
public ChainProcessor() {
}
// --------------------------------------------------------- Servlet Methods
/**
* Clean up as this application is shut down.
*/
@Override
public void destroy() {
super.destroy();
attribute = null;
catalog = null;
command = null;
}
/**
* Cache the name of the command we should execute for each request.
*
* @throws ServletException if an initialization error occurs
*/
@Override
public void init() throws ServletException {
super.init();
attribute = getServletConfig().getInitParameter(CONFIG_ATTR);
catalog = getServletConfig().getInitParameter(CATALOG);
command = getServletConfig().getInitParameter(COMMAND);
if (command == null) {
command = COMMAND_DEFAULT;
}
}
/**
* Configure a {@link ServletWebContext} for the current request, and
* pass it to the {@code execute()} method of the specified
* {@link Command}, loaded from our configured {@link Catalog}.
*
* @param request The request we are processing
* @param response The response we are creating
*
* @throws IOException if an input/output error occurs
* @throws ServletException if a servlet exception occurs
*/
@Override
public void service(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
ServletWebContext context =
new ServletWebContext(getServletContext(), request, response);
Catalog<ServletWebContext> theCatalog = null;
if (attribute != null) {
@SuppressWarnings("unchecked")
Catalog<ServletWebContext> catalog = (Catalog<ServletWebContext>)
getServletContext().getAttribute(this.attribute);
theCatalog = catalog;
} else if (catalog != null) {
theCatalog = CatalogFactory.<ServletWebContext>getInstance().getCatalog(catalog);
} else {
theCatalog = CatalogFactory.<ServletWebContext>getInstance().getCatalog();
}
if (attribute == null) {
request.setAttribute(CATALOG_DEFAULT, theCatalog);
}
Command<ServletWebContext> command = theCatalog.getCommand(this.command);
try {
command.execute(context);
} catch (Exception e) {
throw new ServletException(e);
}
}
} | ||
| File | Project | Line |
|---|---|---|
| org/apache/commons/chain/web/jakarta/ChainServlet.java | Commons Chain :: Web :: Jakarta | 93 |
| org/apache/commons/chain/web/javax/ChainServlet.java | Commons Chain :: Web :: Javax | 93 |
public class ChainServlet extends HttpServlet {
private static final long serialVersionUID = 4833344945293509188L;
// ------------------------------------------------------ Manifest Constants
/**
* The name of the context init parameter containing the name of the
* servlet context attribute under which our resulting {@link Catalog}
* will be stored.
*/
public static final String CONFIG_ATTR = ChainInit.CONFIG_ATTR;
/**
* The name of the context init parameter containing a comma-delimited
* list of class loader resources to be scanned.
*/
public static final String CONFIG_CLASS_RESOURCE =
ChainInit.CONFIG_CLASS_RESOURCE;
/**
* The name of the context init parameter containing a comma-delimited
* list of web application resources to be scanned.
*/
public static final String CONFIG_WEB_RESOURCE =
ChainInit.CONFIG_WEB_RESOURCE;
/**
* The name of the context init parameter containing the fully
* qualified class name of the {@code RuleSet} implementation
* for configuring our {@link ConfigParser}.
*/
public static final String RULE_SET = ChainInit.RULE_SET;
// ------------------------------------------------------------ Constructors
/**
* The Default-Constructor for this class.
*/
public ChainServlet() {
}
// --------------------------------------------------------- Servlet Methods
/**
* Clean up after ourselves as this application shuts down.
*/
@Override
public void destroy() {
final ServletConfig config = getServletConfig();
final ServletContext context = getServletContext();
ChainInit.destroy(context, config.getInitParameter(CONFIG_ATTR));
}
/**
* Create (if necessary) and configure a {@link Catalog} from the
* servlet init parameters that have been specified.
*
* @throws ServletException if the servlet could not be initialized
*/
@Override
public void init() throws ServletException {
final Logger logger = LoggerFactory.getLogger(ChainServlet.class);
final ServletConfig config = getServletConfig();
final ServletContext context = getServletContext();
logger.info("Initializing chain servlet '{}'", config.getServletName());
ChainInit.initialize(context, config.getInitParameter(CONFIG_ATTR), logger, false);
}
/**
* Does nothing; this servlet's only purpose is to initialize a Chain
* and store it in the servlet context.
*
* @param request the request issued by the client
* @param response the response to be returned to the cliengt
*
* @throws ServletException this exception is never thrown
* @throws IOException this exception is never thrown
*/
@Override
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// do nothing
}
} | ||
| File | Project | Line |
|---|---|---|
| org/apache/commons/chain/web/jakarta/servlet/RequestParameterMapper.java | Commons Chain :: Web :: Jakarta :: Servlet | 38 |
| org/apache/commons/chain/web/javax/servlet/RequestParameterMapper.java | Commons Chain :: Web :: Javax :: Servlet | 38 |
public class RequestParameterMapper extends LookupCommand<ServletWebContext> {
// ------------------------------------------------------ Instance Variables
private String catalogKey = ChainProcessor.CATALOG_DEFAULT;
private String parameter = "command";
// ------------------------------------------------------------ Constructors
/**
* The Default-Constructor for this class.
*/
public RequestParameterMapper() {
}
// -------------------------------------------------------------- Properties
/**
* Return the context key under which our {@link Catalog} has been
* stored.
*
* @return The context key for the Catalog.
*/
public String getCatalogKey() {
return this.catalogKey;
}
/**
* Set the context key under which our {@link Catalog} has been
* stored.
*
* @param catalogKey The new catalog key
*
* @deprecated Use catalogName to specify the name of the catalog in the
* catalog factory
*/
@Deprecated
public void setCatalogKey(String catalogKey) {
this.catalogKey = catalogKey;
}
/**
* Return the name of the request parameter to use for
* selecting the {@link Command} to be executed.
*
* @return The name of the request parameter.
*
* @deprecated Use catalogName to specify the name of the catalog in the
* catalog factory
*/
@Deprecated
public String getParameter() {
return this.parameter;
}
/**
* Set the name of the request parameter to use for
* selecting the {@link Command} to be executed.
*
* @param parameter The new parameter name
*/
public void setParameter(String parameter) {
this.parameter = parameter;
}
// --------------------------------------------------------- Command Methods
/**
* Look up the specified request parameter for this request, and use it
* to select an appropriate {@link Command} to be executed.
*
* @param context Context for the current request
*
* @return The name of the {@link Command} instance
*
* @since Chain 1.2
*/
@Override
protected String getCommandName(ServletWebContext context) {
// Look up the specified request parameter for this request
HttpServletRequest request = context.getRequest();
String value = request.getParameter(getParameter());
return value;
}
/**
* Return the {@link Catalog} to look up the {@link Command} in.
*
* @param context {@link Context} for this request
*
* @return The catalog.
*
* @throws IllegalArgumentException if no {@link Catalog}
* can be found
*
* @since Chain 1.2
*/
@Override
protected Catalog<ServletWebContext> getCatalog(ServletWebContext context) {
/* If the object returned from the passed context is not a valid catalog
* then we use the super class's catalog extraction logic to pull it
* or to error gracefully.
*/
Object testCatalog = context.get(getCatalogKey());
/* Assume that the underlying implementation is following convention and
* returning a catalog with the current context.
*/
@SuppressWarnings("unchecked")
Catalog<ServletWebContext> catalog = testCatalog instanceof Catalog
? (Catalog<ServletWebContext>) testCatalog
: super.getCatalog(context);
return catalog;
}
} | ||
| File | Project | Line |
|---|---|---|
| org/apache/commons/chain/web/jakarta/ChainListener.java | Commons Chain :: Web :: Jakarta | 91 |
| org/apache/commons/chain/web/javax/ChainListener.java | Commons Chain :: Web :: Javax | 91 |
public class ChainListener implements ServletContextListener {
// ------------------------------------------------------ Manifest Constants
/**
* The name of the context init parameter containing the name of the
* servlet context attribute under which our resulting {@link Catalog}
* will be stored.
*/
public static final String CONFIG_ATTR = ChainInit.CONFIG_ATTR;
/**
* The name of the context init parameter containing a comma-delimited
* list of class loader resources to be scanned.
*/
public static final String CONFIG_CLASS_RESOURCE =
ChainInit.CONFIG_CLASS_RESOURCE;
/**
* The name of the context init parameter containing a comma-delimited
* list of web application resources to be scanned.
*/
public static final String CONFIG_WEB_RESOURCE =
ChainInit.CONFIG_WEB_RESOURCE;
/**
* The name of the context init parameter containing the fully
* qualified class name of the {@code RuleSet} implementation
* for configuring our {@link ConfigParser}.
*/
public static final String RULE_SET = ChainInit.RULE_SET;
// ------------------------------------------------------------ Constructors
/**
* The Default-Constructor for this class.
*/
public ChainListener() {
}
// ------------------------------------------ ServletContextListener Methods
/**
* Remove the configured {@link Catalog} from the servlet context
* attributes for this web application.
*
* @param event {@code ServletContextEvent} to be processed
*/
@Override
public void contextDestroyed(ServletContextEvent event) {
final ServletContext context = event.getServletContext();
ChainInit.destroy(context, context.getInitParameter(CONFIG_ATTR));
}
/**
* Scan the required chain configuration resources, assemble the
* configured chains into a {@link Catalog}, and expose it as a
* servlet context attribute under the specified key.
*
* @param event {@code ServletContextEvent} to be processed
*/
@Override
public void contextInitialized(ServletContextEvent event) {
final Logger logger = LoggerFactory.getLogger(ChainListener.class);
logger.info("Initializing chain listener");
final ServletContext context = event.getServletContext();
try {
ChainInit.initialize(context, context.getInitParameter(CONFIG_ATTR), logger, true);
} catch (ServletException e) {
throw new RuntimeException(e);
}
}
} | ||
| File | Project | Line |
|---|---|---|
| org/apache/commons/chain/web/jakarta/WebContext.java | Commons Chain :: Web :: Jakarta | 43 |
| org/apache/commons/chain/web/javax/WebContext.java | Commons Chain :: Web :: Javax | 43 |
public abstract class WebContext extends ContextBase {
private static final long serialVersionUID = 6804961872140299027L;
/**
* The Default-Constructor for this class.
*/
public WebContext() {
}
/**
* Return a mutable {@code Map} that maps application scope
* attribute names to their values.
*
* @return Application scope Map.
*/
public abstract Map<String, Object> getApplicationScope();
/**
* Return an immutable {@code Map} that maps header names to
* the first (or only) header value (as a String). Header names must
* be matched in a case-insensitive manner.
*
* @return Header values Map.
*/
public abstract Map<String, String> getHeader();
/**
* Return an immutable {@code Map} that maps header names to
* the set of all values specified in the request (as a String array).
* Header names must be matched in a case-insensitive manner.
*
* @return Header values Map.
*/
public abstract Map<String, String[]> getHeaderValues();
/**
* Return an immutable {@code Map} that maps context application
* initialization parameters to their values.
*
* @return Initialization parameter Map.
*/
public abstract Map<String, String> getInitParam();
/**
* Return an immutable {@code Map} that maps request parameter
* names to the first (or only) value (as a String).
*
* @return Request parameter Map.
*/
public abstract Map<String, String> getParam();
/**
* Return an immutable {@code Map} that maps request parameter
* names to the set of all values (as a String array).
*
* @return Request parameter Map.
*/
public abstract Map<String, String[]> getParamValues();
/**
* Return an immutable {@code Map} that maps cookie names to
* the set of cookies specified in the request.
*
* @return Map of Cookies.
*
* @since Chain 1.1
*/
public abstract Map<String, Cookie> getCookies();
/**
* Return a mutable {@code Map} that maps request scope
* attribute names to their values.
*
* @return Request scope Map.
*/
public abstract Map<String, Object> getRequestScope();
/**
* Return a mutable {@code Map} that maps session scope
* attribute names to their values.
*
* @return Session scope Map.
*/
public abstract Map<String, Object> getSessionScope();
} | ||
| File | Project | Line |
|---|---|---|
| org/apache/commons/chain/web/jakarta/SetLocaleCommand.java | Commons Chain :: Web :: Jakarta | 36 |
| org/apache/commons/chain/web/javax/SetLocaleCommand.java | Commons Chain :: Web :: Javax | 36 |
public abstract class SetLocaleCommand<C extends WebContext> implements Command<C> {
// ----------------------------------------------------- Instance Variables
/**
* BiConsumer to set the {@link Locale} into the {@code context}.
*/
private final BiConsumer<C, Locale> localeBiConsumer;
// ----------------------------------------------------------- Constructors
/**
* Construct a new instance to set the locale into the context.
*
* @param localeBiConsumer BiConsumer to set the {@link Locale} into
* the {@code context}
*/
public SetLocaleCommand(final BiConsumer<C, Locale> localeBiConsumer) {
this.localeBiConsumer = localeBiConsumer;
}
// -------------------------------------------------------------- Properties
/**
* The context attribute key used to retrieve the {@code Locale}.
*/
private String localeKey = "locale";
/**
* Return the context attribute key under which we will retrieve
* the response {@code Locale}.
*
* @return The context attribute key of the request {@code Locale}.
*/
public String getLocaleKey() {
return this.localeKey;
}
/**
* Set the context attribute key under which we will retrieve
* the response {@code Locale}.
*
* @param localeKey The new context attribute key
*/
public void setLocaleKey(String localeKey) {
this.localeKey = localeKey;
}
// --------------------------------------------------------- Command Methods
/**
* Retrieve the {@code Locale} stored under the specified
* context attribute key, and establish it on this response.
*
* @param context The {@link Context} we are operating on
*
* @return {@code false} so that processing will continue
*
* @throws Exception If an error occurs during execution.
*/
@Override
public boolean execute(C context) throws Exception {
localeBiConsumer.accept(context, (Locale) context.get(getLocaleKey()));
return false;
}
} | ||
| File | Project | Line |
|---|---|---|
| org/apache/commons/chain/web/jakarta/GetLocaleCommand.java | Commons Chain :: Web :: Jakarta | 35 |
| org/apache/commons/chain/web/javax/GetLocaleCommand.java | Commons Chain :: Web :: Javax | 35 |
public class GetLocaleCommand<C extends WebContext> implements Command<C> {
// ----------------------------------------------------- Instance Variables
/**
* Function to get the {@link Locale} from the {@code context}.
*/
private final Function<C, Locale> localeFunction;
// ----------------------------------------------------------- Constructors
/**
* Construct a new instance to get the locale from the context.
*
* @param localeFunction Function to get the {@link Locale} from
* the {@code context}
*/
public GetLocaleCommand(final Function<C, Locale> localeFunction) {
this.localeFunction = localeFunction;
}
// -------------------------------------------------------------- Properties
/**
* The context attribute key used to store the {@code Locale}.
*/
private String localeKey = "locale";
/**
* Return the context attribute key under which we will store
* the request {@code Locale}.
*
* @return The context attribute key of the request {@code Locale}.
*/
public String getLocaleKey() {
return this.localeKey;
}
/**
* Set the context attribute key under which we will store
* the request {@code Locale}.
*
* @param localeKey The new context attribute key
*/
public void setLocaleKey(String localeKey) {
this.localeKey = localeKey;
}
// --------------------------------------------------------- Command Methods
/**
* Retrieve the {@code Locale} for this request, and store it
* under the specified context attribute.
*
* @param context The {@link Context} we are operating on
*
* @return {@code false} so that processing will continue
*
* @throws Exception If an error occurs during execution.
*/
@Override
public boolean execute(C context) throws Exception {
context.put(getLocaleKey(), localeFunction.apply(context));
return false;
}
} | ||

