/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/sam/trunk/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/bean/util/EmailBean.java $
* $Id: EmailBean.java 106463 2012-04-02 12:20:09Z david.horwitz@uct.ac.za $
***********************************************************************************
*
* Copyright (c) 2006, 2007, 2008, 2009 The Sakai Foundation
*
* Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.tool.assessment.ui.bean.util;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.component.cover.ServerConfigurationService;
import org.sakaiproject.content.api.ContentResource;
import org.sakaiproject.content.api.FilePickerHelper;
import org.sakaiproject.entity.api.Reference;
import org.sakaiproject.entity.cover.EntityManager;
import org.sakaiproject.event.cover.EventTrackingService;
import org.sakaiproject.exception.IdUnusedException;
import org.sakaiproject.exception.PermissionException;
import org.sakaiproject.exception.TypeException;
import org.sakaiproject.tool.api.ToolSession;
import org.sakaiproject.tool.assessment.data.dao.assessment.AttachmentData;
import org.sakaiproject.tool.assessment.data.ifc.assessment.AttachmentIfc;
import org.sakaiproject.tool.assessment.facade.AgentFacade;
import org.sakaiproject.tool.assessment.services.assessment.AssessmentService;
import org.sakaiproject.tool.assessment.ui.listener.util.ContextUtil;
import org.sakaiproject.tool.assessment.util.SamigoEmailService;
import org.sakaiproject.tool.cover.SessionManager;
public class EmailBean implements Serializable {
private static Log log = LogFactory.getLog(EmailBean.class);
private String fromName;
private String fromEmailAddress;
private String toName;
private String toEmailAddress;
private String toFirstName;
private String assessmentName;
private String subject;
private String ccMe = "no";
private String message;
private List attachmentList;
private boolean hasAttachment = false;
private String outcome;
private HashMap resourceHash = new HashMap();
/**
* Creates a new TotalScoresBean object.
*/
public EmailBean() {
log.debug("Creating a new EmailBean");
}
public String getFromName() {
return fromName;
}
public void setFromName(String fromName) {
this.fromName = fromName;
}
public String getFromEmailAddress() {
return fromEmailAddress;
}
public void setFromEmailAddress(String fromEmailAddress) {
this.fromEmailAddress = fromEmailAddress;
}
public String getToName() {
return toName;
}
public void setToName(String toName) {
this.toName = toName;
}
public String getToEmailAddress() {
return toEmailAddress;
}
public void setToEmailAddress(String toEmailAddress) {
this.toEmailAddress = toEmailAddress;
}
public String getToFirstName() {
return toFirstName;
}
public void setToFirstName(String toFirstName) {
this.toFirstName = toFirstName;
}
public String getAssessmentName() {
return assessmentName;
}
public void setAssessmentName(String assessmentName) {
this.assessmentName = assessmentName;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getCcMe() {
return ccMe;
}
public void setCcMe(String ccMe) {
this.ccMe = ccMe;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List getAttachmentList() {
return attachmentList;
}
public void setAttachmentList(List attachmentList) {
this.attachmentList = attachmentList;
}
public boolean getHasAttachment() {
return this.hasAttachment;
}
public void setHasAttachment(boolean hasAttachment) {
this.hasAttachment = hasAttachment;
}
public String getOutcome() {
return outcome;
}
public void setOutcome(String outcome) {
this.outcome = outcome;
}
public void prepareAttachment() {
ToolSession session = SessionManager.getCurrentToolSession();
ArrayList newAttachmentList = new ArrayList();
if (session.getAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS) != null) {
List refs = (List) session.getAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS);
Reference ref;
if (refs.size() == 0) {
hasAttachment = false;
}
else {
HashMap map = getResourceIdHash(attachmentList);
for (int i = 0; i < refs.size(); i++) {
ref = (Reference) refs.get(i);
String resourceId = ref.getId();
if (map.get(resourceId) == null) {
AssessmentService assessmentService = new AssessmentService();
AttachmentData attach = assessmentService.createEmailAttachment(
resourceId,
ref.getProperties().getProperty(ref.getProperties().getNamePropDisplayName()),
ServerConfigurationService.getServerUrl());
newAttachmentList.add(attach);
}
else {
newAttachmentList.add((AttachmentData)map.get(resourceId));
map.remove(resourceId);
}
hasAttachment = true;
}
}
session.removeAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS);
session.removeAttribute(FilePickerHelper.FILE_PICKER_CANCEL);
}
else {
hasAttachment = false;
}
attachmentList = newAttachmentList;
}
private HashMap getResourceIdHash(List attachmentList) {
HashMap map = new HashMap();
if (attachmentList != null) {
Iterator iter = attachmentList.iterator();
while (iter.hasNext()) {
AttachmentData attach = (AttachmentData) iter.next();
map.put(attach.getResourceId(), attach);
}
}
return map;
}
public String addAttachmentsRedirect() {
try {
List filePickerList = new ArrayList();
if (attachmentList != null){
filePickerList = prepareReferenceList(attachmentList);
}
log.debug("**filePicker list="+filePickerList.size());
ToolSession currentToolSession = SessionManager.getCurrentToolSession();
currentToolSession.setAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS, filePickerList);
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
context.redirect("sakai.filepicker.helper/tool");
}
catch(Exception e){
log.error("fail to redirect to attachment page: " + e.getMessage());
}
return "email";
}
private List prepareReferenceList(List attachmentList) {
List list = new ArrayList();
for (int i = 0; i < attachmentList.size(); i++) {
ContentResource cr = null;
AttachmentIfc attach = (AttachmentIfc) attachmentList.get(i);
try {
cr = AssessmentService.getContentHostingService().getResource(attach.getResourceId());
} catch (PermissionException e) {
log.warn("PermissionException from ContentHostingService:"
+ e.getMessage());
} catch (IdUnusedException e) {
log.warn("IdUnusedException from ContentHostingService:"
+ e.getMessage());
} catch (TypeException e) {
log.warn("TypeException from ContentHostingService:"
+ e.getMessage());
}
if (cr != null) {
if (this.resourceHash == null) {
this.resourceHash = new HashMap();
}
this.resourceHash.put(attach.getResourceId(), cr);
Reference ref = EntityManager.newReference(cr.getReference());
if (ref != null) {
list.add(ref);
}
}
}
return list;
}
public HashMap getResourceHash() {
return resourceHash;
}
public void setResourceHash(HashMap resourceHash)
{
this.resourceHash = resourceHash;
}
public String send() {
log.debug("send()");
log.debug("fromName: " + fromName);
log.debug("fromEmailAddress: " + fromEmailAddress);
log.debug("toName: " + toName);
log.debug("toEmailAddress: " + toEmailAddress);
log.debug("subject: " + subject);
log.debug("ccMe: " + ccMe);
log.debug("message: " + message);
SamigoEmailService samigoEmailService = new SamigoEmailService(
fromName, fromEmailAddress, toName, toEmailAddress, ccMe,
subject, message);
String result = samigoEmailService.send();
if ("send".equals(result)) {
String msgSent = ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.EvaluationMessages","sent_email_confirmation");
FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(msgSent));
EventTrackingService.post(EventTrackingService.newEvent("sam.email", "siteId=" + AgentFacade.getCurrentSiteId() + ", Email sent ok: toName=" + toName + ", toEmail=" + toEmailAddress, true));
return "confirmEmailSent";
}
else {
String msgError = ContextUtil.getLocalizedString("org.sakaiproject.tool.assessment.bundle.EvaluationMessages","sent_email_error");
FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(msgError));
EventTrackingService.post(EventTrackingService.newEvent("sam.email", "siteId=" + AgentFacade.getCurrentSiteId() + ", Email sent error: toName=" + toName + ", toEmail=" + toEmailAddress, true));
return "emailError";
}
}
public void cancel() {
log.debug("cancel");
setMessage(null);
setAttachmentList(null);
setHasAttachment(false);
}
}