incubator-olio-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ak...@apache.org
Subject svn commit: r805249 - in /incubator/olio/webapp/php/trunk/classes: FileSystem.php LocalFS.php
Date Tue, 18 Aug 2009 02:03:57 GMT
Author: akara
Date: Tue Aug 18 02:03:57 2009
New Revision: 805249

URL: http://svn.apache.org/viewvc?rev=805249&view=rev
Log:
Issue OLIO-40: Changed LocalFS.php to store file in subdirectories.

Modified:
    incubator/olio/webapp/php/trunk/classes/FileSystem.php
    incubator/olio/webapp/php/trunk/classes/LocalFS.php

Modified: incubator/olio/webapp/php/trunk/classes/FileSystem.php
URL: http://svn.apache.org/viewvc/incubator/olio/webapp/php/trunk/classes/FileSystem.php?rev=805249&r1=805248&r2=805249&view=diff
==============================================================================
--- incubator/olio/webapp/php/trunk/classes/FileSystem.php (original)
+++ incubator/olio/webapp/php/trunk/classes/FileSystem.php Tue Aug 18 02:03:57 2009
@@ -32,8 +32,7 @@
   * In the PHP version, the last 2 arguments just default
   * appropriately.
   */
- abstract function create($key, $replication_factor = 2, 
- 						  $overwrite = 'true'); 
+ abstract function create($key, $replication_factor = 2, $overwrite = 'true');
 
  abstract function delete($key);
 

Modified: incubator/olio/webapp/php/trunk/classes/LocalFS.php
URL: http://svn.apache.org/viewvc/incubator/olio/webapp/php/trunk/classes/LocalFS.php?rev=805249&r1=805248&r2=805249&view=diff
==============================================================================
--- incubator/olio/webapp/php/trunk/classes/LocalFS.php (original)
+++ incubator/olio/webapp/php/trunk/classes/LocalFS.php Tue Aug 18 02:03:57 2009
@@ -22,7 +22,7 @@
  * Allows creation, retrieval and storage of files, querying
  * existence of a file, etc.
  */
-
+//require_once("../classes/DirectoryType.php");
 class LocalFS extends FileSystem {
 	
 	function __construct() {
@@ -33,40 +33,189 @@
 		return $this->localFSRoot;
 	}
 
-	function create($filename, $replication_factor='1',
-	 								$overwrite = 'true') {
-		$newfilename = $this->getNewFileName($filename); 
-
-		if ($newfilename == $filename) {
+    /*
+     * This method creates the path that is needed for the file that is to be created/copied
+     * It takes a directoryType and an id.  It then generates the
+     * path and if it does not already exist it creates it. If it is unable to create the
path
+     * it returns false, else it returns true.
+     */
+
+    function createPath($dirType, $identifier)
+    {
+        //build path variables
+        $dirPrimaryPath = sprintf("%03d", $identifier % 1000);
+        $dirSecondaryPath = sprintf("%03d", $identifier / 1000000 % 1000);
+        $base_directory = $this->localFSRoot;
+
+        if($dirType != "invalid")
+        {
+
+            $path = $base_directory . '/' . $dirType . '/' . $dirPrimaryPath . '/' . $dirSecondaryPath;
+            if(is_dir($path) == true)
+            {
 			return true;
+            }else
+            {
+                if(is_dir($base_directory . '/' . $dirType . '/' . $dirPrimaryPath) == true)
+                {
+                    //partial path exists eg /filestore/people/444 initial hash dir exists
+                    //so we need to complete the path
+
+                    if(mkdir($base_directory . '/' . $dirType . '/' . $dirPrimaryPath . '/'
. $dirSecondaryPath, 0777, true) == true)
+                    {
+                        return true;
+                    }else //mkdir($base_directory . '/' . $dirTypeExpanded . '/' . $dirPrimaryPath
. '/' . $dirSecondaryPath, 0777, true) failed
+                    {
+                        return false;
 		}
 		
-		if ($overwrite) {
-			return copy($filename, $newfilename);
-		} else {
-			if (file_exists($newfilename)) {
+
+                }else if(is_dir($base_directory . '/' . $dirType) == true)
+                {
+                    //partial path exists eg /filestore/people initial hash dir does not
exists
+                    //so we need to complete the path
+                    if(mkdir($base_directory . '/' . $dirType . '/' . $dirPrimaryPath, 0777,
true) == true)
+                    {
+                        if(mkdir($base_directory . '/' . $dirType . '/' . $dirPrimaryPath
. '/' . $dirSecondaryPath, 0777, true) == true)
+                        {
+                            return true;
+                        }else //mkdir($base_directory . '/' . $dirType . '/' . $dirPrimaryPath
. '/' . $dirSecondaryPath, 0777, true) failed
+                        {
 				return false;
-			} else {
-				return copy($filename, $newfilename);
 			}
+                    }else //mkdir($base_directory . '/' . $dirType . '/' . $dirPrimaryPath,
0777, true) failed
+                    {
+                        return false;
+                    }
 			
+                }else //the path really is not there so it needs to be created
+                {
+                    if(mkdir($base_directory . '/' . $dirType, 0777, true) == true)
+                    {
+
+                        if(mkdir($base_directory . '/' . $dirType . '/' . $dirPrimaryPath,
0777, true) == true)
+                        {
+                            if(mkdir($base_directory . '/' . $dirType . '/' . $dirPrimaryPath
. '/' . $dirSecondaryPath, 0777, true) == true)
+                            {
+                                return true;
+                            }else //mkdir($base_directory . '/' . $dirType . '/' . $dirPrimaryPath
. '/' . $dirSecondaryPath, 0777, true) failed
+                            {
+                                return false;
 		}		
+                        }else //mkdir($base_directory . '/' . $dirType . '/' . $dirPrimaryPath,
0777, true) failed
+                        {
+                            return false;
+	}
+                    }else //mkdir($base_directory . '/' . $dirType, 0777, true) failed
+                    {
+                        printf("mkdir failed");
+                        return false;
+                    }
+                }//end else path does not exist
+            }//end else whole path does not exist
+	
+        }else //DirectoryType::Decode() returned invalid
+        {
+            return false;
+        }
+    }
+
+    static $typemap = array("p" => "person", "P" => "person",
+                            "e" => "event", "E"=> "event");
+
+    function mapAttributes($filename) {
+        // Do pattern matching and splitting.
+        $prefix = substr($filename, 0, 1);
+        $attrs["type"] = LocalFS::$typemap[$prefix];
+        $dotidx = strrpos($filename, ".");
+        $postfix = substr($filename, $dotidx - 1, 1);
+        if (is_numeric($postfix)) {
+            $attrs["id"] = substr($filename, 1, $dotidx - 1);
+            $attrs["type"] .= "s";
+        } else if ($postfix == "t" || $postfix =="T") {
+            $attrs["id"] = substr($filename, 1, $dotidx - 2);
+            $attrs["type"] .= "Thumbs";
+        } else if ($postfix == "l" || $postfix =="L") {
+            $attrs["id"] = substr($filename, 1, $dotidx - 2);
+            $attrs["type"] .= "Lits";
+        } else {
+            error_log("Invalid file name pattern ".$filename);
+            $attrs["type"] = "invalid";
+        }
+        return $attrs;
+    }
+
+    function create($srcpath, $replication_factor='1',	$overwrite = 'true') {
+        
+        $filename = basename($srcpath); //remove the file's path so we can work with just
the filename.
+        $attrs = $this->mapAttributes($filename);
+	    $destpath = $this->getFullPath($filename, $attrs);
+
+        if ($destpath == "invalid") {
+            printf("Invalid response from getFullPath");
+            return false;
+        } else {
+            if ($overwrite) {
+                //printf("<p>Using overwrite path</p>");
+                if ($this->createPath($attrs["type"], $attrs["id"])) {
+                    //we are assuming that the file will be stored in /tmp
+                    return copy($srcpath, $destpath);
+                } else {//path cretion failed
+                    return false;
+                }
+            } else {//we are not allowing overwrite
+                //printf("<p>Using non-overwrite path</p>");
+                if (file_exists($destpath)) {
+                    return false;
+                } else {  //file does not exist
+                    if ($this->createPath($attrs["type"], $attrs["id"]) == true) {
+                        //we are assuming that the file will be stored in /tmp
+                        return copy("/tmp/" . $filename, $destpath);
+                    } else {//path cretion failed
+                        return false;
+                    }
+                } //end file_exists else
+            } //end overwrite else
+        } //end invalid else
 	}
+
+    
 	
-	function getNewFileName($oldfilename) {
+	/*function getNewFileName($oldfilename) {
 		return $this->localFSRoot . '/' . basename($oldfilename);
+	}*/
+
+    function getFullPath($filename, $attrs = null) {
+        if (is_null($attrs)) {
+            $attrs = $this->mapAttributes($filename);
+        }
+
+        //build path
+        $dirPrimaryPath = sprintf("%03d", $attrs["id"] % 1000);
+        $dirSecondaryPath = sprintf("%03d", $attrs["id"] / 1000000 % 1000);
+
+        $base_directory = $this->localFSRoot;
+
+        if($attrs["type"] != "invalid") {
+            $path = $base_directory . '/' . $attrs["type"] . '/' . $dirPrimaryPath . '/'
. $dirSecondaryPath . '/' . $filename;
+            return $path;
+        } else {
+            //return invalid as a failed message
+            return "invalid";
 	}
+    }
+	
 	
 	function getPaths($filename) {
-	   return array(0 => $this->localFSRoot . '/' . $filename);
+	   return array(0 => $this->getFullPath($filename));
 	}
 
 	/* return true or false */
-	function delete($filename) { return unlink($this->getNewFileName($filename)); }
+	function delete($filename) { return unlink($this->getFullPath($filename)); }
 
 	/* return true or false */
-	function exists($filename) { return file_exists($this->getNewFileName($filename)); }
+	function exists($filename) { return file_exists($this->getFullPath($filename)); }
 
-	function open($filename) { return file_get_contents($this->getNewFileName($filename));
}	
+	function open($filename) { return file_get_contents($this->getFullPath($filename)); }
 }
 ?>



Mime
View raw message