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