tv.dyndns.kishibe.qmaclone.client.UserData.java Source code

Java tutorial

Introduction

Here is the source code for tv.dyndns.kishibe.qmaclone.client.UserData.java

Source

//The MIT License
//
//Copyright (c) 2009 nodchip
//
//Permission is hereby granted, free of charge, to any person obtaining a copy
//of this software and associated documentation files (the "Software"), to deal
//in the Software without restriction, including without limitation the rights
//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//copies of the Software, and to permit persons to whom the Software is
//furnished to do so, subject to the following conditions:
//
//The above copyright notice and this permission notice shall be included in
//all copies or substantial portions of the Software.
//
//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//THE SOFTWARE.
package tv.dyndns.kishibe.qmaclone.client;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

import tv.dyndns.kishibe.qmaclone.client.game.ProblemGenre;
import tv.dyndns.kishibe.qmaclone.client.game.ProblemType;
import tv.dyndns.kishibe.qmaclone.client.packet.NewAndOldProblems;
import tv.dyndns.kishibe.qmaclone.client.packet.PacketUserData;
import tv.dyndns.kishibe.qmaclone.client.packet.PacketUserData.WebSocketUsage;
import tv.dyndns.kishibe.qmaclone.client.setting.PanelSettingChat;

import com.google.common.base.Strings;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.RepeatingCommand;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;

public class UserData implements CloseHandler<Window> {
    private static final Logger logger = Logger.getLogger(UserData.class.getName());
    private static final UserData INSTANCE = new UserData();
    private final RepeatingCommand commandLoadFromServer = new RepeatingCommand() {
        @Override
        public boolean execute() {
            loadFromServer();
            return false;
        }
    };

    public static UserData get() {
        return INSTANCE;
    }

    private UserData() {
        if (GWT.isClient()) {
            Window.addCloseHandler(this);
            load();
        }
    }

    private PacketUserData data = new PacketUserData();
    private final List<UserDataLoadListener> loadListeners = new ArrayList<UserDataLoadListener>();
    private boolean ready = false;
    private static final String KEY_USER_CODE = "user_code";

    public void load() {
        String s = Cookies.getCookie(KEY_USER_CODE);
        if (Strings.isNullOrEmpty(s) || 8 < s.length() || s.equals("0")) {
            createUserCode();
            return;
        }
        data.userCode = Integer.parseInt(s);

        loadFromServer();
    }

    private void createUserCode() {
        Service.Util.getInstance().getNewUserCode(callbackCreateUserCode);
    }

    private final AsyncCallback<Integer> callbackCreateUserCode = new AsyncCallback<Integer>() {
        public void onSuccess(Integer result) {
            data.userCode = result;
            Cookies.setCookie(KEY_USER_CODE, Integer.toString(data.userCode), getExpireTime());
            save();
            callLoadListeners();
        }

        public void onFailure(Throwable caught) {
            logger.log(Level.WARNING, "????????", caught);
        }
    };

    private void loadFromServer() {
        Service.Util.getInstance().loadUserData(data.userCode, callbackLoadFromServer);
    }

    private final AsyncCallback<PacketUserData> callbackLoadFromServer = new AsyncCallback<PacketUserData>() {
        public void onSuccess(PacketUserData result) {
            data = result;
            Cookies.setCookie(KEY_USER_CODE, Integer.toString(data.userCode), getExpireTime());
            save();

            callLoadListeners();

            for (int ignoreUserCode : data.ignoreUserCodes) {
                PanelSettingChat.getInstance().addIgnoreUserCodeButton(ignoreUserCode);
            }
        }

        public void onFailure(Throwable caught) {
            Scheduler.get().scheduleFixedDelay(commandLoadFromServer, 5000);
            logger.log(Level.WARNING,
                    "?????????????",
                    caught);
        }
    };

    private void callLoadListeners() {
        ready = true;
        for (UserDataLoadListener userDataLoadListener : loadListeners) {
            userDataLoadListener.onLoad();
        }
        loadListeners.clear();
    }

    public void addLoadListener(UserDataLoadListener listener) {
        if (ready) {
            listener.onLoad();
        } else {
            loadListeners.add(listener);
        }
    }

    public void save() {
        Cookies.setCookie(KEY_USER_CODE, Integer.toString(data.userCode), getExpireTime());
        Service.Util.getInstance().saveUserData(data, callbackSaveUserData);
    }

    private final AsyncCallback<Void> callbackSaveUserData = new AsyncCallback<Void>() {
        @Override
        public void onSuccess(Void result) {
        }

        @Override
        public void onFailure(Throwable caught) {
            logger.log(Level.WARNING, "???????", caught);
        }
    };

    private Date getExpireTime() {
        long currentTime = System.currentTimeMillis();
        currentTime += 90L * 24L * 60L * 60L * 1000L;
        return new Date(currentTime);
    }

    public void setPlayerName(String playerName) {
        data.playerName = playerName;
    }

    public String getPlayerName() {
        return data.playerName;
    }

    public void setHighScore(int score) {
        data.highScore = score;
    }

    public int getHighScore() {
        return data.highScore;
    }

    public void setAverageScore(int score) {
        data.averageScore = score;
    }

    public int getAverageScore() {
        return data.averageScore;
    }

    public void setPlayCount(int playCount) {
        data.playCount = playCount;
    }

    public int getPlayCount() {
        return data.playCount;
    }

    public void setRating(int rating) {
        data.rating = rating;
    }

    public int getRating() {
        return data.rating;
    }

    public void setLevelName(int levelName) {
        data.levelName = levelName;
    }

    public int getLevelName() {
        return data.levelName;
    }

    public void setLevelNumber(int levelNumber) {
        data.levelNumber = Math.max(0, levelNumber);
    }

    public int getLevelNumber() {
        return data.levelNumber;
    }

    public void setAvarageRank(float averageRank) {
        data.averageRank = averageRank;
    }

    public float getAverageRank() {
        return data.averageRank;
    }

    public void setGenres(Set<ProblemGenre> genres) {
        data.genres = genres;
    }

    public Set<ProblemGenre> getGenre() {
        return data.genres;
    }

    public void setTypes(Set<ProblemType> types) {
        data.types = types;
    }

    public Set<ProblemType> getTypes() {
        return data.types;
    }

    public void setGreeting(String greeting) {
        data.greeting = greeting;
    }

    public String getGreeting() {
        return data.greeting;
    }

    public void setClassLevel(int classLevel) {
        data.classLevel = classLevel;
    }

    public int getClassLevel() {
        return data.classLevel;
    }

    public void setUserCode(int userCode) {
        data.userCode = userCode;
        if (GWT.isClient()) {
            Cookies.setCookie(KEY_USER_CODE, "" + data.userCode, getExpireTime());
        }
    }

    public int getUserCode() {
        return data.userCode;
    }

    public void setImageFileName(String imageFileName) {
        data.imageFileName = imageFileName;
    }

    public String getImageFileName() {
        return data.imageFileName;
    }

    public int[][][] getCorrectCount() {
        return data.correctCount;
    }

    public void setPlaySound(boolean playSound) {
        data.playSound = playSound;
    }

    public boolean isPlaySound() {
        return data.playSound;
    }

    public boolean isMultiGenre() {
        return data.multiGenre;
    }

    public void setMultiGenre(boolean multiGenre) {
        data.multiGenre = multiGenre;
    }

    public boolean isMultiType() {
        return data.multiType;
    }

    public void setMultiType(boolean multiType) {
        data.multiType = multiType;
    }

    public int getDifficultSelect() {
        return data.difficultSelect;
    }

    public void setDifficultSelect(int difficultSelect) {
        data.difficultSelect = difficultSelect;
    }

    public NewAndOldProblems getNewAndOldProblems() {
        return data.newAndOldProblems;
    }

    public void setNewAndOldProblems(NewAndOldProblems newAndOldProblems) {
        data.newAndOldProblems = newAndOldProblems;
    }

    public boolean isRankingMove() {
        return data.rankingMove;
    }

    public void setRankingMove(boolean rankingMove) {
        data.rankingMove = rankingMove;
    }

    public int getBbsDispInfo() {
        return data.bbsDispInfo;
    }

    public void setBbsDispInfo(int dispInfo) {
        data.bbsDispInfo = dispInfo;
    }

    public boolean isBbsAge() {
        return data.bbsAge;
    }

    public void setBbsAge(boolean age) {
        data.bbsAge = age;
    }

    public int getPrefecture() {
        return data.prefecture;
    }

    public void setPrefecture(int prefecture) {
        data.prefecture = prefecture;
    }

    public boolean isChatEnabled() {
        return data.chat;
    }

    public void setChatEnabled(boolean chatEnabled) {
        data.chat = chatEnabled;
    }

    public boolean isPublicEvent() {
        return data.publicEvent;
    }

    public void setPublicEvent(boolean publicEvent) {
        data.publicEvent = publicEvent;
    }

    public boolean isHideAnswer() {
        return data.hideAnswer;
    }

    public void setHideAnswer(boolean hideAnswer) {
        data.hideAnswer = hideAnswer;
    }

    public boolean isShowInfo() {
        return data.showInfo;
    }

    public void setShowInfo(boolean showInfo) {
        data.showInfo = showInfo;
    }

    public void setReflectEventResult(boolean reflectEventResult) {
        data.reflectEventResult = reflectEventResult;
    }

    public boolean isReflectEventResult() {
        return data.reflectEventResult;
    }

    public void setWebSocketUsage(WebSocketUsage webSocketUsage) {
        data.webSocketUsage = webSocketUsage;
    }

    public WebSocketUsage getWebSocketUsage() {
        return data.webSocketUsage;
    }

    public void setVolatility(int volatility) {
        data.volatility = volatility;
    }

    public int getVolatility() {
        return data.volatility;
    }

    public void setQwertyHiragana(boolean qwertyHiragana) {
        data.qwertyHiragana = qwertyHiragana;
    }

    public boolean isQwertyHiragana() {
        return data.qwertyHiragana;
    }

    public void setQwertyKatakana(boolean qwertyKatakana) {
        data.qwertyKatakana = qwertyKatakana;
    }

    public boolean isQwertyKatakana() {
        return data.qwertyKatakana;
    }

    public void setQwertyAlphabet(boolean qwertyAlphabet) {
        data.qwertyAlphabet = qwertyAlphabet;
    }

    public boolean isQwertyAlphabet() {
        return data.qwertyAlphabet;
    }

    public boolean isRegisterCreatedProblem() {
        return data.registerCreatedProblem;
    }

    public void setRegisterCreatedProblem(boolean registerCreatedProblem) {
        data.registerCreatedProblem = registerCreatedProblem;
    }

    public boolean isRegisterIndicatedProblem() {
        return data.registerIndicatedProblem;
    }

    public void setRegisterIndicatedProblem(boolean registerIndicatedProblem) {
        data.registerIndicatedProblem = registerIndicatedProblem;
    }

    public String getGooglePlusId() {
        return data.googlePlusId;
    }

    public void setGooglePlusId(String googlePlusId) {
        data.googlePlusId = googlePlusId;
    }

    public String getTheme() {
        return data.theme;
    }

    public void setTheme(String theme) {
        data.theme = theme;
    }

    @Override
    public void onClose(CloseEvent<Window> event) {
        // save();
    }
}