Skip to content

Commit f4ea567

Browse files
committed
Post attachmentUri dynamic
1 parent c28b8f6 commit f4ea567

File tree

9 files changed

+88
-29
lines changed

9 files changed

+88
-29
lines changed

resource/src/main/kotlin/com/neva/javarel/resource/impl/UrlResource.kt resource/src/main/kotlin/com/neva/javarel/resource/impl/BundleResource.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ import java.io.IOException
99
import java.io.InputStream
1010
import java.net.URL
1111

12-
class UrlResource(override val resolver: ResourceResolver, override val descriptor: ResourceDescriptor, private val url: URL) : AdaptableResource() {
12+
class BundleResource(override val resolver: ResourceResolver, override val descriptor: ResourceDescriptor, private val url: URL) : AdaptableResource() {
1313

1414
override val input: InputStream
1515
get() {
1616
try {
1717
return url.openStream()
1818
} catch (e: IOException) {
19-
throw ResourceException("Cannot read resource content using URL: '$url'")
19+
throw ResourceException("Cannot read bundle resource input using URL: '$url'")
2020
}
2121
}
2222
}

storage/database/src/main/kotlin/com/neva/javarel/storage/database/api/DatabaseAdmin.kt

+5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ import javax.persistence.EntityManager
44

55
interface DatabaseAdmin {
66

7+
/**
8+
* Name of default connection
9+
*/
10+
val connectionDefault : String
11+
712
/**
813
* Select default database
914
*/

storage/database/src/main/kotlin/com/neva/javarel/storage/database/impl/MultiDatabaseAdmin.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@ class MultiDatabaseAdmin : DatabaseAdmin, BundleWatcher {
6464
this.props = props
6565
}
6666

67-
private val nameDefault: String
67+
override val connectionDefault: String
6868
get() = props[NAME_DEFAULT_PROP] as String
6969

7070
override fun database(): Database {
71-
return database(nameDefault)
71+
return database(connectionDefault)
7272
}
7373

7474
@Synchronized

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

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

33
interface RepositoryAdmin {
44

5+
/**
6+
* Name of default connection
7+
*/
8+
val connectionDefault: String
9+
510
/**
611
* Select default repository
712
*/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.neva.javarel.storage.repository.api
2+
3+
import com.mongodb.gridfs.GridFSDBFile
4+
import com.neva.javarel.resource.api.AdaptableResource
5+
import com.neva.javarel.resource.api.ResourceDescriptor
6+
import com.neva.javarel.resource.api.ResourceResolver
7+
import com.neva.javarel.storage.repository.impl.RepositoryFileResourceProvider
8+
import org.bson.types.ObjectId
9+
import java.io.InputStream
10+
11+
class RepositoryFileResource(
12+
val file: GridFSDBFile,
13+
override val descriptor: ResourceDescriptor,
14+
override val resolver: ResourceResolver
15+
) : AdaptableResource() {
16+
17+
companion object {
18+
fun uri(connection: String, fileStore: String, fileId: ObjectId): String {
19+
return uri(connection, fileStore, fileId.toHexString())
20+
}
21+
22+
fun uri(connection: String, fileStore: String, fileId: String): String {
23+
return "${RepositoryFileResourceProvider.PROTOCOL}://$connection/$fileStore/$fileId"
24+
}
25+
}
26+
27+
override val input: InputStream
28+
get() = file.inputStream
29+
30+
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,30 @@
11
package com.neva.javarel.storage.repository.api.repository
22

33
import com.neva.javarel.storage.repository.api.Repository
4+
import org.mongodb.morphia.Key
45
import kotlin.reflect.KClass
56

67
abstract class DomainRepository<T : Any>(protected val base: Repository, protected val domainClass: KClass<T>) {
78

89
val all: List<T>
9-
get() = base.dataStore.createQuery(domainClass.java).asList()
10+
get() {
11+
val entities = base.dataStore.createQuery(domainClass.java).asList()
12+
13+
entities.forEach { lookup(it) }
14+
15+
return entities
16+
}
17+
18+
fun save(entity: T): Key<T> {
19+
val result = base.dataStore.save(entity)
20+
21+
lookup(entity)
22+
23+
return result
24+
}
25+
26+
open protected fun lookup(entity: T) {
27+
// load file related data into entities...
28+
}
1029

1130
}

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ class MultiRepositoryAdmin : RepositoryAdmin, BundleWatcher {
4949
this.props = props
5050
}
5151

52-
private val nameDefault: String
52+
override val connectionDefault: String
5353
get() = props[NAME_DEFAULT_PROP] as String
5454

5555
override fun repository(): Repository {
56-
return repository(nameDefault)
56+
return repository(connectionDefault)
5757
}
5858

5959
override fun repository(connectionName: String): Repository {

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

-18
This file was deleted.

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

+22-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package com.neva.javarel.storage.repository.impl
22

3+
import com.mongodb.gridfs.GridFS
34
import com.neva.javarel.resource.api.Resource
45
import com.neva.javarel.resource.api.ResourceDescriptor
56
import com.neva.javarel.resource.api.ResourceProvider
67
import com.neva.javarel.resource.api.ResourceResolver
78
import com.neva.javarel.storage.repository.api.RepositoryAdmin
9+
import com.neva.javarel.storage.repository.api.RepositoryFileResource
810
import org.apache.felix.scr.annotations.Component
911
import org.apache.felix.scr.annotations.Reference
1012
import org.apache.felix.scr.annotations.Service
@@ -26,17 +28,33 @@ class RepositoryFileResourceProvider : ResourceProvider {
2628
}
2729

2830
override fun provide(resolver: ResourceResolver, descriptor: ResourceDescriptor): Resource? {
31+
var result: Resource? = null
32+
2933
val file = repoAdmin.repository(getConnectionName(descriptor))
3034
.fileStore(getFileStore(descriptor))
3135
.findOne(ObjectId(getFileId(descriptor)))
36+
if (file != null) {
37+
result = RepositoryFileResource(file, descriptor, resolver)
38+
}
3239

33-
return RepositoryFileResource(file, descriptor, resolver)
40+
return result
3441
}
3542

36-
private fun getConnectionName(descriptor: ResourceDescriptor) = descriptor.parts[0]
43+
private fun getConnectionName(descriptor: ResourceDescriptor) = when (descriptor.parts.size) {
44+
3 -> descriptor.parts[0]
45+
else -> repoAdmin.connectionDefault
46+
}
3747

38-
private fun getFileStore(descriptor: ResourceDescriptor) = descriptor.parts[1]
48+
private fun getFileStore(descriptor: ResourceDescriptor) = when (descriptor.parts.size) {
49+
3 -> descriptor.parts[1]
50+
2 -> descriptor.parts[0]
51+
else -> GridFS.DEFAULT_BUCKET
52+
}
3953

40-
private fun getFileId(descriptor: ResourceDescriptor) = descriptor.parts[2]
54+
private fun getFileId(descriptor: ResourceDescriptor) = when (descriptor.parts.size) {
55+
3 -> descriptor.parts[2]
56+
2 -> descriptor.parts[1]
57+
else -> descriptor.parts[0]
58+
}
4159

4260
}

0 commit comments

Comments
 (0)