Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/main/scala/eu/neverblink/jelly/cli/App.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package eu.neverblink.jelly.cli

import caseapp.*
import eu.neverblink.jelly.cli.command.*
import eu.neverblink.jelly.cli.command.rdf.*

/** Main entrypoint.
*/
Expand All @@ -11,4 +12,5 @@ object App extends CommandsEntryPoint:
override def commands: Seq[Command[?]] = Seq(
FoolAround,
Version,
RdfFromJelly,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package eu.neverblink.jelly.cli.command.rdf
import caseapp.*
import eu.neverblink.jelly.cli.JellyCommand

case class FromJellyRdfOptions()

object RdfFromJelly extends JellyCommand[FromJellyRdfOptions]:
override def names: List[List[String]] = List(
List("rdf", "from-jelly"),
)

override def run(options: FromJellyRdfOptions, remainingArgs: RemainingArgs): Unit =
// This is a placeholder for the actual implementation
println("rdf from-jelly")
println(options)
println(remainingArgs)
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package eu.neverblink.jelly.cli.command

import eu.neverblink.jelly.cli.command.helpers.*
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec

class RdfFromJellySpec extends AnyWordSpec with Matchers with CleanUpFilesAfterTest:
"rdf from-jelly command" should {
"be able to convert a Jelly file to NTriples" in {
val jellyFile = DataGenHelper.generateJellyFile(3)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package eu.neverblink.jelly.cli.command.helpers

import org.scalatest.BeforeAndAfterEach
import org.scalatest.wordspec.AnyWordSpec

trait CleanUpFilesAfterTest extends BeforeAndAfterEach {
this: AnyWordSpec =>
override def afterEach(): Unit = {
DataGenHelper.cleanUpFile()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package eu.neverblink.jelly.cli.command.helpers

import eu.ostrzyciel.jelly.convert.jena.riot.JellyLanguage
import org.apache.jena.rdf.model.{Model, ModelFactory, ResourceFactory}
import org.apache.jena.riot.RDFDataMgr

import java.io.FileOutputStream
import java.nio.file.{Files, Paths}
import scala.util.Using

/*
* This class will be used to generate test data
*/
object DataGenHelper:

private val testFile = "testInput.jelly"

/*
* This method generates a triple model with nTriples
* @param nTriples number of triples to generate
* @return Model
*/
def generateTripleModel(nTriples: Int): Model =
val model = ModelFactory.createDefaultModel()
val subStr = "http://example.org/subject"
val predStr = "http://example.org/predicate"
val objStr = "http://example.org/object"
val tripleList = (1 to nTriples).map { i =>
val sub = ResourceFactory.createResource(s"$subStr/$i")
val pred = ResourceFactory.createProperty(s"$predStr/$i")
val obj = ResourceFactory.createResource(s"$objStr/$i")
val stat = ResourceFactory.createStatement(sub, pred, obj)
model.add(stat)
}
model

/* This method generates a Jelly file with nTriples
* @param nTriples number of triples to generate
* @param fileName name of the file to generate
*/
def generateJellyFile(nTriples: Int): Unit =
val model = generateTripleModel(nTriples)
// TODO: Add configurable generation for different variants of Jelly (small strict etc)
Using.resource(FileOutputStream(testFile)) { file =>
RDFDataMgr.write(file, model, JellyLanguage.JELLY)
}

/* This method cleans up the file after the test*/
def cleanUpFile(): Unit =
Files.deleteIfExists(Paths.get(testFile))