001package org.gwtbootstrap3.extras.slider.client.ui;
002
003/*
004 * #%L
005 * GwtBootstrap3
006 * %%
007 * Copyright (C) 2013 - 2015 GwtBootstrap3
008 * %%
009 * Licensed under the Apache License, Version 2.0 (the "License");
010 * you may not use this file except in compliance with the License.
011 * You may obtain a copy of the License at
012 * 
013 *      http://www.apache.org/licenses/LICENSE-2.0
014 * 
015 * Unless required by applicable law or agreed to in writing, software
016 * distributed under the License is distributed on an "AS IS" BASIS,
017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018 * See the License for the specific language governing permissions and
019 * limitations under the License.
020 * #L%
021 */
022
023import com.google.gwt.core.client.JavaScriptObject;
024import com.google.gwt.core.client.JsArrayNumber;
025import com.google.gwt.core.client.JsonUtils;
026
027/**
028 * Slider range with a min value and a max value.
029 */
030public class Range {
031
032    private double minValue;
033    private double maxValue;
034
035    protected Range() {
036    }
037
038    /**
039     * Create a slider range with a min value and a max value.
040     *
041     * @param minValue
042     * @param maxValue
043     */
044    public Range(final double minValue, final double maxValue) {
045        this.minValue = minValue;
046        this.maxValue = maxValue;
047    }
048
049    /**
050     * Creates a slider range with a JavaScritp number array. <br>
051     * <br>
052     * This constructor is useful in JSNI calls.
053     *
054     * @param array
055     */
056    public Range(final JsArrayNumber array) {
057        this(array.get(0), array.get(1));
058    }
059
060    /**
061     * Returns the min value.
062     *
063     * @return the min value
064     */
065    public double getMinValue() {
066        return minValue;
067    }
068
069    /**
070     * Returns the max value.
071     *
072     * @return the max value
073     */
074    public double getMaxValue() {
075        return maxValue;
076    }
077
078    /**
079     * Converts the range to a JavaScript number array.
080     *
081     * @return a JavaScript number array
082     */
083    public JsArrayNumber toJsArray() {
084        JsArrayNumber array = JavaScriptObject.createArray().cast();
085        array.push(minValue);
086        array.push(maxValue);
087        return array;
088    }
089
090    /**
091     * Converts the given string to a range instance.<br>
092     * <br>
093     * Useful when using UiBinder.
094     *
095     * @param value
096     * @return
097     */
098    public static Range fromString(String value) {
099        if (value == null || value.isEmpty())
100            return null;
101        JsArrayNumber array = JsonUtils.safeEval(value);
102        return new Range(array);
103    }
104
105    @Override
106    public String toString() {
107        return new StringBuilder("[")
108            .append(getMinValue()).append(", ")
109            .append(getMaxValue())
110            .append("]").toString();
111    }
112
113}