From 5ffcf8a467bdee1a85aba3b5aafd04c2be05f486 Mon Sep 17 00:00:00 2001
From: jsteuer <jan.steuer.htw@gmail.com>
Date: Tue, 10 Dec 2019 14:33:51 +0100
Subject: [PATCH] readme tmp

---
 README.md |   85 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 84 insertions(+), 1 deletions(-)

diff --git a/README.md b/README.md
index ecec13f..434a589 100644
--- a/README.md
+++ b/README.md
@@ -22,17 +22,100 @@
     gestartet wurde, kann die API verwendet werden! (Hinweis: durch nachbilden der API kann 
     eine Nutzung ohne IDE ermöglicht werden, siehe `enableOfflineUsageIfNecessary`)
 
+
+### Empfohlenes Vorgehen
+Damit externe Werkzeuge ein einheitliches Verhalten aufweisen, sollte wie folgt vorgegangen werden.
+ 
+Als erstes muss sichergestellt werden, dass die MathCoach IDE API auch verfügbar ist. Dies ist beispielsweise
+nicht der Fall, wenn das Werkzeug ohne die IDE gestartet wurde (und nicht offline-fähig ist) oder diee IDE (aus 
+welchen Gründen auch immer) nicht einsatzbereit ist.
+
+    if(typeof MC !== "undefined"){
+        throw new Error("IDE Lib nicht eingebunden"); // TODO: show error to user
+    }
+    const isReady = await MC.isReady();
+    if(!isReady){ 
+        throw new Error("Die MathCoach-API ist nicht einsatzbereit."); // TODO: show error to user
+    }
+
+Von nun an kann die IDE API vollständig genutzt werden. Zunächst sollte die Kontext-Datei (die Datei,
+mit der das Werkzeug gestartet wurde) geladen werden.
+
+Ist der Inhalt der Kontext-Datei leer, wurde das Werkzeug vermutlich zum ersten mal gestartet das Werkzeug:
+-   Sich initialisieren (z.B. mit einem leeren oder beispielhaften internem Datenmodell)
+-   Das interne Datenmodell in die Kontext-Datei schreiben 
+-   Die zugehörige Aufgabe generieren. Siehe auch `createExerciseFile` weiter unten.
+    
+Andernfalls kann das zuvor gespeichertes Datenmodell in den Editor geladen werden.
+
+Anschließend sollte die generierten Aufgaben in der Vorschau gestartet werden, sodass der Benutzer besser 
+abschätzen kann, wie sich Änderungen im Werkzeug auf die Aufgabe auswirken.
+
+ 
+    let contextFile = await MC.ide.getContextFile(); // Datei, mit der der Editor gestartet wurde 
+    let contextFileContent = await MC.ide.fs.readFile(contextFile);
+    let contextFileIsEmpty = contextFileContent === "";
+ 
+    let exerciseFile = createExerciseFile(contextFile);
+
+    if(contextFileIsEmpty){ 
+        // TODO: init application with new data model (maybe with example contents)
+        // write serialized model to context file, e.g. using JSON.stringify(...)
+        let dataModelAsString = JSON.stringify({/* TODO */});  
+        await MC.ide.fs.writeFile(file, dataModelAsString);     
+        // generate exercise 
+        let generatedExerciseCode = "startup { print('Hallo Welt!') }"; // TODO
+        await MC.ide.fs.writeFile(exerciseFile, generatedExerciseCode);  
+    }else{
+        // TODO: load data model, e.g. using JSON.parse(contextFileContent)
+        // TODO: (overwrite context file and generated exercise file)
+        // TODO: init application based on your data model
+    }
+ 
+    // show preview
+    await MC.ide.navigator.navigateToExercise(exerciseFile);
+
+Jedes Werkzeug sollte über eine "Speichern"-Funktion verfügen, mit der der Benutzer:
+- Das interne Datenmodell in die Kontext-Datei speichert (sodass es später wieder geladen werden kann)
+- Die zugehörige Aufgabe generiert
+- Die Vorschau zur generierten Aufgabe navigiert
+
+
+### Aufgaben-Datei generieren
+
+Die generierte Aufgabe soll wie die Kontext-Datei benannt sein, sodass diese vom Benutzer schnell 
+zugeordnet werden können. Beispielsweise soll ein Werkzeug, welches mit der 
+Kontext-Datei `/path/to/myExercise.mcq.json` gestartet wird die Aufgabe `/path/to/myExercise.groovy` 
+erzeugen.
+
+    /**
+    * Kontext-Datei (z.B. "/path/to/myExercise.mcq.json") auf
+    * Aufgaben-Datei (z.B. "/path/to/myExercise.groovy") abbilden.
+    */
+    export function createExerciseFile(contextFile: MathCoach.File): MathCoach.File {
+        let file: MathCoach.File = {
+            part: contextFile.part, 
+            owner: contextFile.owner, 
+            path: contextFile.path.split(".")[0] + ".groovy"
+        };
+        return file;
+    }
+
+
+
 ### Beispiele
 Im Verzeichnis `./examples/` finden sich Beispiele für externe Werkzeuge. 
 
 ### Hilfunktionen für Werkzeug-Entwickler
 Dieses Paket beinhaltet zusätzlich Hilfsfunktionen für Werkzeug-Entwickler. Beispielsweise kann
 ein Werkzeug ohne IDE-Anbindung genutzt werden, indem die API nachgebildet wird - aktuell auf 
-Basis des LocalStorage des Browsers.
+Basis des LocalStorage des Browsers. Dies ist besonders während der Entwicklung nützlich.  
 
     import { enableOfflineUsageIfNecessary } from "@mathcoach/ide-api";
     let offline: boolean = enableOfflineUsageIfNecessary();
 
+    // now use the IDE API
+
 
 ### Kleinere Werkzeuge
 Für kleiner Werkzeuge bietet es sich an im WWW-Verzeichnis zu entwickeln  (z.B. 

--
Gitblit v1.10.0-SNAPSHOT