UserParametersUI.java :  » Report » jmagallanes-1.0 » com » calipso » reportgenerator » userinterface » Java Open Source

Java Open Source » Report » jmagallanes 1.0 
jmagallanes 1.0 » com » calipso » reportgenerator » userinterface » UserParametersUI.java
package com.calipso.reportgenerator.userinterface;

import com.calipso.reportgenerator.common.LanguageTraslator;
import com.calipso.reportgenerator.common.ReportSpec;
import com.calipso.reportgenerator.common.InfoException;
import com.calipso.reportgenerator.common.ShowExceptionMessageDialog;
import com.calipso.reportgenerator.reportdefinitions.types.ReportDataType;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParseException;


/**
 * Genera la interfaz de usuario para el ingreso de Parametros
 */

public class UserParametersUI extends JDialog implements ActionListener{

  private Vector userParametersCollection;
  private HashMap params;
  private boolean isMapGenerated;
  private HashMap variablesNames;
  private JButton btAccept;
  private JButton btCancel;
  private int WIDTH = 90;
  private int HEIGHT = 26;

  /**
   * Inicializa una instancia de UserParametersUI
   * @param userParametersCollection coleccion necesaria para la creacion de la interfaz
   */
  public UserParametersUI(Frame owner, Vector userParametersCollection){
    super(owner, true);
    this.userParametersCollection = userParametersCollection;
    this.variablesNames = new HashMap();
  }

  /**
   * Inicializa los componentes de la interfaz y los muestra
   */
  public void showUI(){
    getContentPane().add(createCenterPanel(), BorderLayout.CENTER);
    getContentPane().add(createSouthPanel(), BorderLayout.SOUTH);
    this.pack();
    setLocation(getDefaultLocation());
    this.setVisible(true);
  }

  private Point getDefaultLocation() {
    Point ownerLocation = getOwner().getLocation();
    Dimension ownerSize = getOwner().getSize();
    Dimension size = getSize();

    int x = ownerLocation.x + ownerSize.width / 2 - size.width / 2;
    int y = ownerLocation.y + ownerSize.height / 2 - size.height / 2;
    return new Point(x, y);
  }

  /**
   * Genera el Panel con los botones Aceptar o Cancelar
   * @return Panel que contiene los botones Aceptar o Cancelar
   */
  private JPanel createSouthPanel(){
    JPanel southPanel = new JPanel(new BorderLayout());
    setTitle(LanguageTraslator.traslate("186"));
    btAccept = new JButton(LanguageTraslator.traslate("112"));
    btAccept.setSize(new Dimension(WIDTH, HEIGHT));
    btAccept.setPreferredSize(new Dimension(WIDTH, HEIGHT));
    btAccept.setMaximumSize(new Dimension(WIDTH, HEIGHT));
    btAccept.setMinimumSize(new Dimension(WIDTH, HEIGHT));
    btAccept.addActionListener(this);
    btCancel = new JButton(LanguageTraslator.traslate("113"));
    btCancel.addActionListener(this);
    btCancel.setSize(new Dimension(WIDTH, HEIGHT));
    btCancel.setPreferredSize(new Dimension(WIDTH, HEIGHT));
    btCancel.setMaximumSize(new Dimension(WIDTH, HEIGHT));
    btCancel.setMinimumSize(new Dimension(WIDTH, HEIGHT));
    JPanel eastSouthPanel = new JPanel(new FlowLayout());
    eastSouthPanel.add(btAccept);
    eastSouthPanel.add(btCancel);
    southPanel.add(eastSouthPanel, BorderLayout.EAST);
    return southPanel;
  }

  /**
   * Panel que contiene los TextField y sus descripciones correspondientes para el
   * ingreso de Parametros por parte del usuario
   * @return Panel escencial para el ingreso de datos
   */
  private JPanel createCenterPanel(){
    JPanel centerPanel = new JPanel(new GridLayout(userParametersCollection.size(), 1));
    for(Enumeration enumeration = userParametersCollection.elements() ; enumeration.hasMoreElements();){
      UserParameterElement paramValueElement = (UserParameterElement) enumeration.nextElement();
      JLabel label = new JLabel(paramValueElement.getName());
      //Font font = new Font("Arial", Font.BOLD, 11);
      //label.setFont(font);
      centerPanel.add(label, BorderLayout.CENTER);
      centerPanel.add(getValuesPanel(paramValueElement));
    }
    return centerPanel;
  }

  /**
   * Crea y devuelve un Panel segun la cantidad y elementos que hayan en la coleccion
   * de parametros de usuario
   * @param paramValueElement
   * @return Panel con los textfields necesarios para el ingreso de datos
   */
  private JPanel getValuesPanel(UserParameterElement paramValueElement){
    JPanel pnlValues = new JPanel(new GridLayout(paramValueElement.getValues().size(), paramValueElement.getValues().size()));
    for(int i=0 ; i<paramValueElement.getValues().size() ; i++){
      String currentKey = paramValueElement.getKeyAt(i);
      JLabel label = new JLabel(currentKey);
      pnlValues.add(label);

      UserParameterTextField textField = null;
      if(paramValueElement.getDimensionDataType() == ReportDataType.DATETIME_TYPE ||
         paramValueElement.getDimensionDataType() == ReportDataType.DATE_TYPE) {
        String formatedDate = getDateFrom(paramValueElement.getValues().get(currentKey).toString());
        textField = new DateTextField(formatedDate);
      } else if(paramValueElement.getDimensionDataType() == ReportDataType.STRING_TYPE) {
        textField = new StringTextField(paramValueElement.getValues().get(currentKey).toString());
      }
      pnlValues.add(textField);
      initializeDictionary(paramValueElement.getFilterDefinitionName(), currentKey, textField);

    }
    return pnlValues;
  }

  private String getDateFrom(String dateString) {
    String returnVal = null;
    try {
      DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
      Date date = dateFormat.parse(dateString);
      DateFormat second = SimpleDateFormat.getDateInstance(DateFormat.SHORT, LanguageTraslator.getLocale());
      returnVal = second.format(date);
    } catch (ParseException e) {
      e.printStackTrace();
    }
    return returnVal;
  }

  /**
   * Genera un Map que contiene las instancias de los TextFields creados
   * @param name Nombre del Filtro
   * @param paramType posibles valores FROM, TO, QUANTITY, VALUE
   * @param textfield instancia de textfield
   */
  private void initializeDictionary(String name, String paramType, JTextField textfield){
    if(paramType.equals(LanguageTraslator.traslate("146"))){//desde
      variablesNames.put(name + " FROM", textfield);
    }else if(paramType.equals(LanguageTraslator.traslate("147"))){//hasta
      variablesNames.put(name + " TO", textfield);
    }else if(paramType.equals(LanguageTraslator.traslate("149"))){//cant
      variablesNames.put(name + " QUANTITY", textfield);
    }else if(paramType.equals(LanguageTraslator.traslate("150"))){//value
      variablesNames.put(name + " VALUE", textfield);
    }
  }

  /**
   * Metodo que administra los eventos de la clase
   * @param ae Evento correspondiente
   */
  public void actionPerformed(ActionEvent ae) {
    isMapGenerated = false;
    if(ae.getSource() == btAccept){
      Hashtable incorrectInputs = validateUserParameters();
      if(incorrectInputs.size() > 0){
        showMessage(incorrectInputs);
        return;
      }
      try {
        params = getUserParameters();
      } catch (InfoException e) {
        ShowExceptionMessageDialog.initExceptionDialogMessage(LanguageTraslator.traslate("257"), e);
      }
      isMapGenerated = true;
      this.dispose();
    }else{
      dispose();
    }
  }

  /**
   * Muestra un Dialog en caso de que se hayan cometido errores en el ingreso
   * @param incorrectInputs Map que contiene los valores ingresados incorrectos
   */
  private void showMessage(Hashtable incorrectInputs){
    String incorrectInputsString = "";
    for(Enumeration enumeration = incorrectInputs.keys() ; enumeration.hasMoreElements() ; ){
      String currentKey = enumeration.nextElement().toString();
      incorrectInputsString = incorrectInputsString + currentKey + " > " + incorrectInputs.get(currentKey) + '\n';
    }
    JOptionPane.showMessageDialog(this, incorrectInputsString, "Error", JOptionPane.ERROR_MESSAGE);
  }

  /**
   * Obtiene los parametros de usuario
   * @return Hashmap que contiene los parametros de usuario
   */
  private HashMap getUserParameters() throws InfoException {
    HashMap userParameters = new HashMap();
    Set keys = variablesNames.keySet();
    for(Iterator iterator = keys.iterator() ; iterator.hasNext() ; ){
      String currentKey = iterator.next().toString();
      String [] tokens = prepareTokens(currentKey);
      //userParameters.put(tokens[0].toUpperCase() + tokens[1], ((JTextField)variablesNames.get(currentKey)).getText());
      userParameters.put(tokens[0].toUpperCase() + tokens[1], ((UserParameterTextField)variablesNames.get(currentKey)).getFieldText());
    }
    return userParameters;
  }

  /**
   * Valida los parametros ingresados por el usuario
   * @return  Map que contiene los posibles valores incorrectos
   */
  private Hashtable validateUserParameters(){
    Hashtable incorrectMap = new Hashtable();
    Set keys = variablesNames.keySet();
        for(Iterator iterator = keys.iterator() ; iterator.hasNext() ; ){
          String currentKey = iterator.next().toString();
          String []tokens = prepareTokens(currentKey);
          String returnedVal = validate(tokens);
          if(!returnedVal.equals("")){
            String [] incorrectTokens = prepareTokens(returnedVal);
            incorrectMap.put(incorrectTokens[0], LanguageTraslator.traslate("152") + incorrectTokens[1]
                                                 + ", " + incorrectTokens[2]);
          }
    }
    return incorrectMap;
  }

  /**
   * Valida por cada Filtro. Es decir, que el valor "TO" o "QUANTITY" sea menor al valor "FROM"
   * @param tokens
   * @return value
   */
  private String validate(String []tokens){
    String from="0", to="0";
    if(tokens[tokens.length-1].equals("TO")){
      to = ((JTextField)variablesNames.get(tokens[0] + " " + tokens[tokens.length-1])).getText();
      from = ((JTextField)variablesNames.get(tokens[0] + " " + "FROM")).getText();
    }else if(tokens[tokens.length-1].equals("QUANTITY")){
      to = ((JTextField)variablesNames.get(tokens[0] + " " + tokens[tokens.length-1])).getText();
      from = ((JTextField)variablesNames.get(tokens[0] + " " + "FROM")).getText();
    }else if(tokens[tokens.length-1].equals("VALUE")){
      to = ((JTextField)variablesNames.get(tokens[0] + " " + tokens[tokens.length-1])).getText();
    }else{
      from = "-1";
    }

    if(from.compareTo(to) > 0){
      return tokens[0] + " " + from + " " + to;
    }
    return "";
  }

  /**
   * A partir de un String devuelve los tokens
   * @param currentKey
   * @return Array que contiene los tokens
   */
  private String [] prepareTokens(String currentKey){
    StringTokenizer stringTokenizer = new StringTokenizer(currentKey);
    String [] tokens = new String[stringTokenizer.countTokens()];
    for(int i=0 ; stringTokenizer.hasMoreTokens() ; i++){
      tokens[i] = stringTokenizer.nextToken();
    }
    return tokens;
  }

  /**
   * Devuelve los parametros de usuario
   * @return Map que contiene los parametros de usuario
   */
  public HashMap getParams(){
    return params;
  }

  /**
   * Devuelve un boolean que determina si se ha generado o no el Map con los parametros de usuario
   * @return boolean que determina si se ha generado o no el Map con los
   * parametros de usuario
   */
  public boolean isGenerated(){
    return isMapGenerated;
  }

  /**
   * Crea la coleccion de los Filtros cuyo atributo visible = true y crea la interfaz
   * para el ingreso de los parametros de usuario.
   * En caso de que se haya generado el Map con dichos parametros devuelve el Map.
   * @param reportSpec Necesario para la creacion de la coleccion
   * @param params Map vacio que se llena luego con los nuevos parametros
   * @return booleano que determina si se desean editar los parametros
   */
  public static boolean editParams(Frame owner, ReportSpec reportSpec, Map params) {
    UserParametersCollection userParametersCollection = new UserParametersCollection(reportSpec);
    UserParametersUI userParametersUI = new UserParametersUI(owner, userParametersCollection.getUserParametersCollection());
    if(userParametersCollection.getUserParametersCollection().size() > 0) {
      userParametersUI.showUI();
      boolean result = userParametersUI.isGenerated();
      if (result) {
        params.putAll(userParametersUI.getParams());
      }
      return result;
    }
    return true;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.