public void testNumberConverterCurrency() throws Exception {
   UIInput text = new UIInput();
   NumberConverter converter = (NumberConverter) application.createConverter("javax.faces.Number");
   converter.setType("currency");
   converter.setLocale(Locale.FRANCE);
   String toConv = "12 345,68 " + '\u20aC';
   Number number = (Number) converter.getAsObject(getFacesContext(), text, toConv);
   assertTrue(number != null);
 }
 // Create and configure a NumberConverter
 protected NumberConverter createNumberConverter() {
   NumberConverter nc = new NumberConverter();
   nc.setCurrencyCode("USD");
   nc.setCurrencySymbol("$");
   nc.setGroupingUsed(false);
   nc.setIntegerOnly(true);
   nc.setMaxFractionDigits(2);
   nc.setMaxIntegerDigits(10);
   nc.setMinFractionDigits(2);
   nc.setMinIntegerDigits(5);
   nc.setType("currency");
   return (nc);
 }
 protected void checkNumberConverters(NumberConverter nc1, NumberConverter nc2) {
   assertNotNull(nc1);
   assertNotNull(nc2);
   assertEquals(nc1.getCurrencyCode(), nc2.getCurrencyCode());
   assertEquals(nc1.getCurrencySymbol(), nc2.getCurrencySymbol());
   assertEquals(nc1.isGroupingUsed(), nc2.isGroupingUsed());
   assertEquals(nc1.isIntegerOnly(), nc2.isIntegerOnly());
   assertEquals(nc1.getMaxFractionDigits(), nc2.getMaxFractionDigits());
   assertEquals(nc1.getMaxIntegerDigits(), nc2.getMaxIntegerDigits());
   assertEquals(nc1.getMinFractionDigits(), nc2.getMinFractionDigits());
   assertEquals(nc1.getMinIntegerDigits(), nc2.getMinIntegerDigits());
   assertEquals(nc1.getLocale(), nc2.getLocale());
   assertEquals(nc1.getPattern(), nc2.getPattern());
   assertEquals(nc1.getType(), nc2.getType());
 }
  @SuppressWarnings("deprecation")
  public void testWidgetProcessor() throws Exception {

    StandardConverterProcessor processor = new StandardConverterProcessor();

    HtmlInputText htmlInputText = new HtmlInputText();

    // Actions get no Converters

    processor.processWidget(htmlInputText, ACTION, null, null);
    assertEquals(null, htmlInputText.getConverter());

    // Empty attributes get no Converters

    Map<String, String> attributes = CollectionUtils.newHashMap();
    attributes.put(NAME, "foo");
    processor.processWidget(htmlInputText, PROPERTY, attributes, null);
    assertEquals(null, htmlInputText.getConverter());
    assertEquals(null, htmlInputText.getLabel());

    // Explicit converter

    attributes.put(FACES_CONVERTER, "fooConverter");
    processor.processWidget(htmlInputText, PROPERTY, attributes, null);
    assertEquals("fooConverter", htmlInputText.getConverter().toString());

    // Explicit EL-based converter

    attributes.put(FACES_CONVERTER, "#{foo.converter}");
    htmlInputText = new HtmlInputText();
    processor.processWidget(htmlInputText, PROPERTY, attributes, null);
    assertEquals(
        "#{foo.converter}", htmlInputText.getValueBinding("converter").getExpressionString());
    attributes.remove(FACES_CONVERTER);

    // Implicit DateTimeConverter

    attributes.put(TYPE, Date.class.getName());
    htmlInputText = new HtmlInputText();
    processor.processWidget(htmlInputText, PROPERTY, attributes, new HtmlMetawidget());
    assertTrue(htmlInputText.getConverter() instanceof DateTimeConverter);
    htmlInputText = new HtmlInputText();

    // DateTimeConverter

    attributes.put(DATE_STYLE, "full");
    attributes.put(TIME_STYLE, "medium");
    attributes.put(LOCALE, "UK");
    attributes.put(DATETIME_PATTERN, "dd/MM/yyyy");
    attributes.put(TIME_ZONE, "Australia/Sydney");
    attributes.put(DATETIME_TYPE, "date");
    processor.processWidget(htmlInputText, PROPERTY, attributes, new HtmlMetawidget());
    assertEquals(null, htmlInputText.getLabel());

    DateTimeConverter dateTimeConverter = (DateTimeConverter) htmlInputText.getConverter();
    assertEquals("full", dateTimeConverter.getDateStyle());
    assertEquals("medium", dateTimeConverter.getTimeStyle());
    assertEquals("uk", dateTimeConverter.getLocale().getLanguage());
    assertEquals("dd/MM/yyyy", dateTimeConverter.getPattern());
    assertEquals("Australia/Sydney", dateTimeConverter.getTimeZone().getID());
    assertEquals("date", dateTimeConverter.getType());

    // NumberConverter

    attributes.clear();
    attributes.put(CURRENCY_CODE, "AUD");
    attributes.put(CURRENCY_SYMBOL, "$");
    attributes.put(NUMBER_USES_GROUPING_SEPARATORS, TRUE);
    attributes.put(LOCALE, "AU");
    attributes.put(MINIMUM_FRACTIONAL_DIGITS, "0");
    attributes.put(MAXIMUM_FRACTIONAL_DIGITS, "1");
    attributes.put(MINIMUM_INTEGER_DIGITS, "2");
    attributes.put(MAXIMUM_INTEGER_DIGITS, "5");
    attributes.put(NUMBER_PATTERN, "#0.00");
    attributes.put(NUMBER_TYPE, "currency");

    // (should not overwrite existing Converter)

    processor.processWidget(htmlInputText, PROPERTY, attributes, null);
    assertEquals(dateTimeConverter, htmlInputText.getConverter());
    htmlInputText.setConverter(null);
    processor.processWidget(htmlInputText, PROPERTY, attributes, null);

    NumberConverter numberConverter = (NumberConverter) htmlInputText.getConverter();
    assertEquals("AUD", numberConverter.getCurrencyCode());
    assertEquals("$", numberConverter.getCurrencySymbol());
    assertTrue(numberConverter.isGroupingUsed());
    assertEquals("au", numberConverter.getLocale().getLanguage());
    assertEquals(0, numberConverter.getMinFractionDigits());
    assertEquals(1, numberConverter.getMaxFractionDigits());
    assertEquals(2, numberConverter.getMinIntegerDigits());
    assertEquals(5, numberConverter.getMaxIntegerDigits());
    assertEquals("#0.00", numberConverter.getPattern());
    assertEquals("currency", numberConverter.getType());
  }
  protected Converter createConverter() throws JspException {
    FacesContext context = FacesContext.getCurrentInstance();
    ELContext elctx = context.getELContext();

    if (binding != null) {
      Converter boundConverter = (NumberConverter) binding.getValue(elctx);
      if (boundConverter != null) return boundConverter;
    }

    NumberConverter converter = new NumberConverter();

    if (currencyCode != null) converter.setCurrencyCode((String) currencyCode.getValue(elctx));
    if (currencySymbol != null)
      converter.setCurrencySymbol((String) currencySymbol.getValue(elctx));
    if (groupingUsed != null) converter.setGroupingUsed((Boolean) groupingUsed.getValue(elctx));
    if (integerOnly != null) converter.setIntegerOnly((Boolean) integerOnly.getValue(elctx));
    if (maxFractionDigits != null)
      converter.setMaxFractionDigits((Integer) maxFractionDigits.getValue(elctx));
    if (minFractionDigits != null)
      converter.setMinFractionDigits((Integer) minFractionDigits.getValue(elctx));
    if (minIntegerDigits != null)
      converter.setMinIntegerDigits((Integer) minIntegerDigits.getValue(elctx));
    if (pattern != null) converter.setPattern((String) pattern.getValue(elctx));
    if (type != null) converter.setType((String) type.getValue(elctx));

    Locale loc = null;
    if (locale != null) loc = FacesUtils.getLocaleFromExpression(context, locale);
    if (loc == null) loc = context.getViewRoot().getLocale();
    converter.setLocale(loc);

    if (binding != null) binding.setValue(elctx, converter);
    return converter;
  }
  public Converter getConverter(ValueHolder valueHolder, Map<String, String> attributes) {

    // Use existing Converter (if any)

    Converter converter = valueHolder.getConverter();

    if (converter != null) {
      return converter;
    }

    // Create from id

    FacesContext context = FacesContext.getCurrentInstance();
    String converterId = attributes.get(FACES_CONVERTER);

    if (converterId != null) {

      converter = context.getApplication().createConverter(converterId);

    } else if (valueHolder instanceof UISelectOne || valueHolder instanceof UISelectMany) {

      // Create from parameterized type (eg. a Date converter for List<Date>)

      String parameterizedType = WidgetBuilderUtils.getComponentType(attributes);

      if (parameterizedType != null) {
        Class<?> parameterizedClass = ClassUtils.niceForName(parameterizedType);

        // The parameterized type might be null, or might not be concrete
        // enough to be instantiatable (eg. List<? extends Foo>)

        if (parameterizedClass != null) {
          converter = context.getApplication().createConverter(parameterizedClass);
        }
      }

    } else {

      // Create implicit converters
      //
      // JSF does not appear to implicitly hook up DateTimeConverters without either an
      // explicit f:convertDateTime tag or a registered java.util.Date converter. Adding one
      // fixes both POSTback and display of read-only dates (otherwise JSF uses Date.toString)
      //
      // JSF *does* appear to implicitly hook up NumberConverters.

      String type = attributes.get(TYPE);

      if (type != null) {

        Class<?> clazz = ClassUtils.niceForName(type);

        if (clazz != null) {

          if (clazz.isAssignableFrom(Date.class)) {
            converter = getDateTimeConverter(converter);
          }
        }
      }
    }

    // Support for DateTimeConverter

    if (attributes.containsKey(DATE_STYLE)) {
      converter = getDateTimeConverter(converter);
      ((DateTimeConverter) converter).setDateStyle(attributes.get(DATE_STYLE));
    }

    if (attributes.containsKey(DATETIME_PATTERN)) {
      converter = getDateTimeConverter(converter);
      ((DateTimeConverter) converter).setPattern(attributes.get(DATETIME_PATTERN));
    }

    if (attributes.containsKey(TIME_STYLE)) {
      converter = getDateTimeConverter(converter);
      ((DateTimeConverter) converter).setTimeStyle(attributes.get(TIME_STYLE));
    }

    if (attributes.containsKey(TIME_ZONE)) {
      converter = getDateTimeConverter(converter);
      ((DateTimeConverter) converter).setTimeZone(TimeZone.getTimeZone(attributes.get(TIME_ZONE)));
    }

    if (attributes.containsKey(DATETIME_TYPE)) {
      converter = getDateTimeConverter(converter);
      ((DateTimeConverter) converter).setType(attributes.get(DATETIME_TYPE));
    }

    // Support for NumberConverter

    if (attributes.containsKey(CURRENCY_CODE)) {
      converter = getNumberConverter(converter);
      ((NumberConverter) converter).setCurrencyCode(attributes.get(CURRENCY_CODE));
    }

    if (attributes.containsKey(CURRENCY_SYMBOL)) {
      converter = getNumberConverter(converter);
      ((NumberConverter) converter).setCurrencySymbol(attributes.get(CURRENCY_SYMBOL));
    }

    if (attributes.containsKey(NUMBER_USES_GROUPING_SEPARATORS)) {
      converter = getNumberConverter(converter);
      ((NumberConverter) converter)
          .setGroupingUsed(Boolean.parseBoolean(attributes.get(NUMBER_USES_GROUPING_SEPARATORS)));
    }

    if (attributes.containsKey(MINIMUM_INTEGER_DIGITS)) {
      converter = getNumberConverter(converter);
      ((NumberConverter) converter)
          .setMinIntegerDigits(Integer.parseInt(attributes.get(MINIMUM_INTEGER_DIGITS)));
    }

    if (attributes.containsKey(MAXIMUM_INTEGER_DIGITS)) {
      converter = getNumberConverter(converter);
      ((NumberConverter) converter)
          .setMaxIntegerDigits(Integer.parseInt(attributes.get(MAXIMUM_INTEGER_DIGITS)));
    }

    if (attributes.containsKey(MINIMUM_FRACTIONAL_DIGITS)) {
      converter = getNumberConverter(converter);
      ((NumberConverter) converter)
          .setMinFractionDigits(Integer.parseInt(attributes.get(MINIMUM_FRACTIONAL_DIGITS)));
    }

    if (attributes.containsKey(MAXIMUM_FRACTIONAL_DIGITS)) {
      converter = getNumberConverter(converter);
      ((NumberConverter) converter)
          .setMaxFractionDigits(Integer.parseInt(attributes.get(MAXIMUM_FRACTIONAL_DIGITS)));
    }

    if (attributes.containsKey(NUMBER_PATTERN)) {
      converter = getNumberConverter(converter);
      ((NumberConverter) converter).setPattern(attributes.get(NUMBER_PATTERN));
    }

    if (attributes.containsKey(NUMBER_TYPE)) {
      converter = getNumberConverter(converter);
      ((NumberConverter) converter).setType(attributes.get(NUMBER_TYPE));
    }

    // Locale (applies to both DateTimeConverter and NumberConverter)

    if (attributes.containsKey(LOCALE)) {
      if (converter instanceof NumberConverter) {
        ((NumberConverter) converter).setLocale(new Locale(attributes.get(LOCALE)));
      } else {
        converter = getDateTimeConverter(converter);
        ((DateTimeConverter) converter).setLocale(new Locale(attributes.get(LOCALE)));
      }
    }

    // Return it

    return converter;
  }
  public void wygeneruj(HashMap lista) throws Exception {
    FacesContext facesCtx = FacesContext.getCurrentInstance();
    ELContext elContext = facesCtx.getELContext();
    ExpressionFactory ef = ExpressionFactory.newInstance();

    akordeon = new AccordionPanel();
    // robienie glownej oprawy
    Set nazwyew = lista.keySet();
    Iterator it;
    it = nazwyew.iterator();
    int i = 0;
    while (it.hasNext()) {
      String nazwapj = (String) it.next();
      Tab tab = new Tab();
      tab.setId("tabek" + i);
      tab.setTitle("ewidencja: " + nazwapj);

      DataTable dataTable = new DataTable();
      dataTable.setId("tablica" + i);
      // dataTable.setResizableColumns(true);
      dataTable.setVar("var");
      dataTable.setValue(lista.get(nazwapj));
      dataTable.setStyle("width: 1000px;");
      // tak trzeba opisac kazda kolumne :)
      ArrayList<String> opisykolumn = new ArrayList<>();
      opisykolumn.addAll(EVatViewPola.getOpispol());
      Iterator itx;
      itx = opisykolumn.iterator();
      while (itx.hasNext()) {
        String wstawka = (String) itx.next();
        Column column = new Column();
        column.setHeaderText(wstawka);
        final String binding = "#{var." + wstawka + "}";
        ValueExpression ve = ef.createValueExpression(elContext, binding, String.class);
        HtmlOutputText ot = new HtmlOutputText();
        ot.setValueExpression("value", ve);
        switch (wstawka) {
          case "kontr":
            column.setWidth("350");
            break;
          case "id":
            column.setWidth("50");
            break;
          case "netto":
            ot.setStyle("float: right;");
            NumberConverter numx = new NumberConverter();
            numx.setMaxFractionDigits(2);
            numx.setMinFractionDigits(2);
            ot.setConverter(numx);
          case "vat":
            ot.setStyle("float: right;");
            NumberConverter numy = new NumberConverter();
            numy.setMaxFractionDigits(2);
            numy.setLocale(new Locale("PL"));
            numy.setGroupingUsed(true);
            ot.setConverter(numy);
        }
        column.getChildren().add(ot);
        dataTable.getChildren().add(column);
      }
      Separator sep = new Separator();
      CommandButton button = new CommandButton();
      button.setValue("PobierzPdf");
      button.setType("button");
      button.setId("przyciskpdf" + i);
      FacesContext context = FacesContext.getCurrentInstance();
      MethodExpression actionListener =
          context
              .getApplication()
              .getExpressionFactory()
              .createMethodExpression(
                  context.getELContext(),
                  "#{pdf.drukujewidencje('zakup')}",
                  null,
                  new Class[] {ActionEvent.class});
      button.addActionListener(new MethodExpressionActionListener(actionListener));
      //            MethodExpression methodExpressionX =
      // context.getApplication().getExpressionFactory().createMethodExpression(
      //            context.getELContext(), "#{pdf.drukujewidencje('"+nazwapj+"')}", null, new
      // Class[] {});
      //            button.setActionExpression(methodExpressionX);
      String nowanazwa;
      if (nazwapj.contains("sprzedaż")) {
        nowanazwa = nazwapj.substring(0, nazwapj.length() - 1);
      } else {
        nowanazwa = nazwapj;
      }
      String tablican =
          "PrimeFaces.ab({source:'form:przyciskpdf"
              + i
              + "',onsuccess:function(data,status,xhr){wydrukewidencje('"
              + wpisView.getPodatnikWpisu()
              + "','"
              + nowanazwa
              + "');;}});return false;";
      button.setOnclick(tablican);
      tab.getChildren().add(dataTable);
      tab.getChildren().add(sep);
      tab.getChildren().add(button);
      akordeon.getChildren().add(tab);

      i++;
    }

    // generowanie podsumowania
    List<EVatwpisSuma> suma2 = new ArrayList<>();
    suma2.addAll(sumaewidencji.values());
    Tab tab = new Tab();
    tab.setId("tabekdsuma");
    tab.setTitle("podsumowanie ewidencji");
    DataTable dataTable = new DataTable();
    dataTable.setId("tablicasuma");
    dataTable.setResizableColumns(true);
    dataTable.setVar("var");
    dataTable.setValue(suma2);
    dataTable.setStyle("width: 1000px;");
    List<String> opisykolumny = new ArrayList<>();
    opisykolumny.add("ewidencja");
    opisykolumny.add("netto");
    opisykolumny.add("vat");
    Iterator ity = opisykolumny.iterator();
    while (ity.hasNext()) {
      String wstawka = (String) ity.next();
      Column column = new Column();
      column.setHeaderText(wstawka);
      HtmlOutputText ot = new HtmlOutputText();
      if (!wstawka.equals("ewidencja")) {
        ot.setStyle("float: right;");
        NumberConverter numberconv = new NumberConverter();
        numberconv.setLocale(new Locale("PL"));
        numberconv.setMinFractionDigits(2);
        numberconv.setMaxFractionDigits(2);
        column.setWidth("200");
        ot.setConverter(numberconv);
      }
      final String binding = "#{var." + wstawka + "}";
      ValueExpression ve = ef.createValueExpression(elContext, binding, String.class);
      ot.setValueExpression("value", ve);
      column.getChildren().add(ot);
      dataTable.getChildren().add(column);
    }
    tab.getChildren().add(dataTable);
    akordeon.getChildren().add(tab);
  }