package org.compass.core.converter.xsem;
import java.io.Reader;
import org.compass.core.CompassException;
import org.compass.core.config.CompassConfigurable;
import org.compass.core.config.CompassSettings;
import org.compass.core.converter.ConversionException;
import org.compass.core.xml.AliasedXmlObject;
import org.compass.core.xml.XmlObject;
/**
* An {@link XmlContentConverter} implementation that wraps the actual {@link XmlContentConverter}
* configured (based on the settings) and creates and configures a singleton (shared) {@link XmlContentConverter}
* for both {@link #toXml(org.compass.core.xml.XmlObject)} and {@link #fromXml(String, java.io.Reader)}.
*
* @author kimchy
*/
public class SingletonXmlContentConverterWrapper implements XmlContentConverterWrapper, CompassConfigurable {
private XmlContentConverter xmlContentConverter;
private CompassSettings settings;
/**
* Creates and configures a singleton {@link XmlContentConverter}.
*/
public void configure(CompassSettings settings) throws CompassException {
this.settings = settings;
this.xmlContentConverter = createContentConverter();
}
/**
* Converts the {@link XmlObject} into raw xml by using the shared
* {@link XmlContentConverter} implementation.
*
* @see XmlContentConverter#toXml(org.compass.core.xml.XmlObject)
*/
public String toXml(XmlObject xmlObject) throws ConversionException {
return xmlContentConverter.toXml(xmlObject);
}
/**
* Converts a raw xml and an alias into an {@link AliasedXmlObject} by using the shared
* {@link XmlContentConverter} implementation.
*
* @see XmlContentConverter#fromXml(String, java.io.Reader)
*/
public AliasedXmlObject fromXml(String alias, Reader xml) throws ConversionException {
return xmlContentConverter.fromXml(alias, xml);
}
public XmlContentConverter createContentConverter() {
return XmlContentConverterUtils.createXmlContentConverter(settings);
}
}