package test.org.anodyneos.xpImpl;
import java.io.File;
import java.io.OutputStream;
import java.net.URI;
import org.anodyneos.commons.net.ClassLoaderURIHandler;
import org.anodyneos.commons.net.URLChangeRootURIHandler;
import org.anodyneos.commons.xml.UnifiedResolver;
import org.anodyneos.xp.XpContext;
import org.anodyneos.xp.XpFactory;
import org.anodyneos.xp.XpPage;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class XpStandaloneTest {
private static final Log log = LogFactory.getLog(XpStandaloneTest.class);
private static final long serialVersionUID = 1L;
private XpFactory xpFactory;
private URI xpRegistryURI;
private File xpSourceDirectory;
private File scratchJavaDirectory;
private File scratchClassDirectory;
public static void main(String[] args) throws Exception {
XpStandaloneTest obj = new XpStandaloneTest();
obj.setScratchJavaDirectory(new File(args[0]));
obj.setScratchClassDirectory(new File(args[1]));
obj.setXpSourceDirectory(new File(args[2]));
obj.setXpRegistryURI(new URI(args[3]));
obj.init();
obj.service(new URI(args[4]));
}
public void init() throws Exception {
// validate scratch directories
File scratchJavaDir = getScratchJavaDirectory();
if (!(scratchJavaDir.exists() && scratchJavaDir.canRead() && scratchJavaDir.canWrite())) {
throw new Exception("Java work directory is invalid. Check for existance and Read/Write settings: " + scratchJavaDir);
}
File scratchClassDir = getScratchClassDirectory();
if (!(scratchClassDir.exists() && scratchClassDir.canRead() && scratchClassDir.canWrite())) {
throw new Exception("Class work directory is invalid. Check for existance and Read/Write settings: " + scratchClassDir);
}
// configure URI resolvers
File xpSourceDirectoryFile = getXpSourceDirectory();
UnifiedResolver resolver = new UnifiedResolver();
resolver.setDefaultLookupEnabled(false);
resolver.addProtocolHandler("classpath", new ClassLoaderURIHandler());
resolver.addProtocolHandler("file", new URLChangeRootURIHandler(xpSourceDirectoryFile.toURI().toURL()));
// configure the XpCachingLoader
xpFactory = XpFactory.newInstance();
xpFactory.setXpRegistryURI(getXpRegistryURI());
xpFactory.setResolver(resolver);
xpFactory.setJavaGenDirectory(getScratchJavaDirectory());
xpFactory.setClassGenDirectory(getScratchClassDirectory());
}
public void service(URI xpURI) throws Exception {
XpContext ctx = xpFactory.getStandaloneXpContext();
XpPage xpPage = xpFactory.newXpPage(xpURI);
if (xpPage == null) {
throw new Exception("could not get XpPage for: " + xpURI);
}
xpPage.setEncoding("UTF-8");
OutputStream out = System.out;
xpPage.service(ctx, out);
}
public File getXpSourceDirectory() { return xpSourceDirectory; }
public void setXpSourceDirectory(File xpSourceDirectory) { this.xpSourceDirectory = xpSourceDirectory; }
public File getScratchJavaDirectory() { return scratchJavaDirectory; }
public void setScratchJavaDirectory(File scratchDirectory) { this.scratchJavaDirectory = scratchDirectory; }
public URI getXpRegistryURI() { return xpRegistryURI; }
public void setXpRegistryURI(URI xpRegistryURI) { this.xpRegistryURI = xpRegistryURI; }
public File getScratchClassDirectory() { return scratchClassDirectory; }
public void setScratchClassDirectory(File scratchClassDirectory) { this.scratchClassDirectory = scratchClassDirectory; }
}