You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2010/11/12 21:54:43 UTC

svn commit: r1034561 - in /activemq/activemq-apollo/trunk: apollo-broker/src/test/scala/org/apache/activemq/apollo/broker/perf/ apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/ apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/commands/...

Author: chirino
Date: Fri Nov 12 20:54:42 2010
New Revision: 1034561

URL: http://svn.apache.org/viewvc?rev=1034561&view=rev
Log:
Removed the scala compiler dependency from the FileSupport class.  Made the file operations helpers of the RichFile implicit wrapper.

Modified:
    activemq/activemq-apollo/trunk/apollo-broker/src/test/scala/org/apache/activemq/apollo/broker/perf/LargeInitialDB.scala
    activemq/activemq-apollo/trunk/apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/Apollo.scala
    activemq/activemq-apollo/trunk/apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/commands/Create.scala
    activemq/activemq-apollo/trunk/apollo-util/src/main/scala/org/apache/activemq/apollo/util/FileSupport.scala
    activemq/activemq-apollo/trunk/apollo-util/src/test/scala/org/apache/activemq/apollo/util/FileSupportTest.scala

Modified: activemq/activemq-apollo/trunk/apollo-broker/src/test/scala/org/apache/activemq/apollo/broker/perf/LargeInitialDB.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-broker/src/test/scala/org/apache/activemq/apollo/broker/perf/LargeInitialDB.scala?rev=1034561&r1=1034560&r2=1034561&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-broker/src/test/scala/org/apache/activemq/apollo/broker/perf/LargeInitialDB.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-broker/src/test/scala/org/apache/activemq/apollo/broker/perf/LargeInitialDB.scala Fri Nov 12 20:54:42 2010
@@ -18,16 +18,17 @@
 package org.apache.activemq.apollo.broker.perf
 
 import org.apache.activemq.apollo.broker.Destination
-import tools.nsc.io.Directory
 import org.apache.activemq.apollo.util.metric.MetricAggregator
 import org.apache.activemq.apollo.util.{ServiceControl, FileSupport}
+import FileSupport._
+import java.io.File
 
 trait LargeInitialDB extends PersistentScenario {
   PURGE_STORE = false
   MULTI_BROKER = false
 
-  var original: Directory = null
-  var backup: Directory = null;
+  var original: File = null
+  var backup: File = null;
 
   // Keep it simple.. we are only creating 1 queue with a large number of entries.
   override def partitionedLoad = List(1)
@@ -48,12 +49,12 @@ trait LargeInitialDB extends PersistentS
 
     initBrokers
 
-    original = new Directory(storeDirectory)
+    original = storeDirectory
     if (original.exists) {
-      original.deleteRecursively
-      original.createDirectory(true)
+      original.recursive_delete
+      original.mkdirs
     }
-    backup = FileSupport.toDirectory(storeDirectory.getParent)./(FileSupport.toDirectory("backup"))
+    backup = storeDirectory.getParentFile / "backup"
     cleanBackup
 
     println("Using store at " + original + " and backup at " + backup)
@@ -90,29 +91,29 @@ trait LargeInitialDB extends PersistentS
   def saveDB {
     println("Copying contents of " + original + " to " + backup)
     cleanBackup
-    FileSupport.recursiveCopy(original, backup)
+    original.recursive_copy_to(backup)
     printStores
   }
 
   def printStores {
     println("\nOriginal store")
-    original.deepList().foreach(println)
+    original.recursive_list.foreach(println)
     println("\n\nBackup store")
-    backup.deepList().foreach(println)
+    backup.recursive_list.foreach(println)
   }
 
   def restoreDB {
-    original.deleteRecursively
+    original.recursive_delete
     println("Copying contents of " + backup + " to " + original)
-    FileSupport.recursiveCopy(backup, original)
+    backup.recursive_copy_to(original)
     printStores
   }
 
   def cleanBackup {
     if (backup.exists) {
-      backup.deleteRecursively
+      backup.recursive_delete
     }
-    backup.createDirectory(true)
+    backup.mkdirs
     printStores
   }
 

Modified: activemq/activemq-apollo/trunk/apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/Apollo.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/Apollo.scala?rev=1034561&r1=1034560&r2=1034561&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/Apollo.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/Apollo.scala Fri Nov 12 20:54:42 2010
@@ -63,8 +63,9 @@ class Apollo extends Main with Action {
       protected override def getPrompt = BOLD+"apollo> "+RESET
       protected override def isPrintStackTraces = debug
       protected override def welcome = {
-        val source = getClass().getResourceAsStream("banner.txt")
-        copy(source, session.getConsole())
+        using(getClass().getResourceAsStream("banner.txt")) {source=>
+          copy(source, session.getConsole())
+        }
       }
 
       protected override def setSessionProperties = {}

Modified: activemq/activemq-apollo/trunk/apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/commands/Create.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/commands/Create.scala?rev=1034561&r1=1034560&r2=1034561&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/commands/Create.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/commands/Create.scala Fri Nov 12 20:54:42 2010
@@ -91,10 +91,11 @@ class Create extends Action {
     if( target.exists && !force ) {
       error("The file '%s' already exists.  Use --force to overwrite.".format(target))
     }
-    val out = new FileOutputStream(target)
-    val in = getClass.getResourceAsStream(source)
-    copy(in, out)
-    close(out)
+    using(new FileOutputStream(target)) { out=>
+      using(getClass.getResourceAsStream(source)) { in=>
+        copy(in, out)
+      }
+    }
   }
 
 

Modified: activemq/activemq-apollo/trunk/apollo-util/src/main/scala/org/apache/activemq/apollo/util/FileSupport.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-util/src/main/scala/org/apache/activemq/apollo/util/FileSupport.scala?rev=1034561&r1=1034560&r2=1034561&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-util/src/main/scala/org/apache/activemq/apollo/util/FileSupport.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-util/src/main/scala/org/apache/activemq/apollo/util/FileSupport.scala Fri Nov 12 20:54:42 2010
@@ -16,35 +16,11 @@
  */
 package org.apache.activemq.apollo.util
 
-import tools.nsc.io.Path
-import java.io.{OutputStream, InputStream, File}
+import java.io._
 
 object FileSupport {
 
-  def recursiveCopy(source: Path, target: Path) : Unit = {
-    require(source.isDirectory, source.path + " must be a directory.")
-    if ( !target.exists ) {
-      target.toDirectory.createDirectory()
-    }
-
-    def createOrCopy(file: Path) : Unit = {
-      val newTarget = target / FileSupport.toDirectory(file.name)
-      if (file.isDirectory) {
-        recursiveCopy(file.toDirectory, newTarget)
-      } else {
-        file.toFile.copyTo(newTarget)
-      }
-    }
-    source.toDirectory.list.foreach(createOrCopy)
-  }
-
-  def toDirectory(name: String) = {
-    new tools.nsc.io.Directory(new File(name))
-  }
-
-  def toFile(name: String) = {
-    new tools.nsc.io.File(new File(name))
-  }
+  implicit def to_rich_file(file:File):RichFile = new RichFile(file)
 
 
   def system_dir(name:String) = {
@@ -59,31 +35,68 @@ object FileSupport {
     file
   }
 
+  case class RichFile(self:File) {
 
-  class RichFile(file:File) {
-    def / (path:String) = new File(file, path)
-  }
-  implicit def toRichFile(file:File):RichFile = new RichFile(file)
+    def / (path:String) = new File(self, path)
 
+    def copy_to(target:File) = {
+      using(new FileOutputStream(target)){ os=>
+        using(new FileInputStream(self)){ is=>
+          FileSupport.copy(is, os)
+        }
+      }
+    }
 
+    def recursive_list:List[File] = {
+      if( self.isDirectory ) {
+        self :: self.listFiles.toList.flatten( _.recursive_list )
+      } else {
+        self :: Nil
+      }
+    }
+
+    def recursive_delete: Unit = {
+      if( self.exists ) {
+        if( self.isDirectory ) {
+          self.listFiles.foreach(_.recursive_delete)
+        }
+        self.delete
+      }
+    }
+
+    def recursive_copy_to(target: File) : Unit = {
+      if (self.isDirectory) {
+        target.mkdirs
+        self.listFiles.foreach( file=> file.recursive_copy_to( target / file.getName) )
+      } else {
+        self.copy_to(target)
+      }
+    }
+
+  }
+
+  /**
+   * Returns the number of bytes copied.
+   */
   def copy(in: InputStream, out: OutputStream): Long = {
+    var bytesCopied: Long = 0
+    val buffer = new Array[Byte](8192)
+    var bytes = in.read(buffer)
+    while (bytes >= 0) {
+      out.write(buffer, 0, bytes)
+      bytesCopied += bytes
+      bytes = in.read(buffer)
+    }
+    bytesCopied
+  }
+
+  def using[R,C <: Closeable](closable: C)(proc: C=>R) = {
     try {
-      var bytesCopied: Long = 0
-      val buffer = new Array[Byte](8192)
-      var bytes = in.read(buffer)
-      while (bytes >= 0) {
-        out.write(buffer, 0, bytes)
-        bytesCopied += bytes
-        bytes = in.read(buffer)
-      }
-      bytesCopied
+      proc(closable)
     } finally {
-      try { in.close  }  catch { case ignore =>  }
+      try { closable.close  }  catch { case ignore =>  }
     }
   }
 
-  def close(out: OutputStream) = {
-    try { out.close  }  catch { case ignore =>  }
-  }
 
 }
\ No newline at end of file

Modified: activemq/activemq-apollo/trunk/apollo-util/src/test/scala/org/apache/activemq/apollo/util/FileSupportTest.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-util/src/test/scala/org/apache/activemq/apollo/util/FileSupportTest.scala?rev=1034561&r1=1034560&r2=1034561&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-util/src/test/scala/org/apache/activemq/apollo/util/FileSupportTest.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-util/src/test/scala/org/apache/activemq/apollo/util/FileSupportTest.scala Fri Nov 12 20:54:42 2010
@@ -18,47 +18,26 @@
 package org.apache.activemq.apollo.util
 
 import org.scalatest.matchers.ShouldMatchers
-import tools.nsc.io.{Path, File, Directory}
 import collection.mutable.ArrayBuffer
+import java.io.File
+import FileSupport._
 
 class FileSupportTest extends FunSuiteSupport with ShouldMatchers {
 
   test("recursive file copy test") {
 
-    val base = new Directory(basedir)
-    var target = base / FileSupport.toDirectory("target")
+    val source_dir = basedir / "target" / "source-dir"
+    val target_dir = basedir / "target" / "target-dir"
+    List(source_dir, target_dir).foreach(_.recursive_delete)
 
-    val sourceDir: Directory = target / FileSupport.toDirectory("sourceDir")
-    if ( sourceDir.exists ) {
-      sourceDir.deleteRecursively
-    }
-    sourceDir.createDirectory(false)
+    (source_dir / "sub-dir" / "some-file").mkdirs
 
-    val subDir: Directory = sourceDir / FileSupport.toDirectory("subDir")
-    subDir.createDirectory(false)
+    source_dir.recursive_copy_to(target_dir)
 
-    val someFile: File = subDir / FileSupport.toFile("someFile")
-    someFile.createFile(false)
+    val listing = target_dir.recursive_list.map(file => file.getCanonicalPath)
 
-    val targetDir: Directory = target / FileSupport.toDirectory("targetDir")
-    if ( targetDir.exists ) {
-      targetDir.deleteRecursively
-    }
-
-    FileSupport.recursiveCopy(sourceDir, targetDir)
-
-    val listing = new ArrayBuffer[String]
-
-    targetDir.deepList().foreach(file => listing.append(file.toString))
-
-
-
-
-    
-    var expected = (new File(basedir)/"target"/"targetDir"/"subDir").normalize.toString
-    listing should contain( expected )
-    expected = (new File(basedir)/"target"/"targetDir"/"subDir"/"someFile").normalize.toString
-    listing should contain(expected)
+    listing should contain( (basedir/"target"/"target-dir"/"sub-dir").getCanonicalPath  )
+    listing should contain( (basedir/"target"/"target-dir"/"sub-dir"/"some-file").getCanonicalPath )
 
   }