Add-on type: Database Field extension (pagf)
General
A Database Field extension adds one or more (indexed) attributes to the PicApport database. The configuration of these attribute is declared in a Map and is returned in the init() method of the Add-on.
A groovy script is recognized as a Database Field extension if it extends the class: de.contecon.picapport.groovy.PhotoFieldProvider
See also de.contecon.picapport.groovy.PhotoFieldProvider for the methods that can be overwritten to create your own Database fields.
Updating
When a Database Field extension has been updated it will automatically be reloaded and compiled when:
- When the PicApport Server starts
- When the reloadaddons console command is executed
The init() Method
The init() method of a Database Field extension must return a Map which defines the metadata of the Fields:
| version | String | no | Version information |
fields | List of Fields-Key-Value pairs | no | A list of at least one field that is declared by this Add-on. A field must have a PicApport wide unique id (e.g. osmCountry in the example below). A field has the following configuration parameters: |
|
Example init Method
private final static String FIELD_NAME_OSM = "osm"; private final static String FIELD_NAME_OSM_COUNTRY = "osmCountry";private final static String FIELD_NAME_OSM_STATE = "osmState";private final static String FIELD_NAME_OSM_POSTCODE= "osmPostcode";private final static String FIELD_NAME_OSM_CITY= "osmCity";private final static String FIELD_NAME_OSM_ROAD= "osmRoad"; public Map init(IAddonContext addonContext) { addonContext.getLogger().logMessage(" Addon loaded Autor: E. Schreiner (c)2020 Contecon Software GmbH" ); def meta = [ version:'1.0.0', fields: [ (FIELD_NAME_OSM): [ // "display_name" returned from OSM type: PhotoFieldProvider.DATA_TYPE_STRING, addToGlobalFulltext: true, indexType: PhotoFieldProvider.INDEX_TYPE_FULLTEXT, addToReport: true, ], (FIELD_NAME_OSM_COUNTRY): [ // "country" returned from OSM type: PhotoFieldProvider.DATA_TYPE_STRING, addToGlobalFulltext: false, indexType: PhotoFieldProvider.INDEX_TYPE_FULLTEXT, addToReport: true, ], (FIELD_NAME_OSM_STATE): [ // "state" returned from OSM type: PhotoFieldProvider.DATA_TYPE_STRING, addToGlobalFulltext: false, indexType: PhotoFieldProvider.INDEX_TYPE_FULLTEXT, addToReport: true, ], (FIELD_NAME_OSM_POSTCODE): [ // "postcode" returned from OSM type: PhotoFieldProvider.DATA_TYPE_STRING, addToGlobalFulltext: false, indexType: PhotoFieldProvider.INDEX_TYPE_ID, addToReport: true, ], (FIELD_NAME_OSM_CITY): [ // "city", "town", "village" returned from OSM type: PhotoFieldProvider.DATA_TYPE_STRING, addToGlobalFulltext: false, indexType: PhotoFieldProvider.INDEX_TYPE_FULLTEXT, addToReport: true, ], (FIELD_NAME_OSM_ROAD): [ // "road" returned from OSM type: PhotoFieldProvider.DATA_TYPE_STRING, addToGlobalFulltext: false, indexType: PhotoFieldProvider.INDEX_TYPE_FULLTEXT, addToReport: true, ] ] ] } |
Sample Implementation of a Database Field extension
See PicApport Add-on: OpenStreetMap Geo-Reverse-Encoder – PicApport Wiki (contecon.de) which contains a download-URL for our sample implementation of a Database Field extension
A short an straight forward example is our PicApport Add-on: NonJpgTitleField – PicApport Wiki (contecon.de) Add-on. Just see the complete code below:
import de.contecon.imageutils.IccImageMetaData;import de.contecon.picapport.IPhotoMetaDataFilter;import de.contecon.picapport.groovy.IAddonContext;import de.contecon.picapport.groovy.PhotoFieldProvider;class NonJpgTitleField extends PhotoFieldProvider { public Map init(IAddonContext addonContext) { addonContext.getLogger().logMessage(" Addon loaded Autor: E. Schreiner (c)2020 Contecon Software GmbH" ); [version:'1.0.0']; //return Map with version. } public void setFieldValues(IAddonContext addonContext, IccImageMetaData metaDataFile, IPhotoMetaDataFilter metadataDatabase) { def oExt=metadataDatabase.getPhotoInFileSystem().getOriginalFileExtension(); if(null != oExt && oExt.length() > 1) { oExt= oExt.substring(1).toUpperCase(); if(!(oExt == "JPG" || oExt =="JPEG")) { metadataDatabase.setThumbTitle(oExt); metadataDatabase.setThumbTitleColor("#DD130E"); } } } } |