Skip to content

Commit dba1887

Browse files
committed
prepare next version
1 parent a98f91f commit dba1887

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+506
-22820
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
- **Breaking Change** : dropped => headResult (use now result)
1010
- **Breaking Change** : changed => result (old Option[A], new A) => use resultOption instead
1111
* Add Bulkwrite to Crud Operations
12+
* MongoDAO supports Json Import from File
1213

1314
### 1.8.2
1415

build.sbt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ scalaVersion := crossScalaVersions.value.head
1010

1111
scalacOptions += "-deprecation"
1212

13+
parallelExecution in Test := false
14+
1315
lazy val root = (project in file("."))
1416
.enablePlugins(BuildInfoPlugin)
1517
.settings(

docs/src/main/paradox/database_provider.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ It is used for DatabaseProvider creation.
1717
| userName | used for Authentification | |
1818
| password | used for Authentification | |
1919
| poolOptions | | MongoPoolOptions() |
20+
| compressors | List: zlib, snappy, zstd | List() |
2021
| customClientSettings | | None |
2122

2223

@@ -27,7 +28,6 @@ It is used for DatabaseProvider creation.
2728
| maxConnectionIdleTime | 60 |
2829
| maxSize | 50 |
2930
| minSize | 0 |
30-
| maxWaitQueueSize | 500 |
3131
| DefaultMaintenanceInitialDelay | 0 |
3232

3333

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

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
package com.sfxcode.nosql.mongo
22

3+
import java.nio.charset.Charset
4+
5+
import better.files.{ File, Scanner }
6+
import com.sfxcode.nosql.mongo.bson.DocumentHelper
37
import com.sfxcode.nosql.mongo.database.DatabaseProvider
48
import com.sfxcode.nosql.mongo.operation.Crud
5-
import org.mongodb.scala.{ Document, MongoCollection }
9+
import org.bson.json.JsonParseException
10+
import org.mongodb.scala.{ BulkWriteResult, Document, MongoCollection, SingleObservable }
611

12+
import scala.collection.mutable.ArrayBuffer
713
import scala.reflect.ClassTag
814

915
/**
@@ -27,4 +33,18 @@ abstract class MongoDAO[A](provider: DatabaseProvider, collectionName: String)(i
2733
// internal object for raw document access
2834
object Raw extends MongoDAO[Document](provider, collectionName)
2935

36+
def importJsonFile(file: File): SingleObservable[BulkWriteResult] = {
37+
val docs = new ArrayBuffer[Document]()
38+
try {
39+
if (file.exists) {
40+
val iterator = file.lineIterator(Charset.forName("UTF-8"))
41+
iterator.foreach(line => docs.+=(DocumentHelper.documentFromJsonString(line).get))
42+
}
43+
} catch {
44+
case e: JsonParseException =>
45+
logger.error(e.getMessage, e)
46+
}
47+
Raw.bulkWriteMany(docs.toSeq)
48+
}
49+
3050
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.sfxcode.nosql.mongo.bson
2+
3+
import better.files.{ Scanner, StringSplitter }
4+
import com.typesafe.scalalogging.LazyLogging
5+
import org.mongodb.scala.Document
6+
7+
object DocumentHelper extends LazyLogging {
8+
val SplitterDelimeter = ' '
9+
/*
10+
iso date bugffix
11+
*/
12+
def documentFromJsonString(json: String): Option[Document] = {
13+
var result: Option[Document] = None
14+
15+
try {
16+
result = Some(Document(json))
17+
} catch {
18+
case e: Exception if e.getMessage.contains("parse string as a date") => {
19+
logger.debug("parse error - try to replace iso date")
20+
val scanner = Scanner(json, splitter = StringSplitter.on(SplitterDelimeter))
21+
var i = 0
22+
var datePosition = 0
23+
val resultBuffer = new StringBuffer()
24+
25+
scanner.foreach(s => {
26+
i = i + 1
27+
if ("\"$date\"".equals(s)) {
28+
datePosition = i + 2
29+
}
30+
if (i == datePosition) {
31+
if (s.length == 30 && (s.charAt(24) == '+' || s.charAt(24) == '-')) {
32+
resultBuffer.append(s.substring(0, 27))
33+
resultBuffer.append(":")
34+
resultBuffer.append(s.substring(27))
35+
} else {
36+
resultBuffer.append(s)
37+
}
38+
} else {
39+
resultBuffer.append(s)
40+
}
41+
resultBuffer.append(SplitterDelimeter)
42+
})
43+
result = Some(Document(resultBuffer.toString))
44+
}
45+
}
46+
result
47+
}
48+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.sfxcode.nosql.mongo.operation
22

3+
import better.files.File
34
import com.sfxcode.nosql.mongo.{ Converter, _ }
45
import org.mongodb.scala.bson.conversions.Bson
56
import org.mongodb.scala.model.Filters._

src/test/resources/application.conf

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
test.mongo.database = "test"
22

33
unit.test.mongo {
4-
database = "config_path_test"
4+
database = "simple-mongo-unit-test"
55
host = "localhost"
66
port = 27017
77
applicationName = "simple-mongo-config-test"
@@ -13,7 +13,7 @@ unit.test.mongo {
1313
}
1414

1515
config.test.mongo {
16-
database = "config_path_test"
16+
database = "simple-mongo-unit-test"
1717
host = "localhost"
1818
port = 270007
1919
applicationName = "simple-mongo-config-test"
@@ -25,7 +25,7 @@ config.test.mongo {
2525
}
2626

2727
config.test.auth.mongo {
28-
database = "config_path_test"
28+
database = "simple-mongo-unit-test"
2929
host = "localhost"
3030
port = 270007
3131
applicationName = "simple-mongo-config-test-with-auth"

0 commit comments

Comments
 (0)