Package com.tamakloe.guestbook

Source Code of com.tamakloe.guestbook.GuestForm

package com.tamakloe.guestbook;

import java.util.Date;
import java.util.logging.Logger;
import javax.jdo.PersistenceManager;
import javax.servlet.http.HttpServletRequest;
import net.tanesha.recaptcha.ReCaptchaImpl;
import net.tanesha.recaptcha.ReCaptchaResponse;



public class GuestForm extends Form  {
     // Constants ----------------------------------------------------------------------------------
  private static final Logger log = Logger.getLogger(GuestForm.class.getName());
    private static final String FIELD_USERNAME = "userName";
    private static final String FIELD_CONTENT = "content";
    private static final String FIELD_EMAIL = "userEmail";
    private static final String FIELD_RESULT = "result";
    private static final String FIELD_CHALLENGE = "recaptcha_challenge_field";
    private static final String FIELD_RESPONSE = "recaptcha_response_field";
    private static final String PRIVATE_KEY = "6LcBgwYAAAAAAPaui3JoHpAq95vcN09YxQEeWrth";


    // Variables ----------------------------------------------------------------------------------

    private Greeting greeting;

    // Constructors -------------------------------------------------------------------------------

    /**
     * Construct a Greeting Form associated with the given greeting.
     * @param greeting The greeting to be associated with the Greeting Form.
     */
    public GuestForm(Greeting greeting) {
        this.greeting = greeting;
    }
   
    // Form actions -------------------------------------------------------------------------------

    /**
     * Returns the greeting based on the given request. It will gather all form fields,
     * process and validate the fields and save the created greeting using the greeting associated with
     * this form.
     * @param request The request to register an User for.
     * @return The registered User based on the given request.
     */
    public Greeting registerGreeting(HttpServletRequest request) {
        greeting = new Greeting();

        try {
            processUsername(request, greeting);
            processContent(request, greeting);
            processEmail(request, greeting);
            processCaptcha(request, greeting);
            Date date = new Date();
            greeting.setDate(date);

            if (isSuccess()) {
                PersistenceManager pm = PMF.get().getPersistenceManager();
                try  {
                  pm.makePersistent(greeting);
                }finally {
                  pm.close();
                }
                setMessage(FIELD_RESULT, "Message Posted!");
            }
        } catch (Exception e) {
            setError(FIELD_RESULT, "Message post failed due to database error."
                + " Please try again later. Detail message: " + e.getMessage());
            e.printStackTrace();
            log.warning(FIELD_RESULT + " " + "Message post failed due to database error."
                    + " Please try again later. Detail message: " + e.getMessage());
        }

        return greeting;
    }

    private void processCaptcha(HttpServletRequest request, Greeting greeting) {
        String challenge = FormUtil.getFieldValue(request, FIELD_CHALLENGE);
        String response  = FormUtil.getFieldValue(request, FIELD_RESPONSE);
        String remoteIp  = request.getRemoteAddr();
        /*
        RecaptchaResponse reCaptchaResp = new RecaptchaResponse(false, "");
        reCaptchaResp = reCaptchaResp.submit(challenge, response, PRIVATE_KEY, remoteIp);
        if (!reCaptchaResp.getIsValid()){
          setError(FIELD_RESPONSE, reCaptchaResp.getErrorCode());
        }
        */
        ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
          reCaptcha.setPrivateKey(PRIVATE_KEY);
         
          ReCaptchaResponse reCaptchaResponse =
              reCaptcha.checkAnswer(remoteIp, challenge, response);
         
          if (!reCaptchaResponse.isValid()) {
              setError(FIELD_RESPONSE, "Please try again." + reCaptchaResponse.getErrorMessage());
              log.warning(FIELD_RESPONSE + " " + "Please try again." + reCaptchaResponse.getErrorMessage());
          }  
  }

  // Field processors ---------------------------------------------------------------------------

    /**
     * Process and validate the username which is to be associated with the given User.
     * If the username is null or if it is changed in the given user, then it will be validated.
     * The new username will be set in the given user regardless of the outcome of the validation.
     * @param request The request to get the username from.
     * @param user The User to be associated with the username.
     * @throws DAOException If something fails at DAO level.
     */
    public void processUsername(HttpServletRequest request, Greeting greeting)  {
        String username = FormUtil.getFieldValue(request, FIELD_USERNAME);

        if (username == null || FormUtil.isChanged(greeting.getUserName(), username)) {
            try {
                validateUsername(username);
            } catch (ValidatorException e) {
                setError(FIELD_USERNAME, e.getMessage());
                log.warning(FIELD_USERNAME + " " +  e.getMessage());
            }
            greeting.setUserName(username);
        }
    }

    /**
     * Process and validate the passwords which is to be associated with the given User.
     * The passwords will be validated regardless of the current password of the given user.
     * The password will be set in the given user only if validation succeeds.
     * @param request The request to get the passwords from.
     * @param user The User to be associated with the passwords.
     */
    public void processContent(HttpServletRequest request, Greeting greeting) {
        String content = FormUtil.getFieldValue(request, FIELD_CONTENT);
        if (content == null || FormUtil.isChanged(greeting.getContent(), content)) {
          try {
            validateContent(content);
             
          } catch (ValidatorException e) {
              setError(FIELD_CONTENT, e.getMessage());
              log.warning(FIELD_CONTENT + " " + e.getMessage());
          }
          greeting.setContent(content);
        }
    }

    public void processEmail(HttpServletRequest request, Greeting greeting) {
        String email = FormUtil.getFieldValue(request, FIELD_EMAIL);

        if (email == null ||FormUtil.isChanged(greeting.getUserEmail(), email)) {
            try {
                validateEmail(email);
            } catch (ValidatorException e) {
                setError(FIELD_EMAIL, e.getMessage());
                log.warning(FIELD_EMAIL + " " + e.getMessage());
            }
            greeting.setUserEmail(email);
        }
    }


    // Field validators ---------------------------------------------------------------------------

    /**
     * Validate the given username. It will check if it is not null, is at least 3 characters long
     * and is not already in use according to the User DAO associated with this form.
     * @param username The username to be validated.
     * @throws ValidatorException If the username is invalid.
     * @throws DAOException If something fails at DAO level.
     */
    public void validateUsername(String username) throws ValidatorException {
        if (username != null) {
            if (username.length() < 3) {
                throw new ValidatorException("Username should be at least 3 characters long.");
            }
        } else {
            throw new ValidatorException("Please enter username.");
        }
    }

    public void validateContent(String content) throws ValidatorException {
        if (content != null) {
            if (content.length() < 3) {
                throw new ValidatorException("message should be at least 3 characters long.");
            }
        } else {
            throw new ValidatorException("Please enter message.");
        }
    }

    public void validateEmail(String email) throws ValidatorException {
        if (email == null || !FormUtil.isEmail(email)) {
              throw new ValidatorException("Please enter valid email address.");
        }
    }



}
TOP

Related Classes of com.tamakloe.guestbook.GuestForm

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.