Skip to content

Commit 4781066

Browse files
committed
Repository -> Store, introduced repository with oak deps
1 parent cb72018 commit 4781066

File tree

19 files changed

+263
-188
lines changed

19 files changed

+263
-188
lines changed

framework/build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ dependencies {
2626
osgiBundle project(':presentation:view:pebble')
2727
osgiBundle project(':presentation:view:handlebars')
2828
osgiBundle project(':storage:database')
29+
osgiBundle project(':storage:store')
2930
osgiBundle project(':storage:repository')
3031
osgiBundle project(':processing:scheduler')
3132
osgiBundle project(':security:auth')

framework/src/main/kotlin/com/neva/javarel/framework/api/rest/Controller.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import com.neva.javarel.presentation.view.api.View
77
import com.neva.javarel.resource.api.ResourceResolver
88
import com.neva.javarel.security.auth.api.Guard
99
import com.neva.javarel.storage.database.api.DatabaseAdmin
10-
import com.neva.javarel.storage.repository.api.RepositoryAdmin
10+
import com.neva.javarel.storage.store.api.StoreAdmin
1111
import javax.inject.Inject
1212

1313
abstract class Controller {
@@ -19,7 +19,7 @@ abstract class Controller {
1919
protected lateinit var dbAdmin: DatabaseAdmin
2020

2121
@Osgi
22-
protected lateinit var repoAdmin: RepositoryAdmin
22+
protected lateinit var storeAdmin: StoreAdmin
2323

2424
@Osgi
2525
protected lateinit var urlGenerator: UrlGenerator

settings.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@ include ':presentation:view:handlebars'
1010
include ':processing:scheduler'
1111
include ':security:auth'
1212
include ':storage:database'
13+
include ':storage:store'
1314
include ':storage:repository'
1415
include ':framework'

storage/database/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ buildscript {
22
apply from: rootProject.file('buildscript.gradle'), to: buildscript
33
}
44

5-
description = 'Javarel :: Storage Database (JPA)'
5+
description = 'Javarel :: Storage Database'
66

77
apply plugin: 'kotlin'
88
apply plugin: 'maven-publish'

storage/repository/build.gradle

+2-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ buildscript {
22
apply from: rootProject.file('buildscript.gradle'), to: buildscript
33
}
44

5-
description = 'Javarel :: Storage Repository (Morphia)'
5+
description = 'Javarel :: Storage Repository'
66

77
apply plugin: 'kotlin'
88
apply plugin: 'maven-publish'
@@ -20,8 +20,5 @@ dependencies {
2020
compile project(':foundation')
2121
compile project(':resource')
2222

23-
osgiBundle 'org.mongodb.morphia:morphia:1.2.1', { transitive = false }
24-
osgiBundle group: 'org.apache.servicemix.bundles', name: 'org.apache.servicemix.bundles.cglib', version: '3.2.4_1'
25-
osgiBundle group: 'com.thoughtworks.proxytoys', name: 'proxytoys', version: '1.0', { transitive = false }
26-
osgiBundle group: 'org.mongodb', name: 'mongo-java-driver', version: '3.3.0', { transitive = false }
23+
// ...
2724
}

storage/repository/src/main/kotlin/com/neva/javarel/storage/repository/api/RepositoryAdmin.kt

-30
This file was deleted.

storage/repository/src/main/kotlin/com/neva/javarel/storage/repository/impl/MultiRepositoryAdmin.kt

-120
This file was deleted.

storage/store/build.gradle

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
buildscript {
2+
apply from: rootProject.file('buildscript.gradle'), to: buildscript
3+
}
4+
5+
description = 'Javarel :: Storage Store (noSQL)'
6+
7+
apply plugin: 'kotlin'
8+
apply plugin: 'maven-publish'
9+
apply plugin: 'neva.osgi-module'
10+
apply plugin: 'neva.scr'
11+
12+
jar {
13+
manifest {
14+
name project.description
15+
instruction 'Export-Package', "com.neva.javarel.storage.store.api.*;version=${project.version}"
16+
}
17+
}
18+
19+
dependencies {
20+
compile project(':foundation')
21+
compile project(':resource')
22+
23+
osgiBundle 'org.mongodb.morphia:morphia:1.2.1', { transitive = false }
24+
osgiBundle group: 'org.apache.servicemix.bundles', name: 'org.apache.servicemix.bundles.cglib', version: '3.2.4_1'
25+
osgiBundle group: 'com.thoughtworks.proxytoys', name: 'proxytoys', version: '1.0', { transitive = false }
26+
osgiBundle group: 'org.mongodb', name: 'mongo-java-driver', version: '3.3.0', { transitive = false }
27+
}

storage/repository/src/main/kotlin/com/neva/javarel/storage/repository/api/Repository.kt storage/store/src/main/kotlin/com/neva/javarel/storage/store/api/Store.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
package com.neva.javarel.storage.repository.api
1+
package com.neva.javarel.storage.store.api
22

33
import com.mongodb.DB
44
import com.mongodb.gridfs.GridFS
55
import org.mongodb.morphia.Datastore
66

7-
interface Repository {
7+
interface Store {
88

9-
val connection: RepositoryConnection
9+
val connection: StoreConnection
1010

1111
val db: DB
1212

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.neva.javarel.storage.store.api
2+
3+
interface StoreAdmin {
4+
5+
/**
6+
* Name of default connection
7+
*/
8+
val connectionDefault: String
9+
10+
/**
11+
* Select default store
12+
*/
13+
fun store(): Store
14+
15+
/**
16+
* Select one of available stores using connection name
17+
*/
18+
fun store(connectionName: String): Store
19+
20+
/**
21+
* Available store connections
22+
*/
23+
val connections: Set<StoreConnection>
24+
25+
/**
26+
* Connected stores
27+
*/
28+
val connectedStores: Set<Store>
29+
30+
}

storage/repository/src/main/kotlin/com/neva/javarel/storage/repository/api/RepositoryConnection.kt storage/store/src/main/kotlin/com/neva/javarel/storage/store/api/StoreConnection.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package com.neva.javarel.storage.repository.api
1+
package com.neva.javarel.storage.store.api
22

33
import com.mongodb.MongoClient
44

5-
interface RepositoryConnection {
5+
interface StoreConnection {
66

77
val name : String
88

storage/repository/src/main/kotlin/com/neva/javarel/storage/repository/api/RepositoryException.kt storage/store/src/main/kotlin/com/neva/javarel/storage/store/api/StoreException.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package com.neva.javarel.storage.repository.api
1+
package com.neva.javarel.storage.store.api
22

3-
open class RepositoryException : Exception {
3+
open class StoreException : Exception {
44

55
constructor(message: String) : super(message)
66

storage/repository/src/main/kotlin/com/neva/javarel/storage/repository/api/RepositoryFileResource.kt storage/store/src/main/kotlin/com/neva/javarel/storage/store/api/StoreFileResource.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
package com.neva.javarel.storage.repository.api
1+
package com.neva.javarel.storage.store.api
22

33
import com.mongodb.gridfs.GridFSDBFile
44
import com.neva.javarel.resource.api.AdaptableResource
55
import com.neva.javarel.resource.api.ResourceDescriptor
66
import com.neva.javarel.resource.api.ResourceResolver
7-
import com.neva.javarel.storage.repository.impl.RepositoryFileResourceProvider
7+
import com.neva.javarel.storage.store.impl.StoreFileResourceProvider
88
import java.io.InputStream
99

10-
class RepositoryFileResource(
10+
class StoreFileResource(
1111
val file: GridFSDBFile,
1212
override val descriptor: ResourceDescriptor,
1313
override val resolver: ResourceResolver
1414
) : AdaptableResource() {
1515

1616
companion object {
1717
fun uri(connection: String, fileStore: String, fileId: String): String {
18-
return "${RepositoryFileResourceProvider.PROTOCOL}://$connection/$fileStore/$fileId"
18+
return "${StoreFileResourceProvider.PROTOCOL}://$connection/$fileStore/$fileId"
1919
}
2020
}
2121

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.neva.javarel.storage.store.api.store
2+
3+
import com.neva.javarel.storage.store.api.Store
4+
import org.bson.types.ObjectId
5+
import org.mongodb.morphia.Key
6+
import org.mongodb.morphia.query.Query
7+
import kotlin.reflect.KClass
8+
9+
abstract class DomainStore<T : Any>(protected val base: Store, protected val domainClass: KClass<T>) {
10+
11+
val all: List<T>
12+
get() = fetchQuery(createQuery())
13+
14+
fun save(entity: T): Key<T> {
15+
val result = base.dataStore.save(entity)
16+
17+
init(entity)
18+
19+
return result
20+
}
21+
22+
protected fun createQuery() = base.dataStore.createQuery(domainClass.java)
23+
24+
protected fun fetchQuery(query: Query<T>): List<T> {
25+
val entities = query.asList()
26+
27+
entities.forEach { init(it) }
28+
29+
return entities
30+
}
31+
32+
open protected fun init(entity: T) {
33+
// use file storage to post construct entity
34+
}
35+
36+
fun find(id: String): T? {
37+
val entity = base.dataStore.get<T, ObjectId>(domainClass.java, ObjectId(id))
38+
if (entity != null) {
39+
init(entity)
40+
}
41+
42+
return entity
43+
}
44+
45+
fun delete(entity: T) {
46+
base.dataStore.delete(entity)
47+
}
48+
49+
}

0 commit comments

Comments
 (0)