mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
Merged HEAD (5.2) to 5.2.N (5.2.1)
126478 jkaabimofrad: Merged FILE-FOLDER-API (5.2.0) to HEAD (5.2) 122543 gjames: RA-211: Moving around execution logic in preparation for more flexible respoonse handling git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@126822 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -91,7 +91,7 @@ public class NetworkWebScriptGet extends ApiWebScript
|
||||
{
|
||||
// TODO this is not ideal, but the only way to populate the embedded network entities (this would normally be
|
||||
// done automatically by the api framework).
|
||||
Object wrapped = helper.processAdditionsToTheResponse(Api.ALFRESCO_PUBLIC, NetworksEntityResource.NAME, Params.valueOf(personId, null, req), networkMembership);
|
||||
Object wrapped = helper.processAdditionsToTheResponse(res, Api.ALFRESCO_PUBLIC, NetworksEntityResource.NAME, Params.valueOf(personId, null, req), networkMembership);
|
||||
|
||||
objectMapper.writeValue(generator, wrapped);
|
||||
}
|
||||
|
@@ -102,7 +102,7 @@ public class NetworksWebScriptGet extends ApiWebScript
|
||||
{
|
||||
// TODO this is not ideal, but the only way to populate the embedded network entities (this would normally be
|
||||
// done automatically by the api framework).
|
||||
Object wrapped = helper.processAdditionsToTheResponse(Api.ALFRESCO_PUBLIC, NetworksEntityResource.NAME, Params.valueOf(personId, null, req), networkMember);
|
||||
Object wrapped = helper.processAdditionsToTheResponse(res, Api.ALFRESCO_PUBLIC, NetworksEntityResource.NAME, Params.valueOf(personId, null, req), networkMember);
|
||||
entities.add(wrapped);
|
||||
}
|
||||
|
||||
|
@@ -30,6 +30,7 @@ import org.alfresco.rest.framework.core.ResourceWithMetadata;
|
||||
import org.alfresco.rest.framework.resource.content.ContentInfo;
|
||||
import org.alfresco.rest.framework.resource.parameters.Params;
|
||||
import org.springframework.extensions.webscripts.Status;
|
||||
import org.springframework.extensions.webscripts.WebScriptResponse;
|
||||
|
||||
/**
|
||||
* Executes an action in the system
|
||||
@@ -40,22 +41,12 @@ public interface ActionExecutor extends HttpMethodSupport
|
||||
{
|
||||
|
||||
/**
|
||||
* Invokes the resource with the Params calling the callback onSuccess
|
||||
* Invokes the resource with the Params
|
||||
* @param resource ResourceWithMetadata
|
||||
* @param params Params
|
||||
* @param executionCallback ExecutionCallback
|
||||
* @param boolean should we use a readonly transaction.
|
||||
*/
|
||||
@SuppressWarnings("rawtypes")
|
||||
public void execute(ResourceWithMetadata resource, Params params, ExecutionCallback executionCallback);
|
||||
|
||||
/**
|
||||
* The result of an Action execution.
|
||||
*
|
||||
* @author Gethin James
|
||||
*/
|
||||
public interface ExecutionCallback<R>
|
||||
{
|
||||
public void onSuccess(R result, ContentInfo contentInfo, int statusCode);
|
||||
}
|
||||
public Object execute(ResourceWithMetadata resource, Params params, WebScriptResponse res, boolean isReadOnly);
|
||||
|
||||
}
|
||||
|
@@ -30,6 +30,8 @@ import java.util.List;
|
||||
import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException;
|
||||
import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo;
|
||||
import org.alfresco.rest.framework.resource.parameters.Parameters;
|
||||
import org.springframework.extensions.webscripts.Cache;
|
||||
import org.springframework.extensions.webscripts.Status;
|
||||
|
||||
/**
|
||||
* Permissible actions for an Entity Resource
|
||||
@@ -71,6 +73,8 @@ public interface EntityResourceAction
|
||||
public static interface ReadById<E> extends ResourceAction
|
||||
{
|
||||
public E readById (String id, Parameters parameters) throws EntityNotFoundException;
|
||||
// public E readById (String id, Parameters parameters, Status status, Cache cache) throws EntityNotFoundException;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -30,10 +30,13 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.alfresco.repo.tenant.TenantUtil;
|
||||
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
||||
import org.alfresco.repo.web.scripts.content.ContentStreamer;
|
||||
import org.alfresco.rest.framework.Api;
|
||||
import org.alfresco.rest.framework.core.HttpMethodSupport;
|
||||
import org.alfresco.rest.framework.core.ResourceInspector;
|
||||
import org.alfresco.rest.framework.core.ResourceLocator;
|
||||
import org.alfresco.rest.framework.core.ResourceOperation;
|
||||
import org.alfresco.rest.framework.core.ResourceWithMetadata;
|
||||
import org.alfresco.rest.framework.core.exceptions.ApiException;
|
||||
import org.alfresco.rest.framework.jacksonextensions.JacksonHelper;
|
||||
@@ -51,6 +54,7 @@ import org.codehaus.jackson.JsonGenerator;
|
||||
import org.codehaus.jackson.map.JsonMappingException;
|
||||
import org.codehaus.jackson.map.ObjectMapper;
|
||||
import org.springframework.extensions.surf.util.URLEncoder;
|
||||
import org.springframework.extensions.webscripts.Cache;
|
||||
import org.springframework.extensions.webscripts.Description;
|
||||
import org.springframework.extensions.webscripts.Status;
|
||||
import org.springframework.extensions.webscripts.WebScriptException;
|
||||
@@ -95,42 +99,12 @@ public abstract class AbstractResourceWebScript extends ApiWebScript implements
|
||||
final ResourceWithMetadata resource = locator.locateResource(api,templateVars, httpMethod);
|
||||
final Params params = paramsExtractor.extractParams(resource.getMetaData(),req);
|
||||
final ActionExecutor executor = findExecutor(httpMethod, params, resource, req.getContentType());
|
||||
final boolean isReadOnly = HttpMethod.GET==httpMethod;
|
||||
|
||||
//This execution usually takes place in a Retrying Transaction (see subclasses)
|
||||
executor.execute(resource, params, new ExecutionCallback()
|
||||
{
|
||||
@Override
|
||||
public void onSuccess(Object result, ContentInfo contentInfo, int statusCode)
|
||||
{
|
||||
respons.put("toSerialize", result);
|
||||
respons.put("contentInfo", contentInfo);
|
||||
|
||||
if (result instanceof NodeBinaryResource)
|
||||
{
|
||||
String attachFileName = ((NodeBinaryResource)result).getAttachFileName();
|
||||
if ((attachFileName != null) && (attachFileName.length() > 0))
|
||||
{
|
||||
String headerValue = "attachment; filename=\"" + attachFileName + "\"; filename*=UTF-8''" + URLEncoder.encode(attachFileName);
|
||||
res.setHeader(HDR_NAME_CONTENT_DISPOSITION, headerValue);
|
||||
}
|
||||
}
|
||||
|
||||
// The response status must be set before the response is written by Jackson (which will by default close and commit the response).
|
||||
// In a r/w txn, web script buffered responses ensure that it doesn't really matter but for r/o txns this is important.
|
||||
res.setStatus(statusCode);
|
||||
}
|
||||
});
|
||||
final Object toSerialize = executor.execute(resource, params, res, isReadOnly);
|
||||
|
||||
//Outside the transaction.
|
||||
final Object toSerialize = respons.get("toSerialize");
|
||||
ContentInfo contentInfo = (ContentInfo) respons.get("contentInfo");
|
||||
|
||||
// set caching (MNT-13938)
|
||||
res.setCache(ApiWebScript.CACHE_NEVER);
|
||||
|
||||
// set content info
|
||||
setContentInfoOnResponse(res, contentInfo);
|
||||
|
||||
if (toSerialize != null)
|
||||
{
|
||||
if (toSerialize instanceof BinaryResource)
|
||||
@@ -176,6 +150,26 @@ public abstract class AbstractResourceWebScript extends ApiWebScript implements
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object execute(final ResourceWithMetadata resource, final Params params, final WebScriptResponse res, boolean isReadOnly)
|
||||
{
|
||||
final String entityCollectionName = ResourceInspector.findEntityCollectionNameName(resource.getMetaData());
|
||||
return transactionService.getRetryingTransactionHelper().doInTransaction(
|
||||
new RetryingTransactionHelper.RetryingTransactionCallback<Object>()
|
||||
{
|
||||
@Override
|
||||
public Object execute() throws Throwable
|
||||
{
|
||||
final ResourceOperation operation = resource.getMetaData().getOperation(getHttpMethod());
|
||||
Object result = executeAction(resource, params);
|
||||
setResponse(res,operation.getSuccessStatus(),ApiWebScript.CACHE_NEVER, DEFAULT_JSON_CONTENT);
|
||||
return helper.processAdditionsToTheResponse(res, resource.getMetaData().getApi(), entityCollectionName, params, result);
|
||||
}
|
||||
}, isReadOnly, true);
|
||||
}
|
||||
|
||||
protected abstract Object executeAction(ResourceWithMetadata resource, Params params) throws Throwable;
|
||||
|
||||
protected void streamResponse(final WebScriptRequest req, final WebScriptResponse res, BinaryResource resource) throws IOException
|
||||
{
|
||||
if (resource instanceof FileBinaryResource)
|
||||
@@ -186,9 +180,31 @@ public abstract class AbstractResourceWebScript extends ApiWebScript implements
|
||||
else if (resource instanceof NodeBinaryResource)
|
||||
{
|
||||
NodeBinaryResource nodeResource = (NodeBinaryResource) resource;
|
||||
ContentInfo contentInfo = nodeResource.getContentInfo();
|
||||
setContentInfoOnResponse(res,contentInfo);
|
||||
String attachFileName = nodeResource.getAttachFileName();
|
||||
if ((attachFileName != null) && (attachFileName.length() > 0))
|
||||
{
|
||||
String headerValue = "attachment; filename=\"" + attachFileName + "\"; filename*=UTF-8''" + URLEncoder.encode(attachFileName);
|
||||
res.setHeader(HDR_NAME_CONTENT_DISPOSITION, headerValue);
|
||||
}
|
||||
streamer.streamContent(req, res, nodeResource.getNodeRef(), nodeResource.getPropertyQName(), false, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The response status must be set before the response is written by Jackson (which will by default close and commit the response).
|
||||
* In a r/w txn, web script buffered responses ensure that it doesn't really matter but for r/o txns this is important.
|
||||
* @param res
|
||||
* @param status
|
||||
* @param cache
|
||||
* @param contentInfo
|
||||
*/
|
||||
protected void setResponse(final WebScriptResponse res, int status, Cache cache, ContentInfo contentInfo)
|
||||
{
|
||||
res.setStatus(status);
|
||||
res.setCache(cache);
|
||||
setContentInfoOnResponse(res,contentInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -38,7 +38,6 @@ import org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResou
|
||||
import org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceBinaryAction;
|
||||
import org.alfresco.rest.framework.resource.parameters.Params;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.extensions.webscripts.Status;
|
||||
import org.springframework.extensions.webscripts.WebScriptRequest;
|
||||
import org.springframework.extensions.webscripts.WebScriptResponse;
|
||||
import org.springframework.http.HttpMethod;
|
||||
@@ -113,7 +112,7 @@ public class ResourceWebScriptDelete extends AbstractResourceWebScript implement
|
||||
* @param params parameters to use
|
||||
* @return anObject the result of the execute
|
||||
*/
|
||||
private void executeInternal(ResourceWithMetadata resource, Params params)
|
||||
public Object executeAction(ResourceWithMetadata resource, Params params)
|
||||
{
|
||||
switch (resource.getMetaData().getType())
|
||||
{
|
||||
@@ -125,7 +124,7 @@ public class ResourceWebScriptDelete extends AbstractResourceWebScript implement
|
||||
EntityResourceAction.Delete entityDeleter = (EntityResourceAction.Delete) resource.getResource();
|
||||
entityDeleter.delete(params.getEntityId(), params);
|
||||
//Don't pass anything to the callback - its just successful
|
||||
return;
|
||||
return null;
|
||||
case RELATIONSHIP:
|
||||
if (resource.getMetaData().isDeleted(RelationshipResourceAction.Delete.class))
|
||||
{
|
||||
@@ -134,7 +133,7 @@ public class ResourceWebScriptDelete extends AbstractResourceWebScript implement
|
||||
RelationshipResourceAction.Delete relationDeleter = (RelationshipResourceAction.Delete) resource.getResource();
|
||||
relationDeleter.delete(params.getEntityId(), params.getRelationshipId(), params);
|
||||
//Don't pass anything to the callback - its just successful
|
||||
return;
|
||||
return null;
|
||||
case PROPERTY:
|
||||
if (BinaryResourceAction.Delete.class.isAssignableFrom(resource.getResource().getClass()))
|
||||
{
|
||||
@@ -145,7 +144,7 @@ public class ResourceWebScriptDelete extends AbstractResourceWebScript implement
|
||||
BinaryResourceAction.Delete binDeleter = (BinaryResourceAction.Delete) resource.getResource();
|
||||
binDeleter.deleteProperty(params.getEntityId(), params);
|
||||
//Don't pass anything to the callback - its just successful
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
if (RelationshipResourceBinaryAction.Delete.class.isAssignableFrom(resource.getResource().getClass()))
|
||||
{
|
||||
@@ -156,7 +155,7 @@ public class ResourceWebScriptDelete extends AbstractResourceWebScript implement
|
||||
RelationshipResourceBinaryAction.Delete binDeleter = (RelationshipResourceBinaryAction.Delete) resource.getResource();
|
||||
binDeleter.deleteProperty(params.getEntityId(), params.getRelationshipId(), params);
|
||||
//Don't pass anything to the callback - its just successful
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
default:
|
||||
throw new UnsupportedResourceOperationException("DELETE not supported for Actions");
|
||||
@@ -164,7 +163,7 @@ public class ResourceWebScriptDelete extends AbstractResourceWebScript implement
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(final ResourceWithMetadata resource, final Params params, final ExecutionCallback executionCallback)
|
||||
public Void execute(final ResourceWithMetadata resource, final Params params, final WebScriptResponse res, boolean isReadOnly)
|
||||
{
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(
|
||||
new RetryingTransactionCallback<Void>()
|
||||
@@ -173,11 +172,12 @@ public class ResourceWebScriptDelete extends AbstractResourceWebScript implement
|
||||
public Void execute() throws Throwable
|
||||
{
|
||||
final ResourceOperation operation = resource.getMetaData().getOperation(HttpMethod.DELETE);
|
||||
executeInternal(resource, params); //ignore return result
|
||||
executionCallback.onSuccess(null, DEFAULT_JSON_CONTENT, operation.getSuccessStatus());
|
||||
executeAction(resource, params); //ignore return result
|
||||
setResponse(res,operation.getSuccessStatus(),ApiWebScript.CACHE_NEVER, DEFAULT_JSON_CONTENT);
|
||||
return null;
|
||||
}
|
||||
}, false, true);
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -50,6 +50,7 @@ import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.extensions.webscripts.Status;
|
||||
import org.springframework.extensions.webscripts.WebScriptRequest;
|
||||
import org.springframework.extensions.webscripts.WebScriptResponse;
|
||||
import org.springframework.http.HttpMethod;
|
||||
|
||||
/**
|
||||
@@ -122,7 +123,8 @@ public class ResourceWebScriptGet extends AbstractResourceWebScript implements P
|
||||
* @param params parameters to use
|
||||
* @return anObject the result of the execute
|
||||
*/
|
||||
private Object executeInternal(ResourceWithMetadata resource, Params params)
|
||||
@Override
|
||||
public Object executeAction(ResourceWithMetadata resource, Params params) throws Throwable
|
||||
{
|
||||
|
||||
switch (resource.getMetaData().getType())
|
||||
@@ -226,34 +228,5 @@ public class ResourceWebScriptGet extends AbstractResourceWebScript implements P
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(final ResourceWithMetadata resource, final Params params, final ExecutionCallback executionCallback)
|
||||
{
|
||||
final String entityCollectionName = ResourceInspector.findEntityCollectionNameName(resource.getMetaData());
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(
|
||||
new RetryingTransactionCallback<Void>()
|
||||
{
|
||||
@Override
|
||||
public Void execute() throws Throwable
|
||||
{
|
||||
final ResourceOperation operation = resource.getMetaData().getOperation(HttpMethod.GET);
|
||||
Object result = executeInternal(resource, params);
|
||||
if (result instanceof BinaryResource)
|
||||
{
|
||||
ContentInfo ci = null;
|
||||
if (result instanceof NodeBinaryResource)
|
||||
{
|
||||
ci = ((NodeBinaryResource)result).getContentInfo();
|
||||
}
|
||||
executionCallback.onSuccess(result, ci, operation.getSuccessStatus());
|
||||
}
|
||||
else
|
||||
{
|
||||
executionCallback.onSuccess(helper.processAdditionsToTheResponse(resource.getMetaData().getApi(), entityCollectionName, params, result), DEFAULT_JSON_CONTENT, operation.getSuccessStatus());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}, true, true); //Read only
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -57,7 +57,6 @@ import org.alfresco.rest.framework.jacksonextensions.ExecutionResult;
|
||||
import org.alfresco.rest.framework.jacksonextensions.JacksonHelper;
|
||||
import org.alfresco.rest.framework.resource.SerializablePagedCollection;
|
||||
import org.alfresco.rest.framework.resource.actions.ActionExecutor;
|
||||
import org.alfresco.rest.framework.resource.actions.ActionExecutor.ExecutionCallback;
|
||||
import org.alfresco.rest.framework.resource.content.ContentInfo;
|
||||
import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo;
|
||||
import org.alfresco.rest.framework.resource.parameters.InvalidSelectException;
|
||||
@@ -81,6 +80,7 @@ import org.apache.commons.logging.LogFactory;
|
||||
import org.codehaus.jackson.map.JsonMappingException;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.extensions.webscripts.WebScriptRequest;
|
||||
import org.springframework.extensions.webscripts.WebScriptResponse;
|
||||
import org.springframework.http.HttpMethod;
|
||||
|
||||
/**
|
||||
@@ -479,20 +479,20 @@ public class ResourceWebScriptHelper
|
||||
* @param objectToWrap Object
|
||||
* @return Object - Either ExecutionResult or CollectionWithPagingInfo<ExecutionResult>
|
||||
*/
|
||||
public Object processAdditionsToTheResponse(Api api, String entityCollectionName, Params params, Object objectToWrap)
|
||||
public Object processAdditionsToTheResponse(WebScriptResponse res, Api api, String entityCollectionName, Params params, Object objectToWrap)
|
||||
{
|
||||
PropertyCheck.mandatory(this, null, params);
|
||||
if (objectToWrap == null ) return null;
|
||||
if (objectToWrap instanceof SerializablePagedCollection<?>)
|
||||
{
|
||||
SerializablePagedCollection<?> collectionToWrap = (SerializablePagedCollection<?>) objectToWrap;
|
||||
Object sourceEntity = executeIncludedSource(api, params, entityCollectionName);
|
||||
Object sourceEntity = executeIncludedSource(res, api, params, entityCollectionName);
|
||||
Collection<Object> resultCollection = new ArrayList(collectionToWrap.getCollection().size());
|
||||
if (!collectionToWrap.getCollection().isEmpty())
|
||||
{
|
||||
for (Object obj : collectionToWrap.getCollection())
|
||||
{
|
||||
resultCollection.add(processAdditionsToTheResponse(api,entityCollectionName,params,obj));
|
||||
resultCollection.add(processAdditionsToTheResponse(res, api,entityCollectionName,params,obj));
|
||||
}
|
||||
}
|
||||
return CollectionWithPagingInfo.asPaged(collectionToWrap.getPaging(), resultCollection, collectionToWrap.hasMoreItems(), collectionToWrap.getTotalItems(), sourceEntity);
|
||||
@@ -510,7 +510,7 @@ public class ResourceWebScriptHelper
|
||||
Map<String,Pair<String,Method>> embeddded = ResourceInspector.findEmbeddedResources(objectToWrap.getClass());
|
||||
if (embeddded != null && !embeddded.isEmpty())
|
||||
{
|
||||
Map<String, Object> results = executeEmbeddedResources(api, params,objectToWrap, embeddded);
|
||||
Map<String, Object> results = executeEmbeddedResources(res, api, params,objectToWrap, embeddded);
|
||||
execRes.addEmbedded(results);
|
||||
}
|
||||
|
||||
@@ -518,7 +518,7 @@ public class ResourceWebScriptHelper
|
||||
{
|
||||
Map<String, ResourceWithMetadata> relationshipResources = locator.locateRelationResource(api,entityCollectionName, params.getRelationsFilter().keySet(), HttpMethod.GET);
|
||||
String uniqueEntityId = ResourceInspector.findUniqueId(objectToWrap);
|
||||
Map<String,Object> relatedResources = executeRelatedResources(api, params, relationshipResources, uniqueEntityId);
|
||||
Map<String,Object> relatedResources = executeRelatedResources(res, api, params, relationshipResources, uniqueEntityId);
|
||||
execRes.addRelated(relatedResources);
|
||||
}
|
||||
|
||||
@@ -527,14 +527,14 @@ public class ResourceWebScriptHelper
|
||||
}
|
||||
}
|
||||
|
||||
private Object executeIncludedSource(Api api, Params params, String entityCollectionName)
|
||||
private Object executeIncludedSource(WebScriptResponse response, Api api, Params params, String entityCollectionName)
|
||||
{
|
||||
if (params.includeSource())
|
||||
{
|
||||
ResourceWithMetadata res = locator.locateEntityResource(api, entityCollectionName, HttpMethod.GET);
|
||||
if (res != null)
|
||||
{
|
||||
Object result = executeRelatedResource(api, params, params.getEntityId(), null, res);
|
||||
Object result = executeRelatedResource(response, api, params, params.getEntityId(), null, res);
|
||||
if (result!=null && result instanceof ExecutionResult) return ((ExecutionResult) result).getRoot();
|
||||
}
|
||||
}
|
||||
@@ -551,7 +551,7 @@ public class ResourceWebScriptHelper
|
||||
* @param embeddded Map<String, Pair<String, Method>>
|
||||
* @return Map
|
||||
*/
|
||||
private Map<String, Object> executeEmbeddedResources(Api api, Params params, Object objectToWrap, Map<String, Pair<String, Method>> embeddded)
|
||||
private Map<String, Object> executeEmbeddedResources(WebScriptResponse response, Api api, Params params, Object objectToWrap, Map<String, Pair<String, Method>> embeddded)
|
||||
{
|
||||
final Map<String,Object> results = new HashMap<String,Object>(embeddded.size());
|
||||
for (Entry<String, Pair<String,Method>> embeddedEntry : embeddded.entrySet())
|
||||
@@ -562,7 +562,7 @@ public class ResourceWebScriptHelper
|
||||
Object id = ResourceInspectorUtil.invokeMethod(embeddedEntry.getValue().getSecond(), objectToWrap);
|
||||
if (id != null)
|
||||
{
|
||||
Object execEmbeddedResult = executeRelatedResource(api, params, String.valueOf(id), embeddedEntry.getKey(), res);
|
||||
Object execEmbeddedResult = executeRelatedResource(response, api, params, String.valueOf(id), embeddedEntry.getKey(), res);
|
||||
if (execEmbeddedResult != null)
|
||||
{
|
||||
if (execEmbeddedResult instanceof ExecutionResult)
|
||||
@@ -592,14 +592,14 @@ public class ResourceWebScriptHelper
|
||||
* @param uniqueEntityId String
|
||||
* @return Map
|
||||
*/
|
||||
private Map<String,Object> executeRelatedResources(final Api api, Params params,
|
||||
private Map<String,Object> executeRelatedResources(final WebScriptResponse res, final Api api, Params params,
|
||||
Map<String, ResourceWithMetadata> relatedResources,
|
||||
String uniqueEntityId)
|
||||
{
|
||||
final Map<String,Object> results = new HashMap<String,Object>(relatedResources.size());
|
||||
for (final Entry<String, ResourceWithMetadata> relation : relatedResources.entrySet())
|
||||
{
|
||||
Object execResult = executeRelatedResource(api, params, uniqueEntityId, relation.getKey(), relation.getValue());
|
||||
Object execResult = executeRelatedResource(res, api, params, uniqueEntityId, relation.getKey(), relation.getValue());
|
||||
if (execResult != null)
|
||||
{
|
||||
results.put(relation.getKey(), execResult);
|
||||
@@ -619,7 +619,7 @@ public class ResourceWebScriptHelper
|
||||
* @param resource ResourceWithMetadata
|
||||
* @return Object
|
||||
*/
|
||||
private Object executeRelatedResource(final Api api, Params params,
|
||||
private Object executeRelatedResource(final WebScriptResponse res, final Api api, Params params,
|
||||
final String uniqueEntityId, final String resourceKey, final ResourceWithMetadata resource)
|
||||
{
|
||||
try
|
||||
@@ -632,17 +632,8 @@ public class ResourceWebScriptHelper
|
||||
paramFilter = filters.get(resourceKey);
|
||||
}
|
||||
final Params executionParams = Params.valueOf(paramFilter, uniqueEntityId, params.getRequest());
|
||||
executor.execute(resource, executionParams, new ExecutionCallback()
|
||||
{
|
||||
@Override
|
||||
public void onSuccess(Object result, ContentInfo contentInfo, int statusCode)
|
||||
{
|
||||
resultOfExecution[0] = result;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
return resultOfExecution[0];
|
||||
//Read only because this only occurs for GET requests
|
||||
return executor.execute(resource, executionParams,res, true);
|
||||
}
|
||||
catch(NotFoundException e)
|
||||
{
|
||||
|
@@ -216,8 +216,8 @@ public class ResourceWebScriptPost extends AbstractResourceWebScript implements
|
||||
* @param params parameters to use
|
||||
* @return anObject the result of the execute
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
private Object executeInternal(ResourceWithMetadata resource, Params params) throws Throwable
|
||||
@Override
|
||||
public Object executeAction(ResourceWithMetadata resource, Params params) throws Throwable
|
||||
{
|
||||
final Object resObj = resource.getResource();
|
||||
|
||||
@@ -294,24 +294,4 @@ public class ResourceWebScriptPost extends AbstractResourceWebScript implements
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(final ResourceWithMetadata resource, final Params params, final ExecutionCallback executionCallback)
|
||||
{
|
||||
final String entityCollectionName = ResourceInspector.findEntityCollectionNameName(resource.getMetaData());
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(
|
||||
new RetryingTransactionCallback<Void>()
|
||||
{
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public Void execute() throws Throwable
|
||||
{
|
||||
final ResourceOperation operation = resource.getMetaData().getOperation(HttpMethod.POST);
|
||||
Object result = executeInternal(resource, params);
|
||||
executionCallback.onSuccess(helper.processAdditionsToTheResponse(resource.getMetaData().getApi(), entityCollectionName, params, result),
|
||||
DEFAULT_JSON_CONTENT, operation.getSuccessStatus());
|
||||
return null;
|
||||
}
|
||||
}, false, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -52,6 +52,7 @@ import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.extensions.webscripts.Status;
|
||||
import org.springframework.extensions.webscripts.WebScriptRequest;
|
||||
import org.springframework.extensions.webscripts.WebScriptResponse;
|
||||
import org.springframework.extensions.webscripts.WrappingWebScriptRequest;
|
||||
import org.springframework.extensions.webscripts.servlet.WebScriptServletRequest;
|
||||
import org.springframework.http.HttpMethod;
|
||||
@@ -184,8 +185,8 @@ public class ResourceWebScriptPut extends AbstractResourceWebScript implements P
|
||||
* @param params parameters to use
|
||||
* @return anObject the result of the execute
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
private Object executeInternal(ResourceWithMetadata resource, Params params)
|
||||
@Override
|
||||
public Object executeAction(ResourceWithMetadata resource, Params params) throws Throwable
|
||||
{
|
||||
switch (resource.getMetaData().getType())
|
||||
{
|
||||
@@ -229,23 +230,4 @@ public class ResourceWebScriptPut extends AbstractResourceWebScript implements P
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void execute(final ResourceWithMetadata resource, final Params params, final ExecutionCallback executionCallback)
|
||||
{
|
||||
final String entityCollectionName = ResourceInspector.findEntityCollectionNameName(resource.getMetaData());
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(
|
||||
new RetryingTransactionCallback<Void>()
|
||||
{
|
||||
@Override
|
||||
public Void execute() throws Throwable
|
||||
{
|
||||
final ResourceOperation operation = resource.getMetaData().getOperation(HttpMethod.PUT);
|
||||
Object result = executeInternal(resource, params);
|
||||
executionCallback.onSuccess(helper.processAdditionsToTheResponse(resource.getMetaData().getApi(), entityCollectionName, params, result),
|
||||
DEFAULT_JSON_CONTENT, operation.getSuccessStatus());
|
||||
return null;
|
||||
}
|
||||
}, false, true);
|
||||
}
|
||||
}
|
||||
|
@@ -73,8 +73,7 @@ public abstract class AbstractContextTest
|
||||
public Object answer(InvocationOnMock invocation) throws Throwable {
|
||||
Object[] args = invocation.getArguments();
|
||||
RetryingTransactionHelper.RetryingTransactionCallback cb = (RetryingTransactionHelper.RetryingTransactionCallback) args[0];
|
||||
cb.execute();
|
||||
return null;
|
||||
return cb.execute();
|
||||
}
|
||||
});
|
||||
executor.setTransactionService(transerv);
|
||||
|
@@ -21,6 +21,7 @@ import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.extensions.webscripts.WebScriptRequest;
|
||||
import org.springframework.extensions.webscripts.WebScriptResponse;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
@@ -41,37 +42,19 @@ public class ExecutionTests extends AbstractContextTest
|
||||
{
|
||||
ResourceWithMetadata entityResource = locator.locateEntityResource(api,"sheep", HttpMethod.GET);
|
||||
AbstractResourceWebScript executor = (AbstractResourceWebScript) applicationContext.getBean("executorOfGets");
|
||||
executor.execute(entityResource, Params.valueOf((String)null, null, mock(WebScriptRequest.class)), new ActionExecutor.ExecutionCallback<CollectionWithPagingInfo>(){
|
||||
@Override
|
||||
public void onSuccess(CollectionWithPagingInfo result, ContentInfo contentInfo, int statusCode)
|
||||
{
|
||||
Object result = executor.execute(entityResource, Params.valueOf((String)null, null, mock(WebScriptRequest.class)), mock(WebScriptResponse.class), true);
|
||||
assertNotNull(result);
|
||||
}});
|
||||
|
||||
ResourceWithMetadata baa = locator.locateRelationResource(api,"sheep", "baaahh", HttpMethod.GET);
|
||||
executor = (AbstractResourceWebScript) applicationContext.getBean("executorOfGets");
|
||||
executor.execute(baa, Params.valueOf("4", null, mock(WebScriptRequest.class)), new ActionExecutor.ExecutionCallback<CollectionWithPagingInfo>(){
|
||||
@Override
|
||||
public void onSuccess(CollectionWithPagingInfo result, ContentInfo contentInfo, int statusCode )
|
||||
{
|
||||
result = executor.execute(baa, Params.valueOf("4", null, mock(WebScriptRequest.class)), mock(WebScriptResponse.class), true);
|
||||
assertNotNull(result);
|
||||
}});
|
||||
|
||||
executor.execute(baa, Params.valueOf("4", "45", mock(WebScriptRequest.class)), new ActionExecutor.ExecutionCallback<ExecutionResult>(){
|
||||
@Override
|
||||
public void onSuccess(ExecutionResult result, ContentInfo contentInfo, int statusCode )
|
||||
{
|
||||
executor.execute(baa, Params.valueOf("4", "45", mock(WebScriptRequest.class)), mock(WebScriptResponse.class), true);
|
||||
assertNotNull(result);
|
||||
}});
|
||||
|
||||
ResourceWithMetadata baaPhoto = locator.locateRelationResource(api,"sheep/{entityId}/baaahh", "photo", HttpMethod.GET);
|
||||
executor.execute(baaPhoto, Params.valueOf("4", "45", mock(WebScriptRequest.class)), new ActionExecutor.ExecutionCallback<CollectionWithPagingInfo>(){
|
||||
@Override
|
||||
public void onSuccess(CollectionWithPagingInfo result, ContentInfo contentInfo, int statusCode )
|
||||
{
|
||||
assertNull(result);
|
||||
}});
|
||||
|
||||
executor.execute(baaPhoto, Params.valueOf("4", "45", mock(WebScriptRequest.class)), mock(WebScriptResponse.class), true);
|
||||
assertNotNull(result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -81,31 +64,19 @@ public class ExecutionTests extends AbstractContextTest
|
||||
|
||||
ResourceWithMetadata resource = locator.locateRelationResource(api, "sheep", "blacksheep", HttpMethod.POST);
|
||||
final Sheep aSheep = new Sheep("xyz");
|
||||
executor.execute(resource, Params.valueOf("654", null, NULL_PARAMS, Arrays.asList(aSheep), mock(WebScriptRequest.class)), new ActionExecutor.ExecutionCallback<ExecutionResult>(){
|
||||
@Override
|
||||
public void onSuccess(ExecutionResult result, ContentInfo contentInfo, int statusCode )
|
||||
{
|
||||
|
||||
Object result = executor.execute(resource, Params.valueOf("654", null, NULL_PARAMS, Arrays.asList(aSheep), mock(WebScriptRequest.class)), mock(WebScriptResponse.class), false);
|
||||
assertNotNull(result);
|
||||
assertEquals(aSheep,result.getRoot());
|
||||
}});
|
||||
assertEquals(aSheep,((ExecutionResult)result).getRoot());
|
||||
|
||||
ResourceWithMetadata grassResource = locator.locateEntityResource(api,"grass", HttpMethod.POST);
|
||||
final Grass grr = new Grass("grr");
|
||||
executor.execute(grassResource, Params.valueOf("654", null, NULL_PARAMS, Arrays.asList(grr), mock(WebScriptRequest.class)), new ActionExecutor.ExecutionCallback<ExecutionResult>(){
|
||||
@Override
|
||||
public void onSuccess(ExecutionResult result, ContentInfo contentInfo, int statusCode )
|
||||
{
|
||||
assertEquals(grr,result.getRoot());
|
||||
}});
|
||||
result = executor.execute(grassResource, Params.valueOf("654", null, NULL_PARAMS, Arrays.asList(grr), mock(WebScriptRequest.class)), mock(WebScriptResponse.class), false);
|
||||
assertEquals(grr,((ExecutionResult)result).getRoot());
|
||||
|
||||
ResourceWithMetadata entityResource = locator.locateRelationResource(api,"grass", "grow", HttpMethod.POST);
|
||||
executor.execute(entityResource, Params.valueOf("654", null, NULL_PARAMS, grr, mock(WebScriptRequest.class)), new ActionExecutor.ExecutionCallback<String>(){
|
||||
@Override
|
||||
public void onSuccess(String result, ContentInfo contentInfo, int statusCode )
|
||||
{
|
||||
result = executor.execute(entityResource, Params.valueOf("654", null, NULL_PARAMS, grr, mock(WebScriptRequest.class)), mock(WebScriptResponse.class), false);
|
||||
assertEquals("Growing well",result);
|
||||
}});
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -113,27 +84,16 @@ public class ExecutionTests extends AbstractContextTest
|
||||
{
|
||||
ResourceWithMetadata grassResource = locator.locateEntityResource(api,"grass", HttpMethod.DELETE);
|
||||
AbstractResourceWebScript executor = (AbstractResourceWebScript) applicationContext.getBean("executorOfDelete");
|
||||
executor.execute(grassResource, Params.valueOf("4", null, mock(WebScriptRequest.class)), new ActionExecutor.ExecutionCallback<Object>(){
|
||||
@Override
|
||||
public void onSuccess(Object result, ContentInfo contentInfo, int statusCode )
|
||||
{
|
||||
Object result = executor.execute(grassResource, Params.valueOf("4", null, mock(WebScriptRequest.class)), mock(WebScriptResponse.class), false);
|
||||
assertNull(result);
|
||||
}});
|
||||
|
||||
ResourceWithMetadata resource = locator.locateRelationResource(api, "sheep", "blacksheep", HttpMethod.DELETE);
|
||||
executor.execute(resource, Params.valueOf("4", null, mock(WebScriptRequest.class)), new ActionExecutor.ExecutionCallback<Object>(){
|
||||
@Override
|
||||
public void onSuccess(Object result, ContentInfo contentInfo, int statusCode )
|
||||
{
|
||||
result = executor.execute(resource, Params.valueOf("4", null, mock(WebScriptRequest.class)), mock(WebScriptResponse.class), false);
|
||||
assertNull(result);
|
||||
}});
|
||||
|
||||
ResourceWithMetadata goatDelete = locator.locateRelationResource(api3,"goat/{entityId}/herd", "content", HttpMethod.DELETE);
|
||||
executor.execute(goatDelete, Params.valueOf("4", "56", mock(WebScriptRequest.class)), new ActionExecutor.ExecutionCallback<Object>(){
|
||||
@Override
|
||||
public void onSuccess(Object result, ContentInfo contentInfo, int statusCode )
|
||||
{
|
||||
result = executor.execute(goatDelete, Params.valueOf("4", "56", mock(WebScriptRequest.class)), mock(WebScriptResponse.class), false);
|
||||
assertNull(result);
|
||||
}});
|
||||
}
|
||||
|
||||
|
||||
@@ -143,28 +103,18 @@ public class ExecutionTests extends AbstractContextTest
|
||||
ResourceWithMetadata entityResource = locator.locateEntityResource(api,"sheep", HttpMethod.PUT);
|
||||
AbstractResourceWebScript executor = (AbstractResourceWebScript) applicationContext.getBean("executorOfPut");
|
||||
final Sheep aSheep = new Sheep("xyz");
|
||||
executor.execute(entityResource, Params.valueOf("654", null, NULL_PARAMS, aSheep, mock(WebScriptRequest.class)), new ActionExecutor.ExecutionCallback<ExecutionResult>(){
|
||||
@Override
|
||||
public void onSuccess(ExecutionResult result, ContentInfo contentInfo, int statusCode )
|
||||
{
|
||||
|
||||
Object result = executor.execute(entityResource, Params.valueOf("654", null, NULL_PARAMS, aSheep, mock(WebScriptRequest.class)), mock(WebScriptResponse.class), false);
|
||||
assertNotNull(result);
|
||||
assertEquals(aSheep,result.getRoot());
|
||||
}});
|
||||
assertEquals(aSheep,((ExecutionResult)result).getRoot());
|
||||
|
||||
ResourceWithMetadata resource = locator.locateRelationResource(api, "sheep", "blacksheep", HttpMethod.PUT);
|
||||
executor.execute(resource, Params.valueOf("654", null, NULL_PARAMS, aSheep, mock(WebScriptRequest.class)), new ActionExecutor.ExecutionCallback<ExecutionResult>(){
|
||||
@Override
|
||||
public void onSuccess(ExecutionResult result, ContentInfo contentInfo, int statusCode )
|
||||
{
|
||||
result = executor.execute(resource, Params.valueOf("654", null, NULL_PARAMS, aSheep, mock(WebScriptRequest.class)), mock(WebScriptResponse.class), false);
|
||||
assertNotNull(result);
|
||||
assertEquals(aSheep,result.getRoot());
|
||||
}});
|
||||
assertEquals(aSheep,((ExecutionResult)result).getRoot());
|
||||
|
||||
ResourceWithMetadata baaPhoto = locator.locateRelationResource(api,"sheep/{entityId}/baaahh", "photo", HttpMethod.PUT);
|
||||
executor.execute(baaPhoto, Params.valueOf("4", "56", mock(WebScriptRequest.class)), new ActionExecutor.ExecutionCallback<Object>(){
|
||||
@Override
|
||||
public void onSuccess(Object result, ContentInfo contentInfo, int statusCode )
|
||||
{
|
||||
result = executor.execute(baaPhoto, Params.valueOf("4", "56", mock(WebScriptRequest.class)), mock(WebScriptResponse.class), false);
|
||||
assertNull(result);
|
||||
}});
|
||||
}
|
||||
}
|
||||
|
@@ -53,7 +53,6 @@ import org.alfresco.rest.framework.jacksonextensions.JacksonHelper;
|
||||
import org.alfresco.rest.framework.jacksonextensions.JacksonHelper.Writer;
|
||||
import org.alfresco.rest.framework.resource.EntityResource;
|
||||
import org.alfresco.rest.framework.resource.RelationshipResource;
|
||||
import org.alfresco.rest.framework.resource.actions.ActionExecutor.ExecutionCallback;
|
||||
import org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction;
|
||||
import org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction.Read;
|
||||
import org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction.ReadById;
|
||||
@@ -94,6 +93,8 @@ import org.mockito.stubbing.Answer;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.extensions.webscripts.Format;
|
||||
import org.springframework.extensions.webscripts.WebScriptRequest;
|
||||
import org.springframework.extensions.webscripts.WebScriptResponse;
|
||||
import org.springframework.extensions.webscripts.servlet.FormData;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.mock.web.MockHttpServletRequest;
|
||||
@@ -123,12 +124,12 @@ public class SerializeTests extends AbstractContextTest
|
||||
assertNotNull(entityResource);
|
||||
EntityResourceAction.ReadById<?> getter = (ReadById<?>) entityResource.getResource();
|
||||
|
||||
String out = writeResponse(helper.processAdditionsToTheResponse(api,null, NOT_USED, getter.readById("1234A3", NOT_USED)));
|
||||
String out = writeResponse(helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null, NOT_USED, getter.readById("1234A3", NOT_USED)));
|
||||
assertTrue("There must be json output", StringUtils.startsWith(out, "{\"entry\":"));
|
||||
|
||||
EntityResourceAction.Read<?> getAll = (Read<?>) entityResource.getResource();
|
||||
CollectionWithPagingInfo<?> resources = getAll.readAll(null);
|
||||
out = writeResponse(helper.processAdditionsToTheResponse(api,null, Params.valueOf("notUsed", null, null), resources));
|
||||
out = writeResponse(helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null, Params.valueOf("notUsed", null, null), resources));
|
||||
assertTrue("There must be json output as List", StringUtils.startsWith(out, "{\"list\":"));
|
||||
}
|
||||
|
||||
@@ -152,7 +153,7 @@ public class SerializeTests extends AbstractContextTest
|
||||
mockRequest.setContent(reqBody.getBody());
|
||||
mockRequest.setContentType(reqBody.getContentType());
|
||||
|
||||
String out = writeResponse(helper.processAdditionsToTheResponse(api,null, NOT_USED, resource.create(new FormData(mockRequest), NOT_USED)));
|
||||
String out = writeResponse(helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null, NOT_USED, resource.create(new FormData(mockRequest), NOT_USED)));
|
||||
assertTrue("There must be json output", StringUtils.startsWith(out, "{\"entry\":"));
|
||||
}
|
||||
|
||||
@@ -163,7 +164,7 @@ public class SerializeTests extends AbstractContextTest
|
||||
assertNotNull(relationResource);
|
||||
RelationshipResourceAction.Read<?> getter = (RelationshipResourceAction.Read<?>) relationResource.getResource();
|
||||
CollectionWithPagingInfo<?> resources = getter.readAll("123",Params.valueOf("", null, null));
|
||||
String out = writeResponse(helper.processAdditionsToTheResponse(api,null, Params.valueOf("notUsed", null, null), resources));
|
||||
String out = writeResponse(helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null, Params.valueOf("notUsed", null, null), resources));
|
||||
assertTrue("There must be json output as List", StringUtils.startsWith(out, "{\"list\":"));
|
||||
}
|
||||
|
||||
@@ -177,13 +178,13 @@ public class SerializeTests extends AbstractContextTest
|
||||
assertNotNull(resources);
|
||||
assertTrue(resources.getTotalItems().intValue() == 3);
|
||||
assertFalse(resources.hasMoreItems());
|
||||
String out = writeResponse(helper.processAdditionsToTheResponse(api,null, Params.valueOf("notUsed", null, null), resources));
|
||||
String out = writeResponse(helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null, Params.valueOf("notUsed", null, null), resources));
|
||||
assertTrue("There must be json output as List with pagination", StringUtils.startsWith(out, "{\"list\":{\"pagination\":{\"count\":3,"));
|
||||
|
||||
resources = getter.readAll("123",ParamsExtender.valueOf(Paging.valueOf(0, 1),"123"));
|
||||
assertTrue(resources.getCollection().size() == 1);
|
||||
assertTrue(resources.hasMoreItems());
|
||||
out = writeResponse(helper.processAdditionsToTheResponse(api,null, Params.valueOf("notUsed", null, null), resources));
|
||||
out = writeResponse(helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null, Params.valueOf("notUsed", null, null), resources));
|
||||
assertTrue("There must be json output as List with pagination", StringUtils.startsWith(out, "{\"list\":{\"pagination\":{\"count\":1,"));
|
||||
|
||||
}
|
||||
@@ -195,7 +196,7 @@ public class SerializeTests extends AbstractContextTest
|
||||
Farmer aFarmer = new Farmer("180");
|
||||
aFarmer.setGoatId("1111");
|
||||
aFarmer.setSheepId("2222");
|
||||
ExecutionResult res = (ExecutionResult) helper.processAdditionsToTheResponse(api,null,Params.valueOf("notUsed", null, null),aFarmer);
|
||||
ExecutionResult res = (ExecutionResult) helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null,Params.valueOf("notUsed", null, null),aFarmer);
|
||||
assertNotNull(res);
|
||||
assertTrue(Farmer.class.equals(res.getRoot().getClass()));
|
||||
Map<String,Object> embeds = res.getEmbedded();
|
||||
@@ -220,14 +221,14 @@ public class SerializeTests extends AbstractContextTest
|
||||
{
|
||||
assertNotNull(helper);
|
||||
Map<String, BeanPropertiesFilter> rFilter = ResourceWebScriptHelper.getRelationFilter("blacksheep,baaahh");
|
||||
ExecutionResult res = (ExecutionResult) helper.processAdditionsToTheResponse(api,"sheep",ParamsExtender.valueOf(rFilter,"1"),new Farmer("180"));
|
||||
ExecutionResult res = (ExecutionResult) helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,"sheep",ParamsExtender.valueOf(rFilter,"1"),new Farmer("180"));
|
||||
assertNotNull(res);
|
||||
String out = writeResponse(res);
|
||||
assertTrue(Farmer.class.equals(res.getRoot().getClass()));
|
||||
assertTrue("There must be json output", StringUtils.isNotBlank(out));
|
||||
Paging pageRequest = Paging.valueOf(1, 2);
|
||||
|
||||
Object resultCollection = helper.processAdditionsToTheResponse(api,"sheep",ParamsExtender.valueOf(rFilter,"1"),CollectionWithPagingInfo.asPaged(pageRequest,Arrays.asList(new Farmer("180"), new Farmer("190"), new Farmer("280"))));
|
||||
Object resultCollection = helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,"sheep",ParamsExtender.valueOf(rFilter,"1"),CollectionWithPagingInfo.asPaged(pageRequest,Arrays.asList(new Farmer("180"), new Farmer("190"), new Farmer("280"))));
|
||||
assertNotNull(resultCollection);
|
||||
out = writeResponse(resultCollection);
|
||||
assertTrue("There must be json output", StringUtils.isNotBlank(out));
|
||||
@@ -240,12 +241,12 @@ public class SerializeTests extends AbstractContextTest
|
||||
ExecutionResult exec2 = new ExecutionResult(new Farmer("456"), null);
|
||||
CollectionWithPagingInfo<ExecutionResult> coll = CollectionWithPagingInfo.asPaged(null, Arrays.asList(exec1, exec2));
|
||||
|
||||
Object resultCollection = helper.processAdditionsToTheResponse(api,"sheep",ParamsExtender.valueOf(true,"1"),coll);
|
||||
Object resultCollection = helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,"sheep",ParamsExtender.valueOf(true,"1"),coll);
|
||||
assertNotNull(resultCollection);
|
||||
String out = writeResponse(resultCollection);
|
||||
assertTrue("There must 'source' json output", StringUtils.contains(out, "\"source\":{\"name\":\"Dolly\",\"age\":3,\"sheepGuid\":\"1\"}"));
|
||||
|
||||
resultCollection = helper.processAdditionsToTheResponse(api,"sheep",ParamsExtender.valueOf(false,"1"),coll);
|
||||
resultCollection = helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,"sheep",ParamsExtender.valueOf(false,"1"),coll);
|
||||
assertNotNull(resultCollection);
|
||||
out = writeResponse(resultCollection);
|
||||
assertFalse("There must not 'source' json output", StringUtils.contains(out, "\"source\":{\"name\":\"Dolly\",\"age\":3,\"sheepGuid\":\"1\"}"));
|
||||
@@ -271,7 +272,7 @@ public class SerializeTests extends AbstractContextTest
|
||||
public void testSerializeExecutionResult() throws IOException
|
||||
{
|
||||
assertNotNull(helper);
|
||||
Object res = helper.processAdditionsToTheResponse(api,null,Params.valueOf("notUsed", null, null),new Farmer("180"));
|
||||
Object res = helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null,Params.valueOf("notUsed", null, null),new Farmer("180"));
|
||||
String out = writeResponse(res);
|
||||
assertTrue("There must be json output", StringUtils.isNotBlank(out));
|
||||
|
||||
@@ -283,16 +284,16 @@ public class SerializeTests extends AbstractContextTest
|
||||
{
|
||||
assertNotNull(helper);
|
||||
CollectionWithPagingInfo paged = CollectionWithPagingInfo.asPaged(null,null);
|
||||
String out = writeResponse(helper.processAdditionsToTheResponse(api,null, Params.valueOf("notUsed", null, null), paged));
|
||||
String out = writeResponse(helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null, Params.valueOf("notUsed", null, null), paged));
|
||||
assertTrue("There must be json output as List with pagination", StringUtils.startsWith(out, "{\"list\":{\"pagination\":{\"count\":0,"));
|
||||
Paging pageRequest = Paging.valueOf(1, 2);
|
||||
|
||||
paged = CollectionWithPagingInfo.asPaged(pageRequest,Arrays.asList(new Goat(), new Sheep("ABCD"), new Sheep("XYZ")));
|
||||
out = writeResponse(helper.processAdditionsToTheResponse(api,null, Params.valueOf("notUsed", null, null), paged));
|
||||
out = writeResponse(helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null, Params.valueOf("notUsed", null, null), paged));
|
||||
assertTrue("There must be json output as List with pagination", StringUtils.startsWith(out, "{\"list\":{\"pagination\":{\"count\":3,"));
|
||||
|
||||
paged = CollectionWithPagingInfo.asPaged(pageRequest,Arrays.asList(new Goat(), new Sheep("ABCD"), new Sheep("XYZ")),true,5000);
|
||||
out = writeResponse(helper.processAdditionsToTheResponse(api,null, Params.valueOf("notUsed", null, null), paged));
|
||||
out = writeResponse(helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null, Params.valueOf("notUsed", null, null), paged));
|
||||
assertTrue("There must be json output as List with pagination", StringUtils.startsWith(out, "{\"list\":{\"pagination\":{\"count\":3,\"hasMoreItems\":true,\"totalItems\":5000"));
|
||||
|
||||
}
|
||||
@@ -305,7 +306,7 @@ public class SerializeTests extends AbstractContextTest
|
||||
aMap.put("goatie", new Goat());
|
||||
aMap.put("sheepie", new Sheep("ABCD"));
|
||||
aMap.put("sheepy", new Sheep("XYZ"));
|
||||
Object res = helper.processAdditionsToTheResponse(api,null,Params.valueOf("notUsed", null, null),aMap);
|
||||
Object res = helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null,Params.valueOf("notUsed", null, null),aMap);
|
||||
String out = writeResponse(res);
|
||||
assertTrue("There must be json output", StringUtils.isNotBlank(out));
|
||||
|
||||
@@ -319,7 +320,7 @@ public class SerializeTests extends AbstractContextTest
|
||||
aSet.add(new Goat());
|
||||
aSet.add(new Sheep("ABCD"));
|
||||
aSet.add(new Sheep("XYZ"));
|
||||
Object res = helper.processAdditionsToTheResponse(api,null,Params.valueOf("notUsed", null, null),aSet);
|
||||
Object res = helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null,Params.valueOf("notUsed", null, null),aSet);
|
||||
String out = writeResponse(res);
|
||||
assertTrue("There must be json output", StringUtils.isNotBlank(out));
|
||||
|
||||
@@ -330,11 +331,11 @@ public class SerializeTests extends AbstractContextTest
|
||||
{
|
||||
assertNotNull(helper);
|
||||
CollectionWithPagingInfo<String> pString = CollectionWithPagingInfo.asPaged(null,Arrays.asList("goat", "sheep", "horse"));
|
||||
Object res = helper.processAdditionsToTheResponse(api,null,Params.valueOf("notUsed", null, null),pString);
|
||||
Object res = helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null,Params.valueOf("notUsed", null, null),pString);
|
||||
String out = writeResponse(res);
|
||||
assertTrue("There must be json output", StringUtils.isNotBlank(out));
|
||||
CollectionWithPagingInfo<Integer> pInts = CollectionWithPagingInfo.asPaged(null,Arrays.asList(234, 45, 890, 3456));
|
||||
res = helper.processAdditionsToTheResponse(api,null,Params.valueOf("notUsed", null, null),pInts);
|
||||
res = helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null,Params.valueOf("notUsed", null, null),pInts);
|
||||
out = writeResponse(res);
|
||||
assertTrue("There must be json output", StringUtils.isNotBlank(out));
|
||||
}
|
||||
@@ -343,7 +344,7 @@ public class SerializeTests extends AbstractContextTest
|
||||
public void testSerializeList() throws IOException
|
||||
{
|
||||
assertNotNull(helper);
|
||||
Object res = helper.processAdditionsToTheResponse(api,null,Params.valueOf("notUsed", null, null),Arrays.asList(new Goat(), new Sheep("ABCD"), new Sheep("XYZ")));
|
||||
Object res = helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null,Params.valueOf("notUsed", null, null),Arrays.asList(new Goat(), new Sheep("ABCD"), new Sheep("XYZ")));
|
||||
String out = writeResponse(res);
|
||||
assertTrue("There must be json output", StringUtils.isNotBlank(out));
|
||||
|
||||
@@ -364,7 +365,7 @@ public class SerializeTests extends AbstractContextTest
|
||||
public void testSerializeUniqueId() throws IOException
|
||||
{
|
||||
assertNotNull(helper);
|
||||
Object res = helper.processAdditionsToTheResponse(api,null,Params.valueOf("notUsed", null, null), new Sheep("ABCD"));
|
||||
Object res = helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null,Params.valueOf("notUsed", null, null), new Sheep("ABCD"));
|
||||
String out = writeResponse(res);
|
||||
assertTrue("Id field must be called sheepGuid.", StringUtils.contains(out, "\"sheepGuid\":\"ABCD\""));
|
||||
}
|
||||
@@ -375,7 +376,7 @@ public class SerializeTests extends AbstractContextTest
|
||||
ResourceWithMetadata relationResource = locator.locateRelationResource(api,"sheep", "baaahh", HttpMethod.GET);
|
||||
assertNotNull(relationResource);
|
||||
RelationshipResourceAction.Read<?> getter = (RelationshipResourceAction.Read<?>) relationResource.getResource();
|
||||
String out = writeResponse(helper.processAdditionsToTheResponse(api,null, Params.valueOf("notUsed", null, null), getter.readAll("1234A3", Params.valueOf("notUsed", null, null))));
|
||||
String out = writeResponse(helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), api,null, Params.valueOf("notUsed", null, null), getter.readAll("1234A3", Params.valueOf("notUsed", null, null))));
|
||||
assertTrue("There must be json output", StringUtils.isNotBlank(out));
|
||||
}
|
||||
|
||||
@@ -408,13 +409,8 @@ public class SerializeTests extends AbstractContextTest
|
||||
Api api3 = Api.valueOf("alfrescomock", "private", "3");
|
||||
ResourceWithMetadata propResource = locator.locateRelationResource(api3,"flock", "photo", HttpMethod.GET);
|
||||
AbstractResourceWebScript executor = (AbstractResourceWebScript) applicationContext.getBean("executorOfGets");
|
||||
executor.execute(propResource, Params.valueOf("234", null, null), new ExecutionCallback<BinaryResource>(){
|
||||
@Override
|
||||
public void onSuccess(BinaryResource result, ContentInfo contentInfo, int statusCode)
|
||||
{
|
||||
Object result = executor.execute(propResource, Params.valueOf("234", null, null), mock(WebScriptResponse.class), true);
|
||||
assertNotNull(result);
|
||||
}});
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -486,7 +482,7 @@ public class SerializeTests extends AbstractContextTest
|
||||
|
||||
Api v3 = Api.valueOf(api.getName(), api.getScope().toString(), "3");
|
||||
Map<String, BeanPropertiesFilter> relFiler = ResourceWebScriptHelper.getRelationFilter("herd");
|
||||
res = helper.processAdditionsToTheResponse(v3,"goat",ParamsExtender.valueOf(relFiler, "notUsed"),new SlimGoat());
|
||||
res = helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), v3,"goat",ParamsExtender.valueOf(relFiler, "notUsed"),new SlimGoat());
|
||||
out = writeResponse(res);
|
||||
jsonRsp = new JSONObject(new JSONTokener(out));
|
||||
entry = jsonRsp.getJSONObject("relations")
|
||||
@@ -498,7 +494,7 @@ public class SerializeTests extends AbstractContextTest
|
||||
assertTrue("The quantity should be 56", entry.getInt("quantity") == 56);
|
||||
|
||||
relFiler = ResourceWebScriptHelper.getRelationFilter("herd(name)");
|
||||
res = helper.processAdditionsToTheResponse(v3,"goat",ParamsExtender.valueOf(relFiler, "notUsed"),new SlimGoat());
|
||||
res = helper.processAdditionsToTheResponse(mock(WebScriptResponse.class), v3,"goat",ParamsExtender.valueOf(relFiler, "notUsed"),new SlimGoat());
|
||||
out = writeResponse(res);
|
||||
assertTrue("Must return only the herd name.", StringUtils.contains(out, "{\"name\":\"bigun\"}"));
|
||||
}
|
||||
|
Reference in New Issue
Block a user