Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

105
LINES

< > BotCompany Repo | #1027558 // Scenarios DB [backup v2]

JavaX source code (Dynamic Module) [tags: use-pretranspiled] - run with: Stefan's OS

Uses 911K of libraries. Click here for Pure Java version (12429L/65K).

!7

concept Scenario {
  S name;
  LS conditions;
  LS actions;

  toString { ret "Scenario " + quote(name); }
}

cmodule Scenarios > DynCRUD<Scenario> {
  transient Scenario selected;
  new L<UndoableWithAnswer> undoList;

  Scenario findConceptWithName(S name) {
    ret conceptWhereCI Scenario(+name);
  }
  
  S answer(S s) {
    ret dm_q(() -> {
      print("answering: " + s);
      new Matches m;

      // undo actions
      
      if "undo" ret singleUndo();
      if "anything to undo"
        ret empty(undoList) ? "Nothing to undo" : n2(undoList, "undoable action");
      if "clear undos" ret "OK" with clearUndos();

      // scenario actions
      
      if "how many scenarios"
        ret str(countConcepts(Scenario));
      if "delete scenario *" {
        S name = $1;
        setField(selected := null);
        Scenario sc = findConceptWithName(name);
        if (sc == null)
 ret format("Scenario * not found", name);
        unregisterConcept(sc);
        addUndo(new UndoDeleteConcept(sc));
        ret format("Scenario * deleted", name);
      }
      if "new scenario *" {
        S name = $1;
        Scenario sc = conceptWhereCI Scenario(+name);
        if (sc != null)
          ret format("Scenario * exists", name);
        setField(selected := uniqCI Scenario(+name));
        addUndo(new UndoCreateConcept(selected.id));
        ret format("Scenario * created", name);
      }
      if "list scenarios"
        ret or2(joinWithComma(collect name(list(Scenario))), "No scenarios defined");
      if "rename scenario * to *" {
        S name1 = $1, name2 = $2;
        if (!eqic(name1, name2)
          && conceptWhereCI Scenario(name := name2) != null)
          ret format("A scenario named * exists", name2);
        Scenario sc = findConceptWithName(name1);
        if (sc == null)
          ret format("Scenario * not found", name1);
        addUndo(new UndoSetConceptField(sc.id, 'name, name1, name2));
        cset(sc, name := name2);
        ret format("Scenario * renamed to *", name1, name2);
      }

      null;
    });
  }

  void addUndo(UndoableWithAnswer undo) {
    if (undo == null) ret;
    undoList.add(undo);
    change();
    print("Undo added: " + undo);
  }

  afterVisualize {
    addComponent(crud.buttons, jbutton("Talk to me", rThread talkToMe));
  }

  void talkToMe enter { dm_showConversationPopupForModule(); }

  void clearUndos q {
    if (empty(undoList)) ret;
    undoList.clear();
    change;
    print("Undo list cleared");
  }

  S singleUndo() {
    UndoableWithAnswer undo = popLast(undoList);
    if (undo == null) ret "Nothing to undo";
    change();
    ret or2(undo.undo(), "Last action undone");
  }

  // API

  UndoableWithAnswer lastUndo() {
    ret dm_q(() -> last(undoList));
  }
}

Author comment

Began life as a copy of #1027443

download  show line numbers  debug dex  old transpilations   

Travelled to 7 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv

No comments. add comment

Snippet ID: #1027558
Snippet name: Scenarios DB [backup v2]
Eternal ID of this version: #1027558/1
Text MD5: 60cd78aad301722e45864e6cfc56b340
Transpilation MD5: c9ba4a68f26186b628fdc64563ea8847
Author: stefan
Category: javax / scenarios
Type: JavaX source code (Dynamic Module)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2020-03-23 21:55:32
Source code size: 2869 bytes / 105 lines
Pitched / IR pitched: No / No
Views / Downloads: 124 / 186
Referenced in: [show references]