cn.loveapple.service.controller.health.action.BasalBodyTemperatureController.java Source code

Java tutorial

Introduction

Here is the source code for cn.loveapple.service.controller.health.action.BasalBodyTemperatureController.java

Source

/*
 * $HeadURL$
 * $Author$
 * $Revision$
 * $Date$
 *
 * ====================================================================
 *
 * Copyright (C) 2008 by loveapple.cn
 *
 * All copyright notices regarding loveapple and loveapple CoreLib
 * MUST remain intact in the scripts, documents and source code.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public 
 * License as published by the Free Software Foundation; either
 * version 3 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * Correspondence and Marketing Questions can be sent to:
 * info at loveapple
 *
 * @author: loveapple
 */
package cn.loveapple.service.controller.health.action;

import static cn.loveapple.service.controller.Constant.*;
import static cn.loveapple.service.util.web.FrontUtil.*;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import javax.servlet.http.HttpSession;
import javax.validation.Valid;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.view.json.MappingJacksonJsonView;

import cn.loveapple.service.Constant;
import cn.loveapple.service.controller.BaseController;
import cn.loveapple.service.controller.SessionLabel;
import cn.loveapple.service.controller.exception.ResourceNotFoundException;
import cn.loveapple.service.controller.health.form.BasalBodyTemperatureForm;
import cn.loveapple.service.controller.pojo.JsonResponse;
import cn.loveapple.service.cool.model.LoveappleMemberModel;
import cn.loveapple.service.cool.model.SampleModel;
import cn.loveapple.service.cool.model.health.BasalBodyTemperatureModel;
import cn.loveapple.service.cool.service.health.BasalBodyTemperatureService;
import cn.loveapple.service.util.DateUtil;

/**
 * 
 * TODO
 * 
 * @author $Author$
 * @version $Revision$
 * @date $Date$
 * @id $Id$
 *
 */
@Controller
@RequestMapping(value = "/health/bbt/core")
public class BasalBodyTemperatureController extends BaseController implements SessionLabel {
    /**
     * 
     */
    private static Log log = LogFactory.getLog(BasalBodyTemperatureController.class);

    /**
     * ?
     */
    private BasalBodyTemperatureService basalBodyTemperatureService;

    /**
     * 
     */
    private ReloadableResourceBundleMessageSource messageSource;

    /**
     * ???????
     * 
     * @param form
     * @param result
     * @return
     */
    @RequestMapping(value = "regist.json")
    public MappingJacksonJsonView registBbt(@Valid BasalBodyTemperatureForm form, BindingResult result,
            HttpSession session, Locale locale) {

        if (!hasAttributeInSession(session, LOVEAPPLE_MEMBER)) {
            return userErrorJsonView(result);
        }
        BasalBodyTemperatureValidator validator = new BasalBodyTemperatureValidator(messageSource, locale);
        validator.validate(form, result);
        if (result.hasErrors()) {
            return userErrorJsonView(result);
        }

        LoveappleMemberModel member = (LoveappleMemberModel) session.getAttribute(LOVEAPPLE_MEMBER);

        //????????
        List<BasalBodyTemperatureModel> bbtList = null;
        try {
            if (StringUtils.isEmpty(form.getMeasureDay())) {
                form.setMeasureDay(DateUtil.toDateString(new Date(), DateUtil.DATE_PTTERN_YYYYMMDD));
            }

            bbtList = basalBodyTemperatureService.findBasalBodyTemperatureByUser(member.getMail(),
                    form.getMeasureDay(), form.getMeasureDay());
        } catch (IllegalArgumentException e) {
            throw e;
        }

        //?/??
        BasalBodyTemperatureModel bbt = createBasalBodyTemperatureModel(form, member);

        if (CollectionUtils.isEmpty(bbtList)) {
            bbt = basalBodyTemperatureService.insertBasalBodyTemperatureModel(bbt);
        } else {
            bbt = basalBodyTemperatureService.updateBasalBodyTemperatureModel(bbt);
        }

        //TODO ?JSON
        JsonResponse response = new JsonResponse();
        response.setStatus(STATUS_OK);
        response.setStatusCode(STATUS_CODE_SUCCESS);
        response.setData(bbt);

        return response;
    }

    /**
     * DB?????
     * 
     * @param form 
     * @param member 
     * @return 
     */
    private BasalBodyTemperatureModel createBasalBodyTemperatureModel(BasalBodyTemperatureForm form,
            LoveappleMemberModel member) {
        BasalBodyTemperatureModel bbt = new BasalBodyTemperatureModel();
        bbt.setIsCoitus(Constant.FLG_ON.equals(form.getCoitusFlg()));
        bbt.setIsDysmenorrhea(Constant.FLG_ON.equals(form.getDysmenorrheaFlg()));
        bbt.setIsMenstruation(Constant.FLG_ON.equals(form.getMenstruationFlg()));
        if (BasalBodyTemperatureForm.LEUKORRHEA_LITTLE_CODE.equals(form.getLeukorrhea())) {
            bbt.setLeukorrhea(BasalBodyTemperatureModel.Leukorrhea.LITTLE);
        } else if (BasalBodyTemperatureForm.LEUKORRHEA_MUCH_CODE.equals(form.getLeukorrhea())) {
            bbt.setLeukorrhea(BasalBodyTemperatureModel.Leukorrhea.MUCH);
        } else if (BasalBodyTemperatureForm.LEUKORRHEA_USUALLY_CODE.equals(form.getLeukorrhea())) {
            bbt.setLeukorrhea(BasalBodyTemperatureModel.Leukorrhea.USUALLY);
        }
        bbt.setMail(member.getMail());
        bbt.setMeasureDay(form.getMeasureDay());
        bbt.setName(member.getName());
        bbt.setTemperature(form.getTemperature());
        bbt.setTimeStamp(new Date());
        return bbt;
    }

    /**
     * 
     * @param start
     * @param end
     * @param result
     * @param session
     * @param model
     * @param locale
     * @return
     */
    @RequestMapping(value = "list/{start}/{end}.json", method = RequestMethod.GET)
    public MappingJacksonJsonView getBbtList(@PathVariable String start, @PathVariable String end,
            HttpSession session, Locale locale) {

        if (!DateUtil.isDateStr(start, DateUtil.DATE_PTTERN_YYYYMMDD)
                || !DateUtil.isDateStr(end, DateUtil.DATE_PTTERN_YYYYMMDD)) {
            if (log.isDebugEnabled()) {
                log.debug("invalid date string. start:" + start + " end:" + end);
            }
            throw new ResourceNotFoundException("invalid date string. start:" + start + " end:" + end);
        }
        if (!hasAttributeInSession(session, LOVEAPPLE_MEMBER)) {
            if (log.isDebugEnabled()) {
                log.debug("invalid member longin info.");
            }
            throw new ResourceNotFoundException("invalid member longin info.");
        }

        LoveappleMemberModel member = (LoveappleMemberModel) session.getAttribute(LOVEAPPLE_MEMBER);

        List<BasalBodyTemperatureModel> list = basalBodyTemperatureService
                .findBasalBodyTemperatureByUser(member.getMail(), start, end);

        JsonResponse response = new JsonResponse();
        response.setStatus(STATUS_OK);
        response.setStatusCode(STATUS_CODE_SUCCESS);
        response.setData(list);

        return response;
    }

    /**
     * 
     * @param start
     * @param end
     * @param session
     * @param model
     * @param locale
     * @return
     */
    @RequestMapping(value = "smart/list/{start}/{end}.html", method = RequestMethod.GET)
    public String getBbtList(@PathVariable String start, @PathVariable String end, HttpSession session, Model model,
            Locale locale) {
        model.addAttribute("start", start);
        model.addAttribute("end", end);
        return "health/bbt/smart/list";
    }

    /**
     * @param sampleService the sampleBusinessLogic to set
     */
    @Autowired(required = true)
    public void setBasalBodyTemperatureService(BasalBodyTemperatureService basalBodyTemperatureService) {
        this.basalBodyTemperatureService = basalBodyTemperatureService;
    }

    /**
     * ???
     * @param messageSource 
     */
    @Autowired(required = true)
    public void setMessageSource(ReloadableResourceBundleMessageSource messageSource) {
        this.messageSource = messageSource;
    }
}