Skip to content

Commit b7cab5e

Browse files
committed
First draft of resource extension and sample model
0 parents  commit b7cab5e

9 files changed

Lines changed: 142 additions & 0 deletions

File tree

.github/workflows/main.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
name: build-and-test
2+
3+
on:
4+
push:
5+
workflow_dispatch:
6+
7+
env:
8+
LIBERICA_URL: https://download.bell-sw.com/java/17.0.3+7/bellsoft-jdk17.0.3+7-linux-amd64-full.tar.gz
9+
10+
jobs:
11+
build-and-test:
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: actions/checkout@v2
15+
- uses: olafurpg/setup-scala@v10
16+
with:
17+
java-version: liberica@17=tgz+${{ env.LIBERICA_URL }}
18+
- run: sbt -v update compile
19+
- run: sbt -v test

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.bundledFiles
2+
target/
3+
extensions/
4+
/*.jar
5+
/*.zip

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Resource Extension
2+
3+
This extension allows users to access and manipulate the external resources bundled with a model.

build.sbt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import org.nlogo.build.NetLogoExtension
2+
3+
enablePlugins(NetLogoExtension)
4+
5+
version := "1.0.0"
6+
isSnapshot := true
7+
8+
scalaVersion := "2.12.12"
9+
Compile / scalaSource := baseDirectory.value / "src" / "main"
10+
Test / scalaSource := baseDirectory.value / "src" / "test"
11+
scalacOptions ++= Seq("-deprecation", "-unchecked", "-Xfatal-warnings", "-encoding", "us-ascii", "-release", "11")
12+
13+
netLogoExtName := "resource"
14+
netLogoClassManager := "org.nlogo.extensions.resource.ResourceExtension"
15+
netLogoVersion := "6.4.0"
16+
netLogoZipExtras ++= Seq(baseDirectory.value / "README.md", baseDirectory.value / "example-models")

example-models/Resource Example.nlogo

Lines changed: 37 additions & 0 deletions
Large diffs are not rendered by default.

example-models/test.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Hello from an external text file!

project/build.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
sbt.version=1.7.2

project/plugins.sbt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
resolvers += "netlogo-extension-plugin" at "https://dl.cloudsmith.io/public/netlogo/netlogo-extension-plugin/maven/"
2+
3+
addSbtPlugin("org.nlogo" % "netlogo-extension-plugin" % "6.1.0")

src/main/ResourceExtension.scala

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package org.nlogo.extensions.resource
2+
3+
import java.io.File
4+
5+
import org.nlogo.api.{ Argument, Command, Context, DefaultClassManager, ExternalResourceManager, PrimitiveManager,
6+
Reporter }
7+
import org.nlogo.core.{ ExternalResource, Syntax }
8+
9+
import scala.io.Source
10+
11+
class ResourceExtension extends DefaultClassManager {
12+
def load(manager: PrimitiveManager) {
13+
manager.addPrimitive("add-resource", AddResource)
14+
manager.addPrimitive("get-resource", GetResource)
15+
manager.addPrimitive("clear-resources", ClearResources)
16+
}
17+
}
18+
19+
object AddResource extends Command {
20+
override def getSyntax: Syntax =
21+
Syntax.commandSyntax(right = List(Syntax.StringType, Syntax.StringType))
22+
23+
def perform(args: Array[Argument], context: Context) {
24+
if (new File(args(1).getString).isFile) {
25+
val data = Source.fromFile(args(1).getString).getLines.mkString("\n")
26+
27+
context.workspace.getResourceManager.addResource(ExternalResource(args(0).getString, data))
28+
}
29+
30+
else
31+
println(s"File ${args(1).getString} does not existn") // make this show an error dialog
32+
}
33+
}
34+
35+
object GetResource extends Reporter {
36+
override def getSyntax: Syntax =
37+
Syntax.reporterSyntax(right = List(Syntax.StringType), ret = Syntax.StringType)
38+
39+
def report(args: Array[Argument], context: Context): String = {
40+
context.workspace.getResourceManager.getResource(args(0).getString) match {
41+
case Some(data) =>
42+
data
43+
case None =>
44+
println(s"Resource ${args(0).getString} does not exist.") // make this show an error dialog
45+
""
46+
}
47+
}
48+
}
49+
50+
object ClearResources extends Command {
51+
override def getSyntax: Syntax =
52+
Syntax.commandSyntax(right = List())
53+
54+
def perform(args: Array[Argument], context: Context) {
55+
context.workspace.getResourceManager.setResources(Seq())
56+
}
57+
}

0 commit comments

Comments
 (0)