Package cn.bran.japid.rendererloader

Examples of cn.bran.japid.rendererloader.RendererClass


   */
  public static RendererClass getFunctionalRendererClass(String name) {

    refreshClasses();

    RendererClass rc = classes.get(name);
    if (rc == null)
      throw new RuntimeException("renderer class not found: " + name);
    else {
      Class<? extends JapidTemplateBaseWithoutPlay> cls = rc.getClz();
      if (cls == null) {
        loadRendererClass(rc);
      }
    }
    return rc;
View Full Code Here


      tmp.removeAll(keySet); // added html

      removeRemoved(currentClassesOnDir, keySet);

      for (String c : tmp) {
        RendererClass rc = newRendererClass(c);
        classes.put(c, rc);
      }
      // now all the class set size is up to date

      // now update any Java source code
      List<File> gen = gen(templateRoot);

      // this would include both new and updated java
      Set<String> updatedClasses = new HashSet<String>();
      if (gen.size() > 0) {
        // int i = 0;
        for (File f : gen) {
          String className = getClassName(f);
          updatedClasses.add(className);
          RendererClass rendererClass = classes.get(className);
          if (rendererClass == null) {
            // this should not happen, since
            throw new RuntimeException("any new key should have been in the classes container: "
                + className);
            // rendererClass = newRendererClass(className);
            // classes.put(className, rendererClass);
          }
          setSources(rendererClass, f);
          removeInnerClasses(className);
          cleanClassHolder(rendererClass);
        }
      }

      // find all render class without bytecode
      for (Iterator<String> i = classes.keySet().iterator(); i.hasNext();) {
        String k = i.next();
        RendererClass rc = classes.get(k);
        if (rc.getSourceCode() == null) {
          if (!rc.getClassName().contains("$")) {
            setSources(rc, getJavaSrcFile(k));
            cleanClassHolder(rc);
            updatedClasses.add(k);
          } else {
            rc.setLastUpdated(0);
          }
        } else {
          if (rc.getBytecode() == null) {
            cleanClassHolder(rc);
            updatedClasses.add(k);
          }
        }
      }

      // compile all
      if (updatedClasses.size() > 0) {
        String[] names = new String[updatedClasses.size()];
        int i = 0;
        for (String s : updatedClasses) {
          names[i++] = s;
        }
        long t = System.currentTimeMillis();
        compiler.compile(names);

       
        // shall I load them right away?
        // let's try
        ClassLoader cl = _parentClassLoader == null ? JapidRenderer.class.getClassLoader() : _parentClassLoader;
        TemplateClassLoader classReloader = new TemplateClassLoader(cl);
        for (RendererClass rc: classes.values()) {
          try {
            if (isDevMode())
              rc.setClz(null); // to enable JIT loading in dev mode
            else
              rc.setClz((Class<JapidTemplateBaseWithoutPlay>) classReloader.loadClass(rc.getClassName()));
          } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
          }
        }
        howlong("compile/load time for " + names.length + " classes", t);
View Full Code Here

  /**
   * @param c
   * @return
   */
  static RendererClass newRendererClass(String c) {
    RendererClass rc = new RendererClass();
    rc.setClassName(c);
    // the source code of the Java file might not be available yet
    // rc.setSourceCode(getSouceCode(c));
    rc.setLastUpdated(0);
    return rc;
  }
View Full Code Here

    // } else {
    // // render(tClass, args);
    // String rr = invokeRender(tClass, args);
    // return rr;
    // }
    RendererClass rc = JapidRenderer.getFunctionalRendererClass(templateClassName);
    if (rc == null) {
      String templateFileName = templateClassName.replace(DOT, '/') + HTML;
      throw new RuntimeException("Could not find a Japid template with the name of: " + templateFileName);
    } else {
      String rr = invokeRender(rc, args);
View Full Code Here

   * @return
   */
  public static Class<? extends JapidTemplateBaseWithoutPlay> getTemplateClass(String name) {
    refreshClasses(/* name */);

    RendererClass rc = japidClasses.get(name);
    if (rc == null)
      throw new RuntimeException("Japid template class not found: " + name);
    else {
      if (isDevMode() && playClassloaderChanged()) {
        // always clear the mark to redefine all
        for (String c : japidClasses.keySet()) {
          japidClasses.get(c).setLastUpdated(0);
        }
        initJapidClassLoader();
      } else {
        if (rc.getLastUpdated() > 0 && rc.getClz() != null) {
          return rc.getClz();
        }
      }
    }

    // do I need to new instance of TemplateClassLoader for each invocation?
View Full Code Here

      allNames.removeAll(keySet); // got new templates

      removeRemoved(currentClassesOnDir, keySet);

      for (String c : allNames) {
        RendererClass rc = newRendererClass(c);
        japidClasses.put(c, rc);
      }
      // now all the class set size is up to date

      // now update any Java source code
      List<File> gen = gen(defaultTemplateRoot);

      // this would include both new and updated java
      Set<String> updatedClasses = new HashSet<String>();
      if (gen.size() > 0) {
        for (File f : gen) {
          String className = getClassName(f);
          updatedClasses.add(className);
          RendererClass rendererClass = japidClasses.get(className);
          if (rendererClass == null) {
            // this should not happen, since
            throw new RuntimeException("any new class names should have been in the classes container: "
                + className);
            // rendererClass = newRendererClass(className);
            // classes.put(className, rendererClass);
          }

          JapidRenderer.setSources(rendererClass, f);
          removeInnerClasses(className);
          cleanClassHolder(rendererClass);
        }
      }

      // find all render class without bytecode
      for (Iterator<String> i = japidClasses.keySet().iterator(); i.hasNext();) {
        String k = i.next();
        RendererClass rc = japidClasses.get(k);
        if (rc.getSourceCode() == null) {
          if (!rc.getClassName().contains("$")) {
            String pathname = defaultTemplateRoot + sep + k.replace(".", sep);
            File f = new File(pathname + ".java");
            JapidRenderer.setSources(rc, f);
            cleanClassHolder(rc);
            updatedClasses.add(k);
          } else {
            rc.setLastUpdated(0);
          }
        } else {
          if (rc.getBytecode() == null) {
            cleanClassHolder(rc);
            updatedClasses.add(k);
          }
        }
      }

      // compile all
      if (updatedClasses.size() > 0) {
        String[] names = new String[updatedClasses.size()];
        int i = 0;
        for (String s : updatedClasses) {
          names[i++] = s;
        }
        long t = System.currentTimeMillis();
        // newly compiled class bytecode bodies are set in the global
        // classes set ready for defining
        compiler.compile(names);
       
        initJapidClassLoader();
        for (RendererClass rc :  japidClasses.values()) {
          try {
            if (isDevMode())
              rc.setClz(null); // to enable JIT loading in DEV mode
            else
              rc.setClz((Class<JapidTemplateBaseWithoutPlay>) japidClassLoader.loadClass(rc.getClassName()));
          } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
          }
        }
       
View Full Code Here

  /**
   * @param c
   * @return
   */
  static RendererClass newRendererClass(String c) {
    RendererClass rc = new RendererClass();
    rc.setClassName(c);
    // the source code of the Java file might not be available yet
    // rc.setSourceCode(getSouceCode(c));
    rc.setLastUpdated(0);
    return rc;
  }
View Full Code Here

    StackTraceElement[] stackTrace = e.getStackTrace();
    for (StackTraceElement ele : stackTrace) {
      String className = ele.getClassName();
      if (className.startsWith("japidviews")) {
        int lineNumber = ele.getLineNumber();
        RendererClass applicationClass = japidClasses.get(className);
        if (applicationClass != null) {
          // let's get the line of problem
          int oriLineNumber = applicationClass.mapJavaLineToJapidScriptLine(lineNumber);
          if (oriLineNumber > 0) {
            if (rendererClass != null) {
              String path = applicationClass.getOriSourceCode();
              JapidTemplateException te = new JapidTemplateException("Japid Error", path + "("
                  + oriLineNumber + "): " + e.getClass().getName() + ": " + e.getMessage(),
                  oriLineNumber, path, applicationClass.getOriSourceCode());
              RenderResult rr = RenderInvokerUtils.invokeRender(rendererClass, te);
              return (rr);
            }
          }
        }
View Full Code Here

            } else {
              String expr_format = expr + "_" + format;
              if (expr_format.startsWith("controllers.")) {
                expr_format = "japidviews" + expr_format.substring(expr_format.indexOf('.'));
              }
              RendererClass rc = JapidPlayRenderer.japidClasses.get(expr_format);
              if (rc != null)
                return expr_format;
              else {
                // fall back
                return expr;
View Full Code Here

   */
  public static Class<? extends JapidTemplateBaseWithoutPlay> getClass(String name) {

    refreshClasses(name);

    RendererClass rc = classes.get(name);
    if (rc == null)
      throw new RuntimeException("renderer class not found: " + name);
    else {
      try {
        Class<? extends JapidTemplateBaseWithoutPlay> cls = rc.getClz();
        if (cls != null) {
          return cls;
        }
      } catch (Exception e) {
        throw new RuntimeException(e);
      }
    }

    // always clear the mark to reload all
    for (String c : classes.keySet()) {
      RendererClass rendererClass = classes.get(c);
      rendererClass.setLastUpdated(0);
    }
    TemplateClassLoader classReloader = new TemplateClassLoader();
    try {
      Class<JapidTemplateBaseWithoutPlay> loadClass = (Class<JapidTemplateBaseWithoutPlay>) classReloader.loadClass(name);
      rc.setClz(loadClass);
View Full Code Here

TOP

Related Classes of cn.bran.japid.rendererloader.RendererClass

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.