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
This commit is contained in:
Nick Burch
2010-08-12 12:09:35 +00:00
parent 4f57910fc6
commit 3b0bbb487a
3 changed files with 249 additions and 0 deletions

View File

@@ -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 <http://www.gnu.org/licenses/>.
*/
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<ExecutionSummary> 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<ExecutionSummary> 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<ExecutionSummary> running = actionTrackingService.getExecutingActions(action);
return toDetails(running);
}
private ScriptExecutionDetails[] toDetails(List<ExecutionSummary> running)
{
List<ScriptExecutionDetails> details = new ArrayList<ScriptExecutionDetails>();
for(ExecutionSummary summary : running)
{
ExecutionDetails detail = actionTrackingService.getExecutionDetails(summary);
if(detail != null)
{
details.add( new ScriptExecutionDetails(detail) );
}
}
return details.toArray(new ScriptExecutionDetails[details.size()]);
}
}

View File

@@ -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 <http://www.gnu.org/licenses/>.
*/
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();
}
}