Java tutorial
/* * Copyright (c) 2012-2016, b3log.org & hacpai.com & fangstar.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.b3log.symphony.processor; import java.util.Calendar; import java.util.List; import java.util.Map; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.b3log.latke.Keys; import org.b3log.latke.logging.Logger; import org.b3log.latke.model.User; import org.b3log.latke.service.LangPropsService; import org.b3log.latke.servlet.HTTPRequestContext; import org.b3log.latke.servlet.HTTPRequestMethod; import org.b3log.latke.servlet.annotation.After; import org.b3log.latke.servlet.annotation.Before; import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer; import org.b3log.latke.util.Requests; import org.b3log.symphony.model.Common; import org.b3log.symphony.model.Pointtransfer; import org.b3log.symphony.processor.advice.CSRFCheck; import org.b3log.symphony.processor.advice.CSRFToken; import org.b3log.symphony.processor.advice.LoginCheck; import org.b3log.symphony.processor.advice.stopwatch.StopwatchEndAdvice; import org.b3log.symphony.processor.advice.stopwatch.StopwatchStartAdvice; import org.b3log.symphony.processor.advice.validate.Activity1A0001CollectValidation; import org.b3log.symphony.processor.advice.validate.Activity1A0001Validation; import org.b3log.symphony.service.ActivityMgmtService; import org.b3log.symphony.service.ActivityQueryService; import org.b3log.symphony.service.PointtransferQueryService; import org.b3log.symphony.util.Filler; import org.b3log.symphony.util.Symphonys; import org.json.JSONObject; /** * Activity processor. * * <p> * <ul> * <li>Daily checkin (/activity/daily-checkin), GET</li> * <li>Shows 1A0001 (/activity/1A0001), GET</li> * <li>Bets 1A0001 (/activity/1A0001/bet), POST</li> * <li>Collects 1A0001 (/activity/1A0001/collect), POST</li> * </ul> * </p> * * @author <a href="http://88250.b3log.org">Liang Ding</a> * @version 1.3.1.1, Jan 2, 2016 * @since 1.3.0 */ @RequestProcessor public class ActivityProcessor { /** * Logger. */ private static final Logger LOGGER = Logger.getLogger(ActivityProcessor.class); /** * Activity management service. */ @Inject private ActivityMgmtService activityMgmtService; /** * Activity query service. */ @Inject private ActivityQueryService activityQueryService; /** * Pointtransfer query service. */ @Inject private PointtransferQueryService pointtransferQueryService; /** * Filler. */ @Inject private Filler filler; /** * Language service. */ @Inject private LangPropsService langPropsService; /** * Shows activity page. * * @param context the specified context * @param request the specified request * @param response the specified response * @throws Exception exception */ @RequestProcessing(value = "/activities", method = HTTPRequestMethod.GET) @Before(adviceClass = { StopwatchStartAdvice.class, LoginCheck.class }) @After(adviceClass = StopwatchEndAdvice.class) public void showActivities(final HTTPRequestContext context, final HttpServletRequest request, final HttpServletResponse response) throws Exception { request.setAttribute(Keys.TEMAPLTE_DIR_NAME, Symphonys.get("skinDirName")); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(); context.setRenderer(renderer); renderer.setTemplateName("/home/activities.ftl"); final Map<String, Object> dataModel = renderer.getDataModel(); filler.fillHeaderAndFooter(request, response, dataModel); filler.fillRandomArticles(dataModel); filler.fillHotArticles(dataModel); filler.fillSideTags(dataModel); filler.fillLatestCmts(dataModel); } /** * Daily checkin. * * @param context the specified context * @param request the specified request * @param response the specified response * @throws Exception exception */ @RequestProcessing(value = "/activity/daily-checkin", method = HTTPRequestMethod.GET) @Before(adviceClass = { StopwatchStartAdvice.class, LoginCheck.class }) @After(adviceClass = StopwatchEndAdvice.class) public void dailyCheckin(final HTTPRequestContext context, final HttpServletRequest request, final HttpServletResponse response) throws Exception { final JSONObject user = (JSONObject) request.getAttribute(User.USER); final String userId = user.optString(Keys.OBJECT_ID); activityMgmtService.dailyCheckin(userId); response.sendRedirect("/member/" + user.optString(User.USER_NAME) + "/points"); } /** * Shows 1A0001. * * @param context the specified context * @param request the specified request * @param response the specified response * @throws Exception exception */ @RequestProcessing(value = "/activity/1A0001", method = HTTPRequestMethod.GET) @Before(adviceClass = { StopwatchStartAdvice.class, LoginCheck.class }) @After(adviceClass = { CSRFToken.class, StopwatchEndAdvice.class }) public void show1A0001(final HTTPRequestContext context, final HttpServletRequest request, final HttpServletResponse response) throws Exception { request.setAttribute(Keys.TEMAPLTE_DIR_NAME, Symphonys.get("skinDirName")); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(); context.setRenderer(renderer); renderer.setTemplateName("/activity/1A0001.ftl"); final Map<String, Object> dataModel = renderer.getDataModel(); final JSONObject currentUser = (JSONObject) request.getAttribute(User.USER); final String userId = currentUser.optString(Keys.OBJECT_ID); final boolean closed = Symphonys.getBoolean("activity1A0001Closed"); dataModel.put(Common.CLOSED, closed); final Calendar calendar = Calendar.getInstance(); final int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); final boolean closed1A0001 = dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY; dataModel.put(Common.CLOSED_1A0001, closed1A0001); final int hour = calendar.get(Calendar.HOUR_OF_DAY); final int minute = calendar.get(Calendar.MINUTE); final boolean end = hour > 14 || (hour == 14 && minute > 55); dataModel.put(Common.END, end); final boolean collected = activityQueryService.isCollected1A0001Today(userId); dataModel.put(Common.COLLECTED, collected); final boolean participated = activityQueryService.is1A0001Today(userId); dataModel.put(Common.PARTICIPATED, participated); while (true) { if (closed) { dataModel.put(Keys.MSG, langPropsService.get("activityClosedLabel")); break; } if (closed1A0001) { dataModel.put(Keys.MSG, langPropsService.get("activity1A0001CloseLabel")); break; } if (collected) { dataModel.put(Keys.MSG, langPropsService.get("activityParticipatedLabel")); break; } if (participated) { dataModel.put(Common.HOUR, hour); final List<JSONObject> records = pointtransferQueryService.getLatestPointtransfers(userId, Pointtransfer.TRANSFER_TYPE_C_ACTIVITY_1A0001, 1); final JSONObject pointtransfer = records.get(0); final String data = pointtransfer.optString(Pointtransfer.DATA_ID); final String smallOrLarge = data.split("-")[1]; final int sum = pointtransfer.optInt(Pointtransfer.SUM); String msg = langPropsService.get("activity1A0001BetedLabel"); final String small = langPropsService.get("activity1A0001BetSmallLabel"); final String large = langPropsService.get("activity1A0001BetLargeLabel"); msg = msg.replace("{smallOrLarge}", StringUtils.equals(smallOrLarge, "0") ? small : large); msg = msg.replace("{point}", String.valueOf(sum)); dataModel.put(Keys.MSG, msg); break; } if (end) { dataModel.put(Keys.MSG, langPropsService.get("activityEndLabel")); break; } break; } filler.fillHeaderAndFooter(request, response, dataModel); filler.fillRandomArticles(dataModel); filler.fillHotArticles(dataModel); filler.fillSideTags(dataModel); filler.fillLatestCmts(dataModel); } /** * Bets 1A0001. * * @param context the specified context * @param request the specified request * @param response the specified response * @throws Exception exception */ @RequestProcessing(value = "/activity/1A0001/bet", method = HTTPRequestMethod.POST) @Before(adviceClass = { StopwatchStartAdvice.class, LoginCheck.class, CSRFCheck.class, Activity1A0001Validation.class }) @After(adviceClass = StopwatchEndAdvice.class) public void bet1A0001(final HTTPRequestContext context, final HttpServletRequest request, final HttpServletResponse response) throws Exception { context.renderJSON().renderFalseResult(); final JSONObject requestJSONObject = Requests.parseRequestJSONObject(request, context.getResponse()); final int amount = requestJSONObject.optInt(Common.AMOUNT); final int smallOrLarge = requestJSONObject.optInt(Common.SMALL_OR_LARGE); final JSONObject currentUser = (JSONObject) request.getAttribute(User.USER); final String fromId = currentUser.optString(Keys.OBJECT_ID); final JSONObject ret = activityMgmtService.bet1A0001(fromId, amount, smallOrLarge); if (ret.optBoolean(Keys.STATUS_CODE)) { String msg = langPropsService.get("activity1A0001BetedLabel"); final String small = langPropsService.get("activity1A0001BetSmallLabel"); final String large = langPropsService.get("activity1A0001BetLargeLabel"); msg = msg.replace("{smallOrLarge}", smallOrLarge == 0 ? small : large); msg = msg.replace("{point}", String.valueOf(amount)); context.renderTrueResult().renderMsg(msg); } } /** * Collects 1A0001. * * @param context the specified context * @param request the specified request * @param response the specified response * @throws Exception exception */ @RequestProcessing(value = "/activity/1A0001/collect", method = HTTPRequestMethod.POST) @Before(adviceClass = { StopwatchStartAdvice.class, LoginCheck.class, Activity1A0001CollectValidation.class }) @After(adviceClass = StopwatchEndAdvice.class) public void collect1A0001(final HTTPRequestContext context, final HttpServletRequest request, final HttpServletResponse response) throws Exception { final JSONObject currentUser = (JSONObject) request.getAttribute(User.USER); final String userId = currentUser.optString(Keys.OBJECT_ID); final JSONObject ret = activityMgmtService.collect1A0001(userId); context.renderJSON(ret); } }