Created
June 7, 2013 14:52
-
-
Save jdorrance/5729823 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
*/ | |
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