Searching for Resources

You can construct queries used to search for resources in the repository, including history, related resources, and properties.

You can retrieve related resources to determine dependencies between a form and its fragments. For example, if you have a form you can determine what fragments or external resources it uses. If you have an image, you can also find out what forms use the image. You can also search for related resources using filtering based on properties. For example, you can search for all forms that use an image with a specified name, or find any image used by a form with a specified name. You can also search using resource properties. For example, you can conduct a query to find all forms or resources whose name starts with a given string that may include ’%’ and ’_’ wildcards. Remember that searches based on properties are not based on relationships; such searches are based on the assumption that you have specific knowledge about a given resource.

Query statements

A query contains one or more statements that are logically joined with conditions. A statement consists of a left operand, an operator, and a right operand. In addition, you can specify the sort order to be used for the search results. The sort order contains information equivalent to an SQL ORDER BY clause and is comprised of elements that contain the attributes on which the search was based as well as a value indicating whether ascending or descending order is to be used.

You can programmatically search for resources by using the Repository service Java API. At this time, it is not possible to use the web service API to search for resources.

Sort behaviour

Sort order is not respected when invoking the ResourceRepositoryClient object’s searchProperties method and specifying a sort order. For example, assume that you create a resource with three custom properties, where attribute names are name, secondName, and asecondName. Next you create a sort order element on the attribute name and set the ascending value to true.

Then you invoke the ResourceRepositoryClient object’s searchProperties method and pass in the sort order. The search returns the right resource, with the three properties. However, the properties are not sorted by attribute name. They are returned in the order they were added: name, secondName, and asecondName.

Note: For more information about the Repository service, see Services Reference for LiveCycle.

Summary of steps

To search for resources, follow these steps:

  1. Include project files.

  2. Create a Repository service client.

  3. Specify the target folder for the search.

  4. Specify the attributes used in the search.

  5. Create the query used in the search.

  6. Create the sort order for the search results.

  7. Search for the resources.

  8. Retrieve the resources from the search result.

Include project files

Include the necessary files in your development project. If you are creating a client application using Java, include the necessary JAR files. If you are using web services, include the proxy files.

Create the service client

Before you can programmatically read a resource, you must establish a connection and provide credentials. This is accomplished by creating a service client.

Specify the target folder for the search

Create a string containing the base path from which to conduct the search. The syntax includes forward slashes, as in this example: "/path/folder".

Specify the attributes used in the search

You can base your search on the attributes contained within resources. Specify the values of the attributes on which to conduct the search.

Create the query used in the search

Construct a query by using statements and conditions. Each statement will specify the attribute on which to base the search, the condition to be used, and the attribute value to be used in the search.

Create the sort order for the search results

The sort order is comprised of elements, each of which contains one of the attributes used in the search and a value indicating whether ascending or descending order is to be used.

Search for the resources

Search for the resources using the folder, query, and sort order. In addition, indicate the depth of the search and an upper limit on the number of results to be returned.

Retrieve the resources from the search result

Iterate through the returned list of resources and extract the information for further processing.

Search for resources using the Java API

Search for a resource by using the Repository service API (Java):

  1. Include project files

    Include client JAR files in your Java project’s class path.

  2. Create the service client

    Create a ResourceRepositoryClient object by using its constructor and passing a ServiceClientFactory object that contains connection properties.

  3. Specify the target folder for the search

    Specify the URI of the base path from which to execute the search. In this example, the URI of the resource is /testFolder.

  4. Specify the attributes used in the search

    Specify the values for the attributes on which to conduct the search. The attributes exist within a com.adobe.repository.infomodel.bean.Resource object. In this example, the search will be conducted on the name attribute; therefore, a java.lang.String containing the Resource object’s name is used, which is testResource in this case.

  5. Create the query used in the search

    To create a query, create a com.adobe.repository.query.Query object by invoking the default constructor for the Query class and add statements to the query.

    To create a statement, invoke the constructor for the com.adobe.repository.query.Query.Statement class and pass in the following parameters:

    • A left operand containing the resource attribute constant. In this example, because the resource’s name is used as the basis for the search, the static value Resource.ATTRIBUTE_NAME is used.

    • An operator containing the condition used in the search for the attribute. The operator must be one of the static constants in the Query.Statement class. In this example, the static value Query.Statement.OPERATOR_BEGINS_WITH is used.

    • A right operand containing the attribute value on which to conduct the search. In this example, the name attribute, a String containing the value "testResource", is used.

    Specify the namespace of the left operand by invoking the Query.Statement object’s setNamespace method and passing in one of the static values contained in the com.adobe.repository.infomodel.bean.ResourceProperty class. In this example, ResourceProperty.RESERVED_NAMESPACE_REPOSITORY is used.

    Add each statement to the query by invoking the Query object’s addStatement method and passing in the Query.Statement object.

  6. Create the sort order for the search results

    To specify the sort order used in the search results, create a com.adobe.repository.query.sort.SortOrder object by invoking the default constructor for the SortOrder class, and add elements to the sort order.

    To create an element for the sort order, invoke one of the constructors for the com.adobe.repository.query.sort.SortOrder.Element class. In this example, because the resource’s name is used as the basis for the search, the static value Resource.ATTRIBUTE_NAME is used as the first parameter, and ascending order (a boolean value of true) is specified as the second parameter.

    Add each element to the sort order by invoking the SortOrder object’s addSortElement method and passing in the SortOrder.Element object.

  7. Search for the resources

    To search for resources based on attribute properties, invoke the ResourceRepositoryClient object’s searchProperties method and pass in the following parameters:

    • A String containing the base path from which to execute the search. In this case, "/testFolder" is used.

    • The query used in the search.

    • The depth of the search. In this case, com.adobe.repository.infomodel.bean.ResourceCollection.DEPTH_INFINITE is used to indicate that the base path and all its folders are to be used.

    • An int value indicating the first row from which to select the unpaged result set. In this example, 0 is specified.

    • An int value indicating the maximum number of results to be returned. In this example, 10 is specified.

    • The sort order used in the search.

    The method returns a java.util.List of Resource objects in the specified sort order.

  8. Retrieve the resources from the search result

    To retrieve the resources contained in the search result, iterate through the List and cast each object to a Resource in order to extract its information. In this example, the name of each resource is displayed.

// Ethnio survey code removed