package org.anodyneos.xp;
import java.io.File;
import java.net.URI;
import javax.servlet.Servlet;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.anodyneos.commons.xml.UnifiedResolver;
import org.anodyneos.commons.xml.xsl.TemplatesCache;
import org.anodyneos.xp.http.HttpXpContext;
import org.anodyneos.xp.standalone.StandaloneXpAppContext;
import org.anodyneos.xp.standalone.StandaloneXpContext;
public abstract class XpFactory {
private static final String DEFAULT_FACTORY = "org.anodyneos.xpImpl.runtime.XpFactoryImpl";
public static XpFactory newInstance() throws XpException {
Class xpFactoryClass = null;
ClassLoader cl = Thread.currentThread().getContextClassLoader();
if (null != cl) {
xpFactoryClass = loadClass(cl, DEFAULT_FACTORY);
}
if (null == xpFactoryClass) {
cl = XpFactory.class.getClassLoader();
xpFactoryClass = loadClass(cl, DEFAULT_FACTORY);
}
if (null == xpFactoryClass) {
throw new XpException("Cannot find factory class " + DEFAULT_FACTORY);
} else {
try {
XpFactory xpFactory = (XpFactory) xpFactoryClass.newInstance();
return xpFactory;
} catch (InstantiationException e) {
throw new XpException("Cannot create factory class " + DEFAULT_FACTORY, e);
} catch (IllegalAccessException e) {
throw new XpException("Cannot create factory class " + DEFAULT_FACTORY, e);
}
}
}
private static Class loadClass(ClassLoader cl, String name) {
try {
Class clazz = cl.loadClass(name);
return clazz;
} catch (ClassNotFoundException e) {
return null;
}
}
// factory methods
public abstract XpPage newXpPage(URI xpURI)
throws XpFileNotFoundException, XpTranslationException, XpCompilationException, XpException;
public abstract StandaloneXpContext getStandaloneXpContext();
public abstract void releaseStandaloneXpContext(StandaloneXpContext ctx);
public abstract HttpXpContext getHttpXpContext(
Servlet servlet, ServletRequest servletRequest, ServletResponse servletResponse);
public abstract void releaseHttpXpContext(HttpXpContext ctx);
// getters and setters
public abstract ClassLoader getParentLoader();
public abstract void setParentLoader(ClassLoader parentLoader);
public abstract File getClassGenDirectory();
public abstract void setClassGenDirectory(File classRoot);
public abstract File getJavaGenDirectory();
public abstract void setJavaGenDirectory(File javaRoot);
public abstract URI getXpRegistryURI();
public abstract void setXpRegistryURI(URI xpRegistry);
public abstract StandaloneXpAppContext getStandaloneXpAppContext();
public abstract void setStandaloneXpAppContext(StandaloneXpAppContext appCtx);
public abstract UnifiedResolver getResolver();
public abstract void setResolver(UnifiedResolver resolver);
public abstract TemplatesCache getTemplatesCache();
public abstract void setTemplatesCache(TemplatesCache templatesCache);
public abstract boolean isAutoLoad();
public abstract void setAutoLoad(boolean autoLoad);
public abstract String getCompileClassPath();
}