AbstractXStreamService.java

/*
 * $Id $
 * 
 * $Date$ $Revision$ $Author$
 * 
 * Copyright CERN ${year}, All Rights Reserved.
 */
package cern.accsoft.steering.jmad.util.xml;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.security.AnyTypePermission;

public abstract class AbstractXStreamService<T> extends GenericXStreamService<T> {

    private XStream xStream;

    @Override
    protected XStream createXStream() {
        this.xStream = this.newXStreamInstance();
        this.initializeXStream(this.xStream);
        this.xStream.addPermission(AnyTypePermission.ANY);
        return this.xStream;
    }

    /**
     * @return a new XStream instance
     */
    protected abstract XStream newXStreamInstance();

    /**
     * Force implementing classes to initialize the {@link XStream} instance used in this service. E.g. register
     * converters, set aliases, process annotations, ...
     * 
     * @param xstream the {@link XStream} instance used in this service
     */
    protected abstract void initializeXStream(XStream xstream);

    /**
     * @return the {@link XStream} used in the service
     */
    protected XStream getXstream() {
        return this.xStream;
    }
}