/*
* JBoss, Home of Professional Open Source
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.seam.resteasy;
import org.jboss.seam.ScopeType;
import org.jboss.seam.Component;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Install;
import javax.ws.rs.core.MediaType;
import java.util.*;
/**
* RESTEasy and JAX-RS configuration, override in components.xml to
* customize RESTful request processing and RESTEasy settings.
*
* @author Christian Bauer
*/
@Name("org.jboss.seam.resteasy.application")
@Scope(ScopeType.APPLICATION)
@Install(precedence = Install.BUILT_IN)
@AutoCreate
public class Application extends javax.ws.rs.core.Application
{
final private Map<Class<?>, Set<Component>> providerClasses = new HashMap<Class<?>, Set<Component>>();
final private Map<Class<?>, Set<Component>> resourceClasses = new HashMap<Class<?>, Set<Component>>();
private List<String> providerClassNames = new ArrayList<String>();
private List<String> resourceClassNames = new ArrayList<String>();
private Map<String, String> mediaTypeMappings = new HashMap<String, String>();
private Map<String, String> languageMappings = new HashMap<String, String>();
private boolean scanProviders = true;
private boolean scanResources = true;
private boolean useBuiltinProviders = true;
private boolean destroySessionAfterRequest = true;
private String resourcePathPrefix = "/rest";
private boolean stripSeamResourcePath = true;
public Application()
{
super();
}
public Set<Class<?>> getProviderClasses()
{
return providerClasses.keySet();
}
@Override
public Set<Class<?>> getClasses()
{
return resourceClasses.keySet();
}
public void addProviderClass(Class<?> clazz)
{
providerClasses.put(clazz, null);
}
public void addProviderClass(Class<?> clazz, Component component)
{
Set<Component> components = providerClasses.get(clazz);
if (components == null)
{
components = new HashSet<Component>();
providerClasses.put(clazz, components);
}
components.add(component);
}
public void removeProviderClass(Class<?> clazz)
{
providerClasses.remove(clazz);
}
public void addResourceClass(Class<?> clazz)
{
resourceClasses.put(clazz, null);
}
public void addResourceClass(Class<?> clazz, Set<Component> newComponents)
{
Set<Component> components = resourceClasses.get(clazz);
if (components == null)
{
components = new HashSet<Component>();
resourceClasses.put(clazz, components);
}
components.addAll(newComponents);
}
public void removeResourceClass(Class<?> clazz)
{
resourceClasses.remove(clazz);
}
public Set<Component> getProviderClassComponent(Class clazz)
{
return providerClasses.get(clazz) != null ? providerClasses.get(clazz) : null;
}
public Set<Component> getResourceClassComponent(Class clazz)
{
return resourceClasses.get(clazz) != null ? resourceClasses.get(clazz) : null;
}
public Map<String, MediaType> getMediaTypeMappings()
{
Map<String, MediaType> extMap = new HashMap<String, MediaType>();
for (String ext : mediaTypeMappings.keySet())
{
String value = mediaTypeMappings.get(ext);
extMap.put(ext, MediaType.valueOf(value));
}
return extMap;
}
public void setMediaTypeMappings(Map<String, String> mediaTypeMappings)
{
this.mediaTypeMappings = mediaTypeMappings;
}
public Map<String, String> getLanguageMappings()
{
return languageMappings;
}
public void setLanguageMappings(Map<String, String> languageMappings)
{
this.languageMappings = languageMappings;
}
public List<String> getProviderClassNames()
{
return providerClassNames;
}
public void setProviderClassNames(List<String> providerClassNames)
{
this.providerClassNames = providerClassNames;
}
public List<String> getResourceClassNames()
{
return resourceClassNames;
}
public void setResourceClassNames(List<String> resourceClassNames)
{
this.resourceClassNames = resourceClassNames;
}
public boolean isScanProviders()
{
return scanProviders;
}
public void setScanProviders(boolean scanProviders)
{
this.scanProviders = scanProviders;
}
public boolean isScanResources()
{
return scanResources;
}
public void setScanResources(boolean scanResources)
{
this.scanResources = scanResources;
}
public boolean isUseBuiltinProviders()
{
return useBuiltinProviders;
}
public void setUseBuiltinProviders(boolean useBuiltinProviders)
{
this.useBuiltinProviders = useBuiltinProviders;
}
public boolean isDestroySessionAfterRequest()
{
return destroySessionAfterRequest;
}
public void setDestroySessionAfterRequest(boolean destroySessionAfterRequest)
{
this.destroySessionAfterRequest = destroySessionAfterRequest;
}
public String getResourcePathPrefix()
{
return resourcePathPrefix;
}
public void setResourcePathPrefix(String resourcePathPrefix)
{
this.resourcePathPrefix = resourcePathPrefix;
}
public boolean isStripSeamResourcePath()
{
return stripSeamResourcePath;
}
public void setStripSeamResourcePath(boolean stripSeamResourcePath)
{
this.stripSeamResourcePath = stripSeamResourcePath;
}
}