Package net.pleso.framework.client.ui.custom.controls.data

Source Code of net.pleso.framework.client.ui.custom.controls.data.FloatRangeControl

/*
* Copyright 2007 Pleso.net
*
* Licensed under the GNU Lesser General Public License, Version 2.1 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.gnu.org/licenses/lgpl.html
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package net.pleso.framework.client.ui.custom.controls.data;

import net.pleso.framework.client.dal.IDataColumn;
import net.pleso.framework.client.dal.IDataRow;
import net.pleso.framework.client.dal.db.IDBValue;
import net.pleso.framework.client.dal.db.types.DBFloat;
import net.pleso.framework.client.localization.FrameworkLocale;
import net.pleso.framework.client.ui.controls.ValidationErrorControl;
import net.pleso.framework.client.ui.interfaces.IEditableDataControl;
import net.pleso.framework.client.ui.interfaces.IFocusControl;

import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.KeyboardListener;
import com.google.gwt.user.client.ui.VerticalPanel;

/**
* Data control with two text boxes for range of float values.
*
* <h3>CSS Style Rules</h3>
* <ul>
* <li>.pf-floatRangeControl { control itself }</li>
* </ul>
*
* @author Scater
*
*/
public class FloatRangeControl extends Composite implements IEditableDataControl, IFocusControl {
 
  protected FloatDataControl floatDataControlStart = new FloatDataControl();
  protected FloatDataControl floatDataControlEnd = new FloatDataControl();
  private ValidationErrorControl validErr = new ValidationErrorControl();
 
  private VerticalPanel panel = new VerticalPanel();
 
  /**
   * Constructor
   */
  public FloatRangeControl(){
    this.panel.add(floatDataControlStart);
    this.panel.setCellWidth(this.floatDataControlStart, "100%");
    this.panel.add(floatDataControlEnd);
    this.panel.setCellWidth(this.floatDataControlEnd, "100%");
    initWidget(this.panel);
    this.setStyleName("pf-floatRangeControl");
  }

  /**
   * Bind row and range columns
   * @param row row instance
   * @param start_column column instance
   * @param end_column column instance
   */
  public void bind(IDataRow row, IDataColumn start_column, IDataColumn end_column) {
    floatDataControlStart.bind(row, start_column);
    floatDataControlEnd.bind(row, end_column);
  }

  /* (non-Javadoc)
   * @see net.pleso.framework.client.ui.interfaces.IBindableDataControl#readData()
   */
  public void readData() {
    floatDataControlStart.readData();
    floatDataControlEnd.readData();
  }

  /* (non-Javadoc)
   * @see net.pleso.framework.client.ui.interfaces.IEditableDataControl#updateData()
   */
  public void updateData() {
    floatDataControlStart.updateData();
    floatDataControlEnd.updateData();
  }

  /* (non-Javadoc)
   * @see net.pleso.framework.client.ui.interfaces.IEditableDataControl#isValid()
   */
  public boolean isValid() {
    return floatDataControlStart.isValid() && floatDataControlEnd.isValid() && internalValid;
  }

  boolean internalValid = true;
 
  /* (non-Javadoc)
   * @see net.pleso.framework.client.ui.interfaces.IEditableDataControl#validate()
   */
  public void validate() {
    floatDataControlStart.validate();
    floatDataControlEnd.validate();
   
    // if validation was successful, must run internal validations also
    if (floatDataControlStart.isValid() && floatDataControlEnd.isValid()){
      internalValid = true;
      hideError();
      validateOneNotNull();
      validateStartLessEqualEnd();
    }
  }
 
  /* (non-Javadoc)
   * @see net.pleso.framework.client.ui.interfaces.IEditableDataControl#isRequired()
   */
  public boolean isRequired() {
    return floatDataControlStart.isRequired() && floatDataControlEnd.isRequired();
  }

  /* (non-Javadoc)
   * @see net.pleso.framework.client.ui.interfaces.IEditableDataControl#setRequired(boolean)
   */
  public void setRequired(boolean required) {
    floatDataControlStart.setRequired(required);
    floatDataControlEnd.setRequired(required);
  }
 
  /**
   * Hides validation error
   */
  private void hideError(){
    if (this.panel.getWidgetIndex(validErr) != -1)
      this.panel.remove(validErr);
    this.validErr.setText("");
  }
 
  /**
   * Shows validation error
   * @param errorText error text
   */
  private void showError(String errorText){
    internalValid = false;
    this.validErr.setText(errorText);
    this.panel.add(validErr);
  }

  /**
   * Validation of rule "all values must be not null or no one"
   */
  private void validateOneNotNull(){
    if (floatDataControlStart.getValue().isNull() && !floatDataControlEnd.getValue().isNull()){
      showError(FrameworkLocale.messages().start_range_field_is_required());
    }
    if (!floatDataControlStart.getValue().isNull() && floatDataControlEnd.getValue().isNull()){
      showError(FrameworkLocale.messages().end_range_field_is_required());
    }
  }
 
  /**
   * Validation of rule "start value must be less than end value"
   */
  private void validateStartLessEqualEnd(){
    IDBValue startValue = floatDataControlStart.getValue();
    IDBValue endValue = floatDataControlEnd.getValue();
    if (!startValue.isNull() && !endValue.isNull()){
      if (((DBFloat) startValue).getFloat().compareTo(((DBFloat) endValue).getFloat()) > 0){
        showError(FrameworkLocale.messages().start_float_less_or_equal_end_float());
      }
    }
  }

  /* (non-Javadoc)
   * @see net.pleso.framework.client.ui.interfaces.IFocusControl#setFocus(boolean)
   */
  public void setFocus(boolean focused) {
    this.floatDataControlStart.setFocus(focused);
  }

  /* (non-Javadoc)
   * @see com.google.gwt.user.client.ui.SourcesKeyboardEvents#addKeyboardListener(com.google.gwt.user.client.ui.KeyboardListener)
   */
  public void addKeyboardListener(KeyboardListener listener) {
    this.floatDataControlStart.addKeyboardListener(listener);
    this.floatDataControlEnd.addKeyboardListener(listener);   
  }

  /* (non-Javadoc)
   * @see com.google.gwt.user.client.ui.SourcesKeyboardEvents#removeKeyboardListener(com.google.gwt.user.client.ui.KeyboardListener)
   */
  public void removeKeyboardListener(KeyboardListener listener) {
    this.floatDataControlStart.removeKeyboardListener(listener);
    this.floatDataControlEnd.removeKeyboardListener(listener);
  }
}
TOP

Related Classes of net.pleso.framework.client.ui.custom.controls.data.FloatRangeControl

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.