Skip to content
This repository was archived by the owner on Aug 18, 2020. It is now read-only.

Commit ac09a8c

Browse files
authored
Merge pull request #9 from derNiklaas/master
Added File Connector
2 parents 45dacb8 + b485e15 commit ac09a8c

File tree

4 files changed

+123
-1
lines changed

4 files changed

+123
-1
lines changed

src/main/scala/org/codeoverflow/chatoverflow/connector/actor/FileSystemActor.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class FileSystemActor extends Actor {
4040
try {
4141
sender ! Some(Files.readAllBytes(fixPath(pathInResources).toPath))
4242
} catch {
43-
case e: Exception => None
43+
case _: Exception => None
4444
}
4545
case SaveFile(pathInResources, content) =>
4646
try {
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.codeoverflow.chatoverflow.requirement.service.file
2+
3+
import org.codeoverflow.chatoverflow.WithLogger
4+
import org.codeoverflow.chatoverflow.connector.Connector
5+
import org.codeoverflow.chatoverflow.connector.actor.FileSystemActor
6+
import org.codeoverflow.chatoverflow.connector.actor.FileSystemActor._
7+
8+
class FileConnector(override val sourceIdentifier: String) extends Connector(sourceIdentifier) with WithLogger {
9+
override protected var requiredCredentialKeys: List[String] = List()
10+
override protected var optionalCredentialKeys: List[String] = List()
11+
private val fileActor = createActor[FileSystemActor]()
12+
13+
def getFile(pathInResources: String): Option[String] = {
14+
val file: Option[Option[String]] = fileActor.??[Some[String]](5) {LoadFile(pathInResources)}
15+
if (file.isDefined) {
16+
file.get
17+
}else{
18+
None
19+
}
20+
}
21+
22+
def getBinaryFile(pathInResources: String): Option[Array[Byte]] = {
23+
val binaryFile: Option[Option[Array[Byte]]] = fileActor.??[Some[Array[Byte]]](5){LoadBinaryFile(pathInResources)}
24+
if(binaryFile.isDefined){
25+
binaryFile.get
26+
}else{
27+
None
28+
}
29+
}
30+
31+
def saveFile(pathInResources: String, content: String): Boolean = fileActor.??[Boolean](5){SaveFile(pathInResources, content)}.get
32+
33+
def saveBinaryFile(pathInResources: String, content: Array[Byte]): Boolean = fileActor.??[Boolean](5){SaveBinaryFile(pathInResources, content)}.get
34+
35+
def createDirectory(folderName: String): Boolean = fileActor.??[Boolean](5){CreateDirectory(folderName)}.get
36+
37+
override def start(): Boolean = {
38+
logger info s"Started file connector! Source identifier is: '$sourceIdentifier'."
39+
true
40+
}
41+
42+
override def stop(): Boolean = {
43+
logger info "Stopped file connector!"
44+
true
45+
}
46+
47+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.codeoverflow.chatoverflow.requirement.service.file.impl
2+
3+
import java.awt.image.BufferedImage
4+
import java.io.ByteArrayInputStream
5+
import java.util.Optional
6+
7+
import javax.imageio.ImageIO
8+
import org.codeoverflow.chatoverflow.WithLogger
9+
import org.codeoverflow.chatoverflow.api.io.input.FileInput
10+
import org.codeoverflow.chatoverflow.registry.Impl
11+
import org.codeoverflow.chatoverflow.requirement.InputImpl
12+
import org.codeoverflow.chatoverflow.requirement.service.file.FileConnector
13+
14+
@Impl(impl = classOf[FileInput], connector = classOf[FileConnector])
15+
class FileInputImpl extends InputImpl[FileConnector] with FileInput with WithLogger {
16+
17+
override def init(): Boolean = {
18+
sourceConnector.get.init()
19+
}
20+
21+
override def getFile(pathInResources: String): Optional[String] = Optional.ofNullable(sourceConnector.get.getFile(pathInResources).orNull)
22+
23+
override def getBinaryFile(pathInResources: String): Optional[Array[Byte]] = Optional.ofNullable(sourceConnector.get.getBinaryFile(pathInResources).orNull)
24+
25+
override def getImage(pathInResources: String): Optional[BufferedImage] = {
26+
val data = sourceConnector.get.getBinaryFile(pathInResources)
27+
if (!data.isDefined) {
28+
None
29+
}
30+
val bis = new ByteArrayInputStream(data.get)
31+
Optional.of(ImageIO.read(bis))
32+
}
33+
34+
override def start(): Boolean = true
35+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.codeoverflow.chatoverflow.requirement.service.file.impl
2+
3+
import java.awt.image.BufferedImage
4+
import java.io.ByteArrayOutputStream
5+
6+
import javax.imageio.ImageIO
7+
import org.codeoverflow.chatoverflow.WithLogger
8+
import org.codeoverflow.chatoverflow.api.io.output.FileOutput
9+
import org.codeoverflow.chatoverflow.registry.Impl
10+
import org.codeoverflow.chatoverflow.requirement.OutputImpl
11+
import org.codeoverflow.chatoverflow.requirement.service.file.FileConnector
12+
13+
@Impl(impl = classOf[FileOutput], connector = classOf[FileConnector])
14+
class FileOutputImpl extends OutputImpl[FileConnector] with FileOutput with WithLogger {
15+
16+
override def init() = {
17+
sourceConnector.get.init()
18+
}
19+
20+
override def saveFile(content: String, pathInResources: String): Boolean = {
21+
sourceConnector.get.saveFile(pathInResources, content)
22+
}
23+
24+
override def saveBinaryFile(bytes: Array[Byte], pathInResources: String): Boolean = {
25+
sourceConnector.get.saveBinaryFile(pathInResources, bytes)
26+
}
27+
28+
override def saveImage(image: BufferedImage, format: String, pathInResources: String): Boolean = {
29+
val bao = new ByteArrayOutputStream()
30+
ImageIO.write(image, format.toLowerCase, bao)
31+
sourceConnector.get.saveBinaryFile(s"$pathInResources.${format.toLowerCase}", bao.toByteArray)
32+
}
33+
34+
override def createDirectory(folderName: String): Boolean = {
35+
sourceConnector.get.createDirectory(folderName)
36+
}
37+
38+
override def start() = true
39+
40+
}

0 commit comments

Comments
 (0)