Revin cu varianta de implementare a librariei i18N pentru Java. Am incercat sa mentin aceleasi semnaturi de functii pentru interfetele pe care le pune la dispozitie libraria, in scopul pastrarii unei similitudini cat mai mari cu varianta de implementare pentru .NET. Evident exista si unele nmici diferente de formatare, dar acestea se pot remedia cu usurinta prin putin mai multa atentie.

Dupa cum am mentionat si in articolul Librarie .NET i18N, menirea librariei i18N este sa rezolve problema prezentarii valorilor de tip numeric sau de tip data, functie de cultura aplicatiei, folosind elemente de formatare predefinite. Se disting 3 situatii care necesita formatare:

  • afisarea informatiei in scopul vizualizarii prin transformarea unei valori numerice sau date calendaristice in informatie de tip string, 
  • afisarea informatiei in scopul editarii prin transformarea unei valori numerice sau date calendaristice in informatie de tip string,
  • interpretarea informatiei din campurile de editare si prin transformarea unui string in valoare numerica sau date calendaristica.

Primele 2 situatii sunt rezolvate prin folosirea clasei Formater din libraria i18N. Diferenta intre cele 2 situatii poate fi explicata de modul de formatare a datelor. De exemplu, o data calendaristica poate fi afisata pentru vizualizare cu luna in format textual "18-Feb-2009", iar pentru editare in format numeric "18.02.2009". Aceasta diferenta se face doar prin folosirea altor string-uri de formatare: astfel pentru afisarea in forma 18-Feb-2009 folosim formatarea dd-MMM-yyyy, iar pentru afisarea in forma 18-02-2009 folosim formatarea dd.MM.yyyy.

A treia situatie este rezolvata prin utilizarea clasei Parser din libraria i18N. Aceasta clasa are menirea de a transforma un string reprezentand un anume tip de data in insasi tipul respectiv.

Proiectul Java Eclipse 3.3.2 implementand libraria i18N se poate descarca accesand link-ul de mai jos:
Descarca i18N

Mai jos am scris o clasa de test pentru aceasta librarie:

package ro.atypIQ.LL.i18N;

import java.math.BigDecimal;
import java.sql.Time;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.Locale;

public class TestClass {
  private static Boolean boolv = new Boolean(true);
  private static Short shortv = new Short((short)123);
  private static Integer intv = new Integer(123456345);
  private static Long longv = new Long(Long.parseLong("12345634556568768"));
    private static Float floatv = new Float("1.23");
    private static Double doublev = new Double(12.432);
    private static BigDecimal bigdecimalv = new BigDecimal(12.432);
  private static Date datev = new Date(System.currentTimeMillis());
  private static Time timev = new Time(System.currentTimeMillis());
  private static Timestamp timestampv = new Timestamp(System.currentTimeMillis());

  private static IPaternFormater getParserFormater() {
    Locale locale = new Locale("en");
    IPaternFormater paternFormater = new PaternFormater(locale);
//    paternFormater.setDatePatern("dd.MM.yyyy");
//    paternFormater.setTimePatern("HH:mm");
//    paternFormater.setTimestampPatern("dd.MM.yyyy HH:mm");
//    paternFormater.setIntegerPatern("#.##0");
//    paternFormater.setDecimalPatern("#.##0,######");
//    paternFormater.setDecimalSepCharPatern(',');
//    paternFormater.setGroupSepCharPatern('.');
    return paternFormater;
  }
  
  public static void main(String[] args) {
    try {
      testFormater();
      testParser();
    }catch (Exception e) {
      e.printStackTrace();
    }
  }

  public static void testFormater() throws Exception {
    IPaternFormater paternFormater = getParserFormater();
    IFormater viewFormater = new Formater(paternFormater);
    
        String boolval = viewFormater.formatBoolean(boolv);
        String vshort = viewFormater.formatShort(shortv);
        String vint = viewFormater.formatInteger(intv);
        String vlong = viewFormater.formatLong(longv);
        String vfloat = viewFormater.formatFloat(floatv);
        String vDouble = viewFormater.formatDouble(doublev);
        String vtime = viewFormater.formatTime(timev);
        String vdate = viewFormater.formatDate(datev);
        String vtimestamp = viewFormater.formatTimestamp(timestampv);

        String aValueType = "";
        aValueType = viewFormater.formatDecimal(shortv);
        aValueType = viewFormater.formatDecimal(shortv, 7);
        aValueType = viewFormater.formatDecimal(intv);
        aValueType = viewFormater.formatDecimal(intv, 7);
        aValueType = viewFormater.formatDecimal(longv);
        aValueType = viewFormater.formatDecimal(longv, 7);
        aValueType = viewFormater.formatDecimal(floatv);
        aValueType = viewFormater.formatDecimal(floatv, 7);
        aValueType = viewFormater.formatDecimal(doublev);
        aValueType = viewFormater.formatDecimal(doublev, 7);

        aValueType = viewFormater.formatBigDecimal(bigdecimalv, 6);    
  }

  public static void testParser() throws Exception {
    IPaternFormater paternFormater = getParserFormater();
    IParser editParser = new Parser(paternFormater);
    
        Boolean tval = editParser.parseBoolean("1");
        Boolean fval = editParser.parseBoolean("0");

        Short shortval = editParser.parseShort("124");
        Integer intval = editParser.parseInteger("12454334");
        Long longval = editParser.parseLong("12345634556568768");

        Date dateval = editParser.parseDate("1/12/2007");
        Time timeval = editParser.parseTime("11:34 AM");
        Timestamp timestampval = editParser.parseTimestamp("1/12/2007 11:34 AM");

        BigDecimal decimalval = editParser.parseBigDecimal("123.212");
        Double doubleval = editParser.parseDouble("123.212");
        Float floatVal = editParser.parseFloat("123.212");  }

}

Puteti gasi o implementare a librariei i18N pentru .NET citind postul Librarie .NET i18M.