List of usage examples for org.apache.commons.jci.utils ConversionUtils stripExtension
public static String stripExtension(final String pResourceName)
From source file:org.apache.commons.jci.examples.serverpages.JspGenerator.java
public byte[] generateJavaSource(final String pResourceName, final File pFile) { final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); final Writer output = new OutputStreamWriter(outputStream); try {/*from ww w . j a v a 2 s .com*/ final Reader input = new InputStreamReader(new FileInputStream(pFile)); final int p = pResourceName.lastIndexOf('/'); final String className; final String packageName; if (p < 0) { className = ConversionUtils.stripExtension(pResourceName); packageName = ""; } else { className = ConversionUtils.stripExtension(pResourceName.substring(p + 1)); packageName = pResourceName.substring(0, p).replace('/', '.'); output.append("package ").append(packageName).append(";").append('\n'); } output.append("import java.io.PrintWriter;").append('\n'); output.append("import java.io.IOException;").append('\n'); output.append("import javax.servlet.http.HttpServlet;").append('\n'); output.append("import javax.servlet.http.HttpServletRequest;").append('\n'); output.append("import javax.servlet.http.HttpServletResponse;").append('\n'); output.append("import javax.servlet.ServletException;").append('\n'); output.append("public class ").append(className).append(" extends HttpServlet {").append('\n'); output.append( " protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {") .append('\n'); output.append(" final PrintWriter out = response.getWriter();").append('\n'); final char[] open = "<?".toCharArray(); final char[] close = "?>".toCharArray(); StringBuilder sb = new StringBuilder(); char[] watch = open; int w = 0; while (true) { int c = input.read(); if (c < 0) { break; } if (c == watch[w]) { w++; if (watch.length == w) { if (watch == open) { // found open wrap(sb, output); sb = new StringBuilder(); watch = close; } else if (watch == close) { // found close // <? ... ?> is java output.append(sb.toString()); sb = new StringBuilder(); watch = open; } w = 0; } } else { if (w > 0) { sb.append(watch, 0, w); } sb.append((char) c); w = 0; } } if (watch == open) { wrap(sb, output); } output.append(" out.close();").append('\n'); output.append(" out.flush();").append('\n'); output.append(" }").append('\n'); output.append("}").append('\n'); return outputStream.toByteArray(); } catch (IOException e) { return null; } finally { try { output.close(); } catch (IOException e) { } } }
From source file:org.apache.commons.jci.examples.serverpages.ServerPageServlet.java
public void init() throws ServletException { super.init(); final File serverpagesDir = new File( getServletContext().getRealPath("/") + getInitParameter("serverpagesDir")); log("Monitoring serverpages in " + serverpagesDir); final TransactionalResourceStore store = new TransactionalResourceStore(new MemoryResourceStore()) { private Set<String> newClasses; private Map<String, HttpServlet> newServletsByClassname; public void onStart() { super.onStart(); newClasses = new HashSet<String>(); newServletsByClassname = new HashMap<String, HttpServlet>(servletsByClassname); }/*from w w w. j ava 2s.c om*/ public void onStop() { super.onStop(); boolean reload = false; for (String clazzName : newClasses) { try { final Class clazz = classloader.loadClass(clazzName); if (!HttpServlet.class.isAssignableFrom(clazz)) { log(clazzName + " is not a servlet"); continue; } // create new instance of jsp page final HttpServlet servlet = (HttpServlet) clazz.newInstance(); newServletsByClassname.put(clazzName, servlet); reload = true; } catch (Exception e) { log("", e); } } if (reload) { log("Activating new map of servlets " + newServletsByClassname); servletsByClassname = newServletsByClassname; } } public void write(String pResourceName, byte[] pResourceData) { super.write(pResourceName, pResourceData); if (pResourceName.endsWith(".class")) { // compiler writes a new class, remember the classes to reload newClasses.add(pResourceName.replace('/', '.').substring(0, pResourceName.length() - ".class".length())); } } }; // listener that generates the java code from the jsp page and provides that to the compiler jspListener = new CompilingListener(new JavaCompilerFactory().createCompiler("eclipse"), store) { private final JspGenerator transformer = new JspGenerator(); private final Map<String, byte[]> sources = new HashMap<String, byte[]>(); private final Set<String> resourceToCompile = new HashSet<String>(); public void onStart(FilesystemAlterationObserver pObserver) { super.onStart(pObserver); resourceToCompile.clear(); } public void onFileChange(File pFile) { if (pFile.getName().endsWith(".jsp")) { final String resourceName = ConversionUtils .stripExtension(getSourceNameFromFile(observer, pFile)) + ".java"; log("Updating " + resourceName); sources.put(resourceName, transformer.generateJavaSource(resourceName, pFile)); resourceToCompile.add(resourceName); } super.onFileChange(pFile); } public void onFileCreate(File pFile) { if (pFile.getName().endsWith(".jsp")) { final String resourceName = ConversionUtils .stripExtension(getSourceNameFromFile(observer, pFile)) + ".java"; log("Creating " + resourceName); sources.put(resourceName, transformer.generateJavaSource(resourceName, pFile)); resourceToCompile.add(resourceName); } super.onFileCreate(pFile); } public String[] getResourcesToCompile(FilesystemAlterationObserver pObserver) { // we only want to compile the jsp pages final String[] resourceNames = new String[resourceToCompile.size()]; resourceToCompile.toArray(resourceNames); return resourceNames; } public ResourceReader getReader(final FilesystemAlterationObserver pObserver) { return new JspReader(sources, super.getReader(pObserver)); } }; jspListener.addReloadNotificationListener(classloader); fam = new FilesystemAlterationMonitor(); fam.addListener(serverpagesDir, jspListener); fam.start(); }
From source file:org.apache.commons.jci.examples.serverpages.ServerPageServlet.java
private String convertRequestToServletClassname(final HttpServletRequest request) { String path = request.getPathInfo().substring(1); return ConversionUtils.stripExtension(path).replace('/', '.'); }