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]

Reply via email to