extends RepositoryViewImpl
IntegrationRepositoryView
is an abstract class that provides some standard operations like applyOptions
and getRange
. For each type of remote system that you want to integrate with, you need to create an implementation of IntegrationRepositoryView
specific for your remote system in order to provide the translation between the Oracle ATG Web Commerce Query
format, and the format expected by the remote system. When a query is executed, the executeUncachedQuery
method is called. That method looks like this:
public RepositoryItem[] executeUncachedQuery(Query pQuery, QueryOptions pOptions) { // Step 1 Object input = createQueryCommandInput(pQuery, pOptions); // Step 2 RepositoryItem[] items = executeQueryCommand(input); // Step 3 return applyOptions(items, pOptions); }
The inputs to this method are a standard Query
object and a standard QueryOptions
object. The executeUncachedQuery
method goes through the following steps:
Step 1
The first thing the view needs to do is translate the Query
object into an object that is understandable by the remote system. This is the responsibility of your subclass of IntegrationRepositoryView
and the only method that you must implement.
Step 2
This step is a call to the method defined in IntegrationRepositoryView
that gets the correct Command
according to your configuration and calls Command.execute
with the provided query input.
Step 3
This step may not be necessary. If your remote system supports sorting and ranging (returning a subset of the items) then it will be more efficient for that information to be included in the command input. In that case this step can be skipped in the executeUncachedQuery
and you should override the applyOptions
method to do nothing.
The only thing required for querying to work is to subclass IntegrationRepositoryView
and implement createQueryCommandInput
. The implementation of this method will introspect the Query
class and create an input object. The type and contents of the input object depend on the requirements of your application and the remote system you are querying. You then need to create a Command
that knows what to do with this input.
In addition, you will typically need to implement a processResults
method in your IntegrationRepositoryView
subclass. This method is responsible for translating between the remote data format and the repository items in the local repository.
The default implementation of IntegrationRepositoryView.processResults
calls IntegrationRepositoryTools.createRepositoryItems
. It passes in the results from pCommandResult.getResults()
as the first argument. The createRepositoryItems
method uses DynamicBeans to look at the given command results. For each object in the result it uses the IntegrationRepositoryItemDescriptor
to find the external ID. It uses this external ID to look for an existing item in the local repository with the same external ID. If one is found, this method iterates across the properties in the result object (using DynamicBeans) and updates the properties. If one is not found, a new item is first created, then the properties are updated.