I made a little mod on AbstractTxFileStoreService to load a ResourceIdToPathMapper specified in the configuration (Domain.xml). Maybe this patch could be useful for someone else.
I needed a special ResourceIdToPathMapper for some "obfuscation" needs on the storage disk. In the patch, I reuse the use-portable-path parameter. This is maybe not a good idea. A new parameter should be a good idea. The new problem in that case is the concurrency between this new parameter, use-portable-path and url-encode-path (already a problem in the current version for the 2 last). There are 3 patches, for different implementation. The 2 first are compatible with current version, the last changes the configuration and the behaviour. resourceidmapper.java13.patch for java 1.3 and later resourceidmapper.java5.patch for java 5 (only template use) resourceidmapper.choose.patch : the value of url-encode-path can be : - "encode" : to use classic commons-transaction mapper - "portable" : to use the txfile mapper - "<classname>" : the classname of the specific ResourceIdToPathMapper implementation. Best regards, Guillaume
Index: /home/guignol/slide/workspace/slide-trunk/src/stores/org/apache/slide/store/txfile/AbstractTxFileStoreService.java =================================================================== --- /home/guignol/slide/workspace/slide-trunk/src/stores/org/apache/slide/store/txfile/AbstractTxFileStoreService.java (revision 511557) +++ /home/guignol/slide/workspace/slide-trunk/src/stores/org/apache/slide/store/txfile/AbstractTxFileStoreService.java (working copy) @@ -62,7 +62,6 @@ protected static final String TIMEOUT_PARAMETER = "timeout"; protected static final String URLENCODE_PATH_PARAMETER = "url-encode-path"; protected static final String DEBUG_MODE_PARAMETER = "debug"; - protected static final String USE_PORTABLE_PATH_PARAMETER = "use-portable-path"; protected FileResourceManager rm; protected boolean started = false; @@ -98,14 +97,24 @@ String urlEncodePathString = (String) parameters.get(URLENCODE_PATH_PARAMETER); if (urlEncodePathString != null) { - boolean urlEncodePath = "true".equals(urlEncodePathString); - if (urlEncodePath) idMapper = new URLEncodeIdMapper(); - } - - String usePortablePathString = (String) parameters.get(USE_PORTABLE_PATH_PARAMETER); - if (usePortablePathString != null) { - boolean usePortablePath = "true".equals(usePortablePathString); - if (usePortablePath) idMapper = new PortableIdMapper(); + if ("encode".equals(urlEncodePathString)) { + idMapper = new URLEncodeIdMapper(); + } else if ("portable".equals(urlEncodePathString)) { + idMapper = new PortableIdMapper(); + } else { + // specify a class name instead of a boolean value + try { + Class clz = Class.forName(urlEncodePathString); + idMapper =(ResourceIdToPathMapper) clz.newInstance(); + } catch (Exception exception) { + getLogger().log( + "Cannot load the specified path mapper '"+urlEncodePathString+"'.", + exception, + getLogChannel(), + Logger.ERROR); + throw new ServiceParameterErrorException(this,URLENCODE_PATH_PARAMETER); + } + } } rm =
Index: /home/guignol/slide/workspace/slide-trunk/src/stores/org/apache/slide/store/txfile/AbstractTxFileStoreService.java =================================================================== --- /home/guignol/slide/workspace/slide-trunk/src/stores/org/apache/slide/store/txfile/AbstractTxFileStoreService.java (revision 511557) +++ /home/guignol/slide/workspace/slide-trunk/src/stores/org/apache/slide/store/txfile/AbstractTxFileStoreService.java (working copy) @@ -105,7 +105,24 @@ String usePortablePathString = (String) parameters.get(USE_PORTABLE_PATH_PARAMETER); if (usePortablePathString != null) { boolean usePortablePath = "true".equals(usePortablePathString); - if (usePortablePath) idMapper = new PortableIdMapper(); + if (usePortablePath) { + idMapper = new PortableIdMapper(); + } else if("false".equals(usePortablePathString)) { + // do nothing + } else { + // specify a class name instead of a boolean value + try { + Class<? extends ResourceIdToPathMapper> clz = Class.forName(usePortablePathString).asSubclass(ResourceIdToPathMapper.class); + idMapper = clz.newInstance(); + } catch (Exception exception) { + getLogger().log( + "Cannot load the specified path mapper '"+usePortablePathString+"'.", + exception, + getLogChannel(), + Logger.ERROR); + throw new ServiceParameterErrorException(this,USE_PORTABLE_PATH_PARAMETER); + } + } } rm =
Index: /home/guignol/slide/workspace/slide-trunk/src/stores/org/apache/slide/store/txfile/AbstractTxFileStoreService.java =================================================================== --- /home/guignol/slide/workspace/slide-trunk/src/stores/org/apache/slide/store/txfile/AbstractTxFileStoreService.java (revision 511557) +++ /home/guignol/slide/workspace/slide-trunk/src/stores/org/apache/slide/store/txfile/AbstractTxFileStoreService.java (working copy) @@ -105,7 +105,24 @@ String usePortablePathString = (String) parameters.get(USE_PORTABLE_PATH_PARAMETER); if (usePortablePathString != null) { boolean usePortablePath = "true".equals(usePortablePathString); - if (usePortablePath) idMapper = new PortableIdMapper(); + if (usePortablePath) { + idMapper = new PortableIdMapper(); + } else if("false".equals(usePortablePathString)) { + // do nothing + } else { + // specify a class name instead of a boolean value + try { + Class clz = Class.forName(usePortablePathString); + idMapper =(ResourceIdToPathMapper) clz.newInstance(); + } catch (Exception exception) { + getLogger().log( + "Cannot load the specified path mapper '"+usePortablePathString+"'.", + exception, + getLogChannel(), + Logger.ERROR); + throw new ServiceParameterErrorException(this,USE_PORTABLE_PATH_PARAMETER); + } + } } rm =
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]