class PointTransferValidationMidware {

    /**
     * Language service.
     */
    @Inject
    private LangPropsService langPropsService;

    /**
     * User query service.
     */
    @Inject
    private UserQueryService userQueryService;

    public void handle(final RequestContext context) {<FILL_FUNCTION_BODY>}
}

        final Request request = context.getRequest();

        final JSONObject requestJSONObject = context.requestJSON();
        final String userName = requestJSONObject.optString(User.USER_NAME);
        if (StringUtils.isBlank(userName) || UserExt.COM_BOT_NAME.equals(userName)) {
            context.renderJSON(new JSONObject().put(Keys.MSG, langPropsService.get("notFoundUserLabel")));
            context.abort();
            return;
        }

        final int amount = requestJSONObject.optInt(Common.AMOUNT);
        if (amount < 1 || amount > 5000) {
            context.renderJSON(new JSONObject().put(Keys.MSG, langPropsService.get("amountInvalidLabel")));
            context.abort();
            return;
        }

        JSONObject toUser = userQueryService.getUserByName(userName);
        if (null == toUser) {
            context.renderJSON(new JSONObject().put(Keys.MSG, langPropsService.get("notFoundUserLabel")));
            context.abort();
            return;
        }

        if (UserExt.USER_STATUS_C_VALID != toUser.optInt(UserExt.USER_STATUS)) {
            context.renderJSON(new JSONObject().put(Keys.MSG, langPropsService.get("userStatusInvalidLabel")));
            context.abort();
            return;
        }

        request.setAttribute(Common.TO_USER, toUser);

        final JSONObject currentUser = Sessions.getUser();
        if (UserExt.USER_STATUS_C_VALID != currentUser.optInt(UserExt.USER_STATUS)) {
            context.renderJSON(new JSONObject().put(Keys.MSG, langPropsService.get("userStatusInvalidLabel")));
            context.abort();
            return;
        }

        if (currentUser.optString(User.USER_NAME).equals(toUser.optString(User.USER_NAME))) {
            context.renderJSON(new JSONObject().put(Keys.MSG, langPropsService.get("cannotTransferSelfLabel")));
            context.abort();
            return;
        }

        final int balanceMinLimit = Symphonys.POINT_TRANSER_MIN;
        final int balance = currentUser.optInt(UserExt.USER_POINT);
        if (balance - amount < balanceMinLimit) {
            context.renderJSON(new JSONObject().put(Keys.MSG, langPropsService.get("insufficientBalanceLabel")));
            context.abort();
            return;
        }

        String memo = StringUtils.trim(requestJSONObject.optString(Pointtransfer.MEMO));
        if (128 < StringUtils.length(memo)) {
            context.renderJSON(new JSONObject().put(Keys.MSG, langPropsService.get("memoTooLargeLabel")));
            context.abort();
            return;
        }
        memo = Jsoup.clean(memo, Safelist.none());
        request.setAttribute(Pointtransfer.MEMO, memo);

        context.handle();
    
<no_super_class>