/**
* Copyright (C) 2015 Orange
* Licensed 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 com.francetelecom.clara.cloud.commons.xstream;
import com.francetelecom.clara.cloud.commons.xstream.logback.AppenderDto;
import com.francetelecom.clara.cloud.commons.xstream.logback.AppenderRefDto;
import com.francetelecom.clara.cloud.commons.xstream.logback.ConfigurationDto;
import com.francetelecom.clara.cloud.commons.xstream.logback.EncoderDto;
import com.francetelecom.clara.cloud.commons.xstream.logback.LoggerDto;
import com.francetelecom.clara.cloud.commons.xstream.logback.RollingPolicyDto;
import com.francetelecom.clara.cloud.commons.xstream.logback.RootDto;
import com.francetelecom.clara.cloud.commons.xstream.logback.TriggeringPolicyDto;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.hibernate.converter.HibernatePersistentCollectionConverter;
import com.thoughtworks.xstream.hibernate.converter.HibernatePersistentMapConverter;
import com.thoughtworks.xstream.hibernate.converter.HibernatePersistentSortedMapConverter;
import com.thoughtworks.xstream.hibernate.converter.HibernatePersistentSortedSetConverter;
import com.thoughtworks.xstream.hibernate.converter.HibernateProxyConverter;
import com.thoughtworks.xstream.hibernate.mapper.HibernateMapper;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.mapper.MapperWrapper;
/**
* Utility class for factoring out XStream configuration
*/
public class XStreamUtils {
public static XStream instanciateXstreamForHibernate() {
XStream xstream1 =new XStream() {
protected MapperWrapper wrapMapper(final MapperWrapper next) {
return new HibernateMapper(next);
}
};
xstream1.registerConverter(new HibernateProxyConverter());
xstream1.registerConverter(new HibernatePersistentCollectionConverter(xstream1.getMapper()));
xstream1.registerConverter(new HibernatePersistentMapConverter(xstream1.getMapper()));
xstream1.registerConverter(new HibernatePersistentSortedMapConverter(xstream1.getMapper()));
xstream1.registerConverter(new HibernatePersistentSortedSetConverter(xstream1.getMapper()));
return xstream1;
}
/**
* use xstream API to convert logback DTO classes to a valid xml file. see
* http://xstream.codehaus.org/alias-tutorial.html
*
* @return the configured xstream
*/
public static XStream instanciateXstreamForLogback() {
XStream xstream = new XStream(new DomDriver());
xstream.aliasAttribute("class", "clazz");
xstream.alias("configuration", ConfigurationDto.class);
xstream.useAttributeFor(ConfigurationDto.class, "debug");
xstream.useAttributeFor(ConfigurationDto.class, "scan");
xstream.useAttributeFor(ConfigurationDto.class, "scanPeriod");
xstream.alias("appender", AppenderDto.class);
xstream.addImplicitCollection(ConfigurationDto.class, "appenders", AppenderDto.class);
xstream.useAttributeFor(AppenderDto.class, "name");
xstream.useAttributeFor(AppenderDto.class, "clazz");
xstream.omitField(AppenderDto.class, "configuration");
xstream.alias("encoder", EncoderDto.class);
xstream.omitField(EncoderDto.class, "appender");
xstream.alias("rollingPolicy", RollingPolicyDto.class);
xstream.useAttributeFor(RollingPolicyDto.class, "clazz");
xstream.omitField(RollingPolicyDto.class, "appender");
xstream.alias("triggeringPolicy", TriggeringPolicyDto.class);
xstream.useAttributeFor(TriggeringPolicyDto.class, "clazz");
xstream.omitField(TriggeringPolicyDto.class, "appender");
xstream.alias("logger", LoggerDto.class);
xstream.addImplicitCollection(ConfigurationDto.class, "loggers", LoggerDto.class);
xstream.useAttributeFor(LoggerDto.class, "name");
xstream.useAttributeFor(LoggerDto.class, "level");
xstream.omitField(LoggerDto.class, "configuration");
xstream.alias("root", RootDto.class);
xstream.addImplicitCollection(RootDto.class, "appenderRefs", AppenderRefDto.class);
xstream.useAttributeFor(RootDto.class, "level");
xstream.omitField(RootDto.class, "configuration");
xstream.alias("appender-ref", AppenderRefDto.class);
xstream.useAttributeFor(AppenderRefDto.class, "ref");
xstream.omitField(AppenderRefDto.class, "root");
xstream.omitField(AppenderRefDto.class, "appender");
return xstream;
}
}