Package pl.net.bluesoft.rnd.pt.ext.bpmnotifications.step

Source Code of pl.net.bluesoft.rnd.pt.ext.bpmnotifications.step.SendMailStep

package pl.net.bluesoft.rnd.pt.ext.bpmnotifications.step;

import pl.net.bluesoft.rnd.processtool.ProcessToolContext;
import pl.net.bluesoft.rnd.processtool.model.BpmStep;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstance;
import pl.net.bluesoft.rnd.processtool.model.UserData;
import pl.net.bluesoft.rnd.processtool.model.processdata.ProcessComment;
import pl.net.bluesoft.rnd.processtool.model.processdata.ProcessComments;
import pl.net.bluesoft.rnd.processtool.steps.ProcessToolProcessStep;
import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AliasName;
import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AutoWiredProperty;
import pl.net.bluesoft.rnd.pt.ext.bpmnotifications.service.BpmNotificationService;
import pl.net.bluesoft.rnd.pt.ext.bpmnotifications.util.EmailSender;
import pl.net.bluesoft.util.lang.Strings;
import pl.net.bluesoft.util.lang.cquery.func.F;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

import static pl.net.bluesoft.util.lang.cquery.CQuery.from;

@AliasName(name = "SendMailStep")
public class SendMailStep implements ProcessToolProcessStep {
    @AutoWiredProperty
    private String recipient;
   
    @AutoWiredProperty
    private String profileName = "Default";
   
    @AutoWiredProperty
    private String template;
   
    private final static Logger logger = Logger.getLogger(SendMailStep.class.getName());

    @Override
    public String invoke(BpmStep step, Map<String, String> params) throws Exception {
        ProcessToolContext ctx = ProcessToolContext.Util.getThreadProcessToolContext();
        BpmNotificationService service = ctx.getRegistry().getRegisteredService(BpmNotificationService.class);
       
        Map<String, Object> data = new HashMap<String, Object>();
        String processId = step.getProcessInstance().getExternalKey();
        if (!Strings.hasText(processId))
          processId = step.getProcessInstance().getInternalId();
   
    UserData user = findUser(recipient, ctx, step.getProcessInstance());
   
        data.put("processId", processId);
    data.put("processVisibleId", processId);
    data.put("user", user)
    data.put("latestComment", getLatestComment(step.getProcessInstance()));
    data.put("creator", step.getProcessInstance().getCreator());

        try {
          EmailSender.sendEmail(profileName,service, user.getEmail(), template, data);
        } catch (Exception e) {
          logger.log(Level.SEVERE, "Error sending email", e);
          return STATUS_ERROR;
        }

        return STATUS_OK;
    }

  private Object getLatestComment(ProcessInstance processInstance) {
    ProcessComments comments = processInstance.findAttributeByClass(ProcessComments.class);
    if (comments != null && !comments.getComments().isEmpty()) {
      ProcessComment comment = from(comments.getComments())
          .orderByDescending(new F<ProcessComment, Date>() {
            @Override
            public Date invoke(ProcessComment x) {
              return x.getCreateTime();
            }
          })
          .first();
      return comment.getBody();
    }
    return null;
  }

  private UserData findUser(String recipient, ProcessToolContext ctx, ProcessInstance pi) {
    if (recipient == null) {
      return null;
    }
    recipient = recipient.trim();
    if(recipient.matches("#\\{.*\\}")){
          String loginKey = recipient.replaceAll("#\\{(.*)\\}", "$1");
          recipient = (String) ctx.getBpmVariable(pi, loginKey);
        if (recipient == null) {
          return null;
        }
        }
    return ctx.getUserDataDAO().loadUserByLogin(recipient);
  }
}
TOP

Related Classes of pl.net.bluesoft.rnd.pt.ext.bpmnotifications.step.SendMailStep

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.