com.dawg6.web.dhcalc.client.BasePanel.java Source code

Java tutorial

Introduction

Here is the source code for com.dawg6.web.dhcalc.client.BasePanel.java

Source

/*******************************************************************************
 * Copyright (c) 2014, 2015 Scott Clarke (scott@dawg6.com).
 *
 * This file is part of Dawg6's Demon Hunter DPS Calculator.
 *
 * Dawg6's Demon Hunter DPS Calculator is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Dawg6's Demon Hunter DPS Calculator is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *******************************************************************************/
package com.dawg6.web.dhcalc.client;

import java.util.Collection;
import java.util.Date;
import java.util.Map;
import java.util.Set;

import com.dawg6.gwt.client.ApplicationPanel;
import com.dawg6.web.dhcalc.shared.calculator.ActiveSkill;
import com.dawg6.web.dhcalc.shared.calculator.DamageType;
import com.dawg6.web.dhcalc.shared.calculator.GemAttributeData;
import com.dawg6.web.dhcalc.shared.calculator.GemSkill;
import com.dawg6.web.dhcalc.shared.calculator.ItemHolder;
import com.dawg6.web.dhcalc.shared.calculator.Passive;
import com.dawg6.web.dhcalc.shared.calculator.Rune;
import com.dawg6.web.dhcalc.shared.calculator.Slot;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.storage.client.Storage;
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.ui.DoubleBox;
import com.google.gwt.user.client.ui.IntegerBox;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.SimpleCheckBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.ValueBoxBase;
import com.google.gwt.user.client.ui.Widget;

public class BasePanel extends ApplicationPanel {

    protected boolean disableListeners = false;

    protected void loadForm() {

        if (!loadStorage())
            loadCookies();
    }

    protected String getFieldValue(String field, String defaultValue) {
        if (Storage.isLocalStorageSupported()) {
            Storage storage = Storage.getLocalStorageIfSupported();
            String value = storage.getItem(field);

            return (value != null) ? value : defaultValue;
        } else {
            return getCookie(field, defaultValue);
        }
    }

    protected boolean loadStorage() {

        boolean result = false;

        if (Storage.isLocalStorageSupported()) {
            Storage storage = Storage.getLocalStorageIfSupported();

            Collection<String> cookies = null;

            if (Cookies.isCookieEnabled()) {
                cookies = Cookies.getCookieNames();
            }

            for (Field f : getFields()) {
                String value = storage.getItem(f.name);

                if (value != null) {
                    // do nothing
                } else if ((cookies != null) && (cookies.contains(f.name))) {
                    value = getCookie(f.name, f.defaultValue);
                    storage.setItem(f.name, value);
                    Cookies.removeCookie(f.name);
                } else {
                    value = f.defaultValue;
                    storage.setItem(f.name, value);
                }

                setFieldValue(f, value);
            }

            result = true;
        }

        return result;
    }

    protected boolean loadCookies() {
        boolean result = false;

        if (Cookies.isCookieEnabled()) {
            result = true;

            for (Field f : getFields()) {
                loadCookie(f);
            }
        }

        return result;
    }

    protected void saveForm() {
        saveFields(getFields());
    }

    protected void saveFields(Field... fields) {
        if (Storage.isLocalStorageSupported()) {
            Storage storage = Storage.getLocalStorageIfSupported();

            for (Field f : fields) {
                saveField(storage, f);
            }

        } else {
            for (Field f : fields) {
                saveCookie(f);
            }
        }
    }

    protected void saveField(String field, String value) {
        if (Storage.isLocalStorageSupported()) {
            Storage storage = Storage.getLocalStorageIfSupported();
            storage.setItem(field, value);
        } else {
            saveCookie(value, field);
        }
    }

    protected void saveField(Storage storage, Field f) {
        String value = getFieldValue(f);
        storage.setItem(f.name, value);
    }

    protected Field getField(Widget w) {

        for (Field f : getFields()) {
            if (f.field == w)
                return f;
        }

        return null;
    }

    protected class Field {
        public Object field;
        public String name;
        public String defaultValue;

        public Field(Object field, String name, String defaultValue) {
            this.field = field;
            this.name = name;
            this.defaultValue = defaultValue;
        }
    }

    protected Field[] getFields() {
        return new Field[0];
    }

    protected void saveCookie(Field field) {
        String value = getFieldValue(field);
        saveCookie(value, field.name);
    }

    protected void loadCookie(Field field) {
        String value = getCookie(field.name, field.defaultValue);
        setFieldValue(field, value);
    }

    protected static final long ONE_YEAR = 1000 * 60 * 60 * 24 * 365;

    protected void saveCookie(String value, String name) {

        Date date = new Date();

        Cookies.setCookie(name, value, new Date(date.getTime() + ONE_YEAR));

    }

    protected String getCookie(String name, String defaultValue) {
        String value = Cookies.getCookie(name);

        if (value == null)
            value = defaultValue;

        return value;
    }

    protected int getValue(NumberSpinner spinner) {
        Integer value = spinner.getValue();

        if (value == null) {
            spinner.setValue(0);
            value = 0;
        }

        return value;
    }

    protected long getValue(LongSpinner spinner) {
        Long value = spinner.getValue();

        if (value == null) {
            spinner.setValue(0L);
            value = 0L;
        }

        return value;
    }

    protected double getValue(DoubleSpinner spinner) {
        Double value = spinner.getValue();

        if (value == null) {
            spinner.setValue(0.0);
            value = 0.0;
        }

        return value;
    }

    protected double getValue(TextBox textBox) {

        try {
            String text = textBox.getText();
            return Double.valueOf(text);
        } catch (Exception e) {
            textBox.setValue("0");
            return 0.0;
        }
    }

    protected int getValue(IntegerBox box) {

        try {
            Integer value = box.getValue();

            if (value == null) {
                box.setValue(0);
                value = 0;
            }

            return value;
        } catch (Exception e) {
            box.setValue(0);
            return 0;
        }
    }

    protected double getValue(DoubleBox box) {

        try {
            Double value = box.getValue();

            if (value == null) {
                box.setValue(0.0);
                value = 0.0;
            }

            return value;
        } catch (Exception e) {
            box.setValue(0.0);
            return 0.0;
        }
    }

    @Override
    protected void onLoad() {

        Field[] fields = getFields();

        for (Field f : fields) {
            if (f.field instanceof ValueBoxBase) {
                final ValueBoxBase<?> tf = (ValueBoxBase<?>) f.field;
                tf.addClickHandler(new ClickHandler() {

                    @Override
                    public void onClick(ClickEvent event) {
                        tf.selectAll();
                    }
                });
            }
        }
    }

    protected String getFieldValue(Field f) {
        Object field = f.field;
        String defaultValue = f.defaultValue;

        if (field instanceof TextBox)
            return getFieldValue((TextBox) field, defaultValue);
        else if (field instanceof IntegerBox)
            return getFieldValue((IntegerBox) field, defaultValue);
        else if (field instanceof NumberSpinner)
            return getFieldValue((NumberSpinner) field, defaultValue);
        else if (field instanceof LongSpinner)
            return getFieldValue((LongSpinner) field, defaultValue);
        else if (field instanceof DoubleSpinner)
            return getFieldValue((DoubleSpinner) field, defaultValue);
        else if (field instanceof DoubleBox)
            return getFieldValue((DoubleBox) field, defaultValue);
        else if (field instanceof SimpleCheckBox)
            return getFieldValue((SimpleCheckBox) field, defaultValue);
        else if (field instanceof ListBox)
            return getFieldValue((ListBox) field, defaultValue);
        else if (field instanceof PassivesPanel)
            return getFieldValue(((PassivesPanel) field).getPassives(), defaultValue);
        else if (field instanceof GemsPanel)
            return getGemsFieldValue(((GemsPanel) field).getGems(), defaultValue);
        else if (field instanceof ItemPanel)
            return getSpecialItemsFieldValue(((ItemPanel) field).getItems(), ((ItemPanel) field).getSetCounts(),
                    defaultValue);
        else if (field instanceof SkillsPanel)
            return getEnumFieldValue(((SkillsPanel) field).getSkills(), defaultValue);
        else if (field instanceof DamageTypePanel)
            return getFieldValue(((DamageTypePanel) field).getValues(), defaultValue);
        else if (field instanceof SkillDamagePanel)
            return getFieldValue(((SkillDamagePanel) field).getValues(), defaultValue);
        else
            return defaultValue;
    }

    protected <K extends Enum<K>, V extends Enum<V>> String getEnumFieldValue(Map<K, V> map, String defaultValue) {
        if (map == null)
            return defaultValue;

        return JsonUtil.toJSONObject(JsonUtil.createStringMap(map)).toString();
    }

    protected <K, V> String getFieldValue(Map<K, V> map, String defaultValue) {
        if (map == null)
            return defaultValue;

        return JsonUtil.toJSONObject(JsonUtil.createStringMap(map)).toString();
    }

    protected String getFieldValue(Set<Passive> passives, String defaultValue) {

        if (passives == null)
            return defaultValue;

        return JsonUtil.toJSONObject(passives).toString();
    }

    protected String getGemsFieldValue(Map<GemSkill, GemAttributeData> gems, String defaultValue) {

        if (gems == null)
            return defaultValue;

        return JsonUtil.gemsToJSONObject(gems).toString();
    }

    protected String getFieldValue(ListBox field, String defaultValue) {
        int i = field.getSelectedIndex();

        if (i < 0)
            return defaultValue;

        return field.getValue(i);
    }

    protected String getFieldValue(SimpleCheckBox field, String defaultValue) {
        return String.valueOf(field.getValue());
    }

    protected String getFieldValue(DoubleBox field, String defaultValue) {
        try {
            return String.valueOf(field.getValue());
        } catch (Exception e) {
            field.setText(defaultValue);
            return defaultValue;
        }
    }

    protected String getFieldValue(DoubleSpinner field, String defaultValue) {
        try {
            return String.valueOf(field.getValue());
        } catch (Exception e) {
            field.setText(defaultValue);
            return defaultValue;
        }
    }

    protected String getFieldValue(NumberSpinner field, String defaultValue) {
        try {
            return String.valueOf(field.getValue());
        } catch (Exception e) {
            field.setText(defaultValue);
            return defaultValue;
        }
    }

    protected String getFieldValue(LongSpinner field, String defaultValue) {
        try {
            return String.valueOf(field.getValue());
        } catch (Exception e) {
            field.setText(defaultValue);
            return defaultValue;
        }
    }

    protected String getFieldValue(IntegerBox field, String defaultValue) {
        try {
            return String.valueOf(field.getValue());
        } catch (Exception e) {
            field.setText(defaultValue);
            return defaultValue;
        }
    }

    protected String getFieldValue(TextBox field, String defaultValue) {
        String value = field.getValue();

        if ((value != null) && (value.length() > 0))
            return field.getValue();

        field.setText(defaultValue);
        return defaultValue;
    }

    public void populateFormData(Map<String, String> data) {
        for (Field f : getFields()) {
            String name = f.name;
            String value = getFieldValue(f);
            data.put(name, value);
        }

    }

    public void restoreFormData(Map<String, String> data) {

        for (Field f : getFields()) {
            String name = f.name;
            String value = data != null ? data.get(name) : null;
            setFieldValue(f, value);
        }
    }

    protected void setFieldValue(Field f, String value) {

        Object field = f.field;

        if (value == null)
            value = f.defaultValue;

        if (field instanceof TextBox)
            setFieldValue((TextBox) field, value);
        else if (field instanceof IntegerBox)
            setFieldValue((IntegerBox) field, value);
        else if (field instanceof NumberSpinner)
            setFieldValue((NumberSpinner) field, value);
        else if (field instanceof LongSpinner)
            setFieldValue((LongSpinner) field, value);
        else if (field instanceof DoubleSpinner)
            setFieldValue((DoubleSpinner) field, value);
        else if (field instanceof DoubleBox)
            setFieldValue((DoubleBox) field, value);
        else if (field instanceof SimpleCheckBox)
            setFieldValue((SimpleCheckBox) field, value);
        else if (field instanceof ListBox)
            setFieldValue((ListBox) field, value);
        else if (field instanceof PassivesPanel)
            setFieldValue((PassivesPanel) field, value);
        else if (field instanceof GemsPanel)
            setFieldValue((GemsPanel) field, value);
        else if (field instanceof ItemPanel)
            setFieldValue((ItemPanel) field, value);
        else if (field instanceof SkillsPanel)
            setFieldValue((SkillsPanel) field, value);
        else if (field instanceof DamageTypePanel)
            setFieldValue((DamageTypePanel) field, value);
        else if (field instanceof SkillDamagePanel)
            setFieldValue((SkillDamagePanel) field, value);
    }

    protected void setFieldValue(PassivesPanel field, String value) {
        Set<Passive> set = JsonUtil.parseSet(Passive.class, value);

        field.setPassives(set);
    }

    protected void setFieldValue(GemsPanel field, String value) {
        Map<GemSkill, GemAttributeData> gems = JsonUtil.parseGemsMap(value);

        field.setGems(gems);
    }

    protected void setFieldValue(ItemPanel field, String value) {
        Map<Slot, ItemHolder> items = JsonUtil.parseSpecialItemsMap(value);

        field.setItems(items);

        Map<String, Integer> sets = JsonUtil.parseSetCounts(value);

        field.setSetCounts(sets);
    }

    protected void setFieldValue(SkillsPanel field, String value) {
        Map<ActiveSkill, Rune> map = JsonUtil.parseMap(ActiveSkill.class, Rune.class, value);

        field.setSkills(map);
    }

    protected void setFieldValue(DamageTypePanel field, String value) {
        Map<DamageType, Double> map = JsonUtil.parseMap(DamageType.class, value);
        field.setValues(map);
    }

    protected void setFieldValue(SkillDamagePanel field, String value) {
        Map<ActiveSkill, Double> map = JsonUtil.parseMap(ActiveSkill.class, value);
        field.setValues(map);
    }

    protected void setFieldValue(ListBox field, String value) {
        try {
            for (int i = 0; i < field.getItemCount(); i++) {
                String v = field.getValue(i);

                if (v.equals(value)) {
                    field.setSelectedIndex(i);
                    return;
                }
            }

            field.setSelectedIndex(0);

        } catch (Exception e) {
            field.setSelectedIndex(0);
        }
    }

    protected void setFieldValue(SimpleCheckBox field, String value) {
        field.setValue(Boolean.valueOf(value));
    }

    protected void setFieldValue(DoubleBox field, String value) {
        try {
            field.setValue(Double.valueOf(value));
        } catch (Exception e) {
            field.setValue(0.0);
        }
    }

    protected void setFieldValue(DoubleSpinner field, String value) {
        try {
            field.setValue(Double.valueOf(value));
        } catch (Exception e) {
            field.setValue(0.0);
        }
    }

    protected void setFieldValue(NumberSpinner field, String value) {
        try {
            field.setValue(Integer.valueOf(value));
        } catch (Exception e) {
            field.setValue(0);
        }
    }

    protected void setFieldValue(LongSpinner field, String value) {
        try {
            field.setValue(Long.valueOf(value));
        } catch (Exception e) {
            field.setValue(0L);
        }
    }

    protected void setFieldValue(IntegerBox field, String value) {
        try {
            field.setValue(Integer.valueOf(value));
        } catch (Exception e) {
            field.setValue(0);
        }
    }

    protected void setFieldValue(TextBox field, String value) {
        field.setValue(value);
    }

    public String getSpecialItemsFieldValue(Map<Slot, ItemHolder> items, Map<String, Integer> setCounts,
            String defaultValue) {

        return JsonUtil.specialItemsToJSONObject(items, setCounts).toString();
    }

}