From 3b0bbb487a038ed5a1a00e95d81ea7cc88be4b68 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Thu, 12 Aug 2010 12:09:35 +0000 Subject: [PATCH] Basic action tracking service javascript interface git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@21756 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/action-services-context.xml | 10 ++ .../script/ScriptActionTrackingService.java | 130 ++++++++++++++++++ .../action/script/ScriptExecutionDetails.java | 109 +++++++++++++++ 3 files changed, 249 insertions(+) create mode 100644 source/java/org/alfresco/repo/action/script/ScriptActionTrackingService.java create mode 100644 source/java/org/alfresco/repo/action/script/ScriptExecutionDetails.java diff --git a/config/alfresco/action-services-context.xml b/config/alfresco/action-services-context.xml index 60299a77a8..5c88fec8d8 100644 --- a/config/alfresco/action-services-context.xml +++ b/config/alfresco/action-services-context.xml @@ -128,6 +128,16 @@ + + + + actionTrackingService + + + + + diff --git a/source/java/org/alfresco/repo/action/script/ScriptActionTrackingService.java b/source/java/org/alfresco/repo/action/script/ScriptActionTrackingService.java new file mode 100644 index 0000000000..f084c24af9 --- /dev/null +++ b/source/java/org/alfresco/repo/action/script/ScriptActionTrackingService.java @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.action.script; + +import java.util.ArrayList; +import java.util.List; + +import org.alfresco.repo.jscript.BaseScopableProcessorExtension; +import org.alfresco.repo.jscript.ScriptNode; +import org.alfresco.service.ServiceRegistry; +import org.alfresco.service.cmr.action.Action; +import org.alfresco.service.cmr.action.ActionTrackingService; +import org.alfresco.service.cmr.action.CancellableAction; +import org.alfresco.service.cmr.action.ExecutionDetails; +import org.alfresco.service.cmr.action.ExecutionSummary; +import org.alfresco.service.cmr.rendition.RenderingEngineDefinition; +import org.alfresco.service.cmr.rendition.RenditionDefinition; +import org.alfresco.service.cmr.rendition.RenditionService; +import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.namespace.QName; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Script object representing the action tracking service. + * + * @author Nick Burch + */ +public class ScriptActionTrackingService extends BaseScopableProcessorExtension +{ + private static Log logger = LogFactory.getLog(ScriptActionTrackingService.class); + + /** The Services registry */ + private ServiceRegistry serviceRegistry; + private ActionTrackingService actionTrackingService; + + /** + * Set the service registry + * + * @param serviceRegistry the service registry. + */ + public void setServiceRegistry(ServiceRegistry serviceRegistry) + { + this.serviceRegistry = serviceRegistry; + } + + /** + * Set the action tracking service. + * + * @param actionTrackingService the action tracking service + */ + public void setActionTrackingService(ActionTrackingService actionTrackingService) + { + this.actionTrackingService = actionTrackingService; + } + + /** + * Requests that the specified Action cancel itself + * and aborts execution, as soon as possible. + */ + public void requestActionCancellation(ScriptExecutionDetails action) + { + actionTrackingService.requestActionCancellation( + action.getExecutionDetails().getExecutionSummary() + ); + } + + /** + * Retrieve summary details of all the actions + * currently executing. + */ + public ScriptExecutionDetails[] getAllExecutingActions() + { + List running = actionTrackingService.getAllExecutingActions(); + return toDetails(running); + } + + /** + * Retrieve summary details of all the actions + * of the given type that are currently executing. + */ + public ScriptExecutionDetails[] getExecutingActions(String type) + { + List running = actionTrackingService.getExecutingActions(type); + return toDetails(running); + } + + /** + * Retrieve summary details of all instances of + * the specified action that are currently + * executing. + */ + public ScriptExecutionDetails[] getExecutingActions(Action action) + { + List running = actionTrackingService.getExecutingActions(action); + return toDetails(running); + } + + private ScriptExecutionDetails[] toDetails(List running) + { + List details = new ArrayList(); + for(ExecutionSummary summary : running) + { + ExecutionDetails detail = actionTrackingService.getExecutionDetails(summary); + if(detail != null) + { + details.add( new ScriptExecutionDetails(detail) ); + } + } + + return details.toArray(new ScriptExecutionDetails[details.size()]); + } +} diff --git a/source/java/org/alfresco/repo/action/script/ScriptExecutionDetails.java b/source/java/org/alfresco/repo/action/script/ScriptExecutionDetails.java new file mode 100644 index 0000000000..b05157b8b4 --- /dev/null +++ b/source/java/org/alfresco/repo/action/script/ScriptExecutionDetails.java @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.action.script; + +import java.io.Serializable; +import java.util.Date; + +import org.alfresco.repo.jscript.Scopeable; +import org.alfresco.service.cmr.action.ExecutionDetails; +import org.alfresco.service.cmr.action.ExecutionSummary; +import org.alfresco.service.cmr.repository.NodeRef; +import org.mozilla.javascript.Scriptable; + +/** + * ExecutionDetails JavaScript Object. This class is a JavaScript-friendly wrapper for + * the {@link ExecutionDetails} (and embeded {@link ExecutionSummary}) class. + * + * @author Nick Burch + * @see org.alfresco.service.cmr.action.ExecutionDetails + */ +public final class ScriptExecutionDetails implements Serializable, Scopeable +{ + private static final long serialVersionUID = 3182925511891455490L; + + /** Root scope for this object */ + private Scriptable scope; + + /** The details we wrap */ + private ExecutionDetails details; + + public ScriptExecutionDetails(ExecutionDetails details) + { + this.details = details; + } + + protected ExecutionDetails getExecutionDetails() + { + return details; + } + + + public String getActionType() { + return details.getActionType(); + } + + public String getActionId() { + return details.getActionId(); + } + + public int getExecutionInstance() { + return details.getExecutionInstance(); + } + + public NodeRef getPersistedActionRef() { + return details.getPersistedActionRef(); + } + + public String getRunningOn() { + return details.getRunningOn(); + } + + public Date getStartedAt() { + return details.getStartedAt(); + } + + public boolean isCancelRequested() { + return details.isCancelRequested(); + } + + /** + * @see org.alfresco.repo.jscript.Scopeable#setScope(org.mozilla.javascript.Scriptable) + */ + public void setScope(Scriptable scope) + { + this.scope = scope; + } + + @Override + public String toString() + { + StringBuilder builder = new StringBuilder(); + builder.append("Executing Action: "); + builder.append(details.getActionType()).append(' '); + builder.append(details.getActionId()).append(' '); + builder.append(details.getExecutionInstance()).append(' '); + if(details.getPersistedActionRef() != null) + { + builder.append(details.getPersistedActionRef()); + } + + return builder.toString(); + } +}