blob: 1d457177da97b86021d20f25684be50b73dc281c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2010 VMware Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* VMware Inc. - initial contribution
*******************************************************************************/
package org.eclipse.virgo.snaps.core.internal.webapp.config;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
final class MutableWebXml implements WebXml {
private final List<ServletDefinition> servletDefinitions = new ArrayList<ServletDefinition>();
private final List<ServletMappingDefinition> servletMappingDefinitions = new ArrayList<ServletMappingDefinition>();
private final List<FilterDefinition> filterDefinitions = new ArrayList<FilterDefinition>();
private final List<ServletNameFilterMappingDefinition> servletNameFilterMappingDefinitions = new ArrayList<ServletNameFilterMappingDefinition>();
private final List<UrlPatternFilterMappingDefinition> urlPatternFilterMappingDefinitions = new ArrayList<UrlPatternFilterMappingDefinition>();
private final List<ListenerDefinition> listenerDefinitions = new ArrayList<ListenerDefinition>();
public ServletDefinition[] getServletDefinitions() {
return this.servletDefinitions.toArray(new ServletDefinition[this.servletDefinitions.size()]);
}
public ServletMappingDefinition[] getServletMappingDefinitions() {
return this.servletMappingDefinitions.toArray(new ServletMappingDefinition[this.servletMappingDefinitions.size()]);
}
public FilterDefinition[] getFilterDefinitions() {
return this.filterDefinitions.toArray(new FilterDefinition[this.filterDefinitions.size()]);
}
public ServletNameFilterMappingDefinition[] getServletNameFilterMappingDefinitions() {
return this.servletNameFilterMappingDefinitions.toArray(new ServletNameFilterMappingDefinition[this.servletNameFilterMappingDefinitions.size()]);
}
public UrlPatternFilterMappingDefinition[] getUrlPatternFilterMappingDefinitions() {
return this.urlPatternFilterMappingDefinitions.toArray(new UrlPatternFilterMappingDefinition[this.urlPatternFilterMappingDefinitions.size()]);
}
public ListenerDefinition[] getListenerDefinitions() {
return this.listenerDefinitions.toArray(new ListenerDefinition[listenerDefinitions.size()]);
}
public MutableServletDefinition addServletDefinition(String servletName, String servletClassName) {
MutableServletDefinition def = new MutableServletDefinition(servletName, servletClassName);
this.servletDefinitions.add(def);
return def;
}
public void addServletMappingDefinition(String servletName, String urlPattern) {
ImmutableServletMappingDefinition def = new ImmutableServletMappingDefinition(servletName, urlPattern);
this.servletMappingDefinitions.add(def);
}
public MutableFilterDefinition addFilterDefinition(String filterName, String filterClassName) {
MutableFilterDefinition def = new MutableFilterDefinition(filterName, filterClassName);
this.filterDefinitions.add(def);
return def;
}
public void addUrlPatternFilterMappingDefinition(String filterName, String urlPattern, Set<FilterDispatcherType> filterDispatcherTypes) {
UrlPatternFilterMappingDefinition definition = new ImmutableUrlPatternFilterMappingDefinition(filterName, urlPattern, filterDispatcherTypes);
this.urlPatternFilterMappingDefinitions.add(definition);
}
public void addServletNameFilterMappingDefinition(String filterName, String servletName, Set<FilterDispatcherType> filterDispatcherTypes) {
ServletNameFilterMappingDefinition definition = new ImmutableServletNameFilterMappingDefinition(filterName, servletName,
filterDispatcherTypes);
this.servletNameFilterMappingDefinitions.add(definition);
}
public void addListenerDefinition(String listenerClassName) {
this.listenerDefinitions.add(new ImmutableListenerDefinition(listenerClassName));
}
static abstract class AbstractWebComponentDefinition implements WebComponentDefinition {
private final Map<String, String> initParameters = new ConcurrentHashMap<String, String>();
/**
* {@inheritDoc}
*/
public final Map<String, String> getInitParameters() {
return this.initParameters;
}
public final void addInitParameter(String name, String value) {
this.initParameters.put(name, value);
}
}
static final class MutableServletDefinition extends AbstractWebComponentDefinition implements ServletDefinition {
private final String servletName;
private final String servletClassName;
public MutableServletDefinition(String servletName, String servletClassName) {
this.servletClassName = servletClassName;
this.servletName = servletName;
}
public String getServletName() {
return this.servletName;
}
public String getServletClassName() {
return this.servletClassName;
}
}
private static final class ImmutableServletMappingDefinition implements ServletMappingDefinition {
private final String servletName;
private final String urlPattern;
public ImmutableServletMappingDefinition(String servletName, String urlPattern) {
this.servletName = servletName;
this.urlPattern = urlPattern;
}
public String getUrlPattern() {
return this.urlPattern;
}
public String getServletName() {
return this.servletName;
}
}
static final class MutableFilterDefinition extends AbstractWebComponentDefinition implements FilterDefinition {
private final String filterName;
private final String filterClassName;
public MutableFilterDefinition(String filterName, String filterClassName) {
this.filterClassName = filterClassName;
this.filterName = filterName;
}
public String getFilterName() {
return this.filterName;
}
public String getFilterClassName() {
return this.filterClassName;
}
}
static abstract class AbstractFilterMappingDefinition implements FilterMappingDefinition {
private final String filterName;
final Set<FilterDispatcherType> dispatcherTypes;
private AbstractFilterMappingDefinition(String filterName, Set<FilterDispatcherType> filterDispatcherTypes) {
this.filterName = filterName;
this.dispatcherTypes = filterDispatcherTypes;
}
public String getFilterName() {
return this.filterName;
}
public Set<FilterDispatcherType> getFilterDispatcherTypes() {
return dispatcherTypes;
}
}
private static final class ImmutableServletNameFilterMappingDefinition extends AbstractFilterMappingDefinition implements
ServletNameFilterMappingDefinition {
private final String servletName;
public ImmutableServletNameFilterMappingDefinition(String filterName, String servletName, Set<FilterDispatcherType> filterDispatcherTypes) {
super(filterName, filterDispatcherTypes);
this.servletName = servletName;
}
public String getServletName() {
return servletName;
}
}
private static final class ImmutableUrlPatternFilterMappingDefinition extends AbstractFilterMappingDefinition implements
UrlPatternFilterMappingDefinition {
private final String urlPattern;
public ImmutableUrlPatternFilterMappingDefinition(String filterName, String urlPattern, Set<FilterDispatcherType> filterDispatcherTypes) {
super(filterName, filterDispatcherTypes);
this.urlPattern = urlPattern;
}
public String getUrlPattern() {
return urlPattern;
}
}
private static final class ImmutableListenerDefinition implements ListenerDefinition {
private final String listenerClassName;
public ImmutableListenerDefinition(String listenerClassName) {
this.listenerClassName = listenerClassName;
}
/**
* {@inheritDoc}
*/
@Override
public String getListenerClassName() {
return this.listenerClassName;
}
}
}