Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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.RDFFromJelly

/** 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,20 @@
package eu.neverblink.jelly.cli.command

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

trait CleanUpFilesAfterTest extends BeforeAndAfterEach {
this: AnyWordSpec =>
override def afterEach(): Unit = {
DataGenHelper.cleanUpFile()
}
}

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,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))