Package cn.bran.japid.rendererloader

Examples of cn.bran.japid.rendererloader.RendererClass


      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);
          }
          rendererClass.setSourceCode(readSource(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("$")) {
            rc.setSourceCode(getSourceCode(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);
        howlong("compile time for " + names.length + " classes", t);

        // clear the global class cache
        for (String k : classes.keySet()) {
          RendererClass rc = classes.get(k);
          rc.setClz(null);
        }
      }
    } catch (Exception 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

    refreshClasses();
    return getRendererClassWithoutRefresh(name);
  }

  private static Class<? extends JapidTemplateBaseWithoutPlay> getClassWithoutRefresh(String name) {
    RendererClass rc = getRendererClassWithoutRefresh(name);
    return rc.getClz();
  }
View Full Code Here

    RendererClass rc = getRendererClassWithoutRefresh(name);
    return rc.getClz();
  }

  private static RendererClass getRendererClassWithoutRefresh(String name) {
    RendererClass rc = japidClasses.get(name);
    if (rc == null)
      throw new JapidTemplateNotFoundException(name, "classpath and " + flattern(templateRoots));
    else {
      if (rc.getClz() == null || (playClassloaderChanged() && !rc.getContributor().startsWith("jar"))) {
        compileAndLoad(name, rc);
        // try {
        // new TemplateClassLoader(parentClassLoader).loadClass(name);
        // } catch (java.lang.NoClassDefFoundError e) {
        // // the class presented when the class was compiled but it
View Full Code Here

      allScriptNames.removeAll(keySet); // got new templates
      removeRemoved(currentClassesOnDir, keySet);

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

      // now update any Java source code
      // second disk scanning.
      List<File> gen = gen(templateRoots);

      // 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);
            // japidClasses.put(className, rendererClass);
          }

          setSources(rendererClass, f);
          removeInnerClasses(className);
          cleanByteCode(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.getJavaSourceCode() == null) {
          if (!rc.getClassName().contains("$")) {
            try {
              setSources(rc, k);
            } catch (Exception e) {
              JapidFlags.log("Cannot find the source Java file for " + rc.getClassName() + ". Dropped.");
              i.remove();
              continue;
            }
            cleanByteCode(rc);
            updatedClasses.add(k);
          } else {
            rc.setLastUpdated(0);
          }
        } else {
          if (rc.getBytecode() == null) {
            cleanByteCode(rc);
            updatedClasses.add(k);
          }
        }
      }
View Full Code Here

      Set<File> toBeUpdated = new HashSet<File>();

      // find out all the classes that need to be updated
      for (File tf : allTemplates) {
        String cname = getClassName(tf);
        RendererClass rc = japidClasses.get(cname);
        if (rc == null) {
          toBeUpdated.add(tf);
        } else if (rc.getScriptTimestamp() < tf.lastModified()) {
          toBeUpdated.add(tf);
        } else if (rc.getJavaSourceCode() == null || rc.getJavaSourceCode().length() == 0) {
          toBeUpdated.add(tf);
        } else if (rc.getBytecode() == null || rc.getBytecode().length == 0) {
          toBeUpdated.add(tf);
        }
      }

      Set<String> currentClassesOnDir = createClassNameSet(allTemplates);

      Set<String> currentClassNames = japidClasses.keySet();

      if (!currentClassNames.equals(currentClassesOnDir)) {
        Set<String> classNamesRegistered = new HashSet<String>(currentClassNames);
        Set<String> classNamesDir = new HashSet<String>(currentClassesOnDir);
        if (classNamesRegistered.containsAll(classNamesDir)) {
          classNamesRegistered.removeAll(classNamesDir);
          if (!classNamesRegistered.isEmpty()) {
            for (String n : classNamesRegistered) {
              if (!n.contains("$")) {
                if (!specialClasses.contains(n)) {
                  touch();
                  break;
                }
              }
            }
          }
        } else {
          touch();
        }
      } else {
        // no name changes
      }

      // allClassNamesOnDir.removeAll(currentClassNames); // got new
      // templates
      removeRemoved(currentClassesOnDir, currentClassNames);

      for (File tb : toBeUpdated) {
        String scriptSrc = DirUtil.readFileAsString(tb);

        String javaCode = JapidTemplateTransformer.generateInMemory(scriptSrc, cleanPath(tb), usePlay);
        JapidFlags.log("converted: " + tb.getPath());
        String className = getClassName(tb);
        RendererClass rc = newRendererClass(className);
        rc.setScriptFile(tb);
        rc.setJapidSourceCode(scriptSrc);
        rc.setJavaSourceCode(javaCode);
        removeInnerClasses(className);
        cleanByteCode(rc);

        japidClasses.put(className, rc);
      }
View Full Code Here

   */
  static synchronized void compileDevErroView(String srcFileName, String scriptSrc) {
    try {
      String c = DirUtil.deriveClassName(srcFileName);

      RendererClass rc = newRendererClass(c);
      japidClasses.put(c, rc);
      String javaCode = JapidTemplateTransformer.generateInMemory(scriptSrc, srcFileName, usePlay);
      rc.setJavaSourceCode(javaCode);
      rc.setJapidSourceCode(scriptSrc);
      removeInnerClasses(c);
      cleanByteCode(rc);

      compiler.compile(new String[] { DEV_ERROR });
    } catch (Exception 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

    if (!key.startsWith(JAPIDVIEWS)) {
      key = JAPIDVIEWS + "." + key.replace('-', '_').replace(' ', '_');
    }

    RendererClass cl = dynamicClasses.get(key);
    if (cl != null) {
      if (source.equals(cl.getJapidSourceCode())) {
        return key;
      }
    }
    try {
      String javaCode = JapidTemplateTransformer.generateInMemory(source, key, mimeType, usePlay);
      JapidFlags.log("converted: " + key);
      // System.out.println(javaCode);
      RendererClass rc = newRendererClass(key);
      rc.setJapidSourceCode(source);
      rc.setJavaSourceCode(javaCode);
      removeInnerClasses(key);
      cleanByteCode(rc);
      japidClasses.put(key, rc); // remember the current impl of class
                    // refresh will erase dynamic template
                    // class from this container.
View Full Code Here

   * @author Bing Ran (bing.ran@gmail.com)
   * @param key
   * @return
   */
  public static Class<? extends JapidTemplateBaseWithoutPlay> getDynamicRenderer(String key) {
    RendererClass rendererClass = dynamicClasses.get(key);
    return rendererClass.getClz();
  }
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.