/*
* JBoss, Home of Professional Open Source
* Copyright 2006, JBoss Inc., and individual contributors as indicated
* 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.deployers.vfs.spi.deployer;
import java.util.HashMap;
import java.util.Map;
/**
* Unmarshaller factory deployer.
* Able to apply features to unmarshaller factory.
*
* @param <T> the output type
* @param <U> exact unmarshaller factory's flag type
* @author <a href="ales.justin@jboss.com">Ales Justin</a>
*/
public abstract class UnmarshallerFactoryDeployer<T, U> extends AbstractVFSParsingDeployer<T>
{
/** The fixup base uris */
static String FIXUP_BASE_URIS = "http://apache.org/xml/features/xinclude/fixup-base-uris";
/** The fixup base lang */
static String FIXUP_LANGUAGE = "http://apache.org/xml/features/xinclude/fixup-language";
/** Use default features */
private boolean useDefaultFeatures = true;
/** Features map */
private Map<String, U> features;
protected UnmarshallerFactoryDeployer(Class<T> output)
{
super(output);
}
/**
* Create unmarshaller factory wrapper.
* @return the unmarshaller factory
*/
protected abstract UnmarshallerFactory<U> createUnmarshallerFactory();
public void start() throws Exception
{
Map<String,U> features = getFeatures();
if (isUseDefaultFeatures())
{
if (features == null)
features = new HashMap<String,U>();
if (features.containsKey(FIXUP_BASE_URIS) == false)
features.put(FIXUP_BASE_URIS, fromString("false"));
if (features.containsKey(FIXUP_LANGUAGE) == false)
features.put(FIXUP_LANGUAGE, fromString("false"));
}
if (features != null && features.isEmpty() == false)
{
UnmarshallerFactory<U> unmarshallerFactory = createUnmarshallerFactory();
if (unmarshallerFactory == null)
throw new IllegalArgumentException("Unmarshaller factory cannot be null.");
for(Map.Entry<String,U> entry : features.entrySet())
unmarshallerFactory.setFeature(entry.getKey(), entry.getValue());
}
}
/**
* Transform string to flag value.
*
* @param value the value
* @return value as T type
*/
protected abstract U fromString(String value);
public boolean isUseDefaultFeatures()
{
return useDefaultFeatures;
}
public void setUseDefaultFeatures(boolean useDefaultFeatures)
{
this.useDefaultFeatures = useDefaultFeatures;
}
public Map<String, U> getFeatures()
{
return features;
}
public void setFeatures(Map<String, U> features)
{
this.features = features;
}
}