Package org.richfaces.convert.selection

Source Code of org.richfaces.convert.selection.ClientSelectionConverter

/**
*
*/
package org.richfaces.convert.selection;

import java.util.Iterator;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.richfaces.model.selection.ClientSelection;
import org.richfaces.model.selection.SelectionRange;

/**
* @author Maksim Kaszynski
*
*/
public class ClientSelectionConverter implements Converter {

  public static final String CONVERTER_ID =
    ClientSelectionConverter.class.getName();
 
  private static final Log log =
    LogFactory.getLog(ClientSelectionConverter.class);
 
  public Object getAsObject(FacesContext context, UIComponent component, String value) {
    return getAsSelection(context, component, value == null ? "" : value);
  }

  public String getAsString(FacesContext context, UIComponent component, Object value) {
   
    if (log.isDebugEnabled()) {
      log.debug("Converting to string " + value);
    }
   
    StringBuffer buffer = new StringBuffer();
    Iterator iterator = ((ClientSelection) value).getRanges().iterator();
   
    while(iterator.hasNext()) {
     
      SelectionRange selectionRange =
        (SelectionRange) iterator.next();
     
      buffer
        .append(selectionRange.getStartIndex())
        .append(",")
        .append(selectionRange.getEndIndex())
        .append(";");
    }
   
    return buffer.toString();
  }
 
  private ClientSelection getAsSelection(FacesContext context, UIComponent grid, String stringSelection) {
   
    if (log.isDebugEnabled()) {
      log.debug("parsing " + stringSelection);
    }
   
    final ClientSelection clientSelection = new ClientSelection();
    if(stringSelection == null || stringSelection.length() == 0) {
      return clientSelection;
    }
   
    String [] selections = stringSelection.split(";");
    int length = selections.length;
    if (selections[length-1].charAt(0) > '9') {
      clientSelection.setSelectionFlag(selections[length-1]);
      length--;
    }
    clientSelection.setActiveRowIndex(Integer.parseInt(selections[length-1]));
    length--;
    for (int i = 0; i < length; i++) {
     
      String range = selections[i];
     
      if (range.length() != 0) {
        String [] rng = range.split(",");
       
        try {
          int fi = Integer.parseInt(rng[0]);
          int il = Integer.parseInt(rng[1]);
         
          if (log.isDebugEnabled()) {
            log.debug("Parsed range " + fi + " " + il);
          }
         
          clientSelection.addRange(new SelectionRange(fi, il));
         
        } catch (NumberFormatException e) {
          throw new ConverterException(e);
        }
      }
    }

    return clientSelection;
  }

}
TOP

Related Classes of org.richfaces.convert.selection.ClientSelectionConverter

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.