All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.knightsoftnet.mtwidgets.client.ui.widget.AbstractMinMaxTextBox Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
 * agreements. See the NOTICE file distributed with this work for additional information regarding
 * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
 *
 * 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 de.knightsoftnet.mtwidgets.client.ui.widget;

import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.text.shared.Parser;
import com.google.gwt.text.shared.Renderer;

import elemental2.dom.DomGlobal;
import elemental2.dom.HTMLInputElement;

import org.apache.commons.lang3.StringUtils;

import java.text.ParseException;

/**
 * number box for input without separators.
 *
 * @author Manfred Tremmel
 *
 * @param  type of the value
 */
public abstract class AbstractMinMaxTextBox extends ValueBox {

  protected final Renderer numberRenderer;
  protected final Parser numberParser;

  /**
   * constructor.
   *
   * @param pnumberRenderer number renderer
   * @param pnumberParser number parser
   * @param pkeyPressHandler key press handler
   */
  public AbstractMinMaxTextBox(final Renderer pnumberRenderer, final Parser pnumberParser,
      final KeyPressHandler pkeyPressHandler) {
    this((HTMLInputElement) DomGlobal.document.createElement("input"), "number", pnumberRenderer,
        pnumberParser, pnumberRenderer, pnumberParser, pkeyPressHandler);
  }

  /**
   * constructor.
   *
   * @param pelement input element
   * @param ptype type of the input element
   * @param pnumberRenderer number renderer
   * @param pnumberParser number parser
   * @param pkeyPressHandler key press handler
   */
  public AbstractMinMaxTextBox(final HTMLInputElement pelement, final String ptype,
      final Renderer pnumberRenderer, final Parser pnumberParser,
      final KeyPressHandler pkeyPressHandler) {
    this(pelement, ptype, pnumberRenderer, pnumberParser, pnumberRenderer, pnumberParser,
        pkeyPressHandler);
  }

  /**
   * constructor.
   *
   * @param pnumberRenderer number renderer
   * @param pnumberParser number parser
   * @param pplainNumberRenderer number renderer for internal usage
   * @param pplainNumberParser number parser for internal usage
   * @param pkeyPressHandler key press handler
   */
  public AbstractMinMaxTextBox(final Renderer pnumberRenderer, final Parser pnumberParser,
      final Renderer pplainNumberRenderer, final Parser pplainNumberParser,
      final KeyPressHandler pkeyPressHandler) {
    this((HTMLInputElement) DomGlobal.document.createElement("input"), "number", pnumberRenderer,
        pnumberParser, pplainNumberRenderer, pplainNumberParser, pkeyPressHandler);
  }

  /**
   * constructor.
   *
   * @param pelement input element
   * @param ptype type of the input element
   * @param pnumberRenderer number renderer
   * @param pnumberParser number parser
   * @param pplainNumberRenderer number renderer for internal usage
   * @param pplainNumberParser number parser for internal usage
   * @param pkeyPressHandler key press handler
   */
  public AbstractMinMaxTextBox(final HTMLInputElement pelement, final String ptype,
      final Renderer pnumberRenderer, final Parser pnumberParser,
      final Renderer pplainNumberRenderer, final Parser pplainNumberParser,
      final KeyPressHandler pkeyPressHandler) {
    super(pelement, ptype, pnumberRenderer, pnumberParser);
    this.numberRenderer = pplainNumberRenderer;
    this.numberParser = pplainNumberParser;
    if (pkeyPressHandler != null) {
      addKeyPressHandler(pkeyPressHandler);
    }
  }

  /**
   * set minimum allowed value.
   *
   * @param pmin minimum value allowed
   */
  public void setMin(final T pmin) {
    if (pmin == null) {
      getInputElement().removeAttribute("min");
    } else {
      getInputElement().min = this.numberRenderer.render(pmin);
    }
  }

  /**
   * set minimum allowed value.
   *
   * @param pmin minimum value allowed
   */
  public void setMin(final String pmin) {
    try {
      this.setMin(this.numberParser.parse(pmin));
    } catch (final ParseException e) {
      this.setMin((T) null);
    }
  }

  /**
   * get minimum allowed value.
   *
   * @return minimum value allowed
   */
  public T getMin() {
    if (StringUtils.isEmpty(getInputElement().min)) {
      return null;
    }
    try {
      return this.numberParser.parse(getInputElement().min);
    } catch (final ParseException e) {
      return null;
    }
  }

  /**
   * set maximum allowed value.
   *
   * @param pmax maximum value allowed
   */
  public void setMax(final T pmax) {
    if (pmax == null) {
      getInputElement().removeAttribute("max");
    } else {
      getInputElement().max = this.numberRenderer.render(pmax);
    }
  }

  /**
   * set maximum allowed value.
   *
   * @param pmax maximum value allowed
   */
  public void setMax(final String pmax) {
    try {
      this.setMax(this.numberParser.parse(pmax));
    } catch (final ParseException e) {
      this.setMax((T) null);
    }
  }


  /**
   * get maximum allowed value.
   *
   * @return maximum value allowed
   */
  public T getMax() {
    if (StringUtils.isEmpty(getInputElement().max)) {
      return null;
    }
    try {
      return this.numberParser.parse(getInputElement().max);
    } catch (final ParseException e) {
      return null;
    }
  }

  /**
   * set distance value should be increased/decreased when using up/down buttons.
   *
   * @param pstep step distance
   */
  public void setStep(final Integer pstep) {
    if (pstep == null) {
      getInputElement().removeAttribute("step");
    } else {
      getInputElement().step = pstep.toString();
    }
  }

  /**
   * set distance value should be increased/decreased when using up/down buttons.
   *
   * @param pstep step distance
   */
  public void setStep(final String pstep) {
    try {
      this.setStep(Integer.valueOf(pstep));
    } catch (final NumberFormatException e) {
      this.setStep((Integer) null);
    }
  }


  /**
   * get distance value should be increased/decreased when using up/down buttons.
   *
   * @return maximum value allowed
   */
  public Integer getStep() {
    if (StringUtils.isEmpty(getInputElement().step)) {
      return null;
    }
    try {
      return Integer.valueOf(getInputElement().step);
    } catch (final NumberFormatException e) {
      return null;
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy