package com.eucalyptus.binding;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMException;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.axiom.om.impl.dom.DOOMAbstractFactory;
import org.apache.axiom.soap.SOAPFactory;
public class HoldMe implements Lock {
public static final String OM_FACTORY_NAME_PROPERTY = "om.factory";
public static final String SOAP11_FACTORY_NAME_PROPERTY = "soap11.factory";
public static final String SOAP12_FACTORY_NAME_PROPERTY = "soap12.factory";
private static final String DEFAULT_OM_FACTORY_CLASS_NAME = "org.apache.axiom.om.impl.llom.factory.OMLinkedListImplFactory";
private static final String DEFAULT_SOAP11_FACTORY_CLASS_NAME = "org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory";
private static final String DEFAULT_SOAP12_FACTORY_CLASS_NAME = "org.apache.axiom.soap.impl.llom.soap12.SOAP12Factory";
static {
System.setProperty( "javax.xml.stream.XMLInputFactory", "com.ctc.wstx.stax.WstxInputFactory" );
System.setProperty( "javax.xml.stream.XMLOutputFactory", "com.ctc.wstx.stax.WstxOutputFactory" );
System.setProperty( "javax.xml.stream.XMLEventFactory", "com.ctc.wstx.stax.WstxEventFactory" );
System.setProperty( "org.jibx.runtime.impl.parser", "org.jibx.runtime.impl.StAXReaderFactory" );
// System.setProperty( "org.jibx.runtime.impl.parser", "org.jibx.runtime.impl.XMLPullReaderFactory" );
}
private static XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance( );
private static XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance( );
public static Lock canHas = maybeGetLock( );
public static boolean reuse = true;
@Override
public void lock( ) {}
private static Lock maybeGetLock( ) {
if ( reuse ) {
// return new ReentrantLock( );
return new HoldMe( );
} else {
return new HoldMe( );
}
}
@Override
public void lockInterruptibly( ) throws InterruptedException {}
@Override
public Condition newCondition( ) {
return null;
}
@Override
public boolean tryLock( ) {
return true;
}
@Override
public boolean tryLock( long arg0, TimeUnit arg1 ) throws InterruptedException {
return true;
}
@Override
public void unlock( ) {}
public static OMFactory getDOOMFactory( ) {
if ( reuse )
return DOOMAbstractFactory.getOMFactory( );
else return new org.apache.axiom.om.impl.dom.factory.OMDOMFactory( );
}
public static SOAPFactory getDOOMSOAP11Factory( ) {
if ( reuse )
return DOOMAbstractFactory.getSOAP11Factory( );
else return new org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory( );
}
public static SOAPFactory getDOOMSOAP12Factory( ) {
if ( reuse )
return DOOMAbstractFactory.getSOAP12Factory( );
else return new org.apache.axiom.soap.impl.dom.soap12.SOAP12Factory( );
}
public static SOAPFactory getOMSOAP11Factory( ) {
if ( reuse ) return OMAbstractFactory.getSOAP11Factory( );
String omFactory;
try {
omFactory = System.getProperty( SOAP11_FACTORY_NAME_PROPERTY );
if ( omFactory == null || "".equals( omFactory ) ) {
omFactory = DEFAULT_SOAP11_FACTORY_CLASS_NAME;
}
} catch ( SecurityException e ) {
omFactory = DEFAULT_SOAP11_FACTORY_CLASS_NAME;
}
SOAPFactory defaultSOAP11OMFactory;
try {
defaultSOAP11OMFactory = ( SOAPFactory ) ClassLoader.getSystemClassLoader( ).loadClass( omFactory ).newInstance( );
} catch ( InstantiationException e ) {
throw new OMException( e );
} catch ( IllegalAccessException e ) {
throw new OMException( e );
} catch ( ClassNotFoundException e ) {
throw new OMException( e );
}
return defaultSOAP11OMFactory;
}
public static SOAPFactory getOMSOAP12Factory( ) {
if ( reuse ) return OMAbstractFactory.getSOAP12Factory( );
String omFactory;
try {
omFactory = System.getProperty( SOAP12_FACTORY_NAME_PROPERTY );
if ( omFactory == null || "".equals( omFactory ) ) {
omFactory = DEFAULT_SOAP12_FACTORY_CLASS_NAME;
}
} catch ( SecurityException e ) {
omFactory = DEFAULT_SOAP12_FACTORY_CLASS_NAME;
}
SOAPFactory defaultSOAP12OMFactory;
try {
defaultSOAP12OMFactory = ( SOAPFactory ) ClassLoader.getSystemClassLoader( ).loadClass( omFactory ).newInstance( );
} catch ( InstantiationException e ) {
throw new OMException( e );
} catch ( IllegalAccessException e ) {
throw new OMException( e );
} catch ( ClassNotFoundException e ) {
throw new OMException( e );
}
return defaultSOAP12OMFactory;
}
public static OMFactory getOMFactory( ) {
if ( reuse ) return OMAbstractFactory.getOMFactory( );
String omFactory;
try {
omFactory = System.getProperty( OM_FACTORY_NAME_PROPERTY );
if ( omFactory == null || "".equals( omFactory ) ) {
omFactory = DEFAULT_OM_FACTORY_CLASS_NAME;
}
} catch ( SecurityException e ) {
omFactory = DEFAULT_OM_FACTORY_CLASS_NAME;
}
OMFactory defaultOMFactory;
try {
defaultOMFactory = ( OMFactory ) ClassLoader.getSystemClassLoader( ).loadClass( omFactory ).newInstance( );
} catch ( InstantiationException e ) {
throw new OMException( e );
} catch ( IllegalAccessException e ) {
throw new OMException( e );
} catch ( ClassNotFoundException e ) {
throw new OMException( e );
}
return defaultOMFactory;
}
public static class ThrowAwayStAXOMBuilder extends StAXOMBuilder {
public ThrowAwayStAXOMBuilder( XMLStreamReader parser ) {
super( HoldMe.getOMFactory( ), parser );
}
public ThrowAwayStAXOMBuilder( OMFactory doomFactory, XMLStreamReader parser ) {
super( doomFactory, parser );
}
}
public static StAXOMBuilder getStAXOMBuilder( XMLStreamReader parser ) {
if ( reuse )
return new StAXOMBuilder( parser );
else return new ThrowAwayStAXOMBuilder( parser );
}
public static StAXOMBuilder getStAXOMBuilder( OMFactory doomFactory, XMLStreamReader xmlStreamReader ) {
if ( reuse )
return new StAXOMBuilder( doomFactory, xmlStreamReader );
else return new ThrowAwayStAXOMBuilder( doomFactory, xmlStreamReader );
}
public static XMLStreamReader getXMLStreamReader( InputStream in ) throws XMLStreamException {
return HoldMe.getXMLInputFactory( ).createXMLStreamReader( in );
}
public static XMLStreamReader getXMLStreamReader( String text ) throws XMLStreamException {
return HoldMe.getXMLInputFactory( ).createXMLStreamReader( new ByteArrayInputStream( text.getBytes( ) ) );
}
public static XMLInputFactory getXMLInputFactory( ) {
return reuse ? xmlInputFactory : XMLInputFactory.newInstance( );
}
public static XMLOutputFactory getXMLOutputFactory( ) {
return reuse ? xmlOutputFactory : XMLOutputFactory.newInstance( );
}
}