Skip to content

Instantly share code, notes, and snippets.

@jdorrance
Created June 7, 2013 14:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save jdorrance/5729823 to your computer and use it in GitHub Desktop.
Save jdorrance/5729823 to your computer and use it in GitHub Desktop.
/**
*
*/
package org.mavendc.cq.test.workflow
import javax.jcr.Value
import org.mavendc.cq.test.workflow.impl.WorkflowUtilsImpl;
import org.apache.commons.mail.HtmlEmail
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.osgi.service.cm.ConfigurationAdmin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.day.cq.dam.api.Asset
import com.day.cq.wcm.api.Page
import com.day.cq.workflow.WorkflowException
import com.day.cq.workflow.WorkflowSession;
import com.day.cq.workflow.exec.Route
import com.day.cq.workflow.exec.WorkItem;
import com.day.cq.workflow.exec.WorkflowProcess;
import com.day.cq.workflow.metadata.MetaDataMap;
/**
* @author John Dorrance
*
*/
@Component
@Service
class SendEmailWithCommentsProcess implements WorkflowProcess {
@Reference
private ResourceResolverFactory resFactory;
@Reference
private WorkflowUtils wkflwUtils
@Reference
private ConfigurationAdmin configAdmin
@Reference
private EmailUtils emailUtils
private Boolean debugOn
private static Logger log = LoggerFactory.getLogger(SendEmailWithCommentsProcess.class);
/*
* @param args - The expected format for these args are (email template path, debug , prefix)
* 0 - email template path ex "/etc/workflow/notification/email/acs/test.txt"
* 1 -DEBUG=true (to enable debugging)
* 2 - Host prefix ('https://mavendc.org:4502') - Use NONE if none
* EX - '/etc/workflow/notification/email/acs/test.txt,DEBUG=true,https://mavendc.org:4502'
* @return
*/
@Override
public void execute(WorkItem wkitem, WorkflowSession session, MetaDataMap args) throws WorkflowException {
wkflwUtils.setWorkflow(wkitem, session)
if(getArgs(args)?.toString().count("DEBUG=true") >0){
debugOn = true
debugWorkflowUtils(wkitem,session,args)
}
def params = [:]
def objects = [
'wkflwUtils' : wkflwUtils,
'item' : wkitem,
'item.node' : wkitem?.node,
'initiator' : wkflwUtils?.initiator,
'participant' : wkflwUtils?.lastContrib,
'payload' : wkitem?.workflowData?.payload,
'model' : wkitem?.workflow?.workflowModel
]
for(obj in objects){
obj.value.metaClass.properties.each{MetaProperty prop ->
def key = obj.key + "." + prop.name
if(debugOn)log.debug("META2 property (${key})" + obj.value."${prop.name}")
params.put(key, obj.value."${prop.name}")
}
}
def hostPrefix = configAdmin?.getConfiguration('com.day.cq.workflow.impl.email.EMailNotificationService')?.properties?.get('host.prefix')
if(getArgs(args)[2] != 'NONE')hostPrefix = getArgs(args)[2]
params.put('hostPrefix', hostPrefix)
def emailPath = getArgs(args)[0]
HtmlEmail em = emailUtils.getEmail(params, emailPath)
emailUtils.sendEmail(em)
wkflwUtils.closeResolver()
endWorkflow(wkitem,session)
}
private boolean endWorkflow(WorkItem wkitem, WorkflowSession session){
try{
List<Route> routes = session.getRoutes(wkitem)
for(Route r in routes){
if(r.hasDefault()){
session.complete(wkitem, r)
return true
}
}
session.complete(wkitem,routes?.get(0))
return true
}catch(Exception e){
log.error("Could not complete / end workflow", e)
return false
}
}
private String[] getArgs(MetaDataMap args){
String prcArgs = args.get("PROCESS_ARGS",String.class)
if(prcArgs){
return prcArgs.split(",")
}
return null
}
private void debugArgs(MetaDataMap args){
getArgs(args).eachWithIndex {it,index ->
log.debug("ARG #${index} : ${it}")
}
}
private void debugWorkflowUtils(WorkItem wk, WorkflowSession ses,MetaDataMap args){
debugArgs(args)
wkflwUtils.metaClass.properties.each {MetaProperty prop ->
log.debug("${prop.name} : " + wkflwUtils."${prop.name}")
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment