Package com.cosmo.ui.controls

Source Code of com.cosmo.ui.controls.FormFieldList

package com.cosmo.ui.controls;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;

import com.cosmo.Workspace;
import com.cosmo.data.lists.List;
import com.cosmo.data.lists.ListItem;
import com.cosmo.data.lists.StaticList;
import com.cosmo.net.HttpRequestUtils;
import com.cosmo.util.KeyValue;
import com.cosmo.util.StringUtils;

/**
* Implementa una lista de opciones representable dentro de un formulario Cosmo.
*
* @author Gerard Llort
*/
public class FormFieldList extends FormField
{
   // Declaraci�n de variables internas
   private String name;
   private String value;
   private String label;
   private String description;
   private ListType listType;
   private List list;


   //==============================================
   // Enumerations
   //==============================================

   /**
    * Enumera los tipos de lista admitidos por el control <em>FormFieldList</em>.
    */
   public enum ListType
   {
      /** Lista desplegable. */
      ComboBox,
      /** Lista. */
      ListBox,
      /** Conjunto de controles <em>radio buttons</em>. */
      RadioButtons
   }


   //==============================================
   // Contructors
   //==============================================

   /**
    * Contructor de la clase {@link FormFieldList}.
    *
    * @param name Nombre identificativo del elemento dentro de la p�gina.
    * @param label Etiqueta que se mostrar� junto el control.
    */
   public FormFieldList(String name, String label)
   {
      this.name = name;
      this.label = label;
      this.description = StringUtils.EMPTY;
      this.value = StringUtils.EMPTY;
      this.listType = ListType.ComboBox;
      this.list = new StaticList();
   }

   /**
    * Contructor de la clase {@link FormFieldList}.
    *
    * @param name Nombre identificativo del elemento dentro de la p�gina.
    * @param label Etiqueta que se mostrar� junto el control.
    * @param request Una instancia de {@link HttpServletRequest} que permite establecer el valor del campo en una
    *    recarga del formulario.
    */
   public FormFieldList(String name, String label, HttpServletRequest request)
   {
      this.name = name;
      this.label = label;
      this.description = StringUtils.EMPTY;
      this.value = HttpRequestUtils.getValue(request, name);
      this.listType = ListType.ComboBox;
      this.list = new StaticList();
   }

   /**
    * Contructor de la clase {@link FormFieldList}.
    *
    * @param name Nombre identificativo del elemento dentro de la p�gina.
    * @param label Etiqueta que se mostrar� junto el control.
    * @param list Una instancia de una clase que implemente {@link List} y que contenga los datos de la lista.
    */
   public FormFieldList(String name, String label, List list)
   {
      this.name = name;
      this.label = label;
      this.description = StringUtils.EMPTY;
      this.value = StringUtils.EMPTY;
      this.listType = ListType.ComboBox;
      this.list = list;
   }

   /**
    * Contructor de la clase {@link FormFieldList}.
    *
    * @param name Nombre identificativo del elemento dentro de la p�gina.
    * @param label Etiqueta que se mostrar� junto el control.
    * @param list Una instancia de una clase que implemente {@link List} y que contenga los datos de la lista.
    * @param request Una instancia de {@link HttpServletRequest} que permite establecer el valor del campo en una
    *    recarga del formulario.
    */
   public FormFieldList(String name, String label, List list, HttpServletRequest request)
   {
      this.name = name;
      this.label = label;
      this.description = StringUtils.EMPTY;
      this.value = HttpRequestUtils.getValue(request, name);
      this.listType = ListType.ComboBox;
      this.list = list;
   }


   //==============================================
   // Properties
   //==============================================

   /**
    * Devuelve el nombre del control.
    */
   @Override
   public String getName()
   {
      return name;
   }

   /**
    * Establece el nombre del control.
    */
   public void setName(String name)
   {
      this.name = name;
   }

   /**
    * Devuelve el valor del elemento seleccionado.
    */
   public String getValue()
   {
      return value;
   }

   /**
    * Establece el valor del elemento que debe estar seleccionado.
    */
   @Override
   public void setValue(Object value)
   {
      this.value = value.toString();
   }

   /**
    * Devuelve el texto que se mostrar� como etiqueta del control.
    */
   public String getLabel()
   {
      return label;
   }

   /**
    * Establece el texto que se mostrar� como etiqueta del control.
    */
   public void setLabel(String label)
   {
      this.label = label;
   }

   /**
    * Devuelve la descripci�n del campo.
    */
   public String getDescription()
   {
      return description;
   }

   /**
    * Establece la descripci�n del campo.
    */
   public void setDescription(String description)
   {
      this.description = description;
   }

   /**
    * Devuelve el tipo de representaci�n de la lista.
    */
   public ListType getListType()
   {
      return listType;
   }

   /**
    * Establece el tipo de representaci�n de la lista.
    */
   public void setListType(ListType listType)
   {
      this.listType = listType;
   }

   /**
    * Establece la lista de opciones.
    *
    * @param list Una instancia de {@link List} que contiene todos los elementos que se mostrar�n en la lista.
    */
   public void setList(List list)
   {
      this.list = list;
   }


   //==============================================
   // Methods
   //==============================================

   /**
    * Agrega un valor a la lista de valores posibles que puede adoptar el campo.
    *
    * @param keyvalue Una instancia de {@link KeyValue} que contiene el par clave/valor a agregar.
    */
   public void addListOption(KeyValue keyvalue)
   {
      this.list.addListItem(new ListItem(keyvalue.getKey(),
                                         keyvalue.getValue().toString(),
                                         keyvalue.isDefaultOption()));
   }

   /**
    * Elimina todos los elementos de la lista de valores posibles que puede adoptar el campo.
    */
   public void clearList()
   {
      this.list.clear();
   }

   /**
    * Convierte el campo en un TAG XHTML.
    */
   @Override
   public String render(Workspace workspace)
   {
      boolean selected = false;
      StringBuilder sb = new StringBuilder();

      try
      {
         // Obtiene los elementos del men�
         ArrayList<ListItem> items = list.getListItems(workspace);

         switch (this.listType)
         {
            case ListBox:
               sb.append("<select name=\"" + this.getName() + "\" id=\"" + this.getName() + "\" multiple=\"multiple\">\n");
               for (ListItem item : items)
               {
                  if (StringUtils.isNullOrEmptyTrim(this.getValue()))
                  {
                     selected = item.isDefault();
                  }
                  else
                  {
                     selected = (item.getValue().equals(this.getValue()));
                  }

                  sb.append("  <option value=\"" + item.getValue() + "\"" + (selected ? " selected=\"selected\"" : StringUtils.EMPTY) + ">" + item.getCaption() + "</option>\n");
               }
               sb.append("</select>\n");
               break;

            case RadioButtons:
               for (ListItem item : items)
               {
                  sb.append("<label class=\"radio\">\n");
                  sb.append("   <input type=\"radio\" name=\"" + this.getName() + "\" id=\"" + this.getName() + "\" value=\"" + item.getValue() + "\">\n");
                  sb.append("   " + item.getCaption() + "\n");
                  sb.append("</label>\n");
               }
               break;

            default:
               sb.append("<select name=\"" + this.getName() + "\" id=\"" + this.getName() + "\">\n");
               for (ListItem item : items)
               {
                  if (StringUtils.isNullOrEmptyTrim(this.getValue()))
                  {
                     selected = item.isDefault();
                  }
                  else
                  {
                     selected = (item.getValue().equals(this.getValue()));
                  }

                  sb.append("   <option value=\"" + item.getValue() + "\"" + (selected ? " selected=\"selected\"" : StringUtils.EMPTY) + ">" + item.getCaption() + "</option>\n");
               }
               sb.append("</select>\n");
               break;
         }
      }
      catch (Exception e)
      {
         e.printStackTrace();
      }

      return sb.toString();
   }

   /**
    * Convierte la instancia en una cadena de texto.
    */
   @Override
   public String toString()
   {
      StringBuilder sb = new StringBuilder();

      sb.append("    <div>").append("\n");
      sb.append("      <label for=\"").append(this.name).append("\">");
      sb.append(this.label).append(" ");
      // sb.append("<input type=\"").append(password ? "password" : "text").append("\" id=\"").append(this.name).append("\" name=\"").append(this.name).append("\" value=\"").append(this.value).append("\" />");
      sb.append("</label>").append("\n");
      sb.append("    </div>");

      return sb.toString();
   }
}
TOP

Related Classes of com.cosmo.ui.controls.FormFieldList

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.