public static UIComponent addPersistent(
      FacesContext context,
      ServletRequest req,
      UIComponent parent,
      ValueExpression binding,
      Class childClass)
      throws Exception {
    if (context == null) context = FacesContext.getCurrentInstance();

    if (parent == null) {
      UIComponentClassicTagBase parentTag =
          (UIComponentClassicTagBase) req.getAttribute("caucho.jsf.parent");

      parent = parentTag.getComponentInstance();

      BodyContent body = parentTag.getBodyContent();

      addVerbatim(parent, body);
    }

    UIComponent child = null;

    if (binding != null) child = (UIComponent) binding.getValue(context.getELContext());

    if (child == null) {
      child = (UIComponent) childClass.newInstance();

      // jsf/3251
      if (binding != null) binding.setValue(context.getELContext(), child);
    }

    if (parent != null) parent.getChildren().add(child);

    return child;
  }
  public static UIComponent addFacet(
      FacesContext context,
      ServletRequest req,
      UIComponent parent,
      String facetName,
      ValueExpression binding,
      Class childClass)
      throws Exception {
    if (context == null) context = FacesContext.getCurrentInstance();

    if (parent == null) {
      UIComponentClassicTagBase parentTag =
          (UIComponentClassicTagBase) req.getAttribute("caucho.jsf.parent");

      parent = parentTag.getComponentInstance();
    }

    UIComponent child = null;

    if (binding != null) child = (UIComponent) binding.getValue(context.getELContext());

    if (child == null) child = (UIComponent) childClass.newInstance();

    if (parent != null) parent.getFacets().put(facetName, child);

    if (binding != null) binding.setValue(context.getELContext(), child);

    return child;
  }
예제 #3
0
 @Override
 public T eval(List<String> tuple) {
   double result = 0;
   for (ValueExpression factor : _veList) {
     Object currentVal = factor.eval(tuple);
     NumericConversion currentType = (NumericConversion) (factor.getType());
     result += currentType.toDouble(currentVal);
   }
   return _wrapper.fromDouble(result);
 }
예제 #4
0
  private void doSetBindings(ELContext elContext, UIComponent component) {
    if (component == null) return;

    ValueExpression binding = component.getValueExpression("binding");

    if (binding != null) binding.setValue(elContext, component);

    Iterator<UIComponent> iter = component.getFacetsAndChildren();
    while (iter.hasNext()) doSetBindings(elContext, iter.next());
  }
예제 #5
0
 static final int evalInt(ValueExpression expr, FacesContext context) {
   try {
     return (Integer) expr.getValue(context.getELContext());
   } catch (ELException e) {
     throw new FacesException(e);
   }
 }
예제 #6
0
 static final String evalString(ValueExpression expr, FacesContext context) {
   try {
     return (String) expr.getValue(context.getELContext());
   } catch (ELException e) {
     throw new FacesException(e);
   }
 }
예제 #7
0
 @Override
 public void createIndexConditions(Session session, TableFilter filter) {
   TableFilter tf = getTableFilter();
   if (filter == tf && column.getType() == Value.BOOLEAN) {
     IndexCondition cond =
         IndexCondition.get(Comparison.EQUAL, this, ValueExpression.get(ValueBoolean.get(true)));
     filter.addIndexCondition(cond);
   }
 }
예제 #8
0
 @Override
 public Expression optimize(Session session) {
   left = left.optimize(session);
   boolean constant = left.isConstant();
   if (constant && left == ValueExpression.getNull()) {
     return left;
   }
   boolean allValuesConstant = true;
   boolean allValuesNull = true;
   int size = valueList.size();
   for (int i = 0; i < size; i++) {
     Expression e = valueList.get(i);
     e = e.optimize(session);
     if (e.isConstant() && e.getValue(session) != ValueNull.INSTANCE) {
       allValuesNull = false;
     }
     if (allValuesConstant && !e.isConstant()) {
       allValuesConstant = false;
     }
     if (left instanceof ExpressionColumn && e instanceof Parameter) {
       ((Parameter) e).setColumn(((ExpressionColumn) left).getColumn());
     }
     valueList.set(i, e);
   }
   if (constant && allValuesConstant) {
     return ValueExpression.get(getValue(session));
   }
   if (size == 1) {
     Expression right = valueList.get(0);
     Expression expr = new Comparison(session, Comparison.EQUAL, left, right);
     expr = expr.optimize(session);
     return expr;
   }
   if (allValuesConstant && !allValuesNull) {
     int leftType = left.getType();
     if (leftType == Value.UNKNOWN) {
       return this;
     }
     Expression expr = new ConditionInConstantSet(session, left, valueList);
     expr = expr.optimize(session);
     return expr;
   }
   return this;
 }
예제 #9
0
 public Expression optimize(Session session) {
   boolean allConst = isDeterministic();
   for (int i = 0, len = args.length; i < len; i++) {
     Expression e = args[i].optimize(session);
     args[i] = e;
     allConst &= e.isConstant();
   }
   if (allConst) {
     return ValueExpression.get(getValue(session));
   }
   return this;
 }
예제 #10
0
  static final boolean evalBoolean(ValueExpression expr, FacesContext context) {
    try {
      Object value = expr.getValue(context.getELContext());

      if (value == null) return false;
      else if (value instanceof Boolean) return ((Boolean) value).booleanValue();
      else if (value instanceof String) return "true".equalsIgnoreCase((String) value);
      else return false;
    } catch (ELException e) {
      throw new FacesException(e);
    }
  }
예제 #11
0
 @Override
 public Expression optimize(Session session) {
   boolean allConst = true;
   for (int i = 0; i < list.length; i++) {
     Expression e = list[i].optimize(session);
     if (!e.isConstant()) {
       allConst = false;
     }
     list[i] = e;
   }
   if (allConst) {
     return ValueExpression.get(getValue(session));
   }
   return this;
 }
예제 #12
0
  /** Sets the value expression with the given name. */
  @Override
  public void setValueExpression(String name, ValueExpression expr) {
    PropEnum prop = _propMap.get(name);

    if (prop != null) {
      switch (prop) {
        case DIR:
          if (expr != null && expr.isLiteralText()) {
            _dir = Util.evalString(expr);
            return;
          } else _dirExpr = expr;
          break;

        case ESCAPE:
          if (expr != null && expr.isLiteralText()) {
            _escape = Util.evalBoolean(expr);
            return;
          } else _escapeExpr = expr;
          break;

        case LANG:
          if (expr != null && expr.isLiteralText()) {
            _lang = Util.evalString(expr);
            return;
          } else _langExpr = expr;
          break;

        case STYLE:
          if (expr != null && expr.isLiteralText()) {
            _style = Util.evalString(expr);
            return;
          } else _styleExpr = expr;
          break;

        case STYLE_CLASS:
          if (expr != null && expr.isLiteralText()) {
            _styleClass = Util.evalString(expr);
            return;
          } else _styleClassExpr = expr;
          break;

        case TITLE:
          if (expr != null && expr.isLiteralText()) {
            _title = Util.evalString(expr);
            return;
          } else _titleExpr = expr;
          break;
      }
    }

    super.setValueExpression(name, expr);
  }
예제 #13
0
  @Override
  public T eval(List<String> tuple) {
    final ValueExpression firstVE = _veList.get(0);
    final Object firstObj = firstVE.eval(tuple);
    final NumericConversion firstType = (NumericConversion) firstVE.getType();
    double result = firstType.toDouble(firstObj);

    for (int i = 1; i < _veList.size(); i++) {
      final ValueExpression currentVE = _veList.get(i);
      final Object currentObj = currentVE.eval(tuple);
      final NumericConversion currentType = (NumericConversion) currentVE.getType();
      result -= currentType.toDouble(currentObj);
    }
    return _wrapper.fromDouble(result);
  }
예제 #14
0
  private void printComponentTree(
      PrintWriter out, String errorId, FacesContext context, UIComponent comp, int depth) {
    for (int i = 0; i < depth; i++) out.print(' ');

    boolean isError = false;
    if (errorId != null && errorId.equals(comp.getClientId(context))) {
      isError = true;
      out.print("<span style='color:red'>");
    }

    out.print("&lt;" + comp.getClass().getSimpleName());
    if (comp.getId() != null) out.print(" id=\"" + comp.getId() + "\"");

    for (Method method : comp.getClass().getMethods()) {
      if (!method.getName().startsWith("get") && !method.getName().startsWith("is")) continue;
      else if (method.getParameterTypes().length != 0) continue;

      String name;

      if (method.getName().startsWith("get")) name = method.getName().substring(3);
      else if (method.getName().startsWith("is")) name = method.getName().substring(2);
      else continue;

      // XXX: getURL
      name = Character.toLowerCase(name.charAt(0)) + name.substring(1);

      ValueExpression expr = comp.getValueExpression(name);

      Class type = method.getReturnType();

      if (expr != null) {
        out.print(" " + name + "=\"" + expr.getExpressionString() + "\"");
      } else if (method.getDeclaringClass().equals(UIComponent.class)
          || method.getDeclaringClass().equals(UIComponentBase.class)) {
      } else if (name.equals("family")) {
      } else if (String.class.equals(type)) {
        try {
          Object value = method.invoke(comp);

          if (value != null) out.print(" " + name + "=\"" + value + "\"");
        } catch (Exception e) {
        }
      }
    }

    int facetCount = comp.getFacetCount();
    int childCount = comp.getChildCount();

    if (facetCount == 0 && childCount == 0) {
      out.print("/>");

      if (isError) out.print("</span>");

      out.println();
      return;
    }
    out.println(">");

    if (isError) out.print("</span>");

    for (int i = 0; i < childCount; i++) {
      printComponentTree(out, errorId, context, comp.getChildren().get(i), depth + 1);
    }

    for (int i = 0; i < depth; i++) out.print(' ');

    if (isError) out.print("<span style='color:red'>");

    out.println("&lt;/" + comp.getClass().getSimpleName() + ">");

    if (isError) out.print("</span>");
  }
예제 #15
0
 static Object saveWithType(ValueExpression expr, FacesContext context) {
   if (expr != null) {
     return new Object[] {expr.getExpressionString(), expr.getExpectedType()};
   } else return null;
 }
예제 #16
0
 static String save(ValueExpression expr, FacesContext context) {
   if (expr != null) return expr.getExpressionString();
   else return null;
 }
예제 #17
0
 @Override
 public Expression getNotIfPossible(Session session) {
   return new Comparison(
       session, Comparison.EQUAL, this, ValueExpression.get(ValueBoolean.get(false)));
 }
  /** Sets the value expression with the given name. */
  @Override
  public void setValueExpression(String name, ValueExpression expr) {
    PropEnum prop = _propMap.get(name);

    if (prop != null) {
      switch (prop) {
        case DIR:
          if (expr != null && expr.isLiteralText()) {
            _dir = Util.evalString(expr);
            return;
          } else _dirExpr = expr;
          break;

        case ERROR_CLASS:
          if (expr != null && expr.isLiteralText()) {
            _errorClass = Util.evalString(expr);
            return;
          } else _errorClassExpr = expr;
          break;

        case ERROR_STYLE:
          if (expr != null && expr.isLiteralText()) {
            _errorStyle = Util.evalString(expr);
            return;
          } else _errorStyleExpr = expr;
          break;

        case FATAL_CLASS:
          if (expr != null && expr.isLiteralText()) {
            _fatalClass = Util.evalString(expr);
            return;
          } else _fatalClassExpr = expr;
          break;

        case FATAL_STYLE:
          if (expr != null && expr.isLiteralText()) {
            _fatalStyle = Util.evalString(expr);
            return;
          } else _fatalStyleExpr = expr;
          break;

        case INFO_CLASS:
          if (expr != null && expr.isLiteralText()) {
            _infoClass = Util.evalString(expr);
            return;
          } else _infoClassExpr = expr;
          break;

        case INFO_STYLE:
          if (expr != null && expr.isLiteralText()) {
            _infoStyle = Util.evalString(expr);
            return;
          } else _infoStyleExpr = expr;
          break;

        case LANG:
          if (expr != null && expr.isLiteralText()) {
            _lang = Util.evalString(expr);
            return;
          } else _langExpr = expr;
          break;

        case STYLE:
          if (expr != null && expr.isLiteralText()) {
            _style = Util.evalString(expr);
            return;
          } else _styleExpr = expr;
          break;

        case STYLE_CLASS:
          if (expr != null && expr.isLiteralText()) {
            _styleClass = Util.evalString(expr);
            return;
          } else _styleClassExpr = expr;
          break;

        case TITLE:
          if (expr != null && expr.isLiteralText()) {
            _title = Util.evalString(expr);
            return;
          } else _titleExpr = expr;
          break;

        case TOOLTIP:
          if (expr != null && expr.isLiteralText()) {
            _tooltip = Util.evalBoolean(expr);
            return;
          } else _tooltipExpr = expr;
          break;

        case WARN_CLASS:
          if (expr != null && expr.isLiteralText()) {
            _warnClass = Util.evalString(expr);
            return;
          } else _warnClassExpr = expr;
          break;

        case WARN_STYLE:
          if (expr != null && expr.isLiteralText()) {
            _warnStyle = Util.evalString(expr);
            return;
          } else _warnStyleExpr = expr;
          break;
      }
    }

    super.setValueExpression(name, expr);
  }