Package railo.runtime.component

Source Code of railo.runtime.component.MetadataUtil

package railo.runtime.component;

import railo.runtime.ComponentImpl;
import railo.runtime.InterfaceImpl;
import railo.runtime.Page;
import railo.runtime.PageContext;
import railo.runtime.PageSource;
import railo.runtime.PageSourceImpl;
import railo.runtime.exp.PageException;
import railo.runtime.type.util.ArrayUtil;

public class MetadataUtil {

    public static Page getPageWhenMetaDataStillValid(PageContext pc,ComponentImpl comp, boolean ignoreCache) throws PageException {
      Page page = getPage(pc,comp._getPageSource());
      if(ignoreCache) return page;

      if(page.metaData!=null && page.metaData.get()!=null) {
        if(hasChanged(pc,((MetaDataSoftReference)page.metaData).creationTime,comp)) {
          page.metaData=null;
        }
      }
      return page;
  }
    public static Page getPageWhenMetaDataStillValid(PageContext pc,InterfaceImpl interf, boolean ignoreCache) throws PageException {
      Page page = getPage(pc,interf.getPageSource());
      if(ignoreCache) return page;
     
      if(page.metaData!=null && page.metaData.get()!=null) {
        if(hasChanged(pc,((MetaDataSoftReference)page.metaData).creationTime,interf))
          page.metaData=null;
      }
      return page;
  }
   
  private static boolean hasChanged(PageContext pc,long lastMetaCreation, ComponentImpl cfc) throws PageException {
    if(cfc==null) return false;
   
    // check the component
    Page p = getPage(pc, cfc._getPageSource());
    if(hasChanged(p.getCompileTime(),lastMetaCreation)) return true;
   
    // check interfaces
    InterfaceCollection ic = cfc._interfaceCollection();
        if(ic!=null){
          if(hasChanged(pc,lastMetaCreation,ic.getInterfaces())) return true;
        }
       
        // check base
    return hasChanged(pc, lastMetaCreation, (ComponentImpl)cfc._base());
  }
 
  private static boolean hasChanged(PageContext pc,long lastMetaCreation,InterfaceImpl[] interfaces) throws PageException {
   
    if(!ArrayUtil.isEmpty(interfaces)){
            for(int i=0;i<interfaces.length;i++){
              if(hasChanged(pc,lastMetaCreation,interfaces[i])) return true;
            }
        }
    return false;
  }

  private static boolean hasChanged(PageContext pc,long lastMetaCreation, InterfaceImpl inter) throws PageException {
    Page p = getPage(pc, inter.getPageSource());
    if(hasChanged(p.getCompileTime(),lastMetaCreation)) return true;
      return hasChanged(pc,lastMetaCreation,inter.getExtends());
  }
 

  private static boolean hasChanged(long compileTime, long lastMetaCreation) {
    return compileTime>lastMetaCreation;
  }
 
  private static Page getPage(PageContext pc,PageSource ps) throws PageException {
    Page page = ((PageSourceImpl)ps).getPage();
      if(page==null) {
        page = ps.loadPage(pc.getConfig());
      }
    return page;
  }
}
TOP

Related Classes of railo.runtime.component.MetadataUtil

TOP
Copyright © 2018 www.massapi.com. 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.