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

119
LINES

< > BotCompany Repo | #1021352 // Gazelle: Rules [Dyn Module]

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

Libraryless. Click here for Pure Java version (20104L/149K).

1  
!7
2  
3  
concept Rule {
4  
  S globalID = aGlobalIDUnlessLoading();
5  
  S text;
6  
  S comments; // used by rule engine
7  
  S notes; // for humans only
8  
9  
  toString {
10  
    ret globalID + ": " + escapeNewLines(rtrim(text));
11  
  }
12  
  
13  
  void change {
14  
    super.change();
15  
    vmBus_send('gazelleRuleChanged, this);
16  
  }
17  
  
18  
  void delete {
19  
    vmBus_send('gazelleRuleDeleted, this);
20  
    super.delete();
21  
  }
22  
}
23  
24  
// Bug when making cmodule
25  
module Rules > DynCRUD<Rule> {
26  
  transient CalculatedConceptFieldIndex<Rule, S> byPurpose;
27  
28  
  enhanceFrame { internalFrameIcon(f, gazelle_frameIcon()); }
29  
  
30  
  start {
31  
    dbIndexing(Rule, 'globalID);
32  
    byPurpose = new CalculatedConceptFieldIndex<Rule, S>(Rule, r -> gazelle_purposeFromComments(r.comments));
33  
    
34  
    addCountToName();
35  
    crud.multiLineFields = litset('text, 'comments);
36  
    crud.dontDuplicateFields = litset('globalID);
37  
    crud.renderer = func(Rule r) -> Map { litorderedmap("Rule ID" := r.globalID, text := joinWithSpace(tlft(r.text)), comments := escapeNewLines(r.comments)) };
38  
    crud.latestFirst = true;
39  
    onConceptsChange(r { vmBus_sendMessage('gazelleRulesChanged, this) });
40  
    conceptsObject().onAllChanged.add(r {
41  
      vmBus_sendMessage('gazelleRulesGlobalChange, this)
42  
    });
43  
    
44  
    // do some logic stuff here for now
45  
    dm_vmBus_onMessage_q('gazelleRuleCreated, voidfunc(O mod, O rule) {
46  
      S ruleID = getString globalID(rule);
47  
      print("wiring statement conditions for new rule: " + ruleID);
48  
      dm_gazelle_wireStatementConditions(ruleID);
49  
    });
50  
  }
51  
  
52  
  // API
53  
  
54  
  Pair<S, Bool> addRule(S when, S then) {
55  
    ret addRule(when + "\n=> " + then);
56  
  }
57  
  
58  
  Pair<S, Bool> addRule(S text) {
59  
    ret addRuleWithComment(text, null);
60  
  }
61  
  
62  
  Pair<S, Bool> addRuleWithComment(S text, S comment) {
63  
    Pair<Rule, Bool> p = uniq2_sync(Rule,
64  
      text := rtrim(text),
65  
      comments := nullIfEmpty(rtrim(comment)));
66  
    if (p.b) vmBus_sendMessage('gazelleRuleCreated, this, p.a);
67  
    ret pair(p.a.globalID, p.b);
68  
  }
69  
  
70  
  PairS textAndCommentForRule(S ruleID) {
71  
    Rule r = conceptWhere Rule(globalID := ruleID);
72  
    ret r == null ? null : pair(r.text, r.comments);
73  
  }
74  
  
75  
  void setRuleText(S ruleID, S text) {
76  
    cset(conceptWhere Rule(globalID := ruleID), +text);
77  
  }
78  
  
79  
  void setComments(S ruleID, S comments) {
80  
    cset(conceptWhere Rule(globalID := ruleID), +comments);
81  
  }
82  
  
83  
  void addComments(S ruleID, S comments) {
84  
    Rule r = conceptWhere Rule(globalID := ruleID);
85  
    if (r != null)
86  
      cset(r, comments := lines_rtrim(uniquifyList(concatLists(lines(r.comments), tlft(comments)))));
87  
  }
88  
  
89  
  void removeComment(S ruleID, S comment) {
90  
    Rule r = conceptWhere Rule(globalID := ruleID);
91  
    if (r == null) ret;
92  
    cset(r, comments := lines_rtrim(listWithout(lines(r.comments), comment)));
93  
  }
94  
  
95  
  S latestRuleID() {
96  
    ret getString globalID(last(concepts()));
97  
  }
98  
  
99  
  void deleteRule(S ruleID) {
100  
    deleteConceptsWhere Rule(globalID := ruleID);
101  
  }
102  
  
103  
  void activateRule(S ruleID) {
104  
    dm_activateOSAndModule(); // TODO: wait
105  
    if (crud.table == null) ret;
106  
    Rule r = conceptWhere Rule(globalID := ruleID);
107  
    if (r == null) ret;
108  
    selectRowIfNotNegative(crud.table, crud.indexOfConcept(r));
109  
  }
110  
  
111  
  // experimental
112  
  L<Rule> rulesForPurpose(S purpose) {
113  
    ret byPurpose.getAll(purpose);
114  
  }
115  
  
116  
  LS rulesWithText(S text) {
117  
    ret collect globalID(conceptsWhere Rule(+text));
118  
  }
119  
}

Author comment

Began life as a copy of #1019783

download  show line numbers  debug dex  old transpilations   

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

No comments. add comment

Snippet ID: #1021352
Snippet name: Gazelle: Rules [Dyn Module]
Eternal ID of this version: #1021352/50
Text MD5: f25997742a76c607f256db92c6db1f98
Transpilation MD5: b09ec3aab6f5fab1994d49a06abb0d89
Author: stefan
Category: javax / a.i.
Type: JavaX source code (Dynamic Module)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2019-03-22 15:10:39
Source code size: 3492 bytes / 119 lines
Pitched / IR pitched: No / No
Views / Downloads: 505 / 7119
Version history: 49 change(s)
Referenced in: [show references]