REPO-1869: Retrieve action details

- implementation and tests for retrieve action definition by id
This commit is contained in:
CodrinChirica
2018-01-18 10:31:30 +02:00
parent 260ecf6749
commit 044798da67
5 changed files with 115 additions and 1 deletions

View File

@@ -38,6 +38,8 @@ public interface Actions
CollectionWithPagingInfo<ActionDefinition> getActionDefinitions(NodeRef nodeRef, Parameters params);
CollectionWithPagingInfo<ActionDefinition> getActionDefinitions(Parameters params);
ActionDefinition getActionDefinitionById(String actionDefinitionId);
enum SortKey
{

View File

@@ -27,13 +27,14 @@ package org.alfresco.rest.api.actions;
import org.alfresco.rest.api.Actions;
import org.alfresco.rest.api.model.ActionDefinition;
import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException;
import org.alfresco.rest.framework.resource.EntityResource;
import org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction;
import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo;
import org.alfresco.rest.framework.resource.parameters.Parameters;
@EntityResource(name="action-definitions", title = "Actions")
public class ActionDefinitionsEntityResource implements EntityResourceAction.Read<ActionDefinition>
public class ActionDefinitionsEntityResource implements EntityResourceAction.Read<ActionDefinition>, EntityResourceAction.ReadById<ActionDefinition>
{
private Actions actions;
@@ -47,4 +48,10 @@ public class ActionDefinitionsEntityResource implements EntityResourceAction.Rea
{
return actions.getActionDefinitions(params);
}
@Override
public ActionDefinition readById(String id, Parameters parameters) throws EntityNotFoundException
{
return actions.getActionDefinitionById(id);
}
}

View File

@@ -98,6 +98,53 @@ public class ActionsImpl implements Actions
this.prefixResolver = prefixResolver;
}
@Override
public ActionDefinition getActionDefinitionById(String actionDefinitionId)
{
if (actionDefinitionId == null)
{
throw new IllegalArgumentException("Missing actionDefinitionId");
}
// Non-existing actionDefinitionId -> 404
ActionDefinition result = null;
try
{
result = getActionDefinition(actionService.getActionDefinition(actionDefinitionId));
}
catch (NoSuchBeanDefinitionException nsbdx)
{
// Intentionally empty.
}
if (result == null)
{
throw new EntityNotFoundException(actionDefinitionId);
}
return result;
}
private ActionDefinition getActionDefinition(
org.alfresco.service.cmr.action.ActionDefinition actionDefinitionId)
{
List<ActionDefinition.ParameterDefinition> paramDefs =
actionDefinitionId.
getParameterDefinitions().
stream().
map(this::toModel).
collect(Collectors.toList());
return new ActionDefinition(
actionDefinitionId.getName(), // ID is a synonym for name.
actionDefinitionId.getName(),
actionDefinitionId.getTitle(),
actionDefinitionId.getDescription(),
toShortQNames(actionDefinitionId.getApplicableTypes()),
actionDefinitionId.getAdhocPropertiesAllowed(),
actionDefinitionId.getTrackStatus(),
paramDefs);
}
@Override
public CollectionWithPagingInfo<ActionDefinition> getActionDefinitions(NodeRef nodeRef, Parameters params)
{

View File

@@ -206,6 +206,47 @@ public class TestActions extends AbstractBaseApiTest
actions.getActionDefinitions(emptyParams, 401);
}
}
@Test
public void canGetActionDefinition() throws PublicApiException
{
final String person1 = account1PersonIt.next();
publicApiClient.setRequestContext(new RequestContext(account1.getId(), person1));
ActionDefinition actionDef = actions.getActionDefinition("add-features",200);
assertNotNull("Action definition should not be null", actionDef);
// Check ActionDefinition fields
assertEquals("add-features", actionDef.getId());
assertEquals("add-features", actionDef.getName());
assertEquals("Add aspect", actionDef.getTitle());
assertEquals("This will add an aspect to the matched item.", actionDef.getDescription());
// Applicable types
assertEquals(0, actionDef.getApplicableTypes().size());
assertEquals(false, actionDef.isTrackStatus());
// Parameter definitions
assertEquals(1, actionDef.getParameterDefinitions().size());
ActionDefinition.ParameterDefinition paramDefs = actionDef.getParameterDefinitions().get(0);
assertEquals(AddFeaturesActionExecuter.PARAM_ASPECT_NAME, paramDefs.getName());
assertEquals("d:qname", paramDefs.getType());
assertEquals(true, paramDefs.isMandatory());
assertEquals("Aspect", paramDefs.getDisplayLabel());
assertEquals(false, paramDefs.isMultiValued());
assertEquals("ac-aspects", paramDefs.getParameterConstraintName());
// Non-existing actionDefinitionId -> 404
{
actions.getActionDefinition("some-text",404);
}
// Unauthorized -> 401
{
publicApiClient.setRequestContext(new RequestContext(account1.getId(), person1, "invalid-password"));
actions.getActionDefinition(null, 401);
}
}
@Test
public void canGetActionDefinitionsForNode() throws Exception

View File

@@ -2795,5 +2795,22 @@ public class PublicApiClient
return null;
}
public ActionDefinition getActionDefinition(String actionDefinitionId, int expectedStatus) throws PublicApiException
{
HttpResponse response = getSingle("action-definitions", actionDefinitionId, null,
null, null, "Unexpected response", expectedStatus);
if (response != null && response.getJsonResponse() != null)
{
JSONObject jsonEntity = (JSONObject) response.getJsonResponse().get("entry");
if (jsonEntity != null)
{
return parseActionDefinition(jsonEntity);
}
}
return null;
}
}
}