Package com.appspot.plucial.service

Source Code of com.appspot.plucial.service.DateService

package com.appspot.plucial.service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.slim3.datastore.Datastore;
import org.slim3.datastore.S3QueryResultList;
import org.slim3.memcache.Memcache;
import org.slim3.util.StringUtil;

import com.appspot.plucial.dao.DateModelDao;
import com.appspot.plucial.meta.DateModelMeta;
import com.appspot.plucial.model.DateModel;
import com.appspot.plucial.model.UserModel;
import com.appspot.plucial.utils.Utils;
import com.google.appengine.api.datastore.Key;


public class DateService {

    private static final DateModelDao dao = new DateModelDao();

    /**
     *  リストキャッシュキー(ALL)
     */
    public static final String USER_DATE_ALL_LIST_MEMCACHE_KEY = "user_date_all_list_memcache_key";

    /**
     *  リストキャッシュキー
     */
    public static final String USER_DATE_LIST_MEMCACHE_KEY = "user_date_list_memcache_key";

    /**
     * ユーザーの取得
     * @param email
     * @return
     */
    public static DateModel getOrNull(UserModel userModel, Date date) {

        Key key = createKey(userModel, date);
        DateModel model = Memcache.get(key.toString());
        if(model != null) return model;

        model = dao.getOrNull(key);
        if(model != null) Memcache.put(model.getKey().toString(), model);

        return model;
    }

    /**
     * ユーザーの取得
     * @param email
     * @return
     */
    public static DateModel getOrNull(UserModel userModel, String dateString) {

        Key key = Datastore.createKey(DateModelMeta.get(), dateString + "_" + userModel.getKey().getName());
        DateModel model = Memcache.get(key.toString());
        if(model != null) return model;

        model = dao.getOrNull(key);
        if(model != null) Memcache.put(model.getKey().toString(), model);

        return model;
    }

    /**
     * PUT
     * @param model
     * @return
     */
    public static DateModel put(UserModel userModel, DateModel model) {
        // 永久化
        dao.put(model);

        // キャッシュをクリア
        clearMemcache(userModel, model);

        return model;
    }

    /**
     * delete
     * @param model
     * @return
     */
    public static void delete(UserModel userModel, DateModel model) {

        dao.delete(model.getKey());

        // キャッシュをクリア
        clearMemcache(userModel, model);
    }

    /**
     * PUT
     * @param userId
     * @param date
     * @return
     */
    public static DateModel put(UserModel userModel, Date date) {

        DateModel dateModel = new DateModel();

        Key key = createKey(userModel, date);

        dateModel.setKey(key);
        dateModel.setDate(getDateString(date));
        dateModel.getUserModelRef().setModel(userModel);

        return put(userModel, dateModel);
    }

    /**
     * DateModelのリストを取得(ALL)
     * @param userModel
     * @return
     */
    public static List<DateModel> getDateModelList(UserModel userModel) {

        // Memcache に存在した場合はMemcache内のmodelを返す
        List<DateModel> list = Memcache.get(getAllDateModelListMemcacheKey(userModel));
        if(Utils.isNotEmpty(list)) return list;

        // DBから取得し、存在した場合はMemcacheに入れる
        list = dao.getDateModelList(userModel);
        if(Utils.isNotEmpty(list)) Memcache.put(getAllDateModelListMemcacheKey(userModel), list);

        return list == null ? new ArrayList<DateModel>() : list;
    }

    /**
     * DateModelのリストを取得
     * @param userModel
     * @return
     */
    public static S3QueryResultList<DateModel> getDateModelList(UserModel userModel, String cursor) {

        S3QueryResultList<DateModel> list = null;

        // 最初のページをキャッシュする
        if (StringUtil.isEmpty(cursor)) {
            // Memcache に存在した場合はMemcache内のmodelを返す
            list = Memcache.get(getDateModelListMemcacheKey(userModel));
            if(Utils.isNotEmpty(list)) return list;

            // DBから取得し、存在した場合はMemcacheに入れる
            list = dao.getDateModelList(userModel, 10);
            if(Utils.isNotEmpty(list)) Memcache.put(getDateModelListMemcacheKey(userModel), list);
        }else {
            list = dao.getDateModelList(userModel, 10, cursor);
        }

        return list == null ? new S3QueryResultList<DateModel>(new ArrayList<DateModel>(), null, null, null, false) : list;
    }

    /**
     * キーの作成
     * @param userModel
     * @param date
     * @return
     */
    private static Key createKey(UserModel userModel, Date date) {
        return Datastore.createKey(DateModelMeta.get(), getDateString(date) + "_" + userModel.getKey().getName());
    }

    /**
     * 日付文字列を取得
     * @param date
     * @return
     */
    private static String getDateString(Date date) {
        return new java.text.SimpleDateFormat(
            "yyyyMMdd", java.util.Locale.US).format(date);
    }

    /**
     * DateListのキャッシュキーを取得
     * @param userModel
     * @return
     */
    private static String getDateModelListMemcacheKey(UserModel userModel) {
        return USER_DATE_LIST_MEMCACHE_KEY + "_" + userModel.getKey().getName();
    }

    /**
     * DateListのキャッシュキーを取得(ALL)
     * @param userModel
     * @return
     */
    private static String getAllDateModelListMemcacheKey(UserModel userModel) {
        return USER_DATE_ALL_LIST_MEMCACHE_KEY + "_" + userModel.getKey().getName();
    }

    /**
     * キャッシュクリア
     * @param userModel
     * @param dateModel
     */
    private static void clearMemcache(UserModel userModel, DateModel dateModel) {
        // 自信のキャッシュをクリア
        Memcache.delete(dateModel.getKey().toString());

        // リストのキャッシュをクリア
        Memcache.delete(getDateModelListMemcacheKey(userModel));
        // リストのキャッシュをクリア(ALL)
        Memcache.delete(getAllDateModelListMemcacheKey(userModel));
    }

}
TOP

Related Classes of com.appspot.plucial.service.DateService

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.