Skip to content

Commit cdd9ea7

Browse files
committed
gridfs specs added
1 parent b30ffd6 commit cdd9ea7

File tree

11 files changed

+84
-26
lines changed

11 files changed

+84
-26
lines changed

src/main/scala/com/sfxcode/nosql/mongo/GridFSDAO.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ package com.sfxcode.nosql.mongo
33
import com.sfxcode.nosql.mongo.gridfs.Crud
44
import org.bson.types.ObjectId
55
import org.mongodb.scala.bson.conversions.Bson
6-
import org.mongodb.scala.gridfs.{GridFSBucket, GridFSFile}
6+
import org.mongodb.scala.gridfs.{ GridFSBucket, GridFSFile }
77
import org.mongodb.scala.model.CountOptions
8-
import org.mongodb.scala.{Completed, Document, MongoDatabase, Observable, ReadConcern, ReadPreference, SingleObservable, WriteConcern}
8+
import org.mongodb.scala.{ Completed, Document, MongoDatabase, Observable, ReadConcern, ReadPreference, SingleObservable, WriteConcern }
99

1010
abstract class GridFSDAO(database: MongoDatabase, bucketName: String) extends Crud {
1111

@@ -19,6 +19,8 @@ abstract class GridFSDAO(database: MongoDatabase, bucketName: String) extends Cr
1919

2020
def createrMetadataIndex(key: String, sortAscending: Boolean = true): SingleObservable[String] = Files.createIndexForField(createMetadataKey(key), sortAscending)
2121

22+
def dropIndexForName(name: String): Completed = Files.dropIndexForName(name)
23+
2224
def renameFile(id: ObjectId, newFilename: String): Observable[Completed] = gridfsBucket.rename(id, newFilename)
2325

2426
def renameFile(file: GridFSFile, newFilename: String): Observable[Completed] = gridfsBucket.rename(file.getId, newFilename)

src/main/scala/com/sfxcode/nosql/mongo/gridfs/Base.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
package com.sfxcode.nosql.mongo.gridfs
22

33
import java.nio.channels.AsynchronousFileChannel
4-
import java.nio.file.{OpenOption, Path, StandardOpenOption}
4+
import java.nio.file.{ OpenOption, Path, StandardOpenOption }
55

66
import com.typesafe.scalalogging.LazyLogging
77
import org.mongodb.scala.bson.ObjectId
88
import org.mongodb.scala.gridfs.GridFSBucket
99
import org.mongodb.scala.gridfs.helpers.AsynchronousChannelHelper.channelToOutputStream
10-
import org.mongodb.scala.{Completed, Observable, ReadConcern, ReadPreference, WriteConcern}
10+
import org.mongodb.scala.{ Completed, Observable, ReadConcern, ReadPreference, WriteConcern }
1111

1212
abstract class Base extends LazyLogging {
1313

1414
protected def gridfsBucket: GridFSBucket
1515

16-
def createMetadataKey(key:String):String = {
16+
def createMetadataKey(key: String): String = {
1717
var metadataKey = key
1818
if (!metadataKey.startsWith("metadata"))
1919
metadataKey = "%s.%s".format("metadata", key)

src/main/scala/com/sfxcode/nosql/mongo/gridfs/Crud.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import com.sfxcode.nosql.mongo.Converter
77
import org.bson.types.ObjectId
88
import org.mongodb.scala.gridfs.AsyncInputStream
99
import org.mongodb.scala.gridfs.helpers.AsyncStreamHelper.toAsyncInputStream
10-
import org.mongodb.scala.{Completed, Document, Observable}
10+
import org.mongodb.scala.{ Completed, Document, Observable }
1111

1212
abstract class Crud extends Search {
1313

src/main/scala/com/sfxcode/nosql/mongo/gridfs/Search.scala

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@ abstract class Search extends Base {
1414

1515
def find(key: String, value: Any): GridFSFindObservable = find(equal(key, value))
1616

17-
def findByMetadataValue(key: String, value: Any): GridFSFindObservable = find(createMetadataKey(key), value)
18-
19-
17+
def findByMetadataValue(key: String, value: Any): GridFSFindObservable = find(createMetadataKey(key), value)
2018

2119
}
2220

src/main/scala/com/sfxcode/nosql/mongo/operation/ObservableIncludes.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import java.util.concurrent.TimeUnit
55
import org.mongodb.scala._
66

77
import scala.concurrent.duration.Duration
8-
import scala.concurrent.{Await, Future}
8+
import scala.concurrent.{ Await, Future }
99

1010
object ObservableIncludes extends ObservableIncludes
1111

src/main/scala/com/sfxcode/nosql/mongo/package.scala

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import com.sfxcode.nosql.mongo.operation.ObservableIncludes
66
import org.bson.BsonValue
77
import org.bson.types.ObjectId
88
import org.mongodb.scala.bson.conversions.Bson
9-
import org.mongodb.scala.gridfs.{GridFSFile, GridFSFindObservable}
10-
import org.mongodb.scala.{Document, FindObservable, MongoDatabase, Observable}
9+
import org.mongodb.scala.gridfs.{ GridFSFile, GridFSFindObservable }
10+
import org.mongodb.scala.{ Document, FindObservable, MongoDatabase, Observable }
1111

1212
import scala.collection.JavaConverters._
1313
import scala.language.implicitConversions
@@ -32,7 +32,6 @@ package object mongo extends ObservableIncludes {
3232
documentFromScalaMap(map.toMap)
3333
}
3434

35-
3635
implicit def documentFromScalaMap(map: Map[String, Any]): Document = {
3736
var result = Document()
3837
map.keys.foreach(key => {
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.sfxcode.nosql.mongo.gridfs
2+
3+
import better.files.File
4+
import com.sfxcode.nosql.mongo.gridfs.GridfsDatabase._
5+
import org.bson.types.ObjectId
6+
import org.specs2.mutable.Specification
7+
import org.specs2.specification.BeforeAll
8+
9+
class GridFSDatabaseSpec extends Specification with GridfsDatabaseFunctions with BeforeAll {
10+
11+
"GridFSDatabase" should {
12+
13+
"find file in" in {
14+
val fileName = "scala-logo.jpg"
15+
16+
val file = findImage("filename", fileName)
17+
file.getFilename must be equalTo fileName
18+
19+
}
20+
21+
"find files by metadata valuein" in {
22+
val fileName = "scala-logo.jpg"
23+
24+
var files = findImages("group", "unknown")
25+
files must haveSize(0)
26+
27+
files = findImages("group", "templates")
28+
files must haveSize(1)
29+
}
30+
31+
"insert file in" in {
32+
val fileName = "scala-logo.png"
33+
34+
val oid: ObjectId = insertImage(SourcePath + fileName, ImageMetadata("template1", group = "templates"))
35+
36+
val file = findImage(oid)
37+
file.getFilename must be equalTo fileName
38+
39+
}
40+
41+
}
42+
43+
override def beforeAll(): Unit = {
44+
dropImages
45+
insertImage(SourcePath + "scala-logo.jpg", ImageMetadata("logo2", indexSet = Set(5, 6, 7)))
46+
imagesCount must be equalTo 1
47+
48+
val file = File(TargetPath)
49+
if (!file.exists)
50+
file.createDirectory()
51+
}
52+
}

src/test/scala/com/sfxcode/nosql/mongo/gridfs/GridfsDatabase.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ import com.sfxcode.nosql.mongo.database.DatabaseProvider
77
* GridFS Database Sample
88
*/
99
object GridfsDatabase {
10+
val SourcePath = "src/test/resources/images/"
11+
val TargetPath = "/tmp/_files/"
12+
13+
case class ImageMetadata(name: String, group: String = "logos", version: Int = 1, indexSet: Set[Int] = Set(1, 2, 3))
1014

1115
val database = DatabaseProvider("test")
1216

src/test/scala/com/sfxcode/nosql/mongo/gridfs/GridfsDatabaseApp.scala

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,10 @@ package com.sfxcode.nosql.mongo.gridfs
22

33
import com.sfxcode.nosql.mongo._
44
import org.bson.types.ObjectId
5+
import com.sfxcode.nosql.mongo.gridfs.GridfsDatabase._
56

67
object GridfsDatabaseApp extends App with GridfsDatabaseFunctions {
78

8-
val SourcePath = "src/test/resources/images/"
9-
val TargetPath = "/tmp/"
10-
11-
case class ImageMetadata(name:String, group:String="logos", version:Int =1, indexSet:Set[Int] = Set(1,2,3))
12-
139
dropImages
1410

1511
println(imagesCount)
@@ -21,17 +17,19 @@ object GridfsDatabaseApp extends App with GridfsDatabaseFunctions {
2117

2218
val file = findImage(id.toString)
2319
println(file)
24-
val file2 = findImage(file)
25-
println(file2)
2620

27-
downloadImage(file2,TargetPath + file.getFilename)
21+
val imageFile = findImage(file)
22+
23+
println(imageFile.getChunkSize)
24+
println(imageFile.getMetadata.get("indexSet"))
2825

29-
insertImage(SourcePath + "scala-logo.jpg", ImageMetadata("logo1", indexSet = Set(5,6,7)))
26+
downloadImage(imageFile, TargetPath + file.getFilename)
27+
28+
insertImage(SourcePath + "scala-logo.jpg", ImageMetadata("logo2", indexSet = Set(5, 6, 7)))
3029
println(imagesCount)
3130

3231
val logos = findImages("group", "logos")
3332

3433
println(logos)
3534

36-
3735
}

src/test/scala/com/sfxcode/nosql/mongo/gridfs/GridfsDatabaseFunctions.scala

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,12 @@ import org.mongodb.scala.gridfs.GridFSFile
99

1010
trait GridfsDatabaseFunctions {
1111

12-
def createIndexOnImages(key:String): String =
12+
def createIndexOnImages(key: String): String =
1313
ImageFilesDAO.createrMetadataIndex(key)
1414

15+
def dropIndexOnImages(key: String): Completed =
16+
ImageFilesDAO.dropIndexForName(key)
17+
1518
def deleteImage(id: ObjectId): Completed =
1619
ImageFilesDAO.deleteOne(id)
1720

@@ -30,6 +33,8 @@ trait GridfsDatabaseFunctions {
3033

3134
def findImage(id: ObjectId): GridFSFile = ImageFilesDAO.findById(id)
3235

33-
def findImages(key:String, value:String): List[GridFSFile] = ImageFilesDAO.findByMetadataValue(key, value)
36+
def findImage(key: String, value: String): GridFSFile = ImageFilesDAO.find(key, value)
37+
38+
def findImages(key: String, value: String): List[GridFSFile] = ImageFilesDAO.findByMetadataValue(key, value)
3439

3540
}

0 commit comments

Comments
 (0)