package org.openrdf.repository.object.base; import info.aduna.io.FileUtil; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarFile; import junit.framework.TestCase; import org.openrdf.model.Model; import org.openrdf.model.impl.TreeModel; import org.openrdf.repository.RepositoryException; import org.openrdf.repository.object.compiler.OWLCompiler; import org.openrdf.repository.object.compiler.OntologyLoader; public abstract class CodeGenTestCase extends TestCase { private final List<URL> imports = new ArrayList<URL>(); /** Directory used to store files generated by this test case. */ protected File targetDir; /** * Setup the test case. * * @throws Exception */ @Override protected void setUp() throws Exception { imports.clear(); targetDir = File.createTempFile("owl-codegen", ""); targetDir.delete(); targetDir = new File(targetDir, getClass().getSimpleName()); targetDir.mkdirs(); } @Override public void tearDown() throws Exception { FileUtil.deltree(targetDir.getParentFile()); imports.clear(); } /** * Count the number of files with the given <code>suffix</code> that exist * inside the specified jar file. * * @param jar * @param suffix * @return * @throws IOException */ protected int countClasses(File jar, String prefix, String suffix) throws IOException { int count = 0; JarFile file = new JarFile(jar); try { Enumeration<JarEntry> entries = file.entries(); while (entries.hasMoreElements()) { String name = entries.nextElement().getName(); if (name.startsWith(prefix) && name.endsWith(suffix) && !name.contains("-")) { count++; } } return count; } finally { file.close(); } } /** * Creates a new File object in the <code>targetDir</code> folder. * * @param filename * @return * @throws StoreConfigException * @throws RepositoryException */ protected File createJar(String filename) throws Exception { Model schema = new TreeModel(); OntologyLoader ontologies = new OntologyLoader(schema); ontologies.loadOntologies(imports); OWLCompiler compiler = new OWLCompiler(); compiler.setModel(schema); compiler.setPrefixNamespaces(ontologies.getNamespaces()); File concepts = getConceptJar(targetDir, filename); compiler.createJar(concepts); return concepts; } protected File getConceptJar(File targetDir, String filename) { return new File(targetDir, filename); } protected void addRdfSource(String owl) { addImports(find(owl)); } protected void addImports(URL url) { imports.add(url); } /** * Returns a resource from the classpath. * * @param owl * @return */ protected URL find(String owl) { return getClass().getResource(owl); } }