/** * SlingBeans - NetBeans Sling plugin * https://github.com/jkan997/SlingBeans * Licensed under Apache 2.0 license * http://www.apache.org/licenses/LICENSE-2.0 */ package org.jkan997.slingbeans.nbactions; import java.awt.event.ActionEvent; import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import org.jkan997.slingbeans.configuration.Configuration; import org.jkan997.slingbeans.configuration.ConfigurationImpl; import org.jkan997.slingbeans.dialogs.StartWorkflowDialog; import org.jkan997.slingbeans.entity.WorkflowConfiguration; import org.jkan997.slingbeans.entity.WorkflowSet; import org.jkan997.slingbeans.helper.LogHelper; import org.jkan997.slingbeans.helper.SwingHelper; import org.jkan997.slingbeans.slingfs.FileObject; import org.jkan997.slingbeans.slingfs.FileSystem; import org.netbeans.api.progress.ProgressUtils; import org.openide.loaders.DataObject; public class StartWorkflowAction extends AbstractAction { private FileObject fileObject; private WorkflowSet workflows; protected boolean alwaysShowDialog = false; public StartWorkflowAction(DataObject context) { setActionName("Start workflow"); /* if (context!=null){ org.openide.filesystems.FileObject fo = context.getPrimaryFile(); File f = Utilities.toFile(fo.toURI()); File syncedFolder = SyncDescriptor.findSyncDescriptor(f); this.setFileObject(syncedFolder); }*/ } public FileObject getFileObject() { return fileObject; } public void setFileObject(FileObject fileObject) { this.fileObject = fileObject; } private void loadWorkflows() { final Runnable loadWorkflowsTask = new Runnable() { @Override public void run() { try { FileSystem fs = fileObject.getFileSystem(); workflows = fs.readWorkflows(); } catch (Exception ex) { LogHelper.logError(ex); } } }; ProgressUtils.runOffEventDispatchThread(loadWorkflowsTask, "Loading workflows", new AtomicBoolean(false), false); } @Override public void actionPerformed(ActionEvent e) { try { StartWorkflowDialog swd = new StartWorkflowDialog(null, true); String payload = null; if (fileObject.getParent() != null) { payload = "/" + fileObject.getPath(); } Configuration configuration = ConfigurationImpl.getInstance(); WorkflowConfiguration workflowConfiguration = (WorkflowConfiguration) configuration.getObject(WorkflowConfiguration.WORKFLOW_CONFIGURATION); if ((this.alwaysShowDialog) || (workflowConfiguration == null)) { loadWorkflows(); swd.init(workflows, payload); SwingHelper.showDialog(swd); if (swd.isStartWorkflow()) { startWorkflow(swd.getWorkflowConfiguration()); } } else { startWorkflow(workflowConfiguration); } } catch (Exception ex) { LogHelper.logError(ex); } } private void startWorkflow(final WorkflowConfiguration wc) { logHeader("STARTING WORKFLOW %s", wc.getWorkfloadName()); final Runnable startWorkflowTask = new Runnable() { @Override public void run() { try { FileSystem fs = fileObject.getFileSystem(); Map<String, String> params = new LinkedHashMap<String, String>(); params.put("model", "/" + wc.getWorkfloadPath() + "/jcr:content/model"); params.put("payload", wc.getWorkflowPayload()); params.put("payloadType", "JCR_PATH"); params.put("workflowTitle", wc.getWorkflowTitle()); params.put("startComment", wc.getWorkfloadComment()); logInfo("Workflow params:"); for (Map.Entry<String, String> me : params.entrySet()) { logInfo("%s = %s", me.getKey(), me.getValue()); } String url = "/etc/workflow/instances"; byte[] getResp = fs.sendSimplePost(url, params); String getRespStr = new String(getResp); logInfo(getRespStr); } catch (Exception ex) { LogHelper.logError(ex); } } }; ProgressUtils.runOffEventDispatchThread(startWorkflowTask, "Starting workflow", new AtomicBoolean(false), false); } }