Implementing a REST PathMapper¶
In this section is described how to implement a new RESTUploadPathMapper sub-class. A RESTUploadPathMapper object is used for mapping the path of the uploaded files following new remapping policy. An example could be a Regular Expression remapping based on the input file name.
This is the RESTUploadPathMapper interface:
/**
 * Plugin interface used to transform the position of files during rest uploads
 */
public interface RESTUploadPathMapper{
        /**
         * Remaps the position of a store path. The implementor is free to append, modify
         * or replace the store root directory, REST upload will append workspace/store to
         * it
         *
         * @throws IOException
         */
        public void mapStorePath(StringBuilder rootDir, String workspace, String store,
                Map<String, String> storeParams) throws IOException;
        /**
         * Remaps the position of a file inside a store (e.g., a image being harvested into
         * a mosaic. The implementor is free to alter the item path.
         *
         * @throws IOException
         */
        public void mapItemPath(String workspace, String store,
                Map<String, String> storeParams, StringBuilder itemPath, String itemName) throws IOException;
}
Implementation¶
Each implementation must follows these rules:
- Remapping of the Root Directory requires to create a final root of the following structure: - ${rootDirectory}/workspace/store
- Developers can choose both the relative path of the file (if it is inside a zip directory structure) and the filename itself. 
- File remapping cannot return directories. 
- If additional parameters are required, they can be stored inside the Metadata Map of the Global, WorkSpace or Store settings. 
The steps for creating a new RESTUploadPathMapper implementation are:
- Extend the base implementation RESTUploadPathMapperImpl and create the desired PathMapper. 
- Configure it as a Spring Bean inside the applicationContext. For example: - <bean id="ECQLRUPathMapper" class="org.geoserver.rest.ecql.RESTUploadECQLPathMapper"> <constructor-arg ref="catalog"/> </bean> 
If any optional parameter requires to be configured, then a GUI panel must be created using Wicket. The panel will be added to the Global and WorkSpace Settings configuration page.
The steps for creating the GUI panel are:
- Creation of a new extension of the SettingsPluginPanel class. - Note - Note that this panel must extract the parameters from the Metadata Map of the settings object. 
- Definition of a Spring Bean which will be an instance of the SettingsPluginPanelInfo class and will have the class defined above as component class (priority property can be avoided). For example: - <bean id="restECQLSettingsPanel" class="org.geoserver.web.data.settings.SettingsPluginPanelInfo"> <description>This bean adds the necessary form fields to REST Settings</description> <property name="id" value="restECQLSettingsPanel"/> <property name="titleKey" value="restECQLsettings"/> <property name="componentClass" value="org.geoserver.rest.web.RESTECQLSettingsPanel"/> <property name="priority" value="1"/> </bean> 
- Then the result will be added at the bottom of the GeoServer Global Settings and Edit WorkSpace Pages: 