Example usage for org.apache.commons.jci.utils ConversionUtils stripExtension

List of usage examples for org.apache.commons.jci.utils ConversionUtils stripExtension

Introduction

In this page you can find the example usage for org.apache.commons.jci.utils ConversionUtils stripExtension.

Prototype

public static String stripExtension(final String pResourceName) 

Source Link

Document

Please do not use - internal org/my/Class.xxx -> org/my/Class

Usage

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('/', '.');
}