From e587d7e2dd9fe6ff57c7651fdb13a67fc474b659 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sun, 4 Feb 2007 19:21:17 +0000 Subject: r21136: First attempt at implementing add/modify rpc calls. The code does not work, but Derrell asked me to commit to analyze the problem. Simo. (This used to be commit 433591c430891fd5f0859fe3b685287b4fb166e5) --- .../swat/source/class/swat/module/ldbbrowse/Fsm.js | 46 +++++++++++++++++++++- .../swat/source/class/swat/module/ldbbrowse/Gui.js | 2 +- .../class/swat/module/ldbbrowse/LdbModify.js | 41 +++++++++++++++++-- 3 files changed, 83 insertions(+), 6 deletions(-) diff --git a/webapps/swat/source/class/swat/module/ldbbrowse/Fsm.js b/webapps/swat/source/class/swat/module/ldbbrowse/Fsm.js index b28a3eb168..b58f4bbaf6 100644 --- a/webapps/swat/source/class/swat/module/ldbbrowse/Fsm.js +++ b/webapps/swat/source/class/swat/module/ldbbrowse/Fsm.js @@ -82,7 +82,10 @@ qx.Proto.buildFsm = function(module) "execute" : { "search" : - "Transition_Idle_to_AwaitRpcResult_via_search" + "Transition_Idle_to_AwaitRpcResult_via_search", + + "commit" : + "Transition_Idle_to_AwaitRpcResult_via_commit" }, // If a previously unexpanded tree node is expanded, issue a request @@ -163,6 +166,47 @@ qx.Proto.buildFsm = function(module) }); state.addTransition(trans); + /* + * Transition: Idle to AwaitRpcResult + * + * Cause: "execute" on OK button + * + * Action: + * Commit modification or add new record to ldb + */ + var trans = new qx.util.fsm.Transition( + "Transition_Idle_to_AwaitRpcResult_via_commit", + { + "nextState" : + "State_AwaitRpcResult", + + "ontransition" : + function(fsm, event) + { + // Get our module descriptor + var module = fsm.getObject("swat.main.module"); + + // Retrieve the database handle + var dbHandle = module.dbHandle; + + // Retrieve the ldbmod object + var ldbmod = fsm.getObject("ldbmod"); + + var ldif = ldbmod.getLdif(); + + // Issue a Search call + var request = _this.callRpc(fsm, + "samba.ldb", + ldbmod.getOpType(), + [ ldif ]); + + // When we get the result, we'll need to know what type of request + // we made. + request.setUserData("requestType", ldbmod.getOpType()); + } + }); + state.addTransition(trans); + /* * Transition: Idle to AwaitRpcResult * diff --git a/webapps/swat/source/class/swat/module/ldbbrowse/Gui.js b/webapps/swat/source/class/swat/module/ldbbrowse/Gui.js index 38f8314bb4..161b99b19a 100644 --- a/webapps/swat/source/class/swat/module/ldbbrowse/Gui.js +++ b/webapps/swat/source/class/swat/module/ldbbrowse/Gui.js @@ -418,7 +418,7 @@ qx.Proto._buildPageBrowse = function(module, page) // Not displayed by default this._ldbmod.setDisplay(false); - fsm.addObject("ldbmod:browse", this._ldbmod); + fsm.addObject("ldbmod", this._ldbmod); splitpane.addRight(this._ldbmod); diff --git a/webapps/swat/source/class/swat/module/ldbbrowse/LdbModify.js b/webapps/swat/source/class/swat/module/ldbbrowse/LdbModify.js index cb1b326d7c..6967a7c353 100644 --- a/webapps/swat/source/class/swat/module/ldbbrowse/LdbModify.js +++ b/webapps/swat/source/class/swat/module/ldbbrowse/LdbModify.js @@ -42,7 +42,7 @@ function(fsm) this._okbtn.addEventListener("execute", fsm.eventListener, fsm); // We'll be receiving events on the object, so save its friendly name - fsm.addObject("domod", this._okbtn, "swat.main.fsmUtils.disable_during_rpc"); + fsm.addObject("commit", this._okbtn, "swat.main.fsmUtils.disable_during_rpc"); // Add the buttons to the hlayout this._hlayout.add(this._leftSpacer, this._cancelbtn, this._okbtn); @@ -51,7 +51,7 @@ function(fsm) this.add(this._mainArea, this._hlayout); // By default this is a new record creator - this._type = "new"; + this._type = "add"; // By default this is inactive this._active = false; @@ -93,7 +93,7 @@ qx.Proto.setBase = function(base) { this.basedn = base; if (this._active) { - if (this._type == "new") { + if (this._type == "add") { this._basedn.setValue(this.basedn); this._basedn.setWidth(8 * this.basedn.length); @@ -106,7 +106,7 @@ qx.Proto.initNew = function(callback, obj) { this._setExitCallback(callback, obj); this._active = true; - this._type = "new"; + this._type = "add"; var hlayout = new qx.ui.layout.HorizontalBoxLayout(); hlayout.set({ height: "auto", spacing: 10 }); @@ -206,6 +206,13 @@ qx.Proto._cancelOp = function() { this._callExitCallback(); } +qx.Proto._okOp = function() { + + //TODO: disable ok/cancel buttons and call fsm instead + this._reset(); + this._callExitCallback(); +} + qx.Proto._addNewAttribute = function(name, value, before) { // do not add a new attribute if the name is null @@ -235,6 +242,8 @@ qx.Proto._addNewAttribute = function(name, value, before) { }, this); hlayout.add(aButton, aLabel, aTextField, rButton); + hlayout.setUserData("attrName", name); + hlayout.setUserData("attrVal", aTextField); if (before) { this._attrArea.addAfter(hlayout, before); @@ -307,3 +316,27 @@ qx.Proto._createAttributesArea = function() { this._mainArea.add(this._attrArea); } + +qx.Proto.getOpType = function() { + return this._type; +} + +qx.Proto.getLdif = function() { + //TODO: modify + if (this._type != "add") { + return null; + } + + var ldif = "# Add operation\n"; + ldif = ldif + "dn: " + this._rdn + "," + this._basedn + "\n"; + + for (var c in this._attrArea.getChildren()) { + if (c instanceof qx.ui.layout.HorizontalBoxLayout) { + ldif = ldif + c.getUserData("attrName") + ": " + c.getUserData("attrVal").getValue() + "\n"; + } + } + // terminate ldif record + ldif = ldif + "\n"; + + return ldif; +} -- cgit