ozeigermann    2004/12/18 15:19:09

  Modified:    transaction build.xml RELEASE-NOTES.txt
               transaction/src/java/org/apache/commons/transaction/file
                        FileResourceManager.java
  Added:       transaction/src/java/org/apache/commons/transaction/file
                        JDK14URLEncodeIdMapper.java
                        ResourceIdToPathMapper.java URLEncodeIdMapper.java
  Log:
  Added support for configurable resource id to path mapping as
  proposed by Antranig Basman
  
  Revision  Changes    Path
  1.9       +2 -1      jakarta-commons/transaction/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/transaction/build.xml,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- build.xml 17 Dec 2004 12:09:32 -0000      1.8
  +++ build.xml 18 Dec 2004 23:19:08 -0000      1.9
  @@ -155,13 +155,14 @@
     =================================================================== 
     -->
   
  -  <target name="build" depends="prepare" description="Compiles the main 
classes">
  +  <target name="build" depends="prepare,detect" description="Compiles the 
main classes">
       <javac destdir="${build.classes}"
         target="${compile.target}"
         debug="${compile.debug}"
         deprecation="${compile.deprecation}"
         optimize="${compile.optimize}" >
         <exclude name="**/jca/**"/>
  +      <exclude name="**/JDK14URLEncodeIdMapper.java" unless="jvm14.present"/>
         <src path="${java.dir}"/>
         <classpath refid="classpath" />
       </javac>
  
  
  
  1.8       +6 -2      jakarta-commons/transaction/RELEASE-NOTES.txt
  
  Index: RELEASE-NOTES.txt
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/transaction/RELEASE-NOTES.txt,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- RELEASE-NOTES.txt 17 Dec 2004 00:33:38 -0000      1.7
  +++ RELEASE-NOTES.txt 18 Dec 2004 23:19:08 -0000      1.8
  @@ -27,16 +27,20 @@
   ENHANCEMENTS FROM 1.0
   ---------------------
   
  +Locking:
   - Extended and less excentric lock manager
  -- Deadlock detection for all lock managers, file store, and pessimistic map
  -- Flexible preference mechanism 
   
  +File:
  +- Confiburable resource id to path mapping
   
   NEW FEATURES FROM 1.0
   ---------------------
   
  +Locking:
   - new ReadWriteLockManager for most intuitive read/write lock usage
   - new read/write/upgrade locking mechanism
  +- Deadlock detection for all lock managers, file store, and pessimistic map
  +- Flexible preference locking mechanism 
   
   MINOR INCOMPATIBILITIES TO 1.0
   -----------------------------------------
  
  
  
  1.5       +29 -25    
jakarta-commons/transaction/src/java/org/apache/commons/transaction/file/FileResourceManager.java
  
  Index: FileResourceManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/transaction/src/java/org/apache/commons/transaction/file/FileResourceManager.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FileResourceManager.java  16 Dec 2004 17:33:53 -0000      1.4
  +++ FileResourceManager.java  18 Dec 2004 23:19:09 -0000      1.5
  @@ -34,8 +34,6 @@
   import java.io.InputStreamReader;
   import java.io.OutputStream;
   import java.io.OutputStreamWriter;
  -import java.io.UnsupportedEncodingException;
  -import java.net.URLEncoder;
   import java.util.ArrayList;
   import java.util.Collection;
   import java.util.HashMap;
  @@ -44,7 +42,6 @@
   import java.util.Iterator;
   import java.util.Collections;
   
  -import org.apache.commons.codec.binary.Base64;
   import org.apache.commons.transaction.locking.GenericLock;
   import org.apache.commons.transaction.locking.GenericLockManager;
   import org.apache.commons.transaction.locking.LockException;
  @@ -185,7 +182,6 @@
   
       protected String workDir;
       protected String storeDir;
  -    protected boolean urlEncodePath = false;
       protected boolean cleanUp = true;
       protected boolean dirty = false;
       protected int operationMode = OPERATION_MODE_STOPPED;
  @@ -197,6 +193,8 @@
       protected Map globalTransactions;
       protected List globalOpenResources;
       protected LockManager lockManager;
  +    
  +    protected ResourceIdToPathMapper idMapper = null;
   
       /*
        * --- ctor and general getter / setter methods ---
  @@ -231,11 +229,29 @@
           boolean urlEncodePath,
           LoggerFacade logger,
           boolean debug) {
  +        this(storeDir, workDir, urlEncodePath ? new URLEncodeIdMapper() : 
null, logger, false);
  +    }
  +
  +    /**
  +     * Creates a new resouce manager operation on the specified directories.
  +     * 
  +     * @param storeDir directory where main data should go after commit
  +     * @param workDir directory where transactions store temporary data 
  +     * @param idMapper mapper for resourceId to path
  +     * @param logger the logger to be used by this store
  +     * @param debug if set to <code>true</code> logs all locking information 
to "transaction.log" for debugging inspection 
  +     */
  +    public FileResourceManager(
  +        String storeDir,
  +        String workDir,
  +        ResourceIdToPathMapper idMapper,
  +        LoggerFacade logger,
  +        boolean debug) {
           this.workDir = workDir;
           this.storeDir = storeDir;
  -        this.urlEncodePath = urlEncodePath;
           this.logger = logger;
           this.debug = debug;
  +        this.idMapper = idMapper;
       }
   
       /**
  @@ -942,22 +958,10 @@
       protected String assureLeadingSlash(Object pathObject) {
           String path = "";
           if (pathObject != null) {
  -            path = pathObject.toString();
  -            if (urlEncodePath) {
  -                try {
  -                    // XXX not allowed as for JDK1.4 
  -                    //                    path = URLEncoder.encode(path, 
"UTF-8");
  -                    // XXX weired replacement for the fine method above
  -                    // using this combination as a simple URLEncoder.encode 
without
  -                    // charset may fail depending on local settings
  -                    // for this reason the string will be encoded into 
base64 consisting
  -                    // of ascii characters only
  -                    // a further URL encoding is need as base64 might 
contain '/' which
  -                    // might be a problem for some file systems 
  -                    path = new 
String(Base64.encodeBase64(path.getBytes("UTF-8")), "ASCII");
  -                    path = URLEncoder.encode(path);
  -                } catch (UnsupportedEncodingException e) {
  -                }
  +            if (idMapper != null) {
  +                path = idMapper.getPathForId(pathObject);
  +            } else {
  +                path = pathObject.toString();
               }
               if (path.length() > 0 && path.charAt(0) != '/' && path.charAt(0) 
!= '\\') {
                   path = "/" + path;
  
  
  
  1.1                  
jakarta-commons/transaction/src/java/org/apache/commons/transaction/file/JDK14URLEncodeIdMapper.java
  
  Index: JDK14URLEncodeIdMapper.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-commons/transaction/src/java/org/apache/commons/transaction/file/JDK14URLEncodeIdMapper.java,v
 1.1 2004/12/18 23:19:09 ozeigermann Exp $
   * $Revision: 1.1 $
   * $Date: 2004/12/18 23:19:09 $
   *
   * ====================================================================
   *
   * Copyright 1999-2002 The Apache Software Foundation 
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   */
  
  package org.apache.commons.transaction.file;
  
  import java.io.UnsupportedEncodingException;
  import java.net.URLEncoder;
  
  /**
   *  
   */
  public class JDK14URLEncodeIdMapper implements ResourceIdToPathMapper {
      public String getPathForId(Object resourceId) {
          String path = resourceId.toString();
          try {
              path = URLEncoder.encode(path, "UTF-8");
          } catch (UnsupportedEncodingException e) {
              // we know this will not happen
          }
          return path;
      }
  }
  
  
  1.1                  
jakarta-commons/transaction/src/java/org/apache/commons/transaction/file/ResourceIdToPathMapper.java
  
  Index: ResourceIdToPathMapper.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-commons/transaction/src/java/org/apache/commons/transaction/file/ResourceIdToPathMapper.java,v
 1.1 2004/12/18 23:19:09 ozeigermann Exp $
   * $Revision: 1.1 $
   * $Date: 2004/12/18 23:19:09 $
   *
   * ====================================================================
   *
   * Copyright 1999-2002 The Apache Software Foundation 
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   */
  
  package org.apache.commons.transaction.file;
  
  /**
   * Mapper from a resourceId to a path string.
   *
   */
  public interface ResourceIdToPathMapper {
      /**
       * Maps the resource id object to a path string. 
       * 
       * @param resourceId the resource id
       * @return the path string
       */
      String getPathForId(Object resourceId);
  }
  
  
  
  1.1                  
jakarta-commons/transaction/src/java/org/apache/commons/transaction/file/URLEncodeIdMapper.java
  
  Index: URLEncodeIdMapper.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-commons/transaction/src/java/org/apache/commons/transaction/file/URLEncodeIdMapper.java,v
 1.1 2004/12/18 23:19:09 ozeigermann Exp $
   * $Revision: 1.1 $
   * $Date: 2004/12/18 23:19:09 $
   *
   * ====================================================================
   *
   * Copyright 1999-2002 The Apache Software Foundation 
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   */
  
  package org.apache.commons.transaction.file;
  
  import java.io.UnsupportedEncodingException;
  import java.net.URLEncoder;
  
  import org.apache.commons.codec.binary.Base64;
  
  /**
   *
   */
  public class URLEncodeIdMapper implements ResourceIdToPathMapper {
      public String getPathForId(Object resourceId) {
          String path = resourceId.toString();
          try {
              // XXX weired replacement for the fine JDK1.4 
URLEncoder.encode(path, "UTF-8") 
              // method 
              // using this combination as a simple URLEncoder.encode without
              // charset may fail depending on local settings
              // for this reason the string will be encoded into base64 
consisting
              // of ascii characters only
              // a further URL encoding is need as base64 might contain '/' 
which
              // might be a problem for some file systems 
              path = new String(Base64.encodeBase64(path.getBytes("UTF-8")), 
"ASCII");
              path = URLEncoder.encode(path);
          } catch (UnsupportedEncodingException e) {
              // we know this will not happen
          }
          return path;
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to