view src/main/java/edu/harvard/iq/dataverse/SendFeedbackDialog.java @ 10:a50cf11e5178

Rewrite LGDataverse completely upgrading to dataverse4.0
author Zoe Hong <zhong@mpiwg-berlin.mpg.de>
date Tue, 08 Sep 2015 17:00:21 +0200
parents
children
line wrap: on
line source

package edu.harvard.iq.dataverse;

import static edu.harvard.iq.dataverse.util.JsfHelper.JH;
import java.util.Random;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.validator.ValidatorException;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

import org.apache.commons.validator.routines.EmailValidator;

/**
 *
 * @author Naomi
 */
@ViewScoped
@Named
public class SendFeedbackDialog implements java.io.Serializable {

    private String userEmail = "";
    private String userMessage = "";
    private String messageSubject = "";
    private String messageTo = "";
    private String defaultRecipientEmail = "support@thedata.org";
    Long op1, op2, userSum;
    // Either the dataverse or the dataset that the message is pertaining to
    // If there is no recipient, this is a general feeback message
    private DvObject recipient;
    private Logger logger = Logger.getLogger(SendFeedbackDialog.class.getCanonicalName());
    
    @EJB
    MailServiceBean mailService;
    @EJB
    DataverseServiceBean dataverseService; 
    @Inject DataverseSession dataverseSession;
    
    public void setUserEmail (String uEmail) {
        userEmail = uEmail;
    }

    public String getUserEmail() {
        return userEmail;
    }
    
    public void initUserInput(ActionEvent ae) {
        System.out.println("initUserInput()");
        userEmail="";
        userMessage="";
        messageTo="";
        messageSubject="";
        Random random = new Random();
        op1 = new Long(random.nextInt(10));
        op2 = new Long(random.nextInt(10));
        userSum=null;
        
    }

    public Long getOp1() {
        return op1;
    }

    public void setOp1(Long op1) {
        this.op1 = op1;
    }

    public Long getOp2() {
        return op2;
    }

    public void setOp2(Long op2) {
        this.op2 = op2;
    }

    public Long getUserSum() {
        return userSum;
    }

    public void setUserSum(Long userSum) {
        this.userSum = userSum;
    }
    
    
    public String getMessageTo() {
        if (recipient == null) {
            return JH.localize("contact.support");
        } else if (recipient.isInstanceofDataverse()) {
            return  ((Dataverse)recipient).getDisplayName() +" "+ JH.localize("contact.contact");
        } else 
            return JH.localize("dataset") + " " + JH.localize("contact.contact");
    }
    
    public String getFormHeader() {
        if (recipient == null) {
            return JH.localize("contact.header");
        } else if (recipient.isInstanceofDataverse()) {
            return   JH.localize("contact.dataverse.header");
        } else 
            return JH.localize("contact.dataset.header");
    }

    public void setUserMessage (String mess) {
        System.out.println("setUserMessage: "+mess);
        userMessage = mess;
    }
    
    public String getUserMessage() {
        return userMessage;
    }
    
    public void setMessageSubject(String messageSubject) {
        this.messageSubject = messageSubject;
    }
    
    public String getMessageSubject() {
         return messageSubject; 
    }
    
    public boolean isLoggedIn() {
        return dataverseSession.getUser().isAuthenticated();
    }
    
    public String loggedInUserEmail() {
        return dataverseSession.getUser().getDisplayInfo().getEmailAddress();
    }

    public DvObject getRecipient() {
        return recipient;
    }

    public void setRecipient(DvObject recipient) {
          this.recipient = recipient;
    }
    
    private String getDataverseEmail(Dataverse dataverse) {
        String email = "";
       
        for (DataverseContact dc : dataverse.getDataverseContacts()) {
            if (!email.isEmpty()) {
                email += ",";
            }
            email += dc.getContactEmail();
        }
        return email;
    }
      public void validateUserSum(FacesContext context, UIComponent component, Object value) throws ValidatorException {

        if (op1 + op2 !=(Long)value) {

            FacesMessage msg
                    = new FacesMessage("Sum is incorrect, please try again.");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);

            throw new ValidatorException(msg);
        }

    }
      
  public void validateUserEmail(FacesContext context, UIComponent component, Object value) throws ValidatorException {

        if (!EmailValidator.getInstance().isValid((String)value)) {

            FacesMessage msg
                    = new FacesMessage("Invalid email.");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);

            throw new ValidatorException(msg);
        }

    }     
    public String sendMessage() {
        String email = "";
        if (recipient!=null) {
            if (recipient.isInstanceofDataverse() ) {
               email = getDataverseEmail((Dataverse)recipient);
            }
            else if (recipient.isInstanceofDataset()) {
                Dataset d = (Dataset)recipient;
                for (DatasetField df : d.getLatestVersion().getFlatDatasetFields()){
                    if (df.getDatasetFieldType().getName().equals(DatasetFieldConstant.datasetContactEmail)) {
                        if (!email.isEmpty()) {
                            email+=",";
                        }
                        email+=df.getValue();
                    }
                }
                if (email.isEmpty()) {
                    email = getDataverseEmail(d.getOwner());
                }
            }
        }
        if (email.isEmpty()) {
            email = defaultRecipientEmail;
        }
        if (isLoggedIn() && userMessage!=null) {
            mailService.sendMail(loggedInUserEmail(), email, getMessageSubject(), userMessage);
            userMessage = "";
            return null;
        } else {
            if (userEmail != null && userMessage != null) {
                mailService.sendMail(userEmail, email, getMessageSubject(), userMessage);
                userMessage = "";
                return null;
            } else {
                userMessage = "";
                return null;
            }
        }
    }

    
}