Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/converter #80

Open
wants to merge 10 commits into
base: development
Choose a base branch
from
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ sealed case class SaveAsRequest(src: String) extends Request
sealed case class LoadRequest(src: String) extends Request

sealed case class ExportRequest(src: String) extends Request
sealed case class ImportRequest(src: String) extends Request
sealed case class RunRequest(src: String) extends Request

sealed case class CutNodeRequest(id: NodeId, src: String) extends Request
Expand Down Expand Up @@ -118,6 +119,7 @@ sealed case class SaveResponse(loadedFile: Option[File], src: String) extends Re
sealed case class SaveAsResponse(src: String) extends Response
sealed case class LoadResponse(src: String) extends Response

sealed case class ImportResponse(src: String) extends Response
sealed case class ExportResponse(src: String) extends Response
sealed case class RunResponse(fileToRun: File, src: String) extends Response

Expand Down Expand Up @@ -150,6 +152,7 @@ sealed case class SaveData(pluginName: String, data: AstElement, src: String) ex
sealed case class SaveToFile(file: File, src: String) extends Action
sealed case class LoadFromFile(file: File, src: String) extends Action

sealed case class ImportFromFile(file: File, src: String) extends Action
sealed case class ExportToFile(dir: File, filename: String, src: String) extends Action
sealed case class RunStory(fileToRun: File, src: String) extends Action

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@ object EventBus {
eventBus.onNext(event)
}



/**
* Event stream of all `Event`s
*/
Expand All @@ -49,6 +47,7 @@ object EventBus {
val SaveAsRequests = eventBus collect { case e: SaveAsRequest => e }
val LoadRequests = eventBus collect { case e: LoadRequest => e }

val ImportRequests = eventBus collect { case e: ImportRequest => e }
val ExportRequests = eventBus collect { case e: ExportRequest => e }
val RunRequests = eventBus collect { case e: RunRequest => e }

Expand Down Expand Up @@ -80,6 +79,7 @@ object EventBus {
val SaveAsResponses = eventBus collect { case e: SaveAsResponse => e }
val LoadResponses = eventBus collect { case e: LoadResponse => e }

val ImportResponses = eventBus collect { case e: ImportResponse => e }
val ExportResponses = eventBus collect { case e: ExportResponse => e }
val RunResponses = eventBus collect { case e: RunResponse => e }

Expand Down Expand Up @@ -111,13 +111,13 @@ object EventBus {
val SaveToFileEvents = eventBus collect { case e: SaveToFile => e }
val LoadFromFileEvents = eventBus collect { case e: LoadFromFile => e }

val ImportFromFileEvents = eventBus collect { case e: ImportFromFile => e }
val ExportToFileEvents = eventBus collect { case e: ExportToFile => e }
val RunStoryEvents = eventBus collect { case e: RunStory => e }

val CreateStoryEvents = eventBus collect { case e: CreateStory => e }
val UpdateStoryPropertiesEvents = eventBus collect { case e: UpdateStoryProperties => e }


/**
* Event stream of all `Completion`s
*/
Expand Down
2 changes: 2 additions & 0 deletions hypedyn-core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ dependencies {
// For serialisation to JSON (save/load/export)
compile "org.json4s:json4s-native_${rootProject.majorScalaVersion}:3.3.0"

compile "com.lihaoyi:fastparse_2.11:0.3.6"

compile "commons-io:commons-io:2.4"

compile "org.fxmisc.easybind:easybind:1.0.3"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package org.narrativeandplay.hypedyn.events
import java.io.File
import java.nio.file.Files

import scala.util.control.NonFatal

import org.narrativeandplay.hypedyn.logging.Logger
import org.narrativeandplay.hypedyn.plugins.PluginsController
import org.narrativeandplay.hypedyn.serialisation.serialisers._
Expand All @@ -11,8 +13,7 @@ import org.narrativeandplay.hypedyn.story.StoryController
import org.narrativeandplay.hypedyn.story.internal.Story
import org.narrativeandplay.hypedyn.story.rules.{ActionDefinitions, ConditionDefinitions, Fact}
import org.narrativeandplay.hypedyn.undo._

import scala.util.control.NonFatal
import org.narrativeandplay.hypedyn.utils.parsing.SchemeParser

/**
* Main event dispatcher for the core
Expand Down Expand Up @@ -130,6 +131,7 @@ object CoreEventDispatcher {
EventBus.LoadRequests foreach { _ => EventBus.send(LoadResponse(CoreEventSourceIdentity)) }

EventBus.ExportRequests foreach { _ => EventBus.send(ExportResponse(CoreEventSourceIdentity)) }
EventBus.ImportRequests foreach { _ => EventBus.send(ImportResponse(CoreEventSourceIdentity)) }
EventBus.RunRequests foreach { _ =>
val tmpDir = Files.createTempDirectory("hypedyn2").toFile
tmpDir.deleteOnExit()
Expand Down Expand Up @@ -197,6 +199,26 @@ object CoreEventDispatcher {
}
}

EventBus.ImportFromFileEvents foreach { evt =>
val dataToImport = IoController read evt.file
val parseResult = SchemeParser.parse(dataToImport)
val story = parseResult("story").asInstanceOf[Story]
val pluginData = parseResult("plugins").asInstanceOf[AstMap]

Console.println(pluginData.toString)

StoryController.load(story)

loadedFile = None

UndoController.clearHistory()
UndoController.markCurrentPosition()

EventBus.send(StoryLoaded(StoryController.story, CoreEventSourceIdentity))
EventBus.send(DataLoaded(pluginData.toMap, CoreEventSourceIdentity))
EventBus.send(FileLoaded(loadedFile, CoreEventSourceIdentity))
}

EventBus.ExportToFileEvents foreach { evt =>
val exportDirectory = new File(evt.dir, evt.filename.stripSuffix(".dyn2") + "-export")

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package org.narrativeandplay.hypedyn.story

import org.narrativeandplay.hypedyn.story.internal.NodeContent.Ruleset
import org.narrativeandplay.hypedyn.story.internal.Story.Metadata
import org.narrativeandplay.hypedyn.story.internal.{NodeContent, Node, Story}
import org.narrativeandplay.hypedyn.story.InterfaceToImplementationConversions._
import org.narrativeandplay.hypedyn.story.rules.RuleLike.{ParamValue, ParamName}
import org.narrativeandplay.hypedyn.story.internal.{Node, NodeContent, Story}
import org.narrativeandplay.hypedyn.story.rules.RuleLike.ParamValue
import org.narrativeandplay.hypedyn.story.rules._
import org.narrativeandplay.hypedyn.story.rules.internal.Rule

/**
* Controller for handling story-related actions
Expand Down
Loading