Search in sources :

Example 1 with Api

use of org.alfresco.rest.framework.Api in project alfresco-remote-api by Alfresco.

the class ResourceInspector method inspectRelationship.

/**
 * Inspects the relationship resource and returns meta data about it
 *
 * @param annot RelationshipResource
 * @param resource Class<?>
 */
private static List<ResourceMetadata> inspectRelationship(RelationshipResource annot, Class<?> resource) {
    Map<String, Object> annotAttribs = AnnotationUtils.getAnnotationAttributes(annot);
    String urlPath = String.valueOf(annotAttribs.get("name"));
    String entityPath;
    Class<?> entityResource = (Class) annotAttribs.get("entityResource");
    RelationshipResource relAnnot = AnnotationUtils.findAnnotation(entityResource, RelationshipResource.class);
    if (relAnnot != null) {
        Map<String, Object> relAnnotAttribs = AnnotationUtils.getAnnotationAttributes(relAnnot);
        String relUrlPath = String.valueOf(relAnnotAttribs.get("name"));
        urlPath = ResourceDictionary.resourceKey(relUrlPath, urlPath);
        entityPath = findEntityNameByAnnotationAttributes(relAnnotAttribs);
    } else {
        entityPath = findEntityNameByAnnotationAttributes(annotAttribs);
    }
    String relationshipKey = ResourceDictionary.resourceKey(entityPath, urlPath);
    Api api = inspectApi(resource);
    List<ResourceMetadata> metainfo = new ArrayList<ResourceMetadata>();
    MetaHelper helper = new MetaHelper(resource);
    findOperation(RelationshipResourceAction.Create.class, HttpMethod.POST, helper);
    findOperation(RelationshipResourceAction.Read.class, HttpMethod.GET, helper);
    findOperation(RelationshipResourceAction.ReadById.class, HttpMethod.GET, helper);
    findOperation(RelationshipResourceAction.Update.class, HttpMethod.PUT, helper);
    findOperation(RelationshipResourceAction.Delete.class, HttpMethod.DELETE, helper);
    findOperation(RelationshipResourceAction.DeleteSet.class, HttpMethod.DELETE, helper);
    findOperation(RelationshipResourceAction.CreateWithResponse.class, HttpMethod.POST, helper);
    findOperation(RelationshipResourceAction.ReadWithResponse.class, HttpMethod.GET, helper);
    findOperation(RelationshipResourceAction.ReadByIdWithResponse.class, HttpMethod.GET, helper);
    findOperation(RelationshipResourceAction.UpdateWithResponse.class, HttpMethod.PUT, helper);
    findOperation(RelationshipResourceAction.DeleteWithResponse.class, HttpMethod.DELETE, helper);
    findOperation(RelationshipResourceAction.DeleteSetWithResponse.class, HttpMethod.DELETE, helper);
    findOperation(MultiPartRelationshipResourceAction.Create.class, HttpMethod.POST, helper);
    boolean noAuth = resource.isAnnotationPresent(WebApiNoAuth.class);
    if (noAuth) {
        throw new IllegalArgumentException("@WebApiNoAuth should not be on all (relationship resource class) - only on methods: " + urlPath);
    }
    Set<Class<? extends ResourceAction>> apiNoAuth = helper.apiNoAuth;
    if (resource.isAnnotationPresent(WebApiDeleted.class)) {
        metainfo.add(new ResourceMetadata(relationshipKey, RESOURCE_TYPE.RELATIONSHIP, null, inspectApi(resource), ALL_RELATIONSHIP_RESOURCE_INTERFACES, apiNoAuth, entityPath));
    } else {
        metainfo.add(new ResourceMetadata(relationshipKey, RESOURCE_TYPE.RELATIONSHIP, helper.operations, inspectApi(resource), helper.apiDeleted, apiNoAuth, entityPath));
    }
    inspectAddressedProperties(api, resource, relationshipKey, metainfo);
    inspectOperations(api, resource, relationshipKey, metainfo);
    return metainfo;
}
Also used : MultiPartRelationshipResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.MultiPartRelationshipResourceAction) ArrayList(java.util.ArrayList) RelationshipResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceAction) MultiPartRelationshipResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.MultiPartRelationshipResourceAction) RelationshipResource(org.alfresco.rest.framework.resource.RelationshipResource) Api(org.alfresco.rest.framework.Api) WebApi(org.alfresco.rest.framework.WebApi) RelationshipResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceAction) EntityResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction) MultiPartResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.MultiPartResourceAction) MultiPartRelationshipResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.MultiPartRelationshipResourceAction) ResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.ResourceAction) BinaryResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.BinaryResourceAction)

Example 2 with Api

use of org.alfresco.rest.framework.Api in project alfresco-remote-api by Alfresco.

the class ResourceDictionary method prettyPrint.

/*
     * Prints a String representation of the Resource Dictionary
     */
public String prettyPrint() {
    StringBuilder builder = new StringBuilder();
    builder.append("*******Resources********:").append(NEW_LINE);
    builder.append("**Public Apis **").append(NEW_LINE);
    for (Api api : this.publicApis) {
        printApi(builder, api);
    }
    builder.append(NEW_LINE);
    builder.append("**Private Apis **").append(NEW_LINE);
    for (Api api : this.privateApis) {
        printApi(builder, api);
    }
    builder.append("*******End of Resources ********:");
    return builder.toString();
}
Also used : Api(org.alfresco.rest.framework.Api)

Example 3 with Api

use of org.alfresco.rest.framework.Api in project alfresco-remote-api by Alfresco.

the class ResourceInspector method inspectEntity.

/**
 * Inspects the entity resource and returns meta data about it
 *
 * @param annot EntityResource
 * @param resource Class<?>
 */
private static List<ResourceMetadata> inspectEntity(EntityResource annot, Class<?> resource) {
    String urlPath = findEntityName(annot);
    logger.debug("Found EntityResource: " + urlPath);
    List<ResourceMetadata> metainfo = new ArrayList<ResourceMetadata>();
    Api api = inspectApi(resource);
    MetaHelper helper = new MetaHelper(resource);
    findOperation(EntityResourceAction.Create.class, HttpMethod.POST, helper);
    findOperation(EntityResourceAction.Read.class, HttpMethod.GET, helper);
    findOperation(EntityResourceAction.ReadById.class, HttpMethod.GET, helper);
    findOperation(EntityResourceAction.Update.class, HttpMethod.PUT, helper);
    findOperation(EntityResourceAction.Delete.class, HttpMethod.DELETE, helper);
    findOperation(EntityResourceAction.DeleteSet.class, HttpMethod.DELETE, helper);
    findOperation(EntityResourceAction.CreateWithResponse.class, HttpMethod.POST, helper);
    findOperation(EntityResourceAction.ReadWithResponse.class, HttpMethod.GET, helper);
    findOperation(EntityResourceAction.ReadByIdWithResponse.class, HttpMethod.GET, helper);
    findOperation(EntityResourceAction.UpdateWithResponse.class, HttpMethod.PUT, helper);
    findOperation(EntityResourceAction.DeleteWithResponse.class, HttpMethod.DELETE, helper);
    findOperation(EntityResourceAction.DeleteSetWithResponse.class, HttpMethod.DELETE, helper);
    findOperation(MultiPartResourceAction.Create.class, HttpMethod.POST, helper);
    boolean noAuth = resource.isAnnotationPresent(WebApiNoAuth.class);
    if (noAuth) {
        throw new IllegalArgumentException("@WebApiNoAuth should not be on all (entity resource class) - only on individual methods: " + urlPath);
    }
    Set<Class<? extends ResourceAction>> apiNoAuth = helper.apiNoAuth;
    if (resource.isAnnotationPresent(WebApiDeleted.class)) {
        metainfo.add(new ResourceMetadata(ResourceDictionary.resourceKey(urlPath, null), RESOURCE_TYPE.ENTITY, null, api, ALL_ENTITY_RESOURCE_INTERFACES, apiNoAuth, null));
    } else {
        if (!helper.apiDeleted.isEmpty() || !helper.operations.isEmpty()) {
            metainfo.add(new ResourceMetadata(ResourceDictionary.resourceKey(urlPath, null), RESOURCE_TYPE.ENTITY, helper.operations, api, helper.apiDeleted, apiNoAuth, null));
        }
    }
    inspectAddressedProperties(api, resource, urlPath, metainfo);
    inspectOperations(api, resource, urlPath, metainfo);
    return metainfo;
}
Also used : EntityResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction) ArrayList(java.util.ArrayList) MultiPartResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.MultiPartResourceAction) Api(org.alfresco.rest.framework.Api) WebApi(org.alfresco.rest.framework.WebApi) RelationshipResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceAction) EntityResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction) MultiPartResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.MultiPartResourceAction) MultiPartRelationshipResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.MultiPartRelationshipResourceAction) ResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.ResourceAction) BinaryResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.BinaryResourceAction)

Example 4 with Api

use of org.alfresco.rest.framework.Api in project alfresco-remote-api by Alfresco.

the class SerializeTests method testFilter.

// note: exposed as "properties" query param
@Test
public void testFilter() throws IOException, JSONException {
    assertNotNull(helper);
    BeanPropertiesFilter theFilter = getFilter("age");
    Object res = new ExecutionResult(new Sheep("bob"), theFilter);
    String out = writeResponse(res);
    assertTrue("Filter must only return the age.", StringUtils.contains(out, "{\"age\":3}"));
    theFilter = getFilter("age,name");
    res = new ExecutionResult(new Sheep("bob"), theFilter);
    out = writeResponse(res);
    JSONObject jsonRsp = new JSONObject(new JSONTokener(out));
    assertEquals(1, jsonRsp.length());
    JSONObject entry = jsonRsp.getJSONObject("entry");
    assertEquals(2, entry.length());
    assertEquals("The name should be 'Dolly'", "Dolly", entry.getString("name"));
    assertTrue("The age should be 3", entry.getInt("age") == 3);
    // unit test filter with "include" taking precendence over "fields" filter
    List<String> theInclude = getIncludeClause("name");
    theFilter = getFilter("age", theInclude);
    res = new ExecutionResult(new Sheep("bob"), theFilter);
    out = writeResponse(res);
    jsonRsp = new JSONObject(new JSONTokener(out));
    assertEquals(1, jsonRsp.length());
    entry = jsonRsp.getJSONObject("entry");
    assertEquals(2, entry.length());
    assertEquals("The name should be 'Dolly'", "Dolly", entry.getString("name"));
    assertTrue("The age should be 3", entry.getInt("age") == 3);
    Api v3 = Api.valueOf(api.getName(), api.getScope().toString(), "3");
    Map<String, BeanPropertiesFilter> relFiler = getRelationFilter("herd");
    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").getJSONObject("herd").getJSONObject("list").getJSONArray("entries").getJSONObject(0).getJSONObject("entry");
    assertEquals("The name should be 'bigun'", "bigun", entry.getString("name"));
    assertTrue("The quantity should be 56", entry.getInt("quantity") == 56);
    relFiler = getRelationFilter("herd(name)");
    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\"}"));
}
Also used : JSONTokener(org.json.JSONTokener) JSONObject(org.json.JSONObject) Sheep(org.alfresco.rest.framework.tests.api.mocks.Sheep) SlimGoat(org.alfresco.rest.framework.tests.api.mocks3.SlimGoat) JSONObject(org.json.JSONObject) ExecutionResult(org.alfresco.rest.framework.jacksonextensions.ExecutionResult) Api(org.alfresco.rest.framework.Api) BeanPropertiesFilter(org.alfresco.rest.framework.jacksonextensions.BeanPropertiesFilter) Test(org.junit.Test)

Example 5 with Api

use of org.alfresco.rest.framework.Api in project alfresco-remote-api by Alfresco.

the class SerializeTests method testInvokeVersions.

@Test
public void testInvokeVersions() throws IOException {
    final Map<String, Object> respons = new HashMap<String, Object>();
    ResourceWithMetadata entityResource = locator.locateEntityResource(api, "goat", HttpMethod.GET);
    assertNotNull(entityResource);
    EntityResourceAction.ReadById<?> getter = (ReadById<?>) entityResource.getResource();
    Object readById = getter.readById("1234A3", NOT_USED);
    assertTrue("Version 1 must be a goat.", Goat.class.equals(readById.getClass()));
    String out = writeResponse(readById);
    assertNotNull(out);
    Api v3 = Api.valueOf(api.getName(), api.getScope().toString(), "3");
    entityResource = locator.locateEntityResource(v3, "goat", HttpMethod.GET);
    assertNotNull(entityResource);
    getter = (ReadById<?>) entityResource.getResource();
    Object readByIdForNewVersion = getter.readById("1234A3", NOT_USED);
    assertTrue("Version 3 must be a slim goat.", SlimGoat.class.equals(readByIdForNewVersion.getClass()));
    respons.put("v3Goat", readByIdForNewVersion);
    out = writeResponse(readByIdForNewVersion);
    entityResource = locator.locateEntityResource(api, "grass", HttpMethod.GET);
    // ok for version 1
    assertNotNull(entityResource);
    try {
        entityResource = locator.locateEntityResource(v3, "grass", HttpMethod.GET);
        fail("Should throw an UnsupportedResourceOperationException");
    } catch (UnsupportedResourceOperationException error) {
    // this is correct
    }
}
Also used : EntityResourceAction(org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction) ReadById(org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction.ReadById) HashMap(java.util.HashMap) UnsupportedResourceOperationException(org.alfresco.rest.framework.core.exceptions.UnsupportedResourceOperationException) SlimGoat(org.alfresco.rest.framework.tests.api.mocks3.SlimGoat) JSONObject(org.json.JSONObject) Goat(org.alfresco.rest.framework.tests.api.mocks.Goat) SlimGoat(org.alfresco.rest.framework.tests.api.mocks3.SlimGoat) Api(org.alfresco.rest.framework.Api) ResourceWithMetadata(org.alfresco.rest.framework.core.ResourceWithMetadata) Test(org.junit.Test)

Aggregations

Api (org.alfresco.rest.framework.Api)18 Test (org.junit.Test)12 ResourceWithMetadata (org.alfresco.rest.framework.core.ResourceWithMetadata)7 ArrayList (java.util.ArrayList)6 HashMap (java.util.HashMap)6 UnsupportedResourceOperationException (org.alfresco.rest.framework.core.exceptions.UnsupportedResourceOperationException)3 EntityResourceAction (org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction)3 JSONObject (org.json.JSONObject)3 List (java.util.List)2 Map (java.util.Map)2 WebApi (org.alfresco.rest.framework.WebApi)2 ResourceMetadata (org.alfresco.rest.framework.core.ResourceMetadata)2 NotFoundException (org.alfresco.rest.framework.core.exceptions.NotFoundException)2 BinaryResourceAction (org.alfresco.rest.framework.resource.actions.interfaces.BinaryResourceAction)2 MultiPartRelationshipResourceAction (org.alfresco.rest.framework.resource.actions.interfaces.MultiPartRelationshipResourceAction)2 MultiPartResourceAction (org.alfresco.rest.framework.resource.actions.interfaces.MultiPartResourceAction)2 RelationshipResourceAction (org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceAction)2 ResourceAction (org.alfresco.rest.framework.resource.actions.interfaces.ResourceAction)2 SlimGoat (org.alfresco.rest.framework.tests.api.mocks3.SlimGoat)2 Method (java.lang.reflect.Method)1