[exo-jcr-commits] exo-jcr SVN: r4481 - in jcr/trunk/exo.jcr.component.core/src: main/java/org/exoplatform/services/jcr/impl/storage/value/fs and 2 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Jun 7 02:15:09 EDT 2011


Author: tolusha
Date: 2011-06-07 02:15:08 -0400 (Tue, 07 Jun 2011)
New Revision: 4481

Modified:
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/FileDigestOutputStream.java
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/FileValueStorage.java
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/SimpleFileIOChannel.java
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFile.java
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFileIOChannel.java
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/CASableWriteValue.java
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/DeleteValues.java
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileIOHelper.java
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileOperation.java
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/WriteValue.java
   jcr/trunk/exo.jcr.component.core/src/test/resources/tsm-excludes.properties
Log:
EXOJCR-1365: reduce privileged blocks

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java	2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java	2011-06-07 06:15:08 UTC (rev 4481)
@@ -480,7 +480,7 @@
     * {@inheritDoc}
     */
    @Override
-   public int getChildNodesCount(NodeData parent) throws RepositoryException
+   public int getChildNodesCount(final NodeData parent) throws RepositoryException
    {
       if (cache.isEnabled())
       {
@@ -490,8 +490,13 @@
             return childCount;
          }
       }
-
-      return super.getChildNodesCount(parent);
+      return executeAction(new PrivilegedExceptionAction<Integer>()
+      {
+         public Integer run() throws RepositoryException
+         {
+            return CacheableWorkspaceDataManager.super.getChildNodesCount(parent);
+         }
+      });
    }
 
    /**
@@ -606,7 +611,13 @@
       }
       else
       {
-         return super.getItemData(parentData, name, itemType);
+         return executeAction(new PrivilegedExceptionAction<ItemData>()
+         {
+            public ItemData run() throws RepositoryException
+            {
+               return CacheableWorkspaceDataManager.super.getItemData(parentData, name, itemType);
+            }
+         });
       }
    }
 
@@ -663,7 +674,13 @@
       }
       else
       {
-         return super.getItemData(identifier);
+         return executeAction(new PrivilegedExceptionAction<ItemData>()
+         {
+            public ItemData run() throws RepositoryException
+            {
+               return CacheableWorkspaceDataManager.super.getItemData(identifier);
+            }
+         });
       }
    }
 
@@ -999,12 +1016,18 @@
       }
    }
 
-   protected List<NodeData> getChildNodesDataByPattern(NodeData parentData, List<QPathEntryFilter> patternFilters)
+   protected List<NodeData> getChildNodesDataByPattern(final NodeData parentData, final List<QPathEntryFilter> patternFilters)
       throws RepositoryException
    {
       if (!cache.isEnabled())
       {
-         return super.getChildNodesData(parentData, patternFilters);
+         return executeAction(new PrivilegedExceptionAction<List<NodeData>>()
+         {
+            public List<NodeData> run() throws RepositoryException
+            {
+               return CacheableWorkspaceDataManager.super.getChildNodesData(parentData, patternFilters);
+            }
+         });
       }
 
       if (!cache.isPatternSupported())
@@ -1020,9 +1043,9 @@
          return childNodesList;
       }
 
-      Map<String, NodeData> childNodesMap = new HashMap<String, NodeData>();
+      final Map<String, NodeData> childNodesMap = new HashMap<String, NodeData>();
 
-      Set<QPathEntryFilter> uncachedPatterns = new HashSet<QPathEntryFilter>();
+      final Set<QPathEntryFilter> uncachedPatterns = new HashSet<QPathEntryFilter>();
       for (int i = 0; i < patternFilters.size(); i++)
       {
          if (patternFilters.get(i).isExactName())
@@ -1116,42 +1139,50 @@
             // execute all patterns and put result in cache
             if (!uncachedPatterns.isEmpty())
             {
-               List<NodeData> persistedItemList =
-                  super.getChildNodesData(parentData, new ArrayList<QPathEntryFilter>(uncachedPatterns));
-
-               if (persistedItemList.size() > 0)
+               executeAction(new PrivilegedExceptionAction<Void>()
                {
-                  NodeData parent = (NodeData)getItemData(parentData.getIdentifier());
-                  if (parent != null)
+                  public Void run() throws RepositoryException
                   {
-                     // filter nodes list for each exact name
-                     patternIterator = uncachedPatterns.iterator();
-                     while (patternIterator.hasNext())
+                     List<NodeData> persistedItemList =
+                        CacheableWorkspaceDataManager.super.getChildNodesData(parentData,
+                           new ArrayList<QPathEntryFilter>(uncachedPatterns));
+
+                     if (persistedItemList.size() > 0)
                      {
-                        QPathEntryFilter pattern = patternIterator.next();
-                        List<NodeData> persistedNodeData = (List<NodeData>)pattern.accept(persistedItemList);
-                        if (pattern.isExactName())
+                        NodeData parent = (NodeData)getItemData(parentData.getIdentifier());
+                        if (parent != null)
                         {
-                           if (persistedNodeData.isEmpty())
+                           // filter nodes list for each exact name
+                           Iterator<QPathEntryFilter> patternIterator = uncachedPatterns.iterator();
+                           while (patternIterator.hasNext())
                            {
-                              cache.put(new NullNodeData(parentData, pattern.getQPathEntry()));
+                              QPathEntryFilter pattern = patternIterator.next();
+                              List<NodeData> persistedNodeData = (List<NodeData>)pattern.accept(persistedItemList);
+                              if (pattern.isExactName())
+                              {
+                                 if (persistedNodeData.isEmpty())
+                                 {
+                                    cache.put(new NullNodeData(parentData, pattern.getQPathEntry()));
+                                 }
+                                 else
+                                 {
+                                    cache.put(persistedNodeData.get(0));
+                                 }
+                              }
+                              else
+                              {
+                                 cache.addChildNodes(parent, pattern, persistedNodeData);
+                              }
+                              for (NodeData node : persistedItemList)
+                              {
+                                 childNodesMap.put(node.getIdentifier(), node);
+                              }
                            }
-                           else
-                           {
-                              cache.put(persistedNodeData.get(0));
-                           }
                         }
-                        else
-                        {
-                           cache.addChildNodes(parent, pattern, persistedNodeData);
-                        }
-                        for (NodeData node : persistedItemList)
-                        {
-                           childNodesMap.put(node.getIdentifier(), node);
-                        }
                      }
+                     return null;
                   }
-               }
+               });
             }
          }
          finally
@@ -1286,12 +1317,18 @@
       }
    }
 
-   protected List<PropertyData> getChildPropertiesDataByPattern(NodeData nodeData, List<QPathEntryFilter> patternFilters)
+   protected List<PropertyData> getChildPropertiesDataByPattern(final NodeData nodeData, final List<QPathEntryFilter> patternFilters)
       throws RepositoryException
    {
       if (!cache.isEnabled())
       {
-         return super.getChildPropertiesData(nodeData, patternFilters);
+         return executeAction(new PrivilegedExceptionAction<List<PropertyData>>()
+         {
+            public List<PropertyData> run() throws RepositoryException
+            {
+               return CacheableWorkspaceDataManager.super.getChildPropertiesData(nodeData, patternFilters);
+            }
+         });
       }
 
       if (!cache.isPatternSupported())
@@ -1306,9 +1343,9 @@
          return childPropsList;
       }
 
-      Map<String, PropertyData> childPropsMap = new HashMap<String, PropertyData>();
+      final Map<String, PropertyData> childPropsMap = new HashMap<String, PropertyData>();
 
-      Set<QPathEntryFilter> uncachedPatterns = new HashSet<QPathEntryFilter>();
+      final Set<QPathEntryFilter> uncachedPatterns = new HashSet<QPathEntryFilter>();
       for (int i = 0; i < patternFilters.size(); i++)
       {
          if (patternFilters.get(i).isExactName())
@@ -1405,43 +1442,52 @@
             // execute all patterns and put result in cache
             if (!uncachedPatterns.isEmpty())
             {
-               List<PropertyData> persistedItemList =
-                  super.getChildPropertiesData(nodeData, new ArrayList<QPathEntryFilter>(uncachedPatterns));
-
-               if (persistedItemList.size() > 0)
+               executeAction(new PrivilegedExceptionAction<Void>()
                {
-                  NodeData parent = (NodeData)getItemData(nodeData.getIdentifier());
-                  if (parent != null)
+                  public Void run() throws RepositoryException
                   {
-                     // filter properties list for each exact name
-                     patternIterator = uncachedPatterns.iterator();
-                     while (patternIterator.hasNext())
+                     List<PropertyData> persistedItemList =
+                        CacheableWorkspaceDataManager.super.getChildPropertiesData(nodeData,
+                           new ArrayList<QPathEntryFilter>(uncachedPatterns));
+
+                     if (persistedItemList.size() > 0)
                      {
-                        QPathEntryFilter pattern = patternIterator.next();
-                        List<PropertyData> persistedPropData = (List<PropertyData>)pattern.accept(persistedItemList);
-                        if (pattern.isExactName())
+                        NodeData parent = (NodeData)getItemData(nodeData.getIdentifier());
+                        if (parent != null)
                         {
-                           if (persistedPropData.isEmpty())
+                           // filter properties list for each exact name
+                           Iterator<QPathEntryFilter> patternIterator = uncachedPatterns.iterator();
+                           while (patternIterator.hasNext())
                            {
-                              cache.put(new NullPropertyData(parent, pattern.getQPathEntry()));
+                              QPathEntryFilter pattern = patternIterator.next();
+                              List<PropertyData> persistedPropData =
+                                 (List<PropertyData>)pattern.accept(persistedItemList);
+                              if (pattern.isExactName())
+                              {
+                                 if (persistedPropData.isEmpty())
+                                 {
+                                    cache.put(new NullPropertyData(parent, pattern.getQPathEntry()));
+                                 }
+                                 else
+                                 {
+                                    cache.put(persistedPropData.get(0));
+                                 }
+                              }
+                              else
+                              {
+                                 cache.addChildProperties(parent, pattern, persistedPropData);
+                              }
+
+                              for (PropertyData node : persistedItemList)
+                              {
+                                 childPropsMap.put(node.getIdentifier(), node);
+                              }
                            }
-                           else
-                           {
-                              cache.put(persistedPropData.get(0));
-                           }
                         }
-                        else
-                        {
-                           cache.addChildProperties(parent, pattern, persistedPropData);
-                        }
-
-                        for (PropertyData node : persistedItemList)
-                        {
-                           childPropsMap.put(node.getIdentifier(), node);
-                        }
                      }
+                     return null;
                   }
-               }
+               });
             }
          }
          finally
@@ -1531,7 +1577,7 @@
     * @throws RepositoryException
     *           Repository error
     */
-   protected List<PropertyData> listChildPropertiesData(NodeData nodeData, boolean forcePersistentRead)
+   protected List<PropertyData> listChildPropertiesData(final NodeData nodeData, boolean forcePersistentRead)
       throws RepositoryException
    {
 
@@ -1559,18 +1605,25 @@
                return propertiesList;
             }
          }
-         propertiesList = super.listChildPropertiesData(nodeData);
-         // TODO propertiesList.size() > 0 for SDB
-         if (propertiesList.size() > 0 && cache.isEnabled())
+         return executeAction(new PrivilegedExceptionAction<List<PropertyData>>()
          {
-            NodeData parentData = (NodeData)getItemData(nodeData.getIdentifier());
+            public List<PropertyData> run() throws RepositoryException
+            {
+               List<PropertyData> propertiesList =
+                  CacheableWorkspaceDataManager.super.listChildPropertiesData(nodeData);
+               // TODO propertiesList.size() > 0 for SDB
+               if (propertiesList.size() > 0 && cache.isEnabled())
+               {
+                  NodeData parentData = (NodeData)getItemData(nodeData.getIdentifier());
 
-            if (parentData != null)
-            {
-               cache.addChildPropertiesList(parentData, propertiesList);
+                  if (parentData != null)
+                  {
+                     cache.addChildPropertiesList(parentData, propertiesList);
+                  }
+               }
+               return propertiesList;
             }
-         }
-         return propertiesList;
+         });
       }
       finally
       {

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/FileDigestOutputStream.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/FileDigestOutputStream.java	2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/FileDigestOutputStream.java	2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,9 +18,8 @@
  */
 package org.exoplatform.services.jcr.impl.storage.value.fs;
 
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
-
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.security.DigestOutputStream;
 import java.security.MessageDigest;
@@ -44,7 +43,7 @@
 
    FileDigestOutputStream(File file, MessageDigest digest) throws IOException
    {
-      super(PrivilegedFileHelper.fileOutputStream(file), digest);
+      super(new FileOutputStream(file), digest);
       this.file = file;
    }
 

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/FileValueStorage.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/FileValueStorage.java	2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/FileValueStorage.java	2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,7 +18,6 @@
  */
 package org.exoplatform.services.jcr.impl.storage.value.fs;
 
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
 import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
 import org.exoplatform.services.jcr.impl.storage.value.ValueDataResourceHolder;
 import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
@@ -46,7 +45,7 @@
    public final static String PATH = "path";
 
    /**
-    * Temporary directory name under storage root dir.
+    * Temporarory directopry name under stoprage root dir.
     */
    public static final String TEMP_DIR_NAME = "temp";
 
@@ -58,6 +57,7 @@
 
    /**
     * FileValueStorage constructor.
+    * 
     */
    public FileValueStorage(FileCleaner cleaner)
    {
@@ -67,7 +67,6 @@
    /**
     * {@inheritDoc}
     */
-   @Override
    public void init(Properties props, ValueDataResourceHolder resources) throws IOException,
       RepositoryConfigurationException
    {
@@ -78,7 +77,6 @@
    /**
     * {@inheritDoc}
     */
-   @Override
    public void checkConsistency(WorkspaceStorageConnection dataConnection)
    {
 
@@ -107,23 +105,22 @@
    {
       this.rootDir = new File(rootDirPath);
 
-      if (!PrivilegedFileHelper.exists(rootDir))
+      if (!rootDir.exists())
       {
-         if (PrivilegedFileHelper.mkdirs(rootDir))
+         if (rootDir.mkdirs())
          {
-            log.info("Directory created: " + PrivilegedFileHelper.getAbsolutePath(rootDir));
+            log.info("Directory created: " + rootDir.getAbsolutePath());
 
             // create internal temp dir
             File tempDir = new File(rootDir, TEMP_DIR_NAME);
-            PrivilegedFileHelper.mkdirs(tempDir);
+            tempDir.mkdirs();
 
-            if (PrivilegedFileHelper.exists(tempDir) && PrivilegedFileHelper.isDirectory(tempDir))
+            if (tempDir.exists() && tempDir.isDirectory())
             {
                // care about storage temp dir cleanup
-               for (File tmpf : PrivilegedFileHelper.listFiles(tempDir))
-                  if (!PrivilegedFileHelper.delete(tmpf))
-                     log.warn("Storage temporary directory contains un-deletable file "
-                        + PrivilegedFileHelper.getAbsolutePath(tmpf)
+               for (File tmpf : tempDir.listFiles())
+                  if (!tmpf.delete())
+                     log.warn("Storage temporary directory contains un-deletable file " + tmpf.getAbsolutePath()
                         + ". It's recommended to leave this directory for JCR External Values Storage private use.");
             }
             else
@@ -132,12 +129,12 @@
          }
          else
          {
-            log.warn("Directory IS NOT created: " + PrivilegedFileHelper.getAbsolutePath(rootDir));
+            log.warn("Directory IS NOT created: " + rootDir.getAbsolutePath());
          }
       }
       else
       {
-         if (!PrivilegedFileHelper.isDirectory(rootDir))
+         if (!rootDir.isDirectory())
          {
             throw new RepositoryConfigurationException("File exists but is not a directory " + rootDirPath);
          }

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/SimpleFileIOChannel.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/SimpleFileIOChannel.java	2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/SimpleFileIOChannel.java	2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,7 +18,6 @@
  */
 package org.exoplatform.services.jcr.impl.storage.value.fs;
 
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
 import org.exoplatform.services.jcr.impl.storage.value.ValueDataResourceHolder;
 import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
 
@@ -72,6 +71,6 @@
    @Override
    protected File[] getFiles(String propertyId) throws IOException
    {
-      return PrivilegedFileHelper.listFiles(rootDir, new PropertyIDFilter(propertyId));
+      return rootDir.listFiles(new PropertyIDFilter(propertyId));
    }
 }

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFile.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFile.java	2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFile.java	2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,14 +18,11 @@
  */
 package org.exoplatform.services.jcr.impl.storage.value.fs;
 
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
-import org.exoplatform.commons.utils.SecurityHelper;
 import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
 import org.exoplatform.services.log.ExoLogger;
 import org.exoplatform.services.log.Log;
 
 import java.io.File;
-import java.security.PrivilegedAction;
 
 /**
  * Created by The eXo Platform SAS
@@ -57,16 +54,7 @@
    @Override
    public boolean delete()
    {
-
-      PrivilegedAction<Boolean> action = new PrivilegedAction<Boolean>()
-      {
-         public Boolean run()
-         {
-            return TreeFile.super.delete();
-         }
-      };
-      boolean res = SecurityHelper.doPrivilegedAction(action);
-
+      boolean res = super.delete();
       if (res)
          deleteParent(new File(getParent()));
 
@@ -76,28 +64,27 @@
    protected boolean deleteParent(File fp)
    {
       boolean res = false;
-      String fpPath = PrivilegedFileHelper.getAbsolutePath(fp);
-      String rootPath = PrivilegedFileHelper.getAbsolutePath(rootDir);
+      String fpPath = fp.getAbsolutePath();
+      String rootPath = rootDir.getAbsolutePath();
       if (fpPath.startsWith(rootPath) && fpPath.length() > rootPath.length())
          if (fp.isDirectory())
          {
-            String[] ls = PrivilegedFileHelper.list(fp);;
+            String[] ls = fp.list();
             if (ls != null && ls.length <= 0)
             {
-               if (res = PrivilegedFileHelper.delete(fp))
+               if (res = fp.delete())
                {
                   res = deleteParent(new File(fp.getParent()));
                }
                else
                {
-                  fLog.warn("Parent directory can not be deleted now. " + PrivilegedFileHelper.getAbsolutePath(fp));
-                  cleaner.addFile(new TreeFile(PrivilegedFileHelper.getAbsolutePath(fp), cleaner, rootDir));
+                  fLog.warn("Parent directory can not be deleted now. " + fp.getAbsolutePath());
+                  cleaner.addFile(new TreeFile(fp.getAbsolutePath(), cleaner, rootDir));
                }
             }
          }
          else
-            fLog.warn("Parent can not be a file but found " + PrivilegedFileHelper.getAbsolutePath(fp));
+            fLog.warn("Parent can not be a file but found " + fp.getAbsolutePath());
       return res;
    }
-
 }

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFileIOChannel.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFileIOChannel.java	2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFileIOChannel.java	2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,7 +18,6 @@
  */
 package org.exoplatform.services.jcr.impl.storage.value.fs;
 
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
 import org.exoplatform.services.jcr.impl.storage.value.ValueDataResourceHolder;
 import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
 
@@ -53,26 +52,21 @@
    @Override
    protected File getFile(final String propertyId, final int orderNumber) throws IOException
    {
-
       final TreeFile tfile =
-         new TreeFile(PrivilegedFileHelper.getAbsolutePath(rootDir) + makeFilePath(propertyId, orderNumber), cleaner,
-            rootDir);
-
-      PrivilegedFileHelper.mkdirs(tfile.getParentFile());
-
+         new TreeFile(rootDir.getAbsolutePath() + makeFilePath(propertyId, orderNumber), cleaner, rootDir);
+      mkdirs(tfile.getParentFile()); // make dirs on path
       return tfile;
    }
 
    @Override
    protected File[] getFiles(final String propertyId) throws IOException
    {
-      final File dir = new File(PrivilegedFileHelper.getAbsolutePath(rootDir) + buildPath(propertyId));
-      String[] fileNames = PrivilegedFileHelper.list(dir);
+      final File dir = new File(rootDir.getAbsolutePath() + buildPath(propertyId));
+      String[] fileNames = dir.list();
       File[] files = new File[fileNames.length];
       for (int i = 0; i < fileNames.length; i++)
       {
-         files[i] =
-            new TreeFile(PrivilegedFileHelper.getAbsolutePath(dir) + File.separator + fileNames[i], cleaner, rootDir);
+         files[i] = new TreeFile(dir.getAbsolutePath() + File.separator + fileNames[i], cleaner, rootDir);
       }
       return files;
    }
@@ -164,14 +158,13 @@
       try
       {
          mkdirsLock.acquire();
-         return PrivilegedFileHelper.mkdirs(dir);
+         return dir.mkdirs();
       }
       catch (InterruptedException e)
       {
          // chLog.error("mkdirs error on " + dir.getAbsolutePath() + ". " + e, e);
          // return false;
-         throw new IllegalStateException("mkdirs error on " + PrivilegedFileHelper.getAbsolutePath(dir) + " due to "
-            + e, e);
+         throw new IllegalStateException("mkdirs error on " + dir.getAbsolutePath() + " due to " + e, e);
       }
       finally
       {

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/CASableWriteValue.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/CASableWriteValue.java	2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/CASableWriteValue.java	2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,7 +18,6 @@
  */
 package org.exoplatform.services.jcr.impl.storage.value.fs.operations;
 
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
 import org.exoplatform.services.jcr.datamodel.ValueData;
 import org.exoplatform.services.jcr.impl.dataflow.persistent.StreamPersistedValueData;
 import org.exoplatform.services.jcr.impl.storage.value.ValueDataResourceHolder;
@@ -161,27 +160,26 @@
             }
             catch (RecordAlreadyExistsException e)
             {
-               if (tempFile != null && PrivilegedFileHelper.exists(tempFile) && !PrivilegedFileHelper.delete(tempFile))
+               if (tempFile != null && tempFile.exists() && !tempFile.delete())
                {
-                  LOG.warn("Can't delete CAS temp file. Added to file cleaner. "
-                     + PrivilegedFileHelper.getAbsolutePath(tempFile));
+                  LOG.warn("Can't delete CAS temp file. Added to file cleaner. " + tempFile.getAbsolutePath());
                   cleaner.addFile(tempFile);
                }
                throw new RecordAlreadyExistsException("Write error: " + e, e);
             }
 
-            if (!PrivilegedFileHelper.exists(vcasFile))
+            if (!vcasFile.exists())
             {
                // it's new CAS Value, we have to move temp to vcas location
                // use RENAME only, don't copy - as copy will means that destination already exists etc.
 
                // make sure parent dir exists
-               PrivilegedFileHelper.mkdirs(vcasFile.getParentFile());
+               vcasFile.getParentFile().mkdirs();
                // rename propetynamed file to hashnamed one
-               if (!PrivilegedFileHelper.renameTo(tempFile, vcasFile))
+               if (!tempFile.renameTo(vcasFile))
                {
-                  throw new VCASException("File " + PrivilegedFileHelper.getAbsolutePath(tempFile)
-                     + " can't be renamed to VCAS-named " + PrivilegedFileHelper.getAbsolutePath(vcasFile));
+                  throw new VCASException("File " + tempFile.getAbsolutePath() + " can't be renamed to VCAS-named "
+                     + vcasFile.getAbsolutePath());
                }
             } // else - CASed Value already exists
 
@@ -195,7 +193,7 @@
          finally
          {
             // remove temp file
-            PrivilegedFileHelper.delete(tempFile); // should be ok without file cleaner
+            tempFile.delete(); // should be ok without file cleaner
 
             fileLock.unlock();
          }
@@ -211,7 +209,7 @@
          try
          {
             // delete temp file - it's new file add
-            PrivilegedFileHelper.delete(tempFile); // should be ok without file cleaner
+            tempFile.delete(); // should be ok without file cleaner
          }
          finally
          {

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/DeleteValues.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/DeleteValues.java	2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/DeleteValues.java	2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,7 +18,6 @@
  */
 package org.exoplatform.services.jcr.impl.storage.value.fs.operations;
 
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
 import org.exoplatform.services.jcr.impl.storage.value.ValueDataResourceHolder;
 import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
 
@@ -101,7 +100,7 @@
          {
             for (File f : files)
             {
-               if (!PrivilegedFileHelper.delete(f))
+               if (!f.delete())
                   // TODO possible place of error: FileNotFoundException when we delete/update existing
                   // Value and then add/update again.
                   // After the time the Cleaner will delete the file which is mapped to the Value.

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileIOHelper.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileIOHelper.java	2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileIOHelper.java	2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,7 +18,6 @@
  */
 package org.exoplatform.services.jcr.impl.storage.value.fs.operations;
 
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
 import org.exoplatform.services.jcr.datamodel.ValueData;
 import org.exoplatform.services.jcr.impl.dataflow.persistent.ByteArrayPersistedValueData;
 import org.exoplatform.services.jcr.impl.dataflow.persistent.FilePersistedValueData;
@@ -73,17 +72,18 @@
     * @throws IOException
     *           if error
     */
-   protected ValueData readValue(final File file, final int orderNum, final int maxBufferSize) throws IOException
+   protected ValueData readValue(File file, int orderNum, int maxBufferSize) throws IOException
    {
-      long fileSize = PrivilegedFileHelper.length(file);
 
+      long fileSize = file.length();
+
       if (fileSize > maxBufferSize)
       {
          return new FilePersistedValueData(orderNum, file);
       }
       else
       {
-         FileInputStream is = PrivilegedFileHelper.fileInputStream(file);
+         FileInputStream is = new FileInputStream(file);
          try
          {
             int buffSize = (int)fileSize;
@@ -137,9 +137,9 @@
     * @throws IOException
     *           if error occurs
     */
-   protected void writeByteArrayValue(final File file, final ValueData value) throws IOException
+   protected void writeByteArrayValue(File file, ValueData value) throws IOException
    {
-      OutputStream out = PrivilegedFileHelper.fileOutputStream(file);
+      OutputStream out = new FileOutputStream(file);
       try
       {
          out.write(value.getAsByteArray());
@@ -160,9 +160,8 @@
     * @throws IOException
     *           if error occurs
     */
-   protected void writeStreamedValue(final File file, final ValueData value) throws IOException
+   protected void writeStreamedValue(File file, ValueData value) throws IOException
    {
-      // do what you want
       // stream Value
       if (value instanceof StreamPersistedValueData)
       {
@@ -171,7 +170,7 @@
          if (streamed.isPersisted())
          {
             // already persisted in another Value, copy it to this Value
-            copyClose(streamed.getAsStream(), PrivilegedFileHelper.fileOutputStream(file));
+            copyClose(streamed.getAsStream(), new FileOutputStream(file));
          }
          else
          {
@@ -180,23 +179,23 @@
             if ((tempFile = streamed.getTempFile()) != null)
             {
                // it's spooled Value, try move its file to VS
-               if (!PrivilegedFileHelper.renameTo(tempFile, file))
+               if (!tempFile.renameTo(file))
                {
                   // not succeeded - copy bytes, temp file will be deleted by transient ValueData
                   if (LOG.isDebugEnabled())
                   {
-                     LOG.debug("Value spool file move (rename) to Values Storage is not succeeded. "
-                              + "Trying bytes copy. Spool file: " + PrivilegedFileHelper.getAbsolutePath(tempFile)
-                              + ". Destination: " + PrivilegedFileHelper.getAbsolutePath(file));
+                     LOG
+                        .debug("Value spool file move (rename) to Values Storage is not succeeded. Trying bytes copy. Spool file: "
+                           + tempFile.getAbsolutePath() + ". Destination: " + file.getAbsolutePath());
                   }
 
-                  copyClose(PrivilegedFileHelper.fileInputStream(tempFile), PrivilegedFileHelper.fileOutputStream(file));
+                  copyClose(new FileInputStream(tempFile), new FileOutputStream(file));
                }
             }
             else
             {
                // not spooled, use client InputStream
-               copyClose(streamed.getStream(), PrivilegedFileHelper.fileOutputStream(file));
+               copyClose(streamed.getStream(), new FileOutputStream(file));
             }
 
             // link this Value to file in VS
@@ -206,7 +205,7 @@
       else
       {
          // copy from Value stream to the file, e.g. from FilePersistedValueData to this Value
-         copyClose(value.getAsStream(), PrivilegedFileHelper.fileOutputStream(file));
+         copyClose(value.getAsStream(), new FileOutputStream(file));
       }
    }
 
@@ -244,7 +243,7 @@
                in = streamed.getStream();
                if (in == null)
                {
-                  in = PrivilegedFileHelper.fileInputStream(streamed.getTempFile());
+                  in = new FileInputStream(streamed.getTempFile());
                }
             }
          }

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileOperation.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileOperation.java	2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileOperation.java	2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,8 +18,6 @@
  */
 package org.exoplatform.services.jcr.impl.storage.value.fs.operations;
 
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
-import org.exoplatform.commons.utils.SecurityHelper;
 import org.exoplatform.services.jcr.impl.storage.value.ValueDataResourceHolder;
 import org.exoplatform.services.jcr.impl.storage.value.ValueOperation;
 import org.exoplatform.services.jcr.impl.storage.value.fs.FileLockException;
@@ -32,8 +30,6 @@
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
 
 /**
  * Created by The eXo Platform SAS.
@@ -63,6 +59,26 @@
    protected static final Log LOG = ExoLogger.getLogger("exo.jcr.component.core.ValueFileOperation");
 
    /**
+    * The local internet address
+    */
+   private static String LOCAL_ADDRESS;
+   static
+   {
+      // TODO this info may be is not necessary
+      try
+      {
+         // get the inet address
+         InetAddress local = InetAddress.getLocalHost();
+         LOCAL_ADDRESS = local.getHostAddress() + " (" + local.getHostName() + ")";
+      }
+      catch (UnknownHostException e)
+      {
+         LOG.warn("Cannot read host address " + e);
+         LOCAL_ADDRESS = "no address, " + e;
+      }      
+   }
+
+   /**
     * File cleaner.
     */
    protected final FileCleaner cleaner;
@@ -128,7 +144,7 @@
          // lock file in temp directory
          lockFile = new File(tempDir, targetFile.getName() + LOCK_FILE_EXTENSION);
 
-         FileOutputStream lout = PrivilegedFileHelper.fileOutputStream(lockFile, true);
+         FileOutputStream lout = new FileOutputStream(lockFile, true);
          lout.write(operationInfo.getBytes()); // TODO write info
          lout.getChannel().lock(); // wait for unlock (on Windows will wait for this JVM too)
 
@@ -158,13 +174,13 @@
          if (lockFileStream != null)
             lockFileStream.close();
 
-         if (!PrivilegedFileHelper.delete(lockFile))
+         if (!lockFile.delete())
          { // TODO don't use FileCleaner, delete should be enough
-            LOG.warn("Cannot delete lock file " + PrivilegedFileHelper.getAbsolutePath(lockFile)
-               + ". Add to the FileCleaner");
+            LOG.warn("Cannot delete lock file " + lockFile.getAbsolutePath() + ". Add to the FileCleaner");
             cleaner.addFile(lockFile);
          }
       }
+
    }
 
    /**
@@ -202,11 +218,11 @@
          // lock in JVM (wait for unlock if required)
          try
          {
-            return resources.aquire(PrivilegedFileHelper.getAbsolutePath(file), new ValueFileLockHolder(file));
+            return resources.aquire(file.getAbsolutePath(), new ValueFileLockHolder(file));
          }
          catch (InterruptedException e)
          {
-            throw new FileLockException("Lock error on " + PrivilegedFileHelper.getAbsolutePath(file), e);
+            throw new FileLockException("Lock error on " + file.getAbsolutePath(), e);
          }
       }
 
@@ -219,7 +235,7 @@
        */
       public boolean unlock() throws IOException
       {
-         return resources.release(PrivilegedFileHelper.getAbsolutePath(file));
+         return resources.release(file.getAbsolutePath());
       }
    }
 
@@ -241,48 +257,7 @@
 
       this.tempDir = tempDir;
 
-      // TODO this info may be is not neccesary
-      String localAddr;
-      try
-      {
-         // get the inet address
-         InetAddress local = null;
-         PrivilegedExceptionAction<InetAddress> action = new PrivilegedExceptionAction<InetAddress>()
-         {
-            public InetAddress run() throws Exception
-            {
-               return InetAddress.getLocalHost();
-            }
-         };
-         try
-         {
-            local = SecurityHelper.doPrivilegedExceptionAction(action);
-         }
-         catch (PrivilegedActionException pae)
-         {
-            Throwable cause = pae.getCause();
-            if (cause instanceof UnknownHostException)
-            {
-               throw (UnknownHostException)cause;
-            }
-            else if (cause instanceof RuntimeException)
-            {
-               throw (RuntimeException)cause;
-            }
-            else
-            {
-               throw new RuntimeException(cause);
-            }
-         }
-
-         localAddr = local.getHostAddress() + " (" + local.getHostName() + ")";
-      }
-      catch (UnknownHostException e)
-      {
-         LOG.warn("Cannot read host address " + e);
-         localAddr = "no address, " + e;
-      }
-      operationInfo = System.currentTimeMillis() + " " + localAddr;
+      operationInfo = System.currentTimeMillis() + " " + LOCAL_ADDRESS;
    }
 
    /**

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/WriteValue.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/WriteValue.java	2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/WriteValue.java	2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,7 +18,6 @@
  */
 package org.exoplatform.services.jcr.impl.storage.value.fs.operations;
 
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
 import org.exoplatform.services.jcr.datamodel.ValueData;
 import org.exoplatform.services.jcr.impl.storage.value.ValueDataResourceHolder;
 import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
@@ -99,7 +98,7 @@
          try
          {
             // be sure the destination dir exists (case for Tree-style storage)
-            PrivilegedFileHelper.mkdirs(file.getParentFile());
+            file.getParentFile().mkdirs();
 
             // write value to the file
             writeValue(file, value);

Modified: jcr/trunk/exo.jcr.component.core/src/test/resources/tsm-excludes.properties
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/resources/tsm-excludes.properties	2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/test/resources/tsm-excludes.properties	2011-06-07 06:15:08 UTC (rev 4481)
@@ -5,4 +5,25 @@
 org.exoplatform.services.jcr.api.xa.TestXATransaction.testSimpleGlobalTransaction=begin,commit
 org.exoplatform.services.jcr.api.xa.TestXATransaction.test2GlobalTransactions=begin,commit,suspend,resume
 org.exoplatform.services.jcr.api.xa.TestXATransaction.test2GlobalTransactions2=begin,commit,suspend,resume,rollback
-org.exoplatform.services.jcr.api.xa.TestXATransaction.testLockInTransactions=begin,commit
\ No newline at end of file
+org.exoplatform.services.jcr.api.xa.TestXATransaction.testLockInTransactions=begin,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.write=write,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.writeRead=write,commit,read
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.writeDelete=write,commit,delete
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.writeSameMultivalued=write,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.writeUniqueMultivalued=write,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.writeSameProperties=write,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.writeUniqueProperties=write,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.deleteSameProperty=write,commit,delete
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.deleteUniqueProperty=write,commit,delete
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.addDeleteSharedMultivalued=write,commit,delete
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.writeExisting=write,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileIOChannel.testDelete=write,commit,delete
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileIOChannel.testRead=read,delete,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileIOChannel.testWriteAdd=write,commit,delete
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileIOChannel.testWriteUpdate=writeUpdate
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileIOChannel.testConcurrentRead=write,commit,delete
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileIOChannel.testDeleteLockedFile=write,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileValueIO.testReadByteArrayValueData=testReadValue
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileValueIO.testReadFileValueData=testReadValue
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileValueIO.testWriteFileValueData=testWriteValue,testReadValue
+org.exoplatform.services.jcr.impl.storage.value.fs.TestRemoveFromValueStorage.testRemoveValue=read,getFile
\ No newline at end of file



More information about the exo-jcr-commits mailing list