package service.core.workflows;
import java.util.Collections;
import java.util.UUID;
import javax.jcr.Session;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.ModifiableValueMap;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.jcr.resource.api.JcrResourceConstants;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.day.cq.workflow.WorkflowSession;
import com.day.cq.workflow.exec.WorkItem;
import com.day.cq.workflow.exec.WorkflowData;
import com.day.cq.workflow.exec.WorkflowProcess;
import com.day.cq.workflow.metadata.MetaDataMap;
import service.core.constants.ServiceConstants;
@Component(
service = WorkflowProcess.class,
immediate = true,
property = {
Constants.SERVICE_DESCRIPTION + "= Update 'new comp' in a new or copied node inside the folder /content/project/projectcontent",
"process.label = UUID"
}
)
public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap args) {
log.info("\n------------- Workflow {Start} --------------------");
String contentPath = "";
WorkflowData workflowData = workItem.getWorkflowData();
final String type = workflowData.getPayloadType();
ResourceResolver resourceResolver = null;
log.info("Workflow type = " + type);
if (type == "JCR_PATH") {
try {
resourceResolver = getResourceResolver(workflowSession.getSession());
contentPath = workflowData.getPayload().toString();
Resource componentResource = resourceResolver.getResource(contentPath);
Resource parentResource = componentResource.getParent();
if (parentResource.getName().equalsIgnoreCase("assets")) {
ModifiableValueMap map = componentResource.adaptTo(ModifiableValueMap.class);
if(map != null) {
map.put("someID", UUID.randomUUID().toString());
componentResource.getResourceResolver().commit();
String zeroID = ((String) map.get("someID"));
if(zeroID.equalsIgnoreCase("0")) {
log.error("Some ID is 0");
} else {
log.info("Some ID is : " +componentResource.getValueMap().containsKey("someID"));
}
}
} else if (componentResource.getResourceType().equalsIgnoreCase(ServiceConstants.EXAMPLE_RESOURCE)
|| componentResource.getResourceType().equalsIgnoreCase(ServiceConstants.SOME_RESOURCE)) {
ModifiableValueMap map = componentResource.adaptTo(ModifiableValueMap.class);
if(null != map) {
map.put("ExampleID", UUID.randomUUID().toString());
componentResource.getResourceResolver().commit();
}
}
} catch (Exception e) {
log.error(e.getLocalizedMessage());
log.error("\n------------- Workflow {Error} --------------------");
}
}
log.info("\n------------- Workflow {End} --------------------");
}
/**
* Method to create the resourceResolver object using workflowSession
*
* @param session
* @throws org.apache.sling.api.resource.LoginException
*/
private ResourceResolver getResourceResolver(Session session) throws LoginException {
return resourceResolverFactory.getResourceResolver(
Collections.<String, Object>singletonMap(JcrResourceConstants.AUTHENTICATION_INFO_SESSION, session));
}
}