Implementing External Data Provider
This section describes the main components of the StoreDataSource class.
Path navigation
The StoreDataSource class in the org.jahia.modules.commerce.io.edp.datasource package is responsible for providing external data. As with all external providers in Jahia, the getItemByPath method resolves external data for an item, given its path.
This section provides more detail about the method. For the / ciont:categoryRoot node is returned after which there two major top level paths: ones that start with /p (paths for products) and ones that start without /p (paths for categories).
There are several cases to consider for the product path.
If the path:
- Ends with a product SKU then external data for that product is returned.
- Ends with /variantsthen the ciont:variantsList node is returned.
- Contains /variants/then theciont:variantFeaturesnode is returned orciont:variantOptiondepending on whether the path containsfeatures.
- Contains /mediasthen the ciont:medias node is returned.
- Ends with /vanityUrlMappingthen the jnt:vanityUrls node is returned.
- Contains /vanityUrlMappingthen the jnt:vanityUrl node is returned.
In all other cases of path with /p a jnt:contentFolder is returned.
The category part is a lot simpler.
If the path:
- Ends with  /vanityUrlMappingthenjnt:vanityUrlsnode is returned.
- Path contains /vanityUrlMappingthenjnt:vanityUrlnode is returned.
Otherwise the category ciont:category node is returned.
In all other cases PathNotFoundException is returned.
Children
The getChildren method is also a standard method in External Data Provider, which returns a list of child paths for a given path.
As with the getItemByPath method, there are two major cases for paths: those that contain /p and those that do not.
The category path case is very simple.
- If the path is a category path and it ends with /vanityUrlMapping, a list of vanity URLs spanning every available language is returned.
- Otherwise, a list of child paths for that category is returned.
The product path case is a bit more complex as we need to take into account medias and variants.
- If it is a pure product path (ending with an SKU), then child paths for media and variants are returned.
- If the path ends with /mediasthen a list for every available media child is returned.
- If the path ends with /vanityUrlMappingsimilarly to category path a list of vanity URLs spanning every available language is returned.
- If it ends with /variantsa list of available child variant paths is returned.
In the case when none of the conditions match an empty list is returned.
Search
The search method in the class applies when the product is searched for in Edit mode in Jahia or when a user is trying to access page with a vanity URL. The method returns a list of available paths which are then fed into getItemByPath method.  
The first check determines whether the search is for a product. If the search is for a product, then the mounted path for that product is returned. The mounted path is the path you see in JCR which has the following structure: /p/td/re/vf/<SKU>.
Another check catches two types of vanity URLs:
- one case for product
- one case for category
In each case a mounted path for that product or category is returned.