public void evaluar() {
   itemsdetalle = new ArrayList<Detallehistorial>();
   Detallehistorial det;
   for (Componenteformla com : metaSeleccionada.getIndicador().getComponenteformlaCollection()) {
     det = new Detallehistorial();
     det.setIdcomponenteformula(com);
     itemsdetalle.add(det);
   }
   System.out.println("cargo");
   try {
     FacesContext.getCurrentInstance()
         .getExternalContext()
         .redirect("/BSC/faces/objetivoestrategico/Evaluar.xhtml");
   } catch (IOException ex) {
     Logger.getLogger(ObjetivoestrategicoController.class.getName()).log(Level.SEVERE, null, ex);
   }
 }
 public void calculaIndicador() {
   boolean calucular = true;
   System.out.println("inicio");
   for (Detallehistorial d : itemsdetalle) {
     System.out.println("Valor " + d.getValor());
     if (d.getValor() == null) calucular = false;
   }
   System.out.println(calucular);
   if (calucular) {
     if (!metaSeleccionada.getIndicador().getFormula().equals("")) {
       String formula = metaSeleccionada.getIndicador().getFormula().replaceAll("\\s", "").trim();
       Validacion cadena = new Validacion(formula);
       if (cadena.Exp_Valida()) {
         String Exp = formula.trim();
         // Borra parentesis del inicio y fin si toda la expresion esta entre parentesis
         if (Exp.charAt(0) == '(' && Exp.charAt(Exp.length() - 1) == ')') {
           int p = 1, i = 1;
           while (p != 0) {
             if (Exp.charAt(i) == '(') {
               p++;
             }
             if (Exp.charAt(i) == ')') {
               p--;
             }
             i++;
           }
           if (i == Exp.length()) {
             Exp = Exp.substring(1, Exp.length() - 1);
           }
         }
         arbol = new Arbol(Exp);
         arbol.Formar_Arbol();
         arbol.reemplazarValores(itemsdetalle);
         List term = arbol.listarTerminos();
         nuevoObjetivoestrategicoindicador
             .getIndicador()
             .setComponenteformlaCollection(new ArrayList());
         nuevoVolorIndocador = Double.parseDouble(arbol.Calcular());
         for (int i = 0; i < term.size(); i++) {
           System.out.println("term " + term.get(i));
         }
       }
     }
   }
 }