Example #1
0
 public static void _onDebug(PageContext pc) throws PageException {
   try {
     if (pc.getConfig().debug()) pc.getDebugger().writeOut(pc);
   } catch (IOException e) {
     throw Caster.toPageException(e);
   }
 }
Example #2
0
  private static synchronized lucee.runtime.type.Struct _call(PageContext pc, int dialect)
      throws PageException {
    Struct sct = new StructImpl();
    // synchronized(sct) {
    // hasSet=true;
    TagLib[] tlds;
    TagLibTag tag;
    tlds = ((ConfigImpl) pc.getConfig()).getTLDs(dialect);

    for (int i = 0; i < tlds.length; i++) {
      String ns = tlds[i].getNameSpaceAndSeparator();

      Map<String, TagLibTag> tags = tlds[i].getTags();
      Iterator<String> it = tags.keySet().iterator();
      Struct inner = new StructImpl();
      sct.set(ns, inner);
      while (it.hasNext()) {
        Object n = it.next();
        tag = tlds[i].getTag(n.toString());
        if (tag.getStatus() != TagLib.STATUS_HIDDEN
            && tag.getStatus() != TagLib.STATUS_UNIMPLEMENTED) inner.set(n.toString(), "");
      }
    }
    // }
    // }
    return sct;
  }
Example #3
0
  public static Page loadPage(PageContext pc, PageSource ps, boolean forceReload)
      throws PageException {
    if (pc.getConfig().debug()) {
      DebugEntryTemplate debugEntry = pc.getDebugger().getEntry(pc, ps);
      pc.addPageSource(ps, true);

      int currTime = pc.getExecutionTime();
      long exeTime = 0;
      long time = System.currentTimeMillis();
      try {
        debugEntry.updateFileLoadTime((int) (System.currentTimeMillis() - time));
        exeTime = System.currentTimeMillis();
        return ps.loadPage(pc, forceReload);
      } finally {
        int diff =
            ((int) (System.currentTimeMillis() - exeTime) - (pc.getExecutionTime() - currTime));
        pc.setExecutionTime(pc.getExecutionTime() + (int) (System.currentTimeMillis() - time));
        debugEntry.updateExeTime(diff);
        pc.removeLastPageSource(true);
      }
    }
    // no debug
    pc.addPageSource(ps, true);
    try {
      return ps.loadPage(pc, forceReload);
    } finally {
      pc.removeLastPageSource(true);
    }
  }
Example #4
0
  public static InterfaceImpl loadInterface(
      PageContext pc, Page page, PageSource ps, String callPath, boolean isRealPath)
      throws PageException {
    InterfaceImpl rtn = null;
    if (pc.getConfig().debug()) {
      DebugEntryTemplate debugEntry = pc.getDebugger().getEntry(pc, ps);
      pc.addPageSource(ps, true);

      int currTime = pc.getExecutionTime();
      long exeTime = 0;
      long time = System.nanoTime();
      try {
        debugEntry.updateFileLoadTime((int) (System.nanoTime() - time));
        exeTime = System.nanoTime();
        if (page == null) page = ps.loadPage(pc, false);
        rtn = initInterface(pc, page, callPath, isRealPath);
      } finally {
        int diff = ((int) (System.nanoTime() - exeTime) - (pc.getExecutionTime() - currTime));
        pc.setExecutionTime(pc.getExecutionTime() + (int) (System.nanoTime() - time));
        debugEntry.updateExeTime(diff);
        pc.removeLastPageSource(true);
      }
    }
    // no debug
    else {
      pc.addPageSource(ps, true);
      try {
        if (page == null) page = ps.loadPage(pc, false);
        rtn = initInterface(pc, page, callPath, isRealPath);
      } finally {
        pc.removeLastPageSource(true);
      }
    }
    return rtn;
  }
Example #5
0
 private void _release(PageContext pc, long exe) {
   ActiveLock al = ((PageContextImpl) pc).releaseActiveLock();
   // listener
   ((ConfigWebImpl) pc.getConfig())
       .getActionMonitorCollector()
       .log(pageContext, "lock", "Lock", exe, al.name + ":" + al.timeoutInMillis);
 }
  public static String call(PageContext pc, String strType) throws PageException {
    int type = Util.toType(strType, Config.CACHE_TYPE_NONE);
    if (type == Config.CACHE_TYPE_NONE)
      throw new FunctionException(
          pc,
          "CacheGetDefaultCacheName",
          1,
          "type",
          "invalid type defintion ["
              + strType
              + "], valid types are [object,resource,template,query]");

    ConfigImpl config = (ConfigImpl) pc.getConfig();
    CacheConnection conn = config.getCacheDefaultConnection(type);
    if (conn == null)
      throw new ExpressionException("there is no default cache defined for type [" + strType + "]");

    return conn.getName();
  }
Example #7
0
  public BIF(PageContext pc, String name) throws ApplicationException {
    super(Component.ACCESS_PUBLIC);
    ci = (ConfigImpl) pc.getConfig();
    FunctionLib fl = ci.getCombinedFLDs(pc.getCurrentTemplateDialect());
    flf = fl.getFunction(name);

    // BIF not found
    if (flf == null) {
      Key[] keys = CollectionUtil.toKeys(fl.getFunctions().keySet());
      throw new ApplicationException(
          ExceptionUtil.similarKeyMessage(
              keys, name, "build in function", "build in functions", null, false));
    }
    try {
      this.id = Hash.md5(name);
    } catch (NoSuchAlgorithmException e) {
      this.id = name;
    }
  }
Example #8
0
  private static ComponentImpl _loadComponent(
      PageContext pc,
      CIPage page,
      String callPath,
      boolean isRealPath,
      boolean isExtendedComponent,
      boolean executeConstr)
      throws PageException {
    ComponentImpl rtn = null;
    if (pc.getConfig().debug()) {
      DebugEntryTemplate debugEntry = pc.getDebugger().getEntry(pc, page.getPageSource());
      pc.addPageSource(page.getPageSource(), true);

      int currTime = pc.getExecutionTime();
      long exeTime = 0;
      long time = System.nanoTime();
      try {
        debugEntry.updateFileLoadTime((int) (System.nanoTime() - time));
        exeTime = System.nanoTime();
        rtn = initComponent(pc, page, callPath, isRealPath, isExtendedComponent, executeConstr);

      } finally {
        if (rtn != null) rtn.setLoaded(true);
        int diff = ((int) (System.nanoTime() - exeTime) - (pc.getExecutionTime() - currTime));
        pc.setExecutionTime(pc.getExecutionTime() + (int) (System.nanoTime() - time));
        debugEntry.updateExeTime(diff);
        pc.removeLastPageSource(true);
      }
    }
    // no debug
    else {
      pc.addPageSource(page.getPageSource(), true);
      try {
        rtn = initComponent(pc, page, callPath, isRealPath, isExtendedComponent, executeConstr);
      } finally {
        if (rtn != null) rtn.setLoaded(true);
        pc.removeLastPageSource(true);
      }
    }

    return rtn;
  }
Example #9
0
  public static Struct call(PageContext pc, String scheme) {
    ResourceProvider[] providers = pc.getConfig().getResourceProviders();
    ResourceProvider provider;
    scheme = scheme.trim();
    Struct sct = new StructImpl();
    for (int i = 0; i < providers.length; i++) {
      provider = providers[i];
      if (provider.getScheme().equalsIgnoreCase(scheme)) {
        // MUST sct=provider.getMetaData();
        sct.setEL("Scheme", provider.getScheme());
        sct.setEL("Attributes", provider.isAttributesSupported());
        sct.setEL("CaseSensitive", provider.isCaseSensitive());
        sct.setEL("Mode", provider.isModeSupported());

        sct.setEL("Enabled", Boolean.TRUE);
        return sct;
      }
    }
    sct.setEL("Enabled", Boolean.FALSE);
    return sct;
  }
Example #10
0
  private static Object _search(
      PageContext pc,
      PageSource loadingLocation,
      String rawPath,
      Boolean searchLocal,
      Boolean searchRoot,
      boolean executeConstr,
      short returnType,
      Page currP,
      int dialect,
      boolean isExtendedComponent)
      throws PageException {
    ConfigImpl config = (ConfigImpl) pc.getConfig();
    boolean doCache = config.useComponentPathCache();
    String sub = null;
    if (returnType != RETURN_TYPE_PAGE && rawPath.indexOf(':') != -1) {
      int d = rawPath.indexOf(':');
      int s = rawPath.indexOf('.');
      if (d > s) {
        sub = rawPath.substring(d + 1);
        rawPath = rawPath.substring(0, d);
      }
    }

    // app-String appName=pc.getApplicationContext().getName();
    rawPath = rawPath.trim().replace('\\', '/');
    String path = (rawPath.indexOf("./") == -1) ? rawPath.replace('.', '/') : rawPath;

    boolean isRealPath = !StringUtil.startsWith(path, '/');
    // PageSource currPS = pc.getCurrentPageSource();
    // Page currP=currPS.loadPage(pc,false);
    PageSource ps = null;
    CIPage page = null;

    // MUSTMUST improve to handle different extensions
    String pathWithCFC =
        path.concat(
            "."
                + (dialect == CFMLEngine.DIALECT_CFML
                    ? Constants.getCFMLComponentExtension()
                    : Constants.getLuceeComponentExtension()));

    // no cache for per application pathes
    Mapping[] acm = pc.getApplicationContext().getComponentMappings();
    if (!ArrayUtil.isEmpty(acm)) {
      Mapping m;
      for (int y = 0; y < acm.length; y++) {
        m = acm[y];
        ps = m.getPageSource(pathWithCFC);
        page = toCIPage(ps.loadPageThrowTemplateException(pc, false, (Page) null));
        if (page != null) {

          return returnType == RETURN_TYPE_PAGE
              ? page
              : load(
                  pc,
                  page,
                  trim(path.replace('/', '.')),
                  sub,
                  isRealPath,
                  returnType,
                  isExtendedComponent,
                  executeConstr);
        }
      }
    }

    if (searchLocal == null)
      searchLocal =
          Caster.toBoolean(rawPath.indexOf('.') == -1 ? true : config.getComponentLocalSearch());
    if (searchRoot == null) searchRoot = Caster.toBoolean(config.getComponentRootSearch());

    // CACHE
    // check local in cache
    String localCacheName = null;
    if (searchLocal && isRealPath) {
      localCacheName = currP.getPageSource().getDisplayPath().replace('\\', '/');
      localCacheName =
          localCacheName.substring(0, localCacheName.lastIndexOf('/') + 1).concat(pathWithCFC);
      if (doCache) {
        page = config.getCachedPage(pc, localCacheName);
        if (page != null)
          return returnType == RETURN_TYPE_PAGE
              ? page
              : load(
                  pc,
                  page,
                  trim(path.replace('/', '.')),
                  sub,
                  isRealPath,
                  returnType,
                  isExtendedComponent,
                  executeConstr);
      }
    }

    // check import cache
    if (doCache && isRealPath) {
      ImportDefintion impDef = config.getComponentDefaultImport();
      ImportDefintion[] impDefs =
          currP == null ? new ImportDefintion[0] : currP.getImportDefintions();
      int i = -1;
      do {

        if (impDef.isWildcard() || impDef.getName().equalsIgnoreCase(path)) {
          page = config.getCachedPage(pc, "import:" + impDef.getPackageAsPath() + pathWithCFC);
          if (page != null)
            return returnType == RETURN_TYPE_PAGE
                ? page
                : load(
                    pc,
                    page,
                    trim(path.replace('/', '.')),
                    sub,
                    isRealPath,
                    returnType,
                    isExtendedComponent,
                    executeConstr);
        }
        impDef = ++i < impDefs.length ? impDefs[i] : null;
      } while (impDef != null);
    }

    if (doCache) {
      // check global in cache
      page = config.getCachedPage(pc, pathWithCFC);
      if (page != null)
        return returnType == RETURN_TYPE_PAGE
            ? page
            : load(
                pc,
                page,
                trim(path.replace('/', '.')),
                sub,
                isRealPath,
                returnType,
                isExtendedComponent,
                executeConstr);
    }

    // SEARCH
    // search from local
    if (searchLocal && isRealPath) {
      // check realpath
      PageSource[] arr = ((PageContextImpl) pc).getRelativePageSources(pathWithCFC);
      page = toCIPage(PageSourceImpl.loadPage(pc, arr, null));
      if (page != null) {
        if (doCache) config.putCachedPageSource(localCacheName, page.getPageSource());
        return returnType == RETURN_TYPE_PAGE
            ? page
            : load(
                pc,
                page,
                trim(path.replace('/', '.')),
                sub,
                isRealPath,
                returnType,
                isExtendedComponent,
                executeConstr);
      }
    }

    // search with imports
    Mapping[] cMappings = config.getComponentMappings();

    if (isRealPath) {

      ImportDefintion impDef = config.getComponentDefaultImport();
      ImportDefintion[] impDefs =
          currP == null ? new ImportDefintion[0] : currP.getImportDefintions();
      PageSource[] arr;

      int i = -1;
      do {
        if (impDef.isWildcard() || impDef.getName().equalsIgnoreCase(path)) {

          // search from local first
          if (searchLocal) {
            arr =
                ((PageContextImpl) pc)
                    .getRelativePageSources(impDef.getPackageAsPath() + pathWithCFC);
            page = toCIPage(PageSourceImpl.loadPage(pc, arr, null));
            if (page != null) {
              if (doCache)
                config.putCachedPageSource(
                    "import:" + impDef.getPackageAsPath() + pathWithCFC, page.getPageSource());
              return returnType == RETURN_TYPE_PAGE
                  ? page
                  : load(
                      pc,
                      page,
                      trim(path.replace('/', '.')),
                      sub,
                      isRealPath,
                      returnType,
                      isExtendedComponent,
                      executeConstr);
            }
          }

          // search mappings and webroot
          page =
              toCIPage(
                  PageSourceImpl.loadPage(
                      pc,
                      ((PageContextImpl) pc)
                          .getPageSources("/" + impDef.getPackageAsPath() + pathWithCFC),
                      null));
          if (page != null) {
            String key = impDef.getPackageAsPath() + pathWithCFC;
            if (doCache && !((MappingImpl) page.getPageSource().getMapping()).isAppMapping())
              config.putCachedPageSource("import:" + key, page.getPageSource());
            return returnType == RETURN_TYPE_PAGE
                ? page
                : load(
                    pc,
                    page,
                    trim(path.replace('/', '.')),
                    sub,
                    isRealPath,
                    returnType,
                    isExtendedComponent,
                    executeConstr);
          }

          // search component mappings
          Mapping m;
          for (int y = 0; y < cMappings.length; y++) {
            m = cMappings[y];
            ps = m.getPageSource(impDef.getPackageAsPath() + pathWithCFC);
            page = toCIPage(ps.loadPageThrowTemplateException(pc, false, (Page) null));
            if (page != null) {
              if (doCache)
                config.putCachedPageSource(
                    "import:" + impDef.getPackageAsPath() + pathWithCFC, page.getPageSource());
              return returnType == RETURN_TYPE_PAGE
                  ? page
                  : load(
                      pc,
                      page,
                      trim(path.replace('/', '.')),
                      sub,
                      isRealPath,
                      returnType,
                      isExtendedComponent,
                      executeConstr);
            }
          }
        }
        impDef = ++i < impDefs.length ? impDefs[i] : null;
      } while (impDef != null);
    }

    String p;
    if (isRealPath) p = '/' + pathWithCFC;
    else p = pathWithCFC;

    // search mappings and webroot
    page = toCIPage(PageSourceImpl.loadPage(pc, ((PageContextImpl) pc).getPageSources(p), null));
    if (page != null) {
      String key = pathWithCFC;
      if (doCache && !((MappingImpl) page.getPageSource().getMapping()).isAppMapping())
        config.putCachedPageSource(key, page.getPageSource());
      return returnType == RETURN_TYPE_PAGE
          ? page
          : load(
              pc,
              page,
              trim(path.replace('/', '.')),
              sub,
              isRealPath,
              returnType,
              isExtendedComponent,
              executeConstr);
    }

    // search component mappings
    Mapping m;
    for (int i = 0; i < cMappings.length; i++) {
      m = cMappings[i];
      ps = m.getPageSource(p);
      page = toCIPage(ps.loadPageThrowTemplateException(pc, false, (Page) null));

      // recursive search
      if (page == null && config.doComponentDeepSearch() && path.indexOf('/') == -1) {
        ps = MappingUtil.searchMappingRecursive(m, pathWithCFC, true);
        if (ps != null) {
          page = toCIPage(ps.loadPageThrowTemplateException(pc, false, (Page) null));
          if (page != null) doCache = false; // do not cache this, it could be ambigous
        }
      }

      if (page != null) {
        if (doCache) config.putCachedPageSource(pathWithCFC, page.getPageSource());
        return returnType == RETURN_TYPE_PAGE
            ? page
            : load(
                pc,
                page,
                trim(path.replace('/', '.')),
                sub,
                isRealPath,
                returnType,
                isExtendedComponent,
                executeConstr);
      }
    }

    // search relative to active component (this get not cached because the cache get ambigous if we
    // do)
    if (searchLocal && isRealPath) {
      if (loadingLocation == null) {
        Component c = pc.getActiveComponent();
        if (c != null) loadingLocation = c.getPageSource();
      }

      if (loadingLocation != null) {
        ps = loadingLocation.getRealPage(pathWithCFC);
        if (ps != null) {
          page = toCIPage(ps.loadPageThrowTemplateException(pc, false, (Page) null));

          if (page != null) {
            return returnType == RETURN_TYPE_PAGE
                ? page
                : load(
                    pc,
                    page,
                    trim(path.replace('/', '.')),
                    sub,
                    isRealPath,
                    returnType,
                    isExtendedComponent,
                    executeConstr);
          }
        }
      }
    }
    // translate cfide. to org.lucee.cfml
    if (StringUtil.startsWithIgnoreCase(rawPath, "cfide.")) {
      String rpm = Constants.DEFAULT_PACKAGE + "." + rawPath.substring(6);
      try {
        return _search(
            pc,
            loadingLocation,
            rpm,
            searchLocal,
            searchRoot,
            executeConstr,
            returnType,
            currP,
            dialect,
            false);
      } catch (ExpressionException ee) {
        return null;
        // throw new ExpressionException("invalid "+toStringType(returnType)+" definition, can't
        // find "+rawPath+" or "+rpm);
      }
    }
    return null;
    // throw new ExpressionException("invalid "+toStringType(returnType)+" definition, can't find
    // "+toStringType(returnType)+" ["+rawPath+"]");
  }
 @Override
 public Struct getCatchBlock(PageContext pc) {
   return getCatchBlock(pc.getConfig());
 }