diff options
author | Andrew Bartlett <abartlet@samba.org> | 2007-09-10 03:44:47 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 15:05:50 -0500 |
commit | 15c1801a5c13479f1bf67e0e3c1ad7c0af8e3af7 (patch) | |
tree | c5bcb824e04cb1de4cccb07a148c113ff1831298 /webapps/swat | |
parent | 37de963f67a1331b6402f901d2bda79b7119a155 (diff) | |
download | samba-15c1801a5c13479f1bf67e0e3c1ad7c0af8e3af7.tar.gz samba-15c1801a5c13479f1bf67e0e3c1ad7c0af8e3af7.tar.bz2 samba-15c1801a5c13479f1bf67e0e3c1ad7c0af8e3af7.zip |
r25051: Move SWAT back to the old-style form-submit modal.
The Web 2.0, async client tools were really interesting, but without
developer backing they remain impossible to support into a release.
The most interesting app was the LDB browser, and I intend to replace
this with phpLdapAdmin, preconfigured for Apache during provision.
This also removes the need to 'compile' SWAT on SVN checkouts.
Andrew Bartlett
(This used to be commit cda965e908055d45b1c05bc29cc791f7238d2fae)
Diffstat (limited to 'webapps/swat')
23 files changed, 0 insertions, 4959 deletions
diff --git a/webapps/swat/Makefile b/webapps/swat/Makefile deleted file mode 100644 index afff0594c1..0000000000 --- a/webapps/swat/Makefile +++ /dev/null @@ -1,104 +0,0 @@ -################################################################################ -# REQUIRED SETTINGS -################################################################################ - -# -# Path to the folder of your qooxdoo distribution. -# Can either be -# a) a path relative to the location of this Makefile (preferred) or -# b) an absolute path starting at the root of your file system -# Example: If you put the skeleton folder next to the qooxdoo SDK folder, -# you can use the following relative path: -# QOOXDOO_PATH = ../qooxdoo-0.6.5-sdk -# -QOOXDOO_PATH = ../qooxdoo-0.6.5-sdk - -# -# Similar to above, but from the webserver point of view. -# Starting point is now the application HTML file of the source folder -# (source/index.html by default). In most cases just prepend a "../" to -# QOOXDOO_PATH from above. -# Example: QOOXDOO_URI = ../../qooxdoo-0.6.5-sdk -# -QOOXDOO_URI = ../../qooxdoo-0.6.5-sdk - - - - - - -################################################################################ -# BASIC SETTINGS -################################################################################ - -# -# Full namespace of your application -# -APPLICATION_NAMESPACE = swat - -# -# Titles used in your API viewer and during the build process -# -APPLICATION_MAKE_TITLE = SWAT -APPLICATION_API_TITLE = Swat - -# -# Additional static files of your application (space separated list) -# -APPLICATION_FILES = index.html - -# -# Locales to build (space separated list) -# To set a specific locale like "en_US" the generic locale "en" has to be added as well -# Example: APPLICATION_LOCALES = en en_US de de_DE es -# -APPLICATION_LOCALES = - - - - - - -################################################################################ -# ADVANCED SETTINGS -################################################################################ - -# -# Please take a look at $(QOOXDOO_PATH)/frontend/framework/tool/make/application.mk -# for an overview of available options -# - -include $(QOOXDOO_PATH)/frontend/framework/tool/make/apiviewer.mk - -APPLICATION_CLASSNAME = $(APPLICATION_NAMESPACE).main.Main -APPLICATION_LINEBREAKS_BUILD = true -APPLICATION_LINEBREAKS_SOURCE = true -APPLICATION_OPTIMIZE_STRINGS = false -APPLICATION_OPTIMIZE_VARIABLES = false -APPLICATION_ADDITIONAL_CLASS_PATH = \ - --class-path $(APIVIEWER_PATH)/source/class \ - --class-uri $(APIVIEWER_PATH)/source/class -APPLICATION_ADDITIONAL_RESOURCE = \ - --resource-input $(APIVIEWER_PATH)/source/resource \ - --resource-output $(APPLICATION_BUILD_PATH)/resource/apiviewer \ - --define-runtime-setting apiviewer.resourceUri:$(APPLICATION_PAGE_TO_TOPLEVEL)/resource/apiviewer -APPLICATION_RESOURCE_FILTER = true -APPLICATION_COMPLETE_SOURCE = false - -# Typically, we just need a "build" -.PHONY: default - -default: build - - -################################################################################ -# INCLUDE CORE -################################################################################ - -ifneq ($(QOOXDOO_PATH),PLEASE_DEFINE_QOOXDOO_PATH) -include $(QOOXDOO_PATH)/frontend/framework/tool/make/targets.mk -include $(QOOXDOO_PATH)/frontend/framework/tool/make/application.mk -endif - -error: - @echo " * Please configure QOOXDOO_PATH" diff --git a/webapps/swat/source/.ignore b/webapps/swat/source/.ignore deleted file mode 100644 index 84f7e31d99..0000000000 --- a/webapps/swat/source/.ignore +++ /dev/null @@ -1 +0,0 @@ -script diff --git a/webapps/swat/source/class/swat/main/AbstractModule.js b/webapps/swat/source/class/swat/main/AbstractModule.js deleted file mode 100644 index bf61a86fd8..0000000000 --- a/webapps/swat/source/class/swat/main/AbstractModule.js +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright: - * (C) 2006 by Derrell Lipman - * All rights reserved - * - * License: - * LGPL 2.1: http://creativecommons.org/licenses/LGPL/2.1/ - */ - -/** - * Abstract Module class. All modules should extend this class. - */ -qx.OO.defineClass("swat.main.AbstractModule", qx.core.Object, -function() -{ - qx.core.Object.call(this); - this.debug("AbstractModule constructor"); -}); - - -/** - * Build the initial finite state machine. - * - * In order to prevent long load times, as minimal as possible of an initial - * FSM should be created. The FSM will receive an "appear" event when the - * module is first selected (and each subsequent time), and the FSM can use - * that event to build the complete FSM. - * - * @param module {swat.main.Module} - * The module descriptor for the module. - */ -qx.Proto.buildInitialFsm = function(module) -{ - // Create a new finite state machine - var fsm = new qx.util.fsm.FiniteStateMachine(module.name); - - // For this simple example application, show all debug messages. - qx.Settings.setCustomOfClass( - "qx.util.fsm.FiniteStateMachine", - "debugFlags", - (qx.util.fsm.FiniteStateMachine.DebugFlags.EVENTS | - qx.util.fsm.FiniteStateMachine.DebugFlags.TRANSITIONS | - qx.util.fsm.FiniteStateMachine.DebugFlags.FUNCTION_DETAIL | - qx.util.fsm.FiniteStateMachine.DebugFlags.OBJECT_NOT_FOUND)); - - /* - * State: Idle - * - * Transition on: - * "appear" on swat.main.canvas - */ - var state = new qx.util.fsm.State( - "State_Idle", - { - "events" : - { - // When we get an appear event the first time, run the transition - // that will load the module's finite state machine and graphical - // user interface. - "appear" : - { - "swat.main.canvas" : - "Transition_Idle_to_Idle_Load_Gui" - } - } - }); - fsm.addState(state); - - /* - * Transition: Idle to (replaced) Idle - * - * Cause: "appear" on canvas for the first time - * - * Action: - * Load module's finite state machine and graphical user interface - */ - var thisModule = this; - var newModule = module; - var trans = new qx.util.fsm.Transition( - "Transition_Idle_to_Idle_Load_Gui", - { - "nextState" : - qx.util.fsm.FiniteStateMachine.StateChange.CURRENT_STATE, - - "ontransition" : - function(fsm, event) - { - // Call the module's initialAppear function to build FSM and GUI. - // That function should *replace* this state, State_Idle, to which - // we'll transition. - var canvas = fsm.getObject("swat.main.canvas"); - canvas.getTopLevelWidget().setGlobalCursor("progress"); - if (! newModule.bLoaded) - { - window.setTimeout( - function() - { - // Call the module's initial appear handler - thisModule.initialAppear(newModule); - - // Regenerate the appear event, since the original one got - // lost by doing this code inside of the timeout. - canvas.createDispatchEvent("appear"); - - // Reset the cursor to the default - canvas.getTopLevelWidget().setGlobalCursor(null); - - }, 0); - newModule.bLoaded = true; - } - } - }); - state.addTransition(trans); - - // Save the finite state machine for this module - module.fsm = fsm; - - // Save the module descriptor in the finite state machine - fsm.addObject("swat.main.module", module); - - // Create an RPC object for use by this module - module.rpc = new qx.io.remote.Rpc(); - module.rpc.setUrl("/services/"); - module.rpc.setTimeout(10000); - module.rpc.setCrossDomain(false); - module.rpc.addEventListener("completed", fsm.eventListener, fsm); - module.rpc.addEventListener("failed", fsm.eventListener, fsm); - module.rpc.addEventListener("timeout", fsm.eventListener, fsm); - module.rpc.addEventListener("aborted", fsm.eventListener, fsm); - fsm.addObject("swat.main.rpc", module.rpc); - - // Start the finite state machine - fsm.start(); -}; - -/** - * Build the initial graphical user interface. - * - * Generally, this is a no-op. - * - * @param module {Object} - * An object containing at least the following properties: - * fsm - - * The finite state machine for this module. It should be filled in - * by this function. - * canvas - - * The canvas on which to create the gui for this module - * name - - * The name of this module - * clazz - - * The class for this module - * - */ -qx.Proto.buildInitialGui = function(module) -{ - // nothing to do -}; - -qx.Proto.finalize = function(module) -{ - this.debug("AbstractModule.finalize()"); -}; - - -/* ---------------------------------------------------------------------------- - DEFER SINGLETON INSTANCE ---------------------------------------------------------------------------- -*/ - -/** - * Singleton Instance Getter - */ -qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/swat/source/class/swat/main/AbstractModuleFsm.js b/webapps/swat/source/class/swat/main/AbstractModuleFsm.js deleted file mode 100644 index 3cf4187676..0000000000 --- a/webapps/swat/source/class/swat/main/AbstractModuleFsm.js +++ /dev/null @@ -1,715 +0,0 @@ -/* - * Copyright: - * (C) 2006 by Derrell Lipman - * All rights reserved - * - * License: - * LGPL 2.1: http://creativecommons.org/licenses/LGPL/2.1/ - */ - -/** - * Common facilities for modules' finite state machines. Each module's FSM - * should extend this class. - */ -qx.OO.defineClass("swat.main.AbstractModuleFsm", qx.core.Object, function() -{ - qx.core.Object.call(this); - - // Create an array for pushing request objects - this._requests = [ ]; -}); - - -qx.Proto.buildFsm = function(module) -{ - throw new Error("Module must overload buildFsm() " + - "to build its custom finite state machine."); -}; - -qx.Proto.addAwaitRpcResultState = function(module, blockedEvents) -{ - var fsm = module.fsm; - var _this = this; - - /* - * State: AwaitRpcResult - * - * Actions upon entry: - * - enable any objects in group "swat.main.fsmUtils.enable_during_rpc" - * - disable any objects in group "swat.main.fsmUtils.disable_during_rpc" - * - * Actions upon exit: - * - disable any objects in group "swat.main.fsmUtils.enable_during_rpc" - * - enable any objects in group "swat.main.fsmUtils.disable_during_rpc" - * - * Transition on: - * "completed" (on RPC) - * "failed" (on RPC) - * "execute" on swat.main.fsmUtils.abort_rpc - */ - - var stateInfo = - { - "autoActionsBeforeOnentry" : - { - // The name of a function. - "setEnabled" : - [ - { - // We want to enable objects in the group - // swat.main.fsmUtils.enable_during_rpc - "parameters" : [ true ], - - // Call this.getObject(<object>).setEnabled(true) on - // state entry, for each <object> in the group called - // "swat.main.fsmUtils.enable_during_rpc". - "groups" : [ "swat.main.fsmUtils.enable_during_rpc" ] - }, - - { - // We want to disable objects in the group - // swat.main.fsmUtils.disable_during_rpc - "parameters" : [ false ], - - // Call this.getObject(<object>).setEnabled(false) on - // state entry, for each <object> in the group called - // "swat.main.fsmUtils.disable_during_rpc". - "groups" : [ "swat.main.fsmUtils.disable_during_rpc" ] - } - ] - }, - - "autoActionsBeforeOnexit" : - { - // The name of a function. - "setEnabled" : - [ - { - // We want to re-disable objects we had enabled, in the group - // swat.main.fsmUtils.enable_during_rpc - "parameters" : [ false ], - - // Call this.getObject(<object>).setEnabled(false) on - // state entry, for each <object> in the group called - // "swat.main.fsmUtils.enable_during_rpc". - "groups" : [ "swat.main.fsmUtils.enable_during_rpc" ] - }, - - { - // We want to re-enable objects we had disabled, in the group - // swat.main.fsmUtils.disable_during_rpc - "parameters" : [ true ], - - // Call this.getObject(<object>).setEnabled(true) on - // state entry, for each <object> in the group called - // "swat.main.fsmUtils.disable_during_rpc". - "groups" : [ "swat.main.fsmUtils.disable_during_rpc" ] - } - ] - }, - - "onentry" : - function(fsm, event) - { - var bAuthCompleted = false; - - // Change the cursor to indicate RPC in progress - var canvas = fsm.getObject("swat.main.canvas"); - canvas.getTopLevelWidget().setGlobalCursor("progress"); - - // See if we just completed an authentication - if (fsm.getPreviousState() == "State_Authenticate" && - event.getType() == "complete") - { - bAuthCompleted = true; - } - - // If we didn't just complete an authentication and we're coming - // from some other state... - if (! bAuthCompleted && - fsm.getPreviousState() != "State_AwaitRpcResult") - { - // ... then push the previous state onto the state stack - fsm.pushState(false); - } - }, - - "onexit" : - function(fsm, event) - { - // If we're returning to the calling state (not going to the - // Authenticate state)... - var nextState = fsm.getNextState(); - if (nextState != "State_Authenticate" && - nextState != "State_AwaitRpcResult") - { - // ... then set the cursor back to normal - var canvas = fsm.getObject("swat.main.canvas"); - canvas.getTopLevelWidget().setGlobalCursor(null); - } - }, - - "events" : - { - "execute" : - { - "swat.main.fsmUtils.abort_rpc" : - "Transition_AwaitRpcResult_to_AwaitRpcResult_via_button_abort" - }, - - "completed" : - "Transition_AwaitRpcResult_to_PopStack_via_complete", - - "failed" : - qx.util.fsm.FiniteStateMachine.EventHandling.PREDICATE - } - }; - - // If there are blocked events specified... - if (blockedEvents) - { - // ... then add them to the state info events object - for (var blockedEvent in blockedEvents) - { - // Ensure it's not already there. Avoid programmer headaches. - if (stateInfo["events"][blockedEvent]) - { - throw new Error("Attempt to add blocked event " + - blockedEvent + " but it is already handled"); - } - - // Add the event. - stateInfo["events"][blockedEvent] = blockedEvents[blockedEvent]; - } - } - - var state = new qx.util.fsm.State( "State_AwaitRpcResult", stateInfo); - fsm.addState(state); - - /*** Transitions that use a PREDICATE appear first ***/ - - /* - * Transition: AwaitRpcResult to GetAuthInfo - * - * Cause: "failed" (on RPC) where reason is PermissionDenied - */ - var trans = new qx.util.fsm.Transition( - "Transition_AwaitRpcResult_to_Authenticate", - { - "nextState" : - "State_Authenticate", - - "predicate" : - function(fsm, event) - { - var error = event.getData(); // retrieve the JSON-RPC error - - // Did we get get origin=Server, and either - // code=NotLoggedIn or code=SessionExpired ? - var origins = swat.main.AbstractModuleFsm.JsonRpc_Origin; - var serverErrors = swat.main.AbstractModuleFsm.JsonRpc_ServerError; - if (error.origin == origins.Server && - (error.code == serverErrors.NotLoggedIn || - error.code == serverErrors.SessionExpired)) - { - return true; - } - - // fall through to next transition, also for "failed" - return false; - }, - - "ontransition" : - function(fsm, event) - { - var caption; - - var error = event.getData(); // retrieve the JSON-RPC error - var serverErrors = swat.main.AbstractModuleFsm.JsonRpc_ServerError; - - switch(error.code) - { - case serverErrors.NotLoggedIn: - caption = "Please log in."; - break; - - case serverErrors.SessionExpired: - default: - caption = "Session Expired. Please log in."; - break; - } - - // Retrieve the modal authentication window. - var loginWin = swat.main.Authenticate.getInstance(); - - // Ensure that it's saved in the current finite state machine - loginWin.addToFsm(fsm); - - // Set the caption - loginWin.setCaption(caption); - - // Set the domain info - loginWin.setInfo(error.info); - - // Open the authentication window - loginWin.open(); - } - }); - state.addTransition(trans); - - /* - * Transition: AwaitRpcResult to PopStack - * - * Cause: "failed" (on RPC) - */ - var trans = new qx.util.fsm.Transition( - "Transition_AwaitRpcResult_to_PopStack_via_failed", - { - "nextState" : - qx.util.fsm.FiniteStateMachine.StateChange.POP_STATE_STACK, - - "ontransition" : - function(fsm, event) - { - // Get the request object - var rpcRequest = _this.getCurrentRpcRequest(); - - // Generate the result for a completed request - rpcRequest.setUserData("result", - { - type : "failed", - data : event.getData() - }); - } - }); - state.addTransition(trans); - - /*** Remaining transitions are accessed via the jump table ***/ - - /* - * Transition: AwaitRpcResult to AwaitRpcResult - * - * Cause: "execute" on swat.main.fsmUtils.abort_rpc - */ - var trans = new qx.util.fsm.Transition( - "Transition_AwaitRpcResult_to_AwaitRpcResult_via_button_abort", - { - "nextState" : - "State_AwaitRpcResult", - - "ontransition" : - function(fsm, event) - { - // Get the request object - var rpcRequest = _this.getCurrentRpcRequest(); - - // Issue an abort for the pending request - rpcRequest.request.abort(); - } - }); - state.addTransition(trans); - - /* - * Transition: AwaitRpcResult to PopStack - * - * Cause: "complete" (on RPC) - */ - var trans = new qx.util.fsm.Transition( - "Transition_AwaitRpcResult_to_PopStack_via_complete", - { - "nextState" : - qx.util.fsm.FiniteStateMachine.StateChange.POP_STATE_STACK, - - "ontransition" : - function(fsm, event) - { - // Get the request object - var rpcRequest = _this.getCurrentRpcRequest(); - - // Generate the result for a completed request - rpcRequest.setUserData("result", - { - type : "complete", - data : event.getData() - }); - } - }); - state.addTransition(trans); - - /* - * State: Authenticate - * - * Transition on: - * "execute" on login_button - */ - var state = new qx.util.fsm.State( - "State_Authenticate", - { - "onentry" : - function(fsm, event) - { - // Retrieve the login window object - var win = fsm.getObject("login_window"); - - // Clear the password field - win.password.setValue(""); - - // If there's no value selected for domain... - if (win.domain.getValue() == null) - { - // ... then select the first value - win.domain.setSelected(win.domain.getList().getFirstChild()); - } - - // Retrieve the current RPC request - var rpcRequest = _this.getCurrentRpcRequest(); - - // Did we just return from an RPC request and was it a login request? - if (fsm.getPreviousState() == "State_AwaitRpcResult" && - rpcRequest.service == "samba.system" && - rpcRequest.params.length > 1 && - rpcRequest.params[1] == "login") - { - // Yup. Display the result. Pop the old request off the stack - var loginRequest = _this.popRpcRequest(); - - // Retrieve the result - var result = loginRequest.getUserData("result"); - - // Did we succeed? - if (result.type == "failed") - { - // Nope. Just reset the caption, and remain in this state. - win.setCaption("Login Failed. Try again."); - } - else - { - // Login was successful. Generate an event that will transition - // us back to the AwaitRpcResult state to again await the result - // of the original RPC request. - win.dispatchEvent(new qx.event.type.Event("complete"), true); - - // Reissue the original request. (We already popped the login - // request off the stack, so the current request is the original - // one.) - var origRequest = _this.getCurrentRpcRequest(); - - // Retrieve the RPC object */ - var rpc = fsm.getObject("swat.main.rpc"); - - // Set the service name - rpc.setServiceName(origRequest.service); - - // Reissue the request - origRequest.request = - qx.io.remote.Rpc.prototype.callAsyncListeners.apply( - rpc, - origRequest.params); - - // Clear the password field, for good measure - win.password.setValue(""); - - // Close the login window - win.close(); - } - - // Dispose of the login request - loginRequest.request.dispose(); - loginRequest.request = null; - } - }, - - "events" : - { - "execute" : - { - "login_button" : - "Transition_Authenticate_to_AwaitRpcResult_via_button_login" - }, - - "complete" : - { - "login_window" : - "Transition_Authenticate_to_AwaitRpcResult_via_complete" - } - } - }); - fsm.addState(state); - - /* - * Transition: Authenticate to AwaitRpcResult - * - * Cause: "execute" on login_button - */ - var trans = new qx.util.fsm.Transition( - "Transition_Authenticate_to_AwaitRpcResult_via_button_login", - { - "nextState" : - "State_AwaitRpcResult", - - "ontransition" : - function(fsm, event) - { - // Retrieve the login window object - var win = fsm.getObject("login_window"); - - // Issue a Login call - _this.callRpc(fsm, - "samba.system", - "login", - [ - win.userName.getValue(), - win.password.getValue(), - win.domain.getValue() - ]); - } - }); - state.addTransition(trans); - - /* - * Transition: Authenticate to AwaitRpcResult - * - * Cause: "complete" on login_window - * - * We've already re-issued the original request, so we have nothing to do - * here but transition back to the AwaitRpcResult state to again await the - * result of the original request. - */ - var trans = new qx.util.fsm.Transition( - "Transition_Authenticate_to_AwaitRpcResult_via_complete", - { - "nextState" : - "State_AwaitRpcResult" - }); - state.addTransition(trans); -}; - - -/** - * Issue a remote procedure call. - * - * @param fsm {qx.util.fsm.FiniteStateMachine} - * The finite state machine issuing this remote procedure call. - * - * @param service {String} - * The name of the remote service which provides the specified method. - * - * @param method {String} - * The name of the method within the specified service. - * - * @param params {Array} - * The parameters to be passed to the specified method. - * - * @return {Object} - * The request object for the just-issued RPC request. - */ -qx.Proto.callRpc = function(fsm, service, method, params) -{ - // Create an object to hold a copy of the parameters. (We need a - // qx.core.Object() to be able to store this in the finite state machine.) - var rpcRequest = new qx.core.Object(); - - // Save the service name - rpcRequest.service = service; - - // Copy the parameters; we'll prefix our copy with additional params - rpcRequest.params = params.slice(0); - - // Prepend the method - rpcRequest.params.unshift(method); - - // Prepend the flag indicating to coalesce failure events - rpcRequest.params.unshift(true); - - // Retrieve the RPC object */ - var rpc = fsm.getObject("swat.main.rpc"); - - // Set the service name - rpc.setServiceName(rpcRequest.service); - - // Issue the request - rpcRequest.request = - qx.io.remote.Rpc.prototype.callAsyncListeners.apply(rpc, - rpcRequest.params); - - // Make the rpc request object available to the AwaitRpcResult state - this.pushRpcRequest(rpcRequest); - - // Give 'em what they came for - return rpcRequest; -}; - - -/** - * Push an RPC request onto the request stack. - * - * @param request {Object} - * The just-issued rpc request object - */ -qx.Proto.pushRpcRequest = function(rpcRequest) -{ - this._requests.push(rpcRequest); -}; - - -/** - * Retrieve the most recent RPC request from the request stack and pop the - * stack. - * - * @return {Object} - * The rpc request object from the top of the request stack - */ -qx.Proto.popRpcRequest = function() -{ - if (this._requests.length == 0) - { - throw new Error("Attempt to pop an RPC request when list is empty."); - } - - var rpcRequest = this._requests.pop(); - return rpcRequest; -}; - - -/** - * Retrieve the most recent RPC request. - * - * @return {Object} - * The rpc request object at the top of the request stack - */ -qx.Proto.getCurrentRpcRequest = function() -{ - if (this._requests.length == 0) - { - throw new Error("Attempt to retrieve an RPC request when list is empty."); - } - - return this._requests[this._requests.length - 1]; -}; - - -/** - * JSON-RPC error origins - */ -qx.Class.JsonRpc_Origin = -{ - Server : 1, - Application : 2, - Transport : 3, - Client : 4 -}; - - -/** - * JSON-RPC Errors for origin == Server - */ -qx.Class.JsonRpc_ServerError = -{ - /** - * Error code, value 0: Unknown Error - * - * The default error code, used only when no specific error code is passed - * to the JsonRpcError constructor. This code should generally not be used. - */ - Unknown : 0, - - /** - * Error code, value 1: Illegal Service - * - * The service name contains illegal characters or is otherwise deemed - * unacceptable to the JSON-RPC server. - */ - IllegalService : 1, - - /** - * Error code, value 2: Service Not Found - * - * The requested service does not exist at the JSON-RPC server. - */ - ServiceNotFound : 2, - - /** - * Error code, value 3: Class Not Found - * - * If the JSON-RPC server divides service methods into subsets (classes), - * this indicates that the specified class was not found. This is slightly - * more detailed than "Method Not Found", but that error would always also - * be legal (and true) whenever this one is returned. (Not used in this - * implementation) - */ - ClassNotFound : 3, // not used in this implementation - - /** - * Error code, value 4: Method Not Found - * - * The method specified in the request is not found in the requested - * service. - */ - MethodNotFound : 4, - - /* - * Error code, value 5: Parameter Mismatch - * - * If a method discovers that the parameters (arguments) provided to it do - * not match the requisite types for the method's parameters, it should - * return this error code to indicate so to the caller. - * - * This error is also used to indicate an illegal parameter value, in server - * scripts. - */ - ParameterMismatch : 5, - - /** - * Error code, value 6: Permission Denied - * - * A JSON-RPC service provider can require authentication, and that - * authentication can be implemented such the method takes authentication - * parameters, or such that a method or class of methods requires prior - * authentication. If the caller has not properly authenticated to use the - * requested method, this error code is returned. - */ - PermissionDenied : 6, - - /*** Errors generated by this server which are not qooxdoo-standard ***/ - - /* - * Error code, value 1000: Unexpected Output - * - * The called method illegally generated output to the browser, which would - * have preceeded the JSON-RPC data. - */ - UnexpectedOutput : 1000, - - /* - * Error code, value 1001: Resource Error - * - * Too many resources were requested, a system limitation on the total number - * of resources has been reached, or a resource or resource id was misused. - */ - ResourceError : 1001, - - /* - * Error code, value 1002: Not Logged In - * - * The user has logged out and must re-authenticate, or this is a brand new - * session and the user must log in. - * - */ - NotLoggedIn : 1002, - - /* - * Error code, value 1003: Session Expired - * - * The session has expired and the user must re-authenticate. - * - */ - SessionExpired : 1003, - - /* - * Error code, value 1004: Login Failed - * - * An attempt to log in failed. - * - */ - LoginFailed : 1004 -}; diff --git a/webapps/swat/source/class/swat/main/Authenticate.js b/webapps/swat/source/class/swat/main/Authenticate.js deleted file mode 100644 index 83e20ce97a..0000000000 --- a/webapps/swat/source/class/swat/main/Authenticate.js +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright: - * (C) 2007 by Derrell Lipman - * All rights reserved - * - * License: - * LGPL 2.1: http://creativecommons.org/licenses/LGPL/2.1/ - */ - -/** - * Swat authentication window class - */ -qx.OO.defineClass("swat.main.Authenticate", qx.ui.window.Window, -function() -{ - var o; - - qx.ui.window.Window.call(this); - - var addCaptionedWidget = function(caption, dest, addWidget) - { - // Add a row to the destination grid - dest.addRow(); - var row = dest.getRowCount() - 1; - dest.setRowHeight(row, 24); - - // Add the caption - var o = new qx.ui.basic.Label(caption); - dest.add(o, 0, row); - - // Add the widget - o = addWidget(); - o.setHeight(24); - dest.add(o, 1, row); - - // Give 'em the varying data label - return o; - }; - - - // Set characteristics of this window - this.set({ - width : 380, - height : 200, - modal : true, - centered : true, - showClose : false, - showMaximize : false, - showMinimize : false, - showStatusbar : false, - allowClose : false, - allowMaximize : false, - allowMinimize : false, - resizeable : false, - moveable : false, - zIndex : 10000 - }); - - - // Create a grid layout - var grid = new qx.ui.layout.GridLayout(); - grid.setLocation(14, 14); - grid.setDimension("90%", "90%"); - grid.setVerticalSpacing(14); - grid.setPadding(14, 14); - grid.setRowCount(0); - grid.setColumnCount(2); - grid.setColumnWidth(0, 100); - grid.setColumnWidth(1, 200); - - - // Add an input box for the user name - this.userName = addCaptionedWidget("User Name", grid, - function() - { - return new qx.ui.form.TextField(); - }); - - // Add an input box for the password - this.password = addCaptionedWidget("Password", grid, - function() - { - return new qx.ui.form.PasswordField(); - }); - - // Add an input box for the password - this.domain = addCaptionedWidget("Domain", grid, - function() - { - // Create a combo box for for the domain - var combo = new qx.ui.form.ComboBox(); - combo.setEditable(false); - return combo; - }); - - // Add a login button - this.login = addCaptionedWidget("", grid, - function() - { - return new qx.ui.form.Button("Login"); - }); - - // Add the grid to the window - this.add(grid); - - // Add this window to the document - this.addToDocument(); -}); - - -qx.Proto.addToFsm = function(fsm) -{ - // Have we already been here for this fsm? - if (fsm.getObject("login_window")) - { - // Yup. Everything's already done. See ya! - return; - } - - // Save the login button since we receive events on it - fsm.addObject("login_button", this.login); - - // We want to receive "execute" events on this button - this.login.addEventListener("execute", fsm.eventListener, fsm); - - // Save the window object - fsm.addObject("login_window", this); - - // We want to receive "complete" events on this window (which we generate) - this.addEventListener("complete", fsm.eventListener, fsm); -}; - - -qx.Proto.setInfo = function(info) -{ - this.debug(info); - - // Remove everythingn from the domain list - this.domain.removeAll(); - - // Add the available domains - for (var i = 0; i < info.length; i++) - { - var item = new qx.ui.form.ListItem(info[i]); - this.domain.add(item); - } -}; - - -/** - * Singleton Instance Getter - */ -qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/swat/source/class/swat/main/Gui.js b/webapps/swat/source/class/swat/main/Gui.js deleted file mode 100644 index 142b8dcba2..0000000000 --- a/webapps/swat/source/class/swat/main/Gui.js +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright: - * (C) 2006 by Derrell Lipman - * All rights reserved - * - * License: - * LGPL 2.1: http://creativecommons.org/licenses/LGPL/2.1/ - */ - -/** - * The graphical user interface for the main menu - */ -qx.OO.defineClass("swat.main.Gui"); - -qx.Class.currentCanvas = null; - -qx.Class.buildGui = function(moduleList) -{ - var o; - - // Header colors - var topColor = new qx.renderer.color.Color("#ffff64"); - var bottomColor = new qx.renderer.color.Color("#3878cd"); - - // Create the yellow bar at the top - o = new qx.ui.basic.Terminator(); - o.set({ - top: 0, - left: 0, - right: 0, - height: 40 - }); - o.setBackgroundColor(topColor); - o.addToDocument(); - - // Create the tag line - var title = new qx.ui.basic.Label("Samba Web Administration Tool"); - title.set({ - top: 12, - left: 20 - }); - title.setBackgroundColor(topColor); - title.setFont("bold"); - title.addToDocument(); - - // Create a small black separator between the yellow and blue bars - o = new qx.ui.basic.Terminator(); - o.set({ - top: 40, - left: 0, - right: 0, - height: 1 - }); - o.setBackgroundColor("black"); - o.addToDocument(); - - // Create the yellow bar at the top - o = new qx.ui.basic.Terminator(); - o.set({ - top: 41, - left: 0, - right: 0, - height: 60 - }); - o.setBackgroundColor(bottomColor); - o.addToDocument(); - - // Create the "Samba" image - o = new qx.ui.basic.Image("../../../images/logo.png"); - o.set({ - top: 16, - right: 20 - }); - o.setZIndex(100000000); - o.addToDocument(); - - // Create a menu bar - var menubar = new qx.ui.toolbar.ToolBar(); - menubar.set({ - top: 100, - height: 20, - left: 0, - right: 0 - }); - menubar.addToDocument(); - - // Create a menu item for selecting the requested module - var menubutton = new qx.ui.toolbar.MenuButton("Modules"); - menubar.add(menubutton); - - // Create a Command to be executed upon any menu selection - var command = new qx.client.Command(); - // command.addEventListener("execute", fsm.eventListener, fsm); - - // Create a radio manager for selecting one of the modules - var moduleManager = new qx.manager.selection.RadioManager("main.gui.Module"); - - // Create a menu containing the subitems - var menu = new qx.ui.menu.Menu(); - - // We'll also track the current module's canvas in the modules object - swat.main.Gui.currentCanvas = null; - - // For each menu item... - for (moduleName in moduleList) - { - // create a radio button menu item - o = new qx.ui.menu.RadioButton(moduleName, command, false); - - // Associate this button menu item with the module list - o.moduleName = moduleName; - - // Associate the menu item with the radio manager - moduleManager.add(o); - - // Create this module's canvas - var canvas = new qx.ui.layout.CanvasLayout(); - canvas.set({ - top: 120, - bottom: 0, - left: 0, - right: 0 - }); - canvas.setBackgroundColor("white"); - canvas.setDisplay(false); // initially not displayed - - var fsm = moduleList[moduleName].fsm; - fsm.addObject("swat.main.canvas", canvas); - canvas.addEventListener("appear", fsm.eventListener, fsm); - canvas.addEventListener("disappear", fsm.eventListener, fsm); - - // Save the canvas - moduleList[moduleName].canvas = canvas; - - // Add the canvas to the document - canvas.addToDocument(); - - // When a Module menu item is selected: - o.addEventListener("changeChecked", function(e) - { - var canvas = moduleList[this.moduleName].canvas; - - // If there's a current canvas, ... - if (swat.main.Gui.currentCanvas) - { - // ... then remove display of it. - swat.main.Gui.currentCanvas.setDisplay(false); - - // Dispatch an event on the canvas to notify old - // module it's coming into disuse. - canvas.createDispatchEvent("disappear"); - } - - // If we are being selected... - if (e.getData()) - { - // then display our canvas - var canvas = moduleList[this.moduleName].canvas; - canvas.setDisplay(true); - - // Track the current canvas (now ours) - swat.main.Gui.currentCanvas = canvas; - - // Dispatch an event on the canvas to notify new - // module it's coming into use. - canvas.createDispatchEvent("appear"); - - // Set the application title - title.setHtml("<span>" + - "Samba Web Administration Tool" + - " » " + - this.moduleName + - "</span>"); - - // Set the browser title as well - document.title = - "Swat: " + this.moduleName; - } - }); - - // Add the menu item to the menu - menu.add(o); - } - - // We've built a complete menu. Add it to the document. - menu.addToDocument(); - - // Specify that the menu is to be displayed upon menu button selection - menubutton.setMenu(menu); - - // Create a menu item for selecting debug options - var menubutton = new qx.ui.toolbar.MenuButton("Debug"); - menubar.add(menubutton); - - // Create a menu containing the subitems - var menu = new qx.ui.menu.Menu; - var menu_01 = new qx.ui.menu.Button("Show Debug Window", null, command); - menu.add(menu_01); - menu.addToDocument(); - - // Specify that the menu is to be displayed upon menu button selection - menubutton.setMenu(menu); - -}; diff --git a/webapps/swat/source/class/swat/main/Main.js b/webapps/swat/source/class/swat/main/Main.js deleted file mode 100644 index 9e65896aad..0000000000 --- a/webapps/swat/source/class/swat/main/Main.js +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright: - * (C) 2006 by Derrell Lipman - * All rights reserved - * - * License: - * LGPL 2.1: http://creativecommons.org/licenses/LGPL/2.1/ - */ - -/* -#require(swat.main.Module) -#require(swat.main.AbstractModule) -#require(swat.main.Authenticate); -*/ - -/** - * Swat main menu - */ -qx.OO.defineClass("swat.main.Main", qx.component.AbstractApplication, -function() -{ - qx.component.AbstractApplication.call(this); -}); - -/* - * Register our supported modules. The order listed here is the order they - * will appear in the Modules menu. - */ - -//#require(swat.module.statistics.Statistics) -new swat.main.Module("Status and Statistics", - swat.module.statistics.Statistics); - -//#require(swat.module.ldbbrowse.LdbBrowse) -new swat.main.Module("LDB Browser", - swat.module.ldbbrowse.LdbBrowse); - -//#require(swat.module.netmgr.NetManager) -new swat.main.Module("Net Manager", - swat.module.netmgr.NetManager); - -//#require(swat.module.documentation.Documentation) -//#require(apiviewer.Viewer) -new swat.main.Module("API Documentation", - swat.module.documentation.Documentation); - - -/* ---------------------------------------------------------------------------- - METHODS ---------------------------------------------------------------------------- -*/ - -qx.Proto.initialize = function() -{ - // Set the resource URI - qx.Settings.setCustom("resourceUri", "./resource"); - - // Turn on JSON debugging for the time being - qx.Settings.setCustomOfClass("qx.io.Json", "enableDebug", true); - - // For each module... - var moduleList = swat.main.Module.getList(); - for (moduleName in moduleList) - { - // ... call the module's buildInitialFsm() function - var module = moduleList[moduleName]["clazz"].getInstance(); - module.buildInitialFsm(moduleList[moduleName]); - } -}; - - -qx.Proto.main = function() -{ - var moduleList = swat.main.Module.getList(); - - // Initialize the gui for the main menu - swat.main.Gui.buildGui(moduleList); - - // Similarly, now that we have a canvas for each module, ... - for (moduleName in moduleList) - { - // ... call the module's buildInitialGui() function - var module = moduleList[moduleName]["clazz"].getInstance(); - module.buildInitialGui(moduleList[moduleName]); - } -}; - - -qx.Proto.finalize = function() -{ - // Call each module's finalization function - var moduleList = swat.main.Module.getList(); - for (moduleName in moduleList) - { - var module = moduleList[moduleName]["clazz"].getInstance(); - module.finalize(moduleList[moduleName]); - } -}; - diff --git a/webapps/swat/source/class/swat/main/Module.js b/webapps/swat/source/class/swat/main/Module.js deleted file mode 100644 index 160e6f6ec7..0000000000 --- a/webapps/swat/source/class/swat/main/Module.js +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright: - * (C) 2006 by Derrell Lipman - * All rights reserved - * - * License: - * LGPL 2.1: http://creativecommons.org/licenses/LGPL/2.1/ - */ - -/** - * This class defines a module descriptor (the registration of a module) and - * maintains the list of modules that have been registered. - * - * A Module object contains the following public properties which may be - * accessed directly by name: - * - * fsm - - * The finite state machine for this module. - * - * canvas - - * The canvas on which to create the gui for this module - * - * name - - * The name of this module - * - * class - - * The class for this module - * - * @param moduleName {String} - * The name of the module being registered. This is the name that will - * appear in the Modules menu. - * - * @param clazz {clazz} - * The class which contains the module implementation. That class must - * extend swat.main.AbstractModule and implement a singleton interface - * that provides a public method called initialAppear() which takes this - * Module object as a parameter, and creates the finite state machine for - * the module (if applicable) and builds the graphical user interface for - * the module. - */ -qx.OO.defineClass("swat.main.Module", qx.core.Object, -function(moduleName, clazz) -{ - qx.core.Object.call(this); - - // Initialize commonly-used properties of a module - this.canvas = null; - this.fsm = null; - this.gui = null; - - // Save the module name - this.name = moduleName; - - // Save this class name - this.clazz = clazz; - - // Add this new module to the module list. - swat.main.Module._list[moduleName] = this; -}); - - -/** - * Return the list of modules - */ -qx.Class.getList = function() -{ - return swat.main.Module._list; -}; - - -/** - * The list of modules which have been registered. - */ -qx.Class._list = { }; diff --git a/webapps/swat/source/class/swat/module/documentation/Documentation.js b/webapps/swat/source/class/swat/module/documentation/Documentation.js deleted file mode 100644 index 696a7f0161..0000000000 --- a/webapps/swat/source/class/swat/module/documentation/Documentation.js +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright: - * (C) 2006 by Derrell Lipman - * All rights reserved - * - * License: - * LGPL 2.1: http://creativecommons.org/licenses/LGPL/2.1/ - */ - -/* -#embed(apiviewer.css/*) -#embed(apiviewer.image/*) -*/ - - -/** - * Swat statistics class - */ -qx.OO.defineClass("swat.module.documentation.Documentation", - swat.main.AbstractModule, -function() -{ - swat.main.AbstractModule.call(this); -}); - - -/** - * Load the documentation data - * - * This function is called the first time a module is actually selected to - * appear. Creation of the module's GUI has been deferred until it was - * actually needed (now), so we need to create it. - * - * @param module {swat.main.Module} - * The module descriptor for the module. - */ -qx.Proto.initialAppear = function(module) -{ - // Define alias for custom resource path - var am = qx.manager.object.AliasManager.getInstance(); - am.add("api", qx.Settings.getValueOfClass("apiviewer", "resourceUri")); - - // Include CSS file - qx.html.StyleSheet.includeFile(am.resolvePath("api/css/apiviewer.css")); - am.add("apiviewer", "./resource/image"); - - // avoid redundant naming by api viewer - qx.Settings.setCustomOfClass("apiviewer.Viewer", "title", ""); - - var viewer = new apiviewer.Viewer(); - module.canvas.add(viewer); - viewer.load("script/data.js"); - - // Replace the existing (temporary) finite state machine with a null one - swat.module.documentation.Fsm.getInstance().buildFsm(module); -}; - - -/** - * Singleton Instance Getter - */ -qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/swat/source/class/swat/module/documentation/Fsm.js b/webapps/swat/source/class/swat/module/documentation/Fsm.js deleted file mode 100644 index b58f57cf1f..0000000000 --- a/webapps/swat/source/class/swat/module/documentation/Fsm.js +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright: - * (C) 2006 by Derrell Lipman - * All rights reserved - * - * License: - * LGPL 2.1: http://creativecommons.org/licenses/LGPL/2.1/ - */ - -/** - * Swat statistics class finite state machine - */ -qx.OO.defineClass("swat.module.documentation.Fsm", - swat.main.AbstractModuleFsm, -function() -{ - swat.main.AbstractModuleFsm.call(this); -}); - - -qx.Proto.buildFsm = function(module) -{ - var fsm = module.fsm; - - /* - * State: Idle - * - * This is a null state to replace the one that loads the API viewer. The - * API viewer does not use the finite state machine. - */ - var state = new qx.util.fsm.State( - "State_Idle", - { - "events" : - { - // We need at least one event listed due to FSM requirements - "appear" : - { - "swat.main.canvas" : - "Transition_Idle_to_Idle_via_appear" - } - } - }); - - // Replace the initial Idle state with this one - fsm.replaceState(state, true); - - /* - * Transition: Idle to Idle - * - * Cause: "appear" on canvas - * - * Action: - * None. - */ - var trans = new qx.util.fsm.Transition( - "Transition_Idle_to_Idle_via_appear", - { - "nextState" : - "State_Idle" - }); - state.addTransition(trans); - -}; - - -/** - * Singleton Instance Getter - */ -qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/swat/source/class/swat/module/ldbbrowse/Fsm.js b/webapps/swat/source/class/swat/module/ldbbrowse/Fsm.js deleted file mode 100644 index 02aada9ebf..0000000000 --- a/webapps/swat/source/class/swat/module/ldbbrowse/Fsm.js +++ /dev/null @@ -1,516 +0,0 @@ -/* - * Copyright: - * (C) 2006 by Derrell Lipman - * All rights reserved - * - * License: - * LGPL 2.1: http://creativecommons.org/licenses/LGPL/2.1/ - */ - -/** - * Swat LDB Browser class finite state machine - */ -qx.OO.defineClass("swat.module.ldbbrowse.Fsm", swat.main.AbstractModuleFsm, -function() -{ - swat.main.AbstractModuleFsm.call(this); -}); - - -qx.Proto.buildFsm = function(module) -{ - var fsm = module.fsm; - var _this = this; - - /* - * State: Idle - * - * Actions upon entry - * - if returning from RPC, display the result - * - * Transition on: - * "execute" on search button - * "treeopenwhileempty" on tree - * "changeselection" on tree - */ - var state = new qx.util.fsm.State( - "State_Idle", - { - "onentry" : - function(fsm, event) - { - // Did we just return from an RPC request? - if (fsm.getPreviousState() == "State_AwaitRpcResult") - { - // Yup. Display the result. We need to get the request object - var rpcRequest = _this.popRpcRequest(); - - // Display the result - var gui = swat.module.ldbbrowse.Gui.getInstance(); - - // Did we get a Resource Not Found error? We'll get this after a - // session timeout, because the request is retried but can't - // succeed because the database has been closed by the session - // timing out. - var result = rpcRequest.getUserData("result"); - var origins = swat.main.AbstractModuleFsm.JsonRpc_Origin; - var serverErrors = swat.main.AbstractModuleFsm.JsonRpc_ServerError; - if (result.type == "failed" && - result.data.origin == origins.Server && - result.data.code == serverErrors.ResourceError) - { - // Yup. Re-open the database - var dbName = fsm.getObject("dbName"); - dbName.dispatchEvent(new qx.event.type.Event("changeSelected"), - true); - } - else - { - // Otherwise, display the result - gui.displayData(module, rpcRequest); - } - - // Dispose of the request - rpcRequest.request.dispose(); - rpcRequest.request = null; - } - }, - - "events" : - { - // If the search button is activated, issue a search request - "execute" : - { - "search" : - "Transition_Idle_to_AwaitRpcResult_via_search", - - "commit" : - "Transition_Idle_to_AwaitRpcResult_via_commit", - - "delete" : - "Transition_Idle_to_AwaitRpcResult_via_delete" - }, - - // If a previously unexpanded tree node is expanded, issue a request - // to retrieve its contents. - "treeOpenWhileEmpty": - { - "tree" : - "Transition_Idle_to_AwaitRpcResult_via_tree_open" - }, - - // If the selection changes, issue a request to retrieve contents to - // populate the attribute/value table. - "changeSelection": - { - "tree" : - "Transition_Idle_to_AwaitRpcResult_via_tree_selection_changed" - - }, - - // If another database is selected, try to open it and refresh - // the tree - "changeSelected": - { - "dbName": - "Transition_Idle_to_AwaitRpcResult_via_db_changed" - } - } - }); - - // Replace the initial Idle state with this one - fsm.replaceState(state, true); - - /* - * Transition: Idle to AwaitRpcResult - * - * Cause: "execute" on search button - * - * Action: - * Issue a search request - */ - var trans = new qx.util.fsm.Transition( - "Transition_Idle_to_AwaitRpcResult_via_search", - { - "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 search expression - var searchExpr = fsm.getObject("searchExpr").getValue(); - - // Retrieve the base DN - var baseDN = fsm.getObject("baseDN").getValue(); - - // Retrieve the selected scope - var scope = fsm.getObject("scope").getValue(); - - // We want all attributes - var attributes = [ "*" ]; - - // Issue a Search call - var request = _this.callRpc(fsm, - "samba.ldb", - "search", - [ - dbHandle, - searchExpr, - baseDN, - scope, - attributes - ]); - - // When we get the result, we'll need to know what type of request - // we made. - request.setUserData("requestType", "search"); - } - }); - 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(), - [ dbHandle, 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 - * - * Cause: "execute" on OK button - * - * Action: - * Delete a record from ldb - */ - var trans = new qx.util.fsm.Transition( - "Transition_Idle_to_AwaitRpcResult_via_delete", - { - "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"); - - // Issue a Search call - var request = _this.callRpc(fsm, - "samba.ldb", - "del", - [ dbHandle, ldbmod.getBase() ]); - - // When we get the result, we'll need to know what type of request - // we made. - request.setUserData("requestType", "delete"); - } - }); - state.addTransition(trans); - - /* - * Transition: Idle to AwaitRpcResult - * - * Cause: "treeOpenWhileEmpty" on tree - * - * Action: - * Issue a search request - */ - var trans = new qx.util.fsm.Transition( - "Transition_Idle_to_AwaitRpcResult_via_tree_open", - { - "nextState" : - "State_AwaitRpcResult", - - "ontransition" : - function(fsm, event) - { - // Get the tree object - var tree = fsm.getObject("tree"); - - // Get the node on which the event occurred - var node = event.getData(); - - // Obtain the full hierarchy for this node - var hierarchy = tree.getHierarchy(node.nodeId); - - tree.debug("Requesting children for node id " + node.nodeId + ": " + - hierarchy.join("/") + "..."); - - // Strip off the root node - hierarchy.shift(); - - // Determine the children. Differs depending on root or otherwise - var attributes; - var scope; - var baseDN; - - // If parent is the root... - if (node.parentNodeId == 0) - { - // ... then we want the defaultNamingContext, ... - attributes = [ "defaultNamingContext", "namingContexts" ]; - - // ... and we want only base scope - scope = "base"; - - // ... and an empty base DN - baseDN = ""; - } - else - { - // otherwise, retrieve the DN, - attributes = [ "dn" ]; - - // ... and we want one level of scope - scope = "one"; - - // ... and base DN is the parent - baseDN = hierarchy.reverse().join(","); - } - - // Build the search expression - var searchExpr = ""; - - // Get our module descriptor - var module = fsm.getObject("swat.main.module"); - - // Retrieve the database handle - var dbHandle = module.dbHandle; - - // Issue a Get Statistics call - var request = _this.callRpc(fsm, - "samba.ldb", - "search", - [ - dbHandle, - searchExpr, - baseDN, - scope, - attributes - ]); - - // When we get the result, we'll need to know what type of request - // we made. - request.setUserData("requestType", "tree_open"); - - // We'll also need some of our parameters - request.setUserData("parentNode", node); - request.setUserData("attributes", attributes); - } - }); - state.addTransition(trans); - - /* - * Transition: Idle to AwaitRpcResult - * - * Cause: "changeSelection" on tree - * - * Action: - * Issue a search request - */ - var trans = new qx.util.fsm.Transition( - "Transition_Idle_to_AwaitRpcResult_via_tree_selection_changed", - { - "nextState" : - "State_AwaitRpcResult", - - "predicate" : - function(fsm, event) - { - // Get the tree object - var tree = fsm.getObject("tree"); - - // Get the list of selected nodes. We're in single-selection mode, - // so there will be only one of them. - var nodes = event.getData(); - var node = nodes[0]; - - var hierarchy = tree.getHierarchy(node.nodeId); - - // Strip off the root node - hierarchy.shift(); - - // If element is the root... - if (node.parentNodeId == 0) - { - // ... then just clear out the attribute/value table. - var tableModel = fsm.getObject("tableModel:browse"); - tableModel.setData([]); - return null; // don't search additional transitions - } - - return true; - }, - - "ontransition" : - function(fsm, event) - { - // Get the tree object - var tree = fsm.getObject("tree"); - - // Get the list of selected nodes. We're in single-selection mode, - // so there will be only one of them. - var nodes = event.getData(); - var node = nodes[0]; - - var hierarchy = tree.getHierarchy(node.nodeId); - - // Strip off the root node - hierarchy.shift(); - - // Determine the children. Differs depending on root or otherwise - var attributes; - var scope; - var baseDN; - - // We want all attributes - attributes = [ "*" ]; - - // We want the attributes only for the current element - scope = "base"; - - // Base DN is the current element - baseDN = hierarchy.reverse().join(","); - - // Build the search expression - var searchExpr = ""; - - // Get our module descriptor - var module = fsm.getObject("swat.main.module"); - - // Retrieve the database handle - var dbHandle = module.dbHandle; - - // Issue a Get Statistics call - var request = _this.callRpc(fsm, - "samba.ldb", - "search", - [ - dbHandle, - searchExpr, - baseDN, - scope, - attributes - ]); - - // When we get the result, we'll need to know what type of request - // we made. - request.setUserData("requestType", "tree_selection_changed"); - } - }); - state.addTransition(trans); - - /* - * Transition: Idle to AwaitRpcResult - * - * Cause: "changeSelection" on dbName - * - * Action: - * Issue a connect request - */ - var trans = new qx.util.fsm.Transition( - "Transition_Idle_to_AwaitRpcResult_via_db_changed", - { - "nextState" : - "State_AwaitRpcResult", - - "ontransition" : - function(fsm, event) - { - // Obtain the name of the database to be connected to - var dbName = fsm.getObject("dbName").getValue(); - - // Issue a Get Statistics call - var request = _this.callRpc(fsm, - "samba.ldb", - "connect", - [ dbName ]); - - // When we get the result, we'll need to know what type of request - // we made. - request.setUserData("requestType", "database_name_changed"); - } - }); - state.addTransition(trans); - - // Create the list of events that should be blocked while we're awaiting the - // results of another RPC request - blockedEvents = - { - // If a previously unexpanded tree node is expanded, issue a request - // to retrieve its contents. - "treeOpenWhileEmpty": - { - "tree" : - qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED - }, - - // If the selection changes, issue a request to retrieve contents to - // populate the attribute/value table. - "changeSelection": - { - "tree" : - qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED, - - "dbName": - qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED - } - } - - // Add the AwaitRpcResult state and all of its transitions - this.addAwaitRpcResultState(module, blockedEvents); -}; - - -/** - * Singleton Instance Getter - */ -qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/swat/source/class/swat/module/ldbbrowse/Gui.js b/webapps/swat/source/class/swat/module/ldbbrowse/Gui.js deleted file mode 100644 index c90151859c..0000000000 --- a/webapps/swat/source/class/swat/module/ldbbrowse/Gui.js +++ /dev/null @@ -1,750 +0,0 @@ -/* - * Copyright: - * (C) 2006 by Derrell Lipman - * All rights reserved - * - * License: - * LGPL 2.1: http://creativecommons.org/licenses/LGPL/2.1/ - */ - -/** - * Swat LDB Browser class graphical user interface - */ -qx.OO.defineClass("swat.module.ldbbrowse.Gui", qx.core.Object, -function() -{ - qx.core.Object.call(this); -}); - -//qx.OO.addProperty({ name : "_table", type : "object" }); -//qx.OO.addProperty({ name : "_ldbmod", type : "object" }); - -/** - * Build the raw graphical user interface. - */ -qx.Proto.buildGui = function(module) -{ - var o; - var fsm = module.fsm; - - // We need a horizontal box layout for the database name - var hlayout = new qx.ui.layout.HorizontalBoxLayout(); - hlayout.set({ - top: 20, - left: 20, - right: 20, - height: 30 - }); - - // Create a label for the database name - o = new qx.ui.basic.Atom("Database:"); - o.setWidth(100); - o.setHorizontalChildrenAlign("right"); - - // Add the label to the horizontal layout - hlayout.add(o); - - // Create a combo box for for the database name - o = new qx.ui.form.ComboBox(); - o.getField().setWidth("100%"); - o.setEditable(false); - - // Add our global database name (the only option, for now) - var item = new qx.ui.form.ListItem(module.dbFile); - o.add(item); - - // We want to be notified if the selection changes - o.addEventListener("changeSelected", fsm.eventListener, fsm); - - // Save the database name object so we can react to changes - fsm.addObject("dbName", o); - - // Add the combo box to the horizontal layout - hlayout.add(o); - - // Add the database name selection to the canvas - module.canvas.add(hlayout); - - // Create and position the tabview - var tabView_ = new qx.ui.pageview.tabview.TabView; - tabView_.set({ - top: 60, - left: 20, - right: 20, - bottom: 20 - }); - - // Create each of the tabs - var tabView_Browse = - new qx.ui.pageview.tabview.Button("Browse"); - var tabView_Search = - new qx.ui.pageview.tabview.Button("Search"); - - // Specify the initially-selected tab - tabView_Browse.setChecked(true); - - // Add each of the tabs to the tabview - tabView_.getBar().add(tabView_Browse, tabView_Search); - - // Create the pages to display when each tab is selected - var tabViewPage_Browse = - new qx.ui.pageview.tabview.Page(tabView_Browse); - var tabViewPage_Search = - new qx.ui.pageview.tabview.Page(tabView_Search); - - // Build the browse page - this._buildPageBrowse(module, tabViewPage_Browse); - - // Build the search page - this._buildPageSearch(module, tabViewPage_Search); - - // Add the pages to the tabview - tabView_.getPane().add(tabViewPage_Browse, tabViewPage_Search); - - // Add the tabview to our canvas - module.canvas.add(tabView_); -}; - - -/** - * Populate the graphical user interface with the specified data - * - * @param module {swat.main.Module} - * The module descriptor for the module. - * - * @result {Object} - * The result returned by SAMBA to our request. We display the data - * provided by this result. - */ -qx.Proto.displayData = function(module, rpcRequest) -{ - var gui = module.gui; - var fsm = module.fsm; - var result = rpcRequest.getUserData("result") - var requestType = rpcRequest.getUserData("requestType"); - - // Did the request fail? - if (result.type == "failed") - { - // Yup. We're not going to do anything particularly elegant... - alert("Async(" + result.id + ") exception: " + result.data); - return; - } - - // Dispatch to the appropriate handler, depending on the request type - switch(requestType) - { - case "search": - this._displaySearchResults(module, rpcRequest); - break; - - case "modify": - this._displayModifyResults(module, rpcRequest); - break; - - case "add": - this._displayAddResults(module, rpcRequest); - break; - - case "delete": - this._displayDeleteResults(module, rpcRequest); - break; - - case "tree_open": - this._displayTreeOpenResults(module, rpcRequest); - break; - - case "tree_selection_changed": - - // Always update the table, even if it is not visible - this._displayTreeSelectionChangedResults(module, rpcRequest); - - // Update the base field in ldbmod - this._displayLdbmodBaseChanged(module, rpcRequest); - - break; - - case "database_name_changed": - this._clearAllFields(module, rpcRequest); - break; - - default: - throw new Error("Unexpected request type: " + requestType); - } - - // Force flushing of pending DOM updates. This is actually a - // work-around for a bug. Without this, occasionally, updates to the - // gui aren't displayed until some 'action' takes place, e.g. key - // press or mouse movement. - qx.ui.core.Widget.flushGlobalQueues(); -}; - - -qx.Proto._setAppearances = function() -{ - // Modify the default appearance of a ComboBox for use in Search tab: - // use more of the available width. - // - // If we had multiple uses, we'd create a new appearance which didn't - // contain a width. That way, we'd be able to assign a specific width to - // each ComboBox instance. Since we don't have multiple of them, we can - // just modify this default appearance. - // - // See http://qooxdoo.org/documentation/user_manual/appearance for an - // explanation of what's going on here. The missing significant point in - // the discussion is that in the current qooxdoo appearance - // implementation, it's not possible to override a specific widget's - // appearance with explicit settings just for that widget (stupid!). I - // expect that to change in a future version. - var appMgr = qx.manager.object.AppearanceManager.getInstance(); - var theme = appMgr.getAppearanceTheme(); - var appearance = theme._appearances["combo-box"]; - if (! appearance) - { - return; - } - var oldInitial = appearance.initial; - appearance.initial = function(vTheme) - { - var res = oldInitial ? oldInitial.apply(this, arguments) : {}; - res.width = "80%"; - return res; - } -}; - - -qx.Proto._buildPageSearch = function(module, page) -{ - var fsm = module.fsm; - - // We need a vertical box layout for the various input fields - var vlayout = new qx.ui.layout.VerticalBoxLayout(); - vlayout.set({ - overflow: "hidden", - height: 120, - top: 10, - left: 0, - right: 0, - bottom: 10 - }); - - // Create a label for the list of required attributes - var label = new qx.ui.basic.Atom("Search Expression"); - label.setHorizontalChildrenAlign("left"); - - // Add the label to the horizontal layout - vlayout.add(label); - - // Create a combo box for entry of the search expression - var filter = new qx.ui.form.TextField(); - filter.set({ width:300 }); - fsm.addObject("searchExpr", filter); - - // Add the combo box to the horizontal layout - vlayout.add(filter); - - // Create a label for the list of required attributes - var label = new qx.ui.basic.Atom("Base"); - label.setHorizontalChildrenAlign("left"); - - // Add the label to the horizontal layout - vlayout.add(label); - - // Create a combo box for entry of the search expression - var base = new qx.ui.form.TextField(); - base.set({ width:300 }); - fsm.addObject("baseDN", base); - - // Add the combo box to the horizontal layout - vlayout.add(base); - - // Create a label for the list of required attributes - var label = new qx.ui.basic.Atom("Scope"); - label.setWidth(100); - label.setHorizontalChildrenAlign("left"); - - // Add the label to the scope vertical layout - vlayout.add(label); - - // Use a horizontal box layout to keep the search button aligned - var hlayout = new qx.ui.layout.HorizontalBoxLayout(); - hlayout.setWidth(300); - hlayout.setHeight(30); - - var cbScope = new qx.ui.form.ComboBoxEx(); - cbScope.setSelection([ ["subtree", "Subtree"], ["one", "One Level"], ["base", "Base"]]); - cbScope.setSelectedIndex(0); - - fsm.addObject("scope", cbScope); - - hlayout.add(cbScope); - - // Add a spacer - hlayout.add(new qx.ui.basic.HorizontalSpacer()); - - // Create the 'Search' button - var search = new qx.ui.form.Button('Search'); - search.setWidth(100); - search.addEventListener("execute", fsm.eventListener, fsm); - - // We'll be receiving events on the search object, so save its friendly name - fsm.addObject("search", search, "swat.main.fsmUtils.disable_during_rpc"); - - // Add the search button to the vertical layout - hlayout.add(search); - - vlayout.add(hlayout); - - // Add the vlayout to the page - page.add(vlayout); - - var ldifview = new swat.module.ldbbrowse.LdifViewer(); - ldifview.set({ - top: 130, - left: 10, - right: 10, - bottom: 10 - }); - - fsm.addObject("LdifView", ldifview); - - // Add the output area to the page - page.add(ldifview); -}; - -qx.Proto._buildPageBrowse = function(module, page) -{ - var fsm = module.fsm; - - // Create a horizontal splitpane for tree (left) and table (right) - var splitpane = new qx.ui.splitpane.HorizontalSplitPane("1*", "2*"); - splitpane.setEdge(0); - - // We need a vertical box layout for the tree and the buttons - var vlayout = new qx.ui.layout.VerticalBoxLayout(); - vlayout.set({ - height: "100%", - top: 5, - left: 5, - right: 5, - bottom: 5, - spacing: 10 - }); - - // Create the tree and set its characteristics - var tree = new qx.ui.treevirtual.TreeVirtual(["Browse"]); - tree.set({ - backgroundColor: 255, - border : qx.renderer.border.BorderPresets.getInstance().thinInset, - overflow: "hidden", - width: "100%", - height: "1*", - alwaysShowOpenCloseSymbol: true - }); - - // We've only got one column, so we don't need cell focus indication. - tree.setCellFocusAttributes({ backgroundColor : "transparent" }); - - // Get the data model - var dataModel = tree.getDataModel(); - - // Add the database file as the first node - dataModel.addBranch(null, module.dbFile, false); - - // We're finished adding nodes. - dataModel.setData(); - - // Create event listeners - tree.addEventListener("treeOpenWhileEmpty", fsm.eventListener, fsm); - tree.addEventListener("changeSelection", fsm.eventListener, fsm); - - // We'll be receiving events on the tree object, so save its friendly name, - // and cause the tree to be disabled during remote procedure calls. - fsm.addObject("tree", tree, "swat.main.fsmUtils.disable_during_rpc"); - - // Add the tree to the vlayout. - vlayout.add(tree); - - // Add an horizonatl layout for the "New" and "Modify" buttons - // We need a vertical box layout for the tree and the buttons - var hlayout = new qx.ui.layout.HorizontalBoxLayout(); - hlayout.set({ - height: "auto", - spacing: 10 - }); - - // Add the "New" button - this._newb = new qx.ui.form.Button("New"); - this._newb.addEventListener("execute", this._switchToNewrecord, this); - - // Add the button to the hlayout - hlayout.add(this._newb); - - // Add the "New" button - this._modb = new qx.ui.form.Button("Modify"); - this._modb.addEventListener("execute", this._switchToModrecord, this); - - // Add the button to the hlayout - hlayout.add(this._modb); - - hlayout.add(new qx.ui.basic.HorizontalSpacer()); - - // Add the "Delete" button - this._delb = new qx.ui.form.Button("Delete"); - this._delb.addEventListener("execute", this._confirmDeleteRecord, this); - - // Add the button to the hlayout - hlayout.add(this._delb); - - // Add the hlayout to the vlayout. - vlayout.add(hlayout); - - //Add the left vlayout to the splitpane - splitpane.addLeft(vlayout); - - // Create a simple table model - var tableModel = new qx.ui.table.SimpleTableModel(); - tableModel.setColumns([ "Attribute", "Value" ]); - - tableModel.setColumnEditable(0, false); - tableModel.setColumnEditable(1, false); - fsm.addObject("tableModel:browse", tableModel); - - // Create a table - this._table = new qx.ui.table.Table(tableModel); - this._table.set({ - top: 10, - left: 0, - right: 0, - bottom: 10, - statusBarVisible: false, - columnVisibilityButtonVisible: false - }); - this._table.setColumnWidth(0, 180); - this._table.setColumnWidth(1, 320); - this._table.setMetaColumnCounts([1, -1]); - fsm.addObject("table:browse", this._table); - - //table.setDisplay(false); - - // Add the table to the bottom portion of the splitpane - splitpane.addRight(this._table); - - // Build the create/modify widget - this._ldbmod = new swat.module.ldbbrowse.LdbModify(fsm); - this._ldbmod.set({ - top: 10, - left: 0, - right: 0, - bottom: 10 - }); - // Not displayed by default - this._ldbmod.setDisplay(false); - - fsm.addObject("ldbmod", this._ldbmod); - - splitpane.addRight(this._ldbmod); - - // Add the first splitpane to the page - page.add(splitpane); -}; - -qx.Proto._switchToNormal = function() -{ - this._table.setDisplay(true); - this._ldbmod.setDisplay(false); - this._newb.setEnabled(true); - this._modb.setEnabled(true); - this._delb.setEnabled(true); -}; - -qx.Proto._switchToNewrecord = function() -{ - this._table.setDisplay(false); - this._ldbmod.setDisplay(true); - this._newb.setEnabled(false); - this._modb.setEnabled(false); - this._delb.setEnabled(false); - this._ldbmod.initNew(this._switchToNormal, this); -}; - -qx.Proto._switchToModrecord = function() -{ - this._table.setDisplay(false); - this._ldbmod.setDisplay(true); - this._newb.setEnabled(false); - this._modb.setEnabled(false); - this._delb.setEnabled(false); - this._ldbmod.initMod(this._table.getTableModel(), this._switchToNormal, this); -}; - -qx.Proto._confirmDeleteRecord = function() -{ - - this._ldbmod.showConfirmDelete(); -}; - -qx.Proto._displayModifyResults = function(module, rpcRequest) -{ - var tree = module.fsm.getObject("tree"); - tree.createDispatchDataEvent("changeSelection", tree.getSelectedNodes()); - - alert("Object successfully modified!"); - - this._switchToNormal(); - //this._ldbmod.postCleanUp(); -} - -qx.Proto._displayAddResults = function(module, rpcRequest) -{ - var result = rpcRequest.getUserData("result"); - - var tree = module.fsm.getObject("tree"); - var node = tree.getSelectedNodes()[0]; - - tree.getDataModel().prune(node.nodeId, false); - node.bOpened = false; - tree.toggleOpened(node); - - alert("Object successfully added!"); - - this._switchToNormal(); - //this._ldbmod.postCleanUp(); -}; - -qx.Proto._displayDeleteResults = function(module, rpcRequest, type) -{ - var result = rpcRequest.getUserData("result"); - - var tree = module.fsm.getObject("tree"); - var dataModel = tree.getDataModel(); - var node = dataModel.getData()[tree.getSelectedNodes()[0].parentNodeId]; - - dataModel.prune(node.nodeId, false); - node.bOpened = false; - tree.toggleOpened(node); - - alert("Object Successfully deleted!"); - - this._ldbmod.setBase(""); - - // just clear the attribute/value table. - var tableModel = module.fsm.getObject("tableModel:browse"); - tableModel.setData([]); -}; - -qx.Proto._displaySearchResults = function(module, rpcRequest) -{ - var fsm = module.fsm; - - // Obtain the ldif object - var ldifview = fsm.getObject("LdifView"); - - ldifview.reset(); - - // Obtain the result object - result = rpcRequest.getUserData("result").data; - - if (result && result["length"]) - { - len = result["length"]; - for (var i = 0; i < result["length"]; i++) - { - var obj = result[i]; - if (typeof(obj) != "object") - { - alert("Found unexpected result, type " + - typeof(obj) + - ", " + - obj + - "\n"); - continue; - } - ldifview.appendObject(obj); - } - } - else - { - alert("No results."); - } -}; - - -qx.Proto._displayTreeOpenResults = function(module, rpcRequest) -{ - var t; - var child; - var fsm = module.fsm; - - // Get the tree object - var tree = fsm.getObject("tree"); - var dataModel = tree.getDataModel(); - - // Obtain the result object - var result = rpcRequest.getUserData("result").data; - - // We also need some of the original parameters passed to the request - var parentNode = rpcRequest.getUserData("parentNode"); - var attributes = rpcRequest.getUserData("attributes"); - - // Remove any existing children, they will be replaced by the result of this call (refresh) - dataModel.setData(); - - // Any children? - if (! result || result["length"] == 0) - { - // Nope. Remove parent's expand/contract button. - dataModel.setState(parentNode.nodeId, { bHideOpenClose : true }); - return; - } - - // base object, add naming contexts to the root - if ((result.length == 1) && - ((result[0]["dn"] == "") || - (result[0]["dn"].toLowerCase() == "cn=rootdse"))) - { - defnc = result[0]["defaultNamingContext"]; - - // Build a tree row for the defaultNamingContext - if (defnc) - { - dataModel.addBranch(parentNode.nodeId, defnc, false); - } - - var ncs = result[0]["namingContexts"]; - - // If it's multi-valued (type is an array) we have other naming contexts - // to show - if (typeof(ncs) == "object") - { - for (var i = 0; i < ncs.length; i++) - { - if (ncs[i] != defnc) - { - //skip default naming context - dataModel.addBranch(parentNode.nodeId, ncs[i], false); - } - } - } - } - else - { - for (var i = 0; i < result.length; i++) - { - var name; - - child = result[i]; - - name = child["dn"].split(",")[0]; - - // Build a standard tree row - dataModel.addBranch(parentNode.nodeId, name, false); - } - } - - // Cause the tree changes to be rendered - dataModel.setData(); -}; - -qx.Proto._displayLdbmodBaseChanged = function(module, rpcRequest) -{ - var fsm = module.fsm; - - // Obtain the result object - var result = rpcRequest.getUserData("result").data; - - // If we received an empty list, ... - if (result == null) - { - // ... then ?? - return; - } - - this._ldbmod.setBase(result[0]["dn"]); -}; - -qx.Proto._displayTreeSelectionChangedResults = function(module, rpcRequest) -{ - var fsm = module.fsm; - - // Obtain the result object - var result = rpcRequest.getUserData("result").data; - - var tree = fsm.getObject("tree"); - var dataModel = tree.getDataModel(); - - // If we received an empty list, ... - if (result == null) - { - // ... then just clear the attribute/value table. - dataModel.setData([ ]); - return; - } - - // Start with an empty table dataset - var rowData = [ ]; - - // The result contains a single object: attributes - var attributes = result[0]; - - // Track the maximum length of the attribute values - var maxLen = 0; - - // For each attribute we received... - for (var attr in attributes) - { - // If it's multi-valued (type is an array)... - if (typeof(attributes[attr]) == "object") - { - // ... then add each value with same name - var a = attributes[attr]; - for (var i = 0; i < a.length; i++) - { - if (a[i].length > maxLen) - { - maxLen = a[i].length; - } - rowData.push([ attr, a[i] ]); - } - } - else // single-valued - { - // ... add its name and value to the table dataset - if (attributes[attr].length > maxLen) - { - maxLen = attributes[attr].length; - } - rowData.push([ attr, attributes[attr] ]); - } - } - - // Obtain the table and tableModel objects - var table = fsm.getObject("table:browse"); - var tableModel = fsm.getObject("tableModel:browse"); - - // Adjust the width of the value column based on maxLen - table.setColumnWidth(1, maxLen * 7); - - // Add the dataset to the table - tableModel.setData(rowData); -}; - - -qx.Proto._clearAllFields = function(module, rpcRequest) -{ - // Obtain the result object - var result = rpcRequest.getUserData("result").data; - - // Retrieve the database handle - module.dbHandle = result; - - // In the future, when we support more than one database, we'll want to - // clear all fields here. For now, there's no need. -}; - - - -/** - * Singleton Instance Getter - */ -qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/swat/source/class/swat/module/ldbbrowse/LdbBrowse.js b/webapps/swat/source/class/swat/module/ldbbrowse/LdbBrowse.js deleted file mode 100644 index 7e3f96c8b5..0000000000 --- a/webapps/swat/source/class/swat/module/ldbbrowse/LdbBrowse.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright: - * (C) 2006 by Derrell Lipman - * All rights reserved - * - * License: - * LGPL 2.1: http://creativecommons.org/licenses/LGPL/2.1/ - */ - -/** - * Swat LDB Browser class - */ -qx.OO.defineClass("swat.module.ldbbrowse.LdbBrowse", - swat.main.AbstractModule, -function() -{ - swat.main.AbstractModule.call(this); -}); - - -/** - * Create the module's finite state machine and graphical user interface. - * - * This function is called the first time a module is actually selected to - * appear. Creation of the module's actual FSM and GUI have been deferred - * until they were actually needed (now) so we need to create them. - * - * @param module {swat.main.Module} - * The module descriptor for the module. - */ -qx.Proto.initialAppear = function(module) -{ - // Initial database to open - module.dbFile = "sam.ldb"; - - // Replace the existing (temporary) finite state machine with the real one - swat.module.ldbbrowse.Fsm.getInstance().buildFsm(module); - - // Create the real gui - swat.module.ldbbrowse.Gui.getInstance().buildGui(module); - - // Force the global database to be opened - var dbName = module.fsm.getObject("dbName"); - dbName.setSelected(dbName.getList().getFirstChild()); -}; - - -/** - * Singleton Instance Getter - */ -qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/swat/source/class/swat/module/ldbbrowse/LdbModify.js b/webapps/swat/source/class/swat/module/ldbbrowse/LdbModify.js deleted file mode 100644 index aff8ec0495..0000000000 --- a/webapps/swat/source/class/swat/module/ldbbrowse/LdbModify.js +++ /dev/null @@ -1,494 +0,0 @@ -/* - * Copyright:: - * (C) 2006 by Simo Sorce - * - * License: - * GPL v2 or later - */ - -/** - * Ldb Modifier Class - */ - -qx.OO.defineClass("swat.module.ldbbrowse.LdbModify", qx.ui.layout.VerticalBoxLayout, -function(fsm) -{ - qx.ui.layout.VerticalBoxLayout.call(this); - - this._fsm = fsm; - - this._mainArea = new qx.ui.layout.VerticalBoxLayout(); - this._mainArea.set({ - overflow: "auto", - height: "1*", - spacing: 5 - }); - - // Add an horizonatl layout for the "New" and "Modify" buttons - // We need a vertical box layout for the tree and the buttons - this._hlayout = new qx.ui.layout.HorizontalBoxLayout(); - this._hlayout.set({ - height: "auto", - spacing: 10 - }); - - // add a spacer to align buttons to the right - this._leftSpacer = new qx.ui.basic.HorizontalSpacer(); - - // Add the "Cancel" button - this._cancelbtn = new qx.ui.form.Button("Cancel"); - this._cancelbtn.addEventListener("execute", this._cancelOp, this); - - // Add the "OK" button - this._okbtn = new qx.ui.form.Button("OK"); - this._okbtn.addEventListener("execute", this._fsm.eventListener, this._fsm); - - // We'll be receiving events on the object, so save its friendly name - this._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); - - // Add the hlayout to the vlayout. - this.add(this._mainArea, this._hlayout); - - // By default this is a new record creator - this._type = "add"; - - // By default this is inactive - this._active = false; - - this.basedn = ""; - - this._dmw = null; -}); - -qx.OO.addProperty({ name : "basedn", type : "string" }); - -/** - * Set the type of operation - * - * @param type {String} - * A string containing "new" or "modify" - * - * @param data {Object} - * An LDB object with the current object parameters - * Used only if type = "modify" - * - */ - -qx.Proto.isActive = function() { - if (this._active == true) { - return true; - } -} - -/** - * Set the base of the object to add - * - * @param type {String} - * A string containing the base DN - */ - -qx.Proto.setBase = function(base) { - - this.basedn = base; - - if (this._active) { - if (this._type == "add") { - - this._basedn.setHtml(this.basedn); - } - } -} - -qx.Proto.getBase = function() { - - return this.basedn; - -} - -qx.Proto.initNew = function(callback, obj) { - - this._setExitCallback(callback, obj); - - if (this.basedn == "") { - alert("Please select the parent node in the tree first!"); - this._callExitCallback(); - return; - } - - this._active = true; - this._type = "add"; - - var hlayout = new qx.ui.layout.HorizontalBoxLayout(); - hlayout.set({ height: "auto", spacing: 10 }); - - var dnlabel = new qx.ui.basic.Label("DN: "); - - // The name of the new/modified object - // TODO: add validator - this._rdn = new qx.ui.form.TextField(""); - this._rdn.setWidth(128); - - var dnsep = new qx.ui.basic.Label(","); - - // The basedn of the object - // TODO: add validator - this._basedn = new qx.ui.basic.Label(this.basedn); - - hlayout.add(dnlabel, this._rdn, dnsep, this._basedn); - - this._mainArea.add(hlayout); - - this._createAttributesArea(); - - return; -} - -qx.Proto.initMod = function(tablemodel, callback, obj) { - - this._setExitCallback(callback, obj); - - if (this.basedn == "") { - this._callExitCallback(); - return; - } - - this._active = true; - this._type = "modify"; - - this._dn = new qx.ui.basic.Label("DN: " + this.basedn); - - this._mainArea.add(this._dn); - - this._createAttributesArea(); - - this._modBaseHash = new Array(); - - // for each entry in the table, add new entries in the object - var count = tablemodel.getRowCount(); - for (var i = 0; i < count; i++) { - var row = tablemodel.getRowData(i); - this._addNewAttribute(row[0], row[1]); - if (this._modBaseHash[row[0]] == null) { - this._modBaseHash[row[0]] = new Array(); - } - this._modBaseHash[row[0]].push(row[1]); - } -} - -qx.Proto._setExitCallback = function(vFunction, vObject) { - - if(typeof vFunction !== "function") { - throw new Error("swat.module.ldbbrowse.LdbModify: setExitCallback(" + vFunction + "' is not a function!"); - } - - this._exitCallback = { - handler : vFunction, - object : vObject - } -} - -qx.Proto._callExitCallback = function() { - - // Shortcuts for handler and object - vFunction = this._exitCallback.handler; - vObject = this._exitCallback.object; - - // Call object function - try - { - if(typeof vFunction === "function") { - vFunction.call(qx.util.Validation.isValid(vObject) ? vObject : this); - } - } - catch(ex) - { - this.error("swat.module.ldbbrowse.LdbModify: Could not call exit callback: ", ex); - } -} - -qx.Proto._reset = function() { - - // Remove existing attributes - this._mainArea.removeAll(); - this._active = false; - this._type = "null"; -} - -qx.Proto.postCleanUp = function() { - this._reset(); -} - -qx.Proto._cancelOp = function() { - - this._reset(); - this._callExitCallback(); -} - -qx.Proto._addNewAttribute = function(name, value, before) { - - var hlayout = new qx.ui.layout.HorizontalBoxLayout(); - hlayout.set({ width: "auto", height: "auto", spacing: 10 }); - - var aButton = new qx.ui.form.Button("+"); - aButton.set({ width: 15, height: 15}); - aButton.addEventListener("execute", function() { - this._addNewAttribute(name, null, hlayout); - }, this); - - var aNameTextField = new qx.ui.form.TextField(name); - aNameTextField.setWidth(150); - - var aValTextField = new qx.ui.form.TextField(value); - aValTextField.setWidth(250); - - var rButton = new qx.ui.form.Button("-"); - rButton.set({ left: 5, width: 15, height: 15}); - rButton.addEventListener("execute", function() { - hlayout.setParent(null); - }, this); - - hlayout.add(aButton, aNameTextField, aValTextField, rButton); - hlayout.setUserData("attrName", aNameTextField); - hlayout.setUserData("attrVal", aValTextField); - - if (before) { - this._attrArea.addAfter(hlayout, before); - } else { - //TODO: check the same attribute is not already present, if so just add a new value instead - this._attrArea.addBefore(hlayout, this._attrAddButton); - } -} - -qx.Proto._createAttributesArea = function() { - - this._attrArea = new qx.ui.layout.VerticalBoxLayout(); - - this._attrAddButton = new qx.ui.form.Button("+"); - this._attrAddButton.set({ width: 15, height: 15}); - this._attrAddButton.addEventListener("execute", this._addNewAttribute, this); - - this._attrArea.add(this._attrAddButton); - - this._mainArea.add(this._attrArea); -} - -qx.Proto.getOpType = function() { - return this._type; -} - -qx.Proto.getLdif = function() { - - if (this._active != true) { - return null; - } - - c = this._attrArea.getChildren(); - - switch (this._type) { - - case "add": - - var ldif = "dn: " + this._rdn.getValue() + "," + this.basedn + "\n"; - - for (var i = 0; i < c.length; i++) { - if (c[i] instanceof qx.ui.layout.HorizontalBoxLayout) { - ldif = ldif + c[i].getUserData("attrName").getComputedValue() + ": " + c[i].getUserData("attrVal").getComputedValue() + "\n"; - } - } - break; - - case "modify": - - var ldif = "dn: " + this.basedn + "\n"; - - ldif = ldif + "changetype: modify\n"; - - var submAttrs = new Array(); - - // Build an array of the submitted data - for (var i = 0; i < c.length; i++) { - if (c[i] instanceof qx.ui.layout.HorizontalBoxLayout) { - - var attrName = c[i].getUserData("attrName").getComputedValue(); - var attrVal = c[i].getUserData("attrVal").getComputedValue(); - - if (submAttrs[attrName] == null) { - submAttrs[attrName] = new Array(); - } - submAttrs[attrName].push(attrVal); - } - } - - // compare arrays and find out what changed, built an hash of the modifications - var modAttrs = new Array(); - - for (var i in this._modBaseHash) { - modAttrs[i] = new Array(); - modAttrs[i][0] = "skip"; - - if (submAttrs[i] == null) { - modAttrs[i][0] = "delete"; - } else { - // check if the arrays are identical - if (this._modBaseHash[i].length <= submAttrs[i].length) { - for (var j = 0; j < this._modBaseHash[i].length; j++) { - for (var k = 0; k < submAttrs[i].length; k++) { - if (this._modBaseHash[i][j] == submAttrs[i][k]) { - break; - } - } - if (k >= submAttrs[i].length) { - modAttrs[i][0] = "replace"; - break; - } - } - // if all the attributes in base hash are contained in sumbAttr - // it means only additions were done, sort out what was addedd - if (modAttrs[i][0] != "replace") { - for (var j = 0; j < submAttrs[i].length; j++) { - for (var k = 0; k < this._modBaseHash[i].length; k++) { - if (submAttrs[i][j] == this._modBaseHash[i][k]) break; - } - // this element was not found in original array - if (k >= this._modBaseHash[i].length) { - if (modAttrs[i][0] != "add") { - modAttrs[i][0] = "add"; - } - modAttrs[i].push(submAttrs[i][j]); - } - } - } - } else { - modAttrs[i] = [ "replace" ]; - } - } - // if they differ replace the whole content - if (modAttrs[i][0] == "replace") { - for (var j = 0; j < submAttrs[i].length; j++) { - modAttrs[i].push(submAttrs[i][j]); - } - } - - // wipe out attr from sumbAttr, so that we can later found truly new attrs addedd to the array - submAttrs[i] = null; - } - - for (var i in submAttrs) { - if (submAttrs[i] != null) { - modAttrs[i] = new Array(); - modAttrs[i][0] = "add"; - - for (var j = 0; j < submAttrs[i].length; j++) { - modAttrs[i].push(submAttrs[i][j]); - } - } - } - - //track if we did any mod at all - var nmods = 0; - - for (var i in modAttrs) { - switch (modAttrs[i][0]) { - - case "delete": - nmods++; - ldif = ldif + "delete: " + i + "\n"; - break; - - case "add": - nmods++; - ldif = ldif + "add: " + i + "\n"; - for (var j = 1; j < modAttrs[i].length; j++) { - ldif = ldif + i + ": " + modAttrs[i][j] + "\n"; - } - break; - - case "replace": - nmods++; - ldif = ldif + "replace: " + i + "\n"; - for (var j = 1; j < modAttrs[i].length; j++) { - ldif = ldif + i + ": " + modAttrs[i][j] + "\n"; - } - break; - - default: - //skip - break; - } - } - - if (nmods == 0) { - alert("No modifications?"); - } - - break; - - default: - - return null; - - } - - // terminate ldif record - ldif = ldif + "\n"; - - return ldif; -}; - -qx.Proto.showConfirmDelete = function() { - - var main = qx.ui.core.ClientDocument.getInstance(); - - if (this._dmw == null) { - this._dmw = new qx.ui.window.Window("-- DELETE Object --"); - this._dmw.set({ - width: 300, - height: 125, - modal: true, - centered: true, - restrictToPageOnOpen: true, - showMinimize: false, - showMaximize: false, - showClose: false, - resizeable: false - }); - - var warningLabel = new qx.ui.basic.Label("Error Dialog not initialized!"); - this._dmw.add(warningLabel); - this._dmw.setUserData("label", warningLabel); - - var cancelButton = new qx.ui.form.Button("Cancel"); - cancelButton.addEventListener("execute", function() { - this._dmw.close(); - }, this); - cancelButton.set({ top: 45, left: 32 }); - this._dmw.add(cancelButton); - - this._dmw.addEventListener("appear",function() { - cancelButton.focus(); - }, this._dmw); - - main.add(this._dmw); - var okButton = new qx.ui.form.Button("OK"); - okButton.addEventListener("execute", function() { - this._dmw.close(); - }, this); - // We'll be receiving events on the object, so save its friendly name - this._fsm.addObject("delete", okButton, "swat.main.fsmUtils.disable_during_rpc"); - okButton.addEventListener("execute", this._fsm.eventListener, this._fsm); - - okButton.set({ top: 45, right: 32 }); - this._dmw.add(okButton); - - main.add(this._dmw); - } - - var label = this._dmw.getUserData("label"); - - label.setHtml("<pre>Do you really want to delete\n" + this.basedn + " ?</pre>"); - - this._dmw.open(); -}; diff --git a/webapps/swat/source/class/swat/module/ldbbrowse/LdifViewer.js b/webapps/swat/source/class/swat/module/ldbbrowse/LdifViewer.js deleted file mode 100644 index 5732b9427f..0000000000 --- a/webapps/swat/source/class/swat/module/ldbbrowse/LdifViewer.js +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright:: - * (C) 2006 by Simo Sorce - * - * License: - * GPL v2 or later - */ - -/** - * Ldif Viewer Class - */ -qx.OO.defineClass("swat.module.ldbbrowse.LdifViewer", qx.ui.embed.HtmlEmbed, -function() -{ - qx.ui.embed.HtmlEmbed.call(this, ""); - - this.setStyleProperty("whiteSpace", "nowrap"); - this.setStyleProperty("textOverflow", "ellipsis"); - - this.setOverflow("auto"); - this.setSelectable(true); - - this.innerText = ""; -}); - -qx.OO.addProperty({ name : "innerText", type : "string" }); - -qx.Proto._update = function() { - this.setHtml("<pre>" + this.innerText + "</pre>"); -} - -/** - * Reset the ldif contents and return to an empty page - */ -qx.Proto.reset = function() { - this.innerText = ""; - this.setHtml(""); -} - -/** - * Add a comment to the ldif output - * - * @param aText {String} - * A string to show up as an ldif Comment - */ -qx.Proto.appendComment = function(aText) { - this.innerText = this.innerText + "# " + a Text + "\n\n"; - this._update(); -} - -/** - * Append an object to be shown - * - * @param o {Object} - * An Object returned by an ldb search - */ -qx.Proto.appendObject = function(o) { - - // First print the Object name as comment - // TODO: Prettify it later - var ldifRecord = "# " + o["dn"] + "\n"; - - // Now the dn - ldifRecord = ldifRecord + "dn: " + o["dn"] + "\n"; - - // Now the attributes; - for (var field in o) - { - - // If it's multi-valued (type is an array)... - if (typeof(o[field]) == "object") - { - // ... then add each value with same name - var a = o[field]; - for (var i = 0; i < a.length; i++) - { - ldifRecord = ldifRecord + field + ": " + a[i] + "\n"; - } - } - else // single-valued - { - ldifRecord = ldifRecord + field + ": " + o[field] + "\n"; - } - } - - // Terminate the record with an empty line - ldifRecord = ldifRecord + "\n"; - - this.innerText = this.innerText + ldifRecord; - this._update(); -} diff --git a/webapps/swat/source/class/swat/module/netmgr/Fsm.js b/webapps/swat/source/class/swat/module/netmgr/Fsm.js deleted file mode 100644 index c2e499a18f..0000000000 --- a/webapps/swat/source/class/swat/module/netmgr/Fsm.js +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Copyright (C) Rafal Szczesniak 2007 - */ - -/** - * Swat Net Manager class finite state machine - */ -qx.OO.defineClass("swat.module.netmgr.Fsm", swat.main.AbstractModuleFsm, -function() -{ - swat.main.AbstractModuleFsm.call(this); -}); - - -qx.Proto.buildFsm = function(module) -{ - var fsm = module.fsm; - var _this = this; - - /* - * State: Idle - * - * Actions upon entry - * - if returning from RPC, display the result - * - * Transition on: - * "changeselection" on tree - */ - var state = new qx.util.fsm.State( - "State_Idle", - { - "onentry" : - function(fsm, event) - { - if (fsm.getPreviousState() == "State_AwaitRpcResult") - { - var rpcRequest = _this.popRpcRequest(); - var result = rpcRequest.getUserData("result"); - var origins = swat.main.AbstractModuleFsm.JsonRpc_Origin; - var serverErrors = swat.main.AbstractModuleFsm.JsonRpc_ServerError; - - if (result.type == "failed" && - result.data.origin == origins.Server && - result.data.code == serverErrors.ResourceError) - { - alert("Error when receiving rpc: '" + result.id + "'" + " exception: " + result.data); - } - else - { - // get the result of the call and apply it - var gui = swat.module.netmgr.Gui.getInstance(); - gui.displayData(module, rpcRequest); - } - - rpcRequest.request.dispose(); - rpcRequest.request = null; - } - }, - - "events" : - { - "appear" : - { - "swat.main.canvas" : - "Transition_Idle_to_AwaitRpcResult_via_canvas_appear", - "vlayout": - "Transition_Idle_to_AwaitRpcResult_via_vlayout_appear" - }, - - "changeSelection" : - { - "tree" : - "Transition_Idle_to_Idle_via_tree_selection_changed" - }, - - "changeSelected": - { - // this one is dispatched from UsersView widget - "domainName": - "Transition_Idle_to_AwaitRpcResult_via_domainName_changed" - }, - - "changeNetCtx" : - { - "swat.module.netmgr.Gui" : - "Transition_Idle_to_AwaitRpcResult_via_netCtx_changed" - } - } - }); - - // Replace the initial Idle state with this one - fsm.replaceState(state, true); - - var trans = new qx.util.fsm.Transition( - "Transition_Idle_to_AwaitRpcResult_via_canvas_appear", - { - "nextState" : "State_AwaitRpcResult", - - "ontransition" : function(fsm, event) - { - // Create default NetContext - var request = _this.callRpc(fsm, "samba.ejsnet", "NetContext", []); - request.setUserData("requestType", "NetContext"); - } - }); - - // Add the new transition - state.addTransition(trans); - - var trans = new qx.util.fsm.Transition( - "Transition_Idle_to_AwaitRpcResult_via_vlayout_appear", - { - "nextState" : "State_AwaitRpcResult", - - "ontransition" : - function(fsm, event) - { - // Request our netbios name to add proper node to the tree - var request = _this.callRpc(fsm, "samba.config", "lp_get", [ "netbios name" ]); - request.setUserData("requestType", "hostname"); - } - }); - - // Add the new transition - state.addTransition(trans); - - var trans = new qx.util.fsm.Transition( - "Transition_Idle_to_Idle_via_tree_selection_changed", - { - "nextState" : "State_Idle", - - "ontransition" : function(fsm, event) - { - var nodes = event.getData(); - var selectedNode = nodes[0]; - - var gui = swat.module.netmgr.Gui.getInstance(); - var parentNode = gui.getParentNode(module, selectedNode); - - // Change current NetContext if necessary for this host - if (parentNode.netCtx != undefined) - { - module.setNetCtx(parentNode.netCtx); - } - - var domainName = parentNode.label; - var nodeName = selectedNode.label; - - switch (nodeName) - { - case "Users": - gui.openUserManager(module, domainName); - break; - - case "Groups": - case "Domain": - case "Services": - alert("View not implemented yet"); - break; - - default: - alert("Undefined call selected for node=['" + nodeName + "']"); - } - } - - }); - - // Add the new transition - state.addTransition(trans); - - var trans = new qx.util.fsm.Transition( - "Transition_Idle_to_AwaitRpcResult_via_domainName_changed", - { - "nextState" : "State_AwaitRpcResult", - - "ontransition" : function(fsm, event) - { - var domainName = fsm.getObject("domainName").getValue(); - var netCtxId = swat.module.netmgr.Gui.getInstance().getNetCtx(); - - var req = _this.callRpc(fsm, "samba.ejsnet", "UserMgr", [ netCtxId, domainName ]); - req.setUserData("requestType", "UserMgr"); - } - }); - - // Add the new transition - state.addTransition(trans); - - var trans = new qx.util.fsm.Transition( - "Transition_Idle_to_AwaitRpcResult_via_netCtx_changed", - { - "nextState" : "State_AwaitRpcResult", - - "ontransition" : function(fsm, event) - { - var netCtxId = swat.module.netmgr.Gui.getInstance().getNetCtx(); - - var req = _this.callRpc(fsm, "samba.ejsnet", "NetContextCreds", [ netCtxId ]); - req.setUserData("requestType", "NetContextCreds"); - } - }); - - state.addTransition(trans); - - blockedEvents = - { - "appear": - { - "tree" : qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED, - "vlayout" : qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED - } - } - - // Add blocked events - this.addAwaitRpcResultState(module, blockedEvents); - -}; - - -/** - * Singleton Instance Getter - */ -qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/swat/source/class/swat/module/netmgr/Gui.js b/webapps/swat/source/class/swat/module/netmgr/Gui.js deleted file mode 100644 index ee366e69a5..0000000000 --- a/webapps/swat/source/class/swat/module/netmgr/Gui.js +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Copyright (C) Rafal Szczesniak 2007 - */ - - -/** - * Swat Net Manager class graphical user interface - */ -qx.OO.defineClass("swat.module.netmgr.Gui", qx.core.Target, -function() -{ - qx.core.Target.call(this); -}); - - -//qx.OO.addProperty({ name : "_tree", type : "object" }); -//qx.OO.addProperty({ name : "_panel", type : "object" }); -//qx.OO.addProperty({ name : "_txtDomain", type : "object" }); -//qx.OO.addProperty({ name : "_txtUsername", type : "object" }); - -/* NetContex resource number assigned on the server side. - Necessary for every ejsnet call */ -qx.OO.addProperty({ name : "netCtx", type : "number" }); - - -qx.Proto.buildGui = function(module) -{ - var fsm = module.fsm; - - // Main layout composing the whole form - var vlayout = new qx.ui.layout.VerticalBoxLayout(); - vlayout.set({ - top: 10, - left: 10, - right: 10, - bottom: 20 - }); - - // Horizontal layout holding TreeView and a "panel" for ListView - var hlayout = new qx.ui.layout.HorizontalBoxLayout(); - hlayout.set({ - top: 0, - left: 0, - right: 0, - height: "80%" - }); - - // Create a hosts tree - this._tree = new qx.ui.treevirtual.TreeVirtual(["Hosts"]); - var tree = this._tree; - - // Set the tree's properties - tree.set({ - backgroundColor: 255, - border: qx.renderer.border.BorderPresets.getInstance().thinInset, - overflow: "hidden", - width: "20%", - height: "100%", - alwaysShowOpenCloseSymbol: true - }); - - tree.setCellFocusAttributes({ backgroundColor : "transparent" }); - - // Create event listener - tree.addEventListener("appear", fsm.eventListener, fsm); - - // Give a tree widget nicer name to handle - fsm.addObject("tree", tree, "swat.main.fsmUtils.disable_during_rpc"); - - // "Panel" for list view - this._panel = new qx.ui.layout.VerticalBoxLayout(); - var panel = this._panel; - - // TODO: Find out what's causing this bug - specifying 'width' works fine, - // but setting 'right' instead does not which makes impossible to position - // the panel against right boundary of a box - panel.set({ - top: 0, - left: 10, - width:"80%", - height: "100%" - }); - - // Add the tree view and panel for list view to the layout - hlayout.add(tree); - hlayout.add(panel); - - // Status layout containing informative labels and status information - var statusLayout = new qx.ui.layout.HorizontalBoxLayout(); - statusLayout.set({ - top: 10, - left: 0, - width: "100%", - height: "20%" - }); - - // First "column" of status fields - var colALayout = new qx.ui.layout.VerticalBoxLayout(); - colALayout.set({ - top: 0, - left: 0, - width: "25%", - height: "100%" - }); - - // Domain name (credentials) - label and text box - var statusDomain = new qx.ui.layout.HorizontalBoxLayout(); - statusDomain.set({ top: 0, left: 0, width: "100%", height: "auto", - verticalChildrenAlign: "middle" }); - - var lblDomain = new qx.ui.basic.Atom(); - lblDomain.setLabel("Domain:"); - lblDomain.set({ width: 70, right: 5, horizontalChildrenAlign: "right" }); - - var txtDomain = new qx.ui.form.TextField(); - txtDomain.set({ width: 80, readOnly: true }); - this._txtDomain = txtDomain; - - statusDomain.add(lblDomain); - statusDomain.add(txtDomain); - - // Username (credentials) - label and text box - var statusUsername = new qx.ui.layout.HorizontalBoxLayout(); - statusUsername.set({ top: 0, left: 0, width: "100%", height: "auto", - verticalChildrenAlign: "middle" }); - - var lblUsername = new qx.ui.basic.Atom(); - lblUsername.setLabel("Username:"); - lblUsername.set({ width: 70, right: 5, horizontalChildrenAlign: "right" }); - - var txtUsername = new qx.ui.form.TextField(); - txtUsername.set({ width: 80, readOnly: true }); - this._txtUsername = txtUsername; - - statusUsername.add(lblUsername); - statusUsername.add(txtUsername); - - colALayout.add(statusDomain); - colALayout.add(statusUsername); - - statusLayout.add(colALayout); - - vlayout.add(hlayout); - vlayout.add(statusLayout); - - vlayout.addEventListener("appear", fsm.eventListener, fsm); - fsm.addObject("vlayout", vlayout); - - // place everything on canvas - module.canvas.add(vlayout); - - // Add event handler to netCtx property change - this.addEventListener("changeNetCtx", fsm.eventListener, fsm); - fsm.addObject("swat.module.netmgr.Gui", this); -}; - - -qx.Proto.displayData = function(module, rpcRequest) -{ - var gui = module.gui; - var fsm = module.fsm; - var result = rpcRequest.getUserData("result"); - var requestType = rpcRequest.getUserData("requestType"); - - // Something went wrong - if (result.type == "failed") - { - alert("Async(" + result.id + ") exception: " + result.data); - return; - } - - switch (requestType) - { - case "hostname": - // Add local host node - this._addHostNode(module, rpcRequest, true); - break; - - case "NetContext": - this._initNetContext(module, rpcRequest); - break; - - case "NetContextCreds": - this._updateNetContextCreds(module, rpcRequest); - break; - - case "UserMgr": - this._initUserManager(module, rpcRequest); - break; - } - - qx.ui.core.Widget.flushGlobalQueues(); -}; - - -qx.Proto.getParentNode = function(module, node) -{ - var tree = this._tree; - var nodes = tree.getTableModel().getData(); - if (nodes == undefined) - { - return undefined; - } - - if (node.parentNodeId == 0) - { - // there is no parent node - return node; - } - - var parentNode = nodes[node.parentNodeId]; - return parentNode; -}; - - -qx.Proto.openUserManager = function(module, domainName) -{ - // Remove existing panel if there is any - there can be only one at the time - if (this._panel.hasChildren()) - { - this._panel.removeAll(); - } - - // Create user view, pass the context and the view to the panel - var view = new swat.module.netmgr.UsersView(module.fsm, domainName); - this._panel.add(view); -}; - - -qx.Proto._addHostNode = function(module, rpcRequest, local) -{ - var fsm = module.fsm; - var hostname = rpcRequest.getUserData("result").data; - - // Get the tree widget - var tree = this._tree; - var dataModel = tree.getDataModel(); - - // Add new host and its service leaves - var hostNodeId = dataModel.addBranch(null, hostname, false); - - var domainNodeId = dataModel.addLeaf(hostNodeId, "Domain", false); - var usersNodeId = dataModel.addLeaf(hostNodeId, "Users", false); - var groupsNodeId = dataModel.addLeaf(hostNodeId, "Groups", false); - var srvcsNodeId = dataModel.addLeaf(hostNodeId, "Services", false); - - dataModel.setData(); - tree.addEventListener("changeSelection", fsm.eventListener, fsm); - - var hostNode = dataModel.getData()[hostNodeId]; - - // Set host-specific properties - hostNode.netCtx = undefined; - hostNode.local = local; -}; - - -qx.Proto._initNetContext = function(module, rpcRequest) -{ - // Gather obtained NetContext handle - var result = rpcRequest.getUserData("result").data; - this.setNetCtx(result); -}; - - -qx.Proto._updateNetContextCreds = function(module, rpcRequest) -{ - // Get requested credentials from the current NetContext - var result = rpcRequest.getUserData("result").data; - this._txtUsername.setValue(result.username); - this._txtDomain.setValue(result.domain); -}; - - -qx.Proto._initUserManager = function(module, rpcRequest) -{ - // Get obtained usrCtx handle - var usrCtx = rpcRequest.getUserData("result").data; -}; - - -/** - * Singleton Instance Getter - */ -qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/swat/source/class/swat/module/netmgr/NetManager.js b/webapps/swat/source/class/swat/module/netmgr/NetManager.js deleted file mode 100644 index cdb9ba4515..0000000000 --- a/webapps/swat/source/class/swat/module/netmgr/NetManager.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) Rafal Szczesniak 2007 - */ - -/** - * Swat Net Manager class - */ -qx.OO.defineClass("swat.module.netmgr.NetManager", - swat.main.AbstractModule, -function() -{ - swat.main.AbstractModule.call(this); -}); - - -qx.Proto.initialAppear = function(module) -{ - // Replace the existing (temporary) finite state machine with the real one - swat.module.netmgr.Fsm.getInstance().buildFsm(module); - - // Create the real gui - swat.module.netmgr.Gui.getInstance().buildGui(module); -}; - - -/** - * Singleton Instance Getter - */ -qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/swat/source/class/swat/module/netmgr/UsersView.js b/webapps/swat/source/class/swat/module/netmgr/UsersView.js deleted file mode 100644 index a54bbf570f..0000000000 --- a/webapps/swat/source/class/swat/module/netmgr/UsersView.js +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) Rafal Szczesniak 2007 - */ - -//qx.OO.addProperty({ name: "_fsm", type: "object"}); -//qx.OO.addProperty({ name: "_columns", type: "object"}); -//qx.OO.addProperty({ name: "_items", type: "object"}); -//qx.OO.addProperty({ name: "_view", type: "object" }); - -/** - * Users View - */ -qx.OO.defineClass("swat.module.netmgr.UsersView", qx.ui.layout.HorizontalBoxLayout, -function(fsm, domainName) -{ - qx.ui.layout.HorizontalBoxLayout.call(this); - - this._fsm = fsm; - - // Set the whole view panel size and spacing between boxes - this.set({ top: 0, left: 0, width: "100%", height: "100%" }); - this.setSpacing(5); - - // Provide vertical positioning of combo box and list view - var innerBox = new qx.ui.layout.VerticalBoxLayout(); - innerBox.set({ top: 0, left: 0, width: "100%", height: "100%"}); - - // horizontal box for domain selection label and combo box - var selectDomainBox = new qx.ui.layout.HorizontalBoxLayout(); - selectDomainBox.set({ top: 0, left: 0, width: "auto", height: "10%" }); - selectDomainBox.setVerticalChildrenAlign("middle"); - selectDomainBox.setSpacing(5); - - // Setup domain selection combo box - var lblDomain = new qx.ui.basic.Atom("Domain:"); - lblDomain.setHorizontalChildrenAlign("right"); - - var cmbDomain = new qx.ui.form.ComboBox(); - cmbDomain.setEditable(false); - - // there's always BUILTIN domain so add it to the list - var item = new qx.ui.form.ListItem("BUILTIN"); - cmbDomain.add(item); - - var selectedItem = undefined; - - // Simply add the domain name if it is passed as a string - if (typeof(domainName) == "string") - { - item = new qx.ui.form.ListItem(domainName); - cmbDomain.add(item); - - selectedItem = item; - } - else // if it's not a string we assume it is a list of strings - { - for (var s in domainName) - { - item = new qx.ui.form.ListItem(s); - cmbDomain.add(s); - } - - selectedItem = new qx.ui.form.ListItem(domainName[0]); - } - - // Add event handling - cmbDomain.addEventListener("changeSelected", fsm.eventListener, fsm); - fsm.addObject("domainName", cmbDomain); - - // Set default selection and dispatch the respective event to initialise the view - cmbDomain.setSelected(selectedItem); - - // Create an empty list view with sample column - this._columns = { username : { label: "Username", width: 150, type: "text" }}; - this._items = []; - this._view = new qx.ui.listview.ListView(this._items, this._columns); - var view = this._view; - view.set({ top: 0, left: 0, width: "90%", height: "90%" }); - view.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow); - - // Arrange widgets and boxes - selectDomainBox.add(lblDomain); - selectDomainBox.add(cmbDomain); - - innerBox.add(selectDomainBox); - innerBox.add(view); - - // place the inner box in the UsersView box - this.add(innerBox); -}); - - -// UsrMgr context is required for any operation on user accounts -qx.OO.addProperty({ name : "usrCtx", type : "number" }); - - -qx.Proto.refreshView = function() -{ -} - - -qx.Proto._initUserManager = function(module, rpcRequest) -{ - // Get obtained UsrCtx handle - var usrCtx = rpcRequest.getUserData("result").data; -}; diff --git a/webapps/swat/source/class/swat/module/statistics/Fsm.js b/webapps/swat/source/class/swat/module/statistics/Fsm.js deleted file mode 100644 index c23cfb0feb..0000000000 --- a/webapps/swat/source/class/swat/module/statistics/Fsm.js +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright: - * (C) 2006 by Derrell Lipman - * All rights reserved - * - * License: - * LGPL 2.1: http://creativecommons.org/licenses/LGPL/2.1/ - */ - -/** - * Swat statistics class finite state machine - */ -qx.OO.defineClass("swat.module.statistics.Fsm", swat.main.AbstractModuleFsm, -function() -{ - swat.main.AbstractModuleFsm.call(this); -}); - - -/** - * Start the redisplay timer. - * - * @param fsm {qx.util.fsm.FiniteStateMachine} - * The finite state machine in use by this module - * - * @param msInterval {Integer} - * The number of milliseconds before the timer should expire - */ -qx.Class._startTimer = function(fsm, msInterval) -{ - - // First, for good house keeping, ensure no timer exists - swat.module.statistics.Fsm._stopTimer(fsm); - - // Create a timer instance to expire in the specified amount of time - var timer = new qx.client.Timer(msInterval); - timer.addEventListener("interval", fsm.eventListener, fsm); - fsm.addObject("timer", timer); - timer.start(); -}; - - -/** - * Stop the redisplay timer. - * - * @param fsm {qx.util.fsm.FiniteStateMachine} - * The finite state machine in use by this module - */ -qx.Class._stopTimer = function(fsm) -{ - // ... then stop the timer. Get the timer object. - var timer = fsm.getObject("timer"); - - // If it still exists... - if (timer) - { - // ... then dispose of it. - timer.dispose(); - fsm.removeObject("timer"); - } -}; - - -qx.Proto.buildFsm = function(module) -{ - var fsm = module.fsm; - var _this = this; - var _module = module; - - /* - * State: Idle - * - * Actions upon entry - * - if returning from RPC, display the result - * - start an interval timer to request statistics again in a while - * - * Transition on: - * "interval" on interval_timer - */ - var state = new qx.util.fsm.State( - "State_Idle", - { - "onentry" : - function(fsm, event) - { - // Did we just return from an RPC request? - if (fsm.getPreviousState() == "State_AwaitRpcResult") - { - // Yup. Display the result. We need to get the request object - var rpcRequest = _this.popRpcRequest(); - - // Display the result - var gui = swat.module.statistics.Gui.getInstance(); - gui.displayData(module, rpcRequest.getUserData("result")); - - // Dispose of the request - rpcRequest.request.dispose(); - rpcRequest.request = null; - - // Restart the timer. - if (_module.visible) - { - // Give it a reasonable interval before we redisplay - swat.module.statistics.Fsm._startTimer(fsm, 5000); - } - } - }, - - "onexit" : - function(fsm, event) - { - // If we're not coming right back into this state... - if (fsm.getNextState() != "State_Idle") - { - // ... then stop the timer. - swat.module.statistics.Fsm._stopTimer(fsm); - } - }, - - "events" : - { - // If the timer expires, send a new statistics request - "interval" : - { - "timer" : - "Transition_Idle_to_AwaitRpcResult_via_request_statistics" - }, - - // When we get an appear event, start our timer - "appear" : - { - "swat.main.canvas" : - "Transition_Idle_to_Idle_via_appear" - }, - - // When we get a disappear event, stop our timer - "disappear" : - { - "swat.main.canvas" : - "Transition_Idle_to_Idle_via_disappear" - } - } - }); - - // Replace the initial Idle state with this one - fsm.replaceState(state, true); - - /* - * Transition: Idle to AwaitRpcResult - * - * Cause: "interval" on timer - * - * Action: - * Issue a Get Statistics request - */ - var trans = new qx.util.fsm.Transition( - "Transition_Idle_to_AwaitRpcResult_via_request_statistics", - { - "nextState" : - "State_AwaitRpcResult", - - "ontransition" : - function(fsm, event) - { - // Issue a Get Statistics call - _this.callRpc(fsm, - "samba.management", - "get_statistics", - [ true, true ]); - } - }); - state.addTransition(trans); - - /* - * Transition: Idle to Idle - * - * Cause: "appear" on canvas - * - * Action: - * Start our timer - */ - var trans = new qx.util.fsm.Transition( - "Transition_Idle_to_Idle_via_appear", - { - "nextState" : - "State_Idle", - - "ontransition" : - function(fsm, event) - { - _module.visible = true; - - // Redisplay immediately - swat.module.statistics.Fsm._startTimer(fsm, 0); - } - }); - state.addTransition(trans); - - /* - * Transition: Idle to Idle - * - * Cause: "disappear" on canvas - * - * Action: - * Stop our timer - */ - var trans = new qx.util.fsm.Transition( - "Transition_Idle_to_Idle_via_disappear", - { - "nextState" : - "State_Idle", - - "ontransition" : - function(fsm, event) - { - _module.visible = false; - swat.module.statistics.Fsm._stopTimer(fsm); - } - }); - state.addTransition(trans); - - // Add the AwaitRpcResult state and all of its transitions - this.addAwaitRpcResultState(module); -}; - - -/** - * Singleton Instance Getter - */ -qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/swat/source/class/swat/module/statistics/Gui.js b/webapps/swat/source/class/swat/module/statistics/Gui.js deleted file mode 100644 index bad55b71c0..0000000000 --- a/webapps/swat/source/class/swat/module/statistics/Gui.js +++ /dev/null @@ -1,469 +0,0 @@ -/* - * Copyright: - * (C) 2006 by Derrell Lipman - * All rights reserved - * - * License: - * LGPL 2.1: http://creativecommons.org/licenses/LGPL/2.1/ - */ - -/** - * Swat statistics class graphical user interface - */ -qx.OO.defineClass("swat.module.statistics.Gui", qx.core.Object, -function() -{ - qx.core.Object.call(this); -}); - - -/* - * The result of our request for statistics is in this form: - * - * rpc: Object - * status: INACTIVE - * smb: Object - * tcons: Array - * 0: Object - * share_name: tmp - * last_use_time: 1167186771 - * client_ip: 127.0.0.1 - * tid: 10928 - * connect_time: 1167186757 - * connections: 1 - * sessions: Array - * 0: Object - * auth_time: 1167186757 - * vuid: 24588 - * last_use_time: 1167186771 - * client_ip: 127.0.0.1 - * connect_time: 1167186757 - * account_name: Administrator - * domain_name: WORKGROUP - * status: RUNNING - * ldap: Object - * status: INACTIVE - * wins: Object - * status: DISABLED - * nbt: Object - * status: RUNNING - * statistics: Object - * total_received: 32 - * total_sent: 4 - * query_count: 0 - * release_count: 0 - * register_count: 0 - * kdc: Object - * status: INACTIVE - * cldap: Object - * status: RUNNING - */ - -/** - * Build the raw graphical user interface. - */ -qx.Proto.buildGui = function(module) -{ - var o; - var fsm = module.fsm; - var canvas = module.canvas; - - canvas.setOverflow("auto"); - - // Create a gui object where we'll put each widget handle that has varying - // data to be displayed. - module.gui = { }; - - var addCaptionedText = function(caption, dest) - { - // Add a row to the destination grid - dest.addRow(); - var row = dest.getRowCount() - 1; - dest.setRowHeight(row, 16); - - // Add the caption - var o = new qx.ui.basic.Label(caption); - dest.add(o, 0, row); - - // Add the text field that will contain varying data - o = new qx.ui.basic.Label(""); - dest.add(o, 1, row); - - // Give 'em the varying data label - return o; - }; - - var addGroup = function(legend, top, height, width, left, right, dest) - { - // Add a groupbox - var group = new qx.ui.groupbox.GroupBox(legend); - group.setTop(top); - if (left >= 0) - { - group.setLeft(left); - } - if (right >= 0) - { - group.setRight(right); - } - if (height >= 0) - { - group.setHeight(height); - } - if (typeof(width) == "string" || width >= 0) - { - group.setWidth(width); - } - group.setBackgroundColor("white"); - group.getLegendObject().setBackgroundColor("white"); - - var grid = new qx.ui.layout.GridLayout(); - grid.setLocation(0, 0); - grid.setDimension("100%", "100%"); - grid.setPadding(0, 0); - grid.setRowCount(0); - grid.setColumnCount(2); - grid.setColumnWidth(0, 100); - grid.setColumnWidth(1, 200); - - group.add(grid); - dest.add(group); - - return grid; - }; - - // Add the RPC Service group box and its status - var group = addGroup("RPC Service", 40, 60, "46%", 20, -1, canvas); - module.gui.rpc = - { - status : addCaptionedText("Status:", group) - }; - - // Add the KDC Service group box and its status - var group = addGroup("KDC Service", 40, 60, "46%", -1, 20, canvas); - module.gui.kdc = - { - status : addCaptionedText("Status:", group) - }; - - // Add the LDAP Service group box and its status - var group = addGroup("LDAP Service", 120, 60, "46%", 20, -1, canvas); - module.gui.ldap = - { - status : addCaptionedText("Status:", group) - }; - - // Add the CLDAP Service group box and its status - var group = addGroup("CLDAP Service", 120, 60, "46%", -1, 20, canvas); - module.gui.cldap = - { - status : addCaptionedText("Status:", group) - }; - - // Add the WINS Service group box and its status - var group = addGroup("WINS Service", 200, 60, "46%", 20, -1, canvas); - module.gui.wins = - { - status : addCaptionedText("Status:", group) - }; - - // Add the NBT Service group box and its status, and the statistics - var group = addGroup("NBT Service", 200, 140, "46%", -1, 20, canvas); - module.gui.nbt = - { - status : addCaptionedText("Status:", group), - total_received : addCaptionedText("Total received:", group), - total_sent : addCaptionedText("Total sent:", group), - query_count : addCaptionedText("Query count:", group), - release_count : addCaptionedText("Release count:", group), - register_count : addCaptionedText("Register count:", group) - }; - - // Add the SMB Service group box (sans grid) and its status - var group = new qx.ui.groupbox.GroupBox("SMB Service"); - group.set({ - top: 360, - height: 400, - left: 20, - right: 20 - }); - group.setBackgroundColor("white"); - group.getLegendObject().setBackgroundColor("white"); - - // Create the Status block - o = new qx.ui.basic.Label("Status:"); - o.set({ - top : 0, - left : 0, - width : 100 - }); - group.add(o); - - o = new qx.ui.basic.Label(""); - o.set({ - top : 0, - left : 100, - width : 200 - }); - group.add(o); - - // Add the status and create the table models for sessions and connections - module.gui.smb = - { - status : o, - sessions : new qx.ui.table.SimpleTableModel(), - tcons : new qx.ui.table.SimpleTableModel() - }; - - // Begin the Sessions section - o = new qx.ui.basic.Label("Sessions"); - o.set({ - top : 20, - left : 20 - }); - group.add(o); - - // Set column labels - var tableModel = module.gui.smb.sessions; - tableModel.setColumns([ - "User", - "Client", - "Connected at", - "Authenticated at", - "Last used at", - "VUID" - ]); - tableModel.setData([ ]); - - // Create the table for sessions - var table = new qx.ui.table.Table(tableModel); - table.set({ - top : 40, - left : 20, - right : 20, - height : 160 - }); - table.setMetaColumnCounts([1, -1]); - table.setStatusBarVisible(false); - table.setColumnVisibilityButtonVisible(false); - table.setColumnWidth(0, 260); - table.setColumnWidth(1, 80); - table.setColumnWidth(2, 120); - table.setColumnWidth(3, 120); - table.setColumnWidth(4, 120); - table.setColumnWidth(5, 60); - - // Add the table to the groupbox - group.add(table); - canvas.add(group); - - // Begin the Connections section - o = new qx.ui.basic.Label("Connections"); - o.set({ - top : 220, - left : 20 - }); - group.add(o); - - // Create the table model for tcons - var tableModel = module.gui.smb.tcons; - tableModel.setColumns([ - "Share", - "Client", - "Connected at", - "Last used at", - "TID" - ]); - tableModel.setData([ ]); - - // Create the table for sessions - var table = new qx.ui.table.Table(tableModel); - table.set({ - top : 240, - left : 20, - right : 20, - bottom : 20 - }); - table.setMetaColumnCounts([1, -1]); - table.setStatusBarVisible(false); - table.setColumnVisibilityButtonVisible(false); - table.setColumnWidth(0, 260); - table.setColumnWidth(1, 80); - table.setColumnWidth(2, 120); - table.setColumnWidth(3, 120); - table.setColumnWidth(4, 60); - - // Add the table to the groupbox - group.add(table); - canvas.add(group); - -}; - - -/** - * Populate the graphical user interface with the specified data - * - * @param module {swat.main.Module} - * The module descriptor for the module. - * - * @result {Object} - * The result returned by SAMBA to our request for statistics. We display - * the data provided by this result. - */ -qx.Proto.displayData = function(module, result) -{ - var gui = module.gui; - - if (result.type == "failed") - { - // Have we already put up the FAILED message? - if (gui.failed) - { - // Yup. - gui.failed.setDisplay(true); - return; - } - - // Create a semi-transparent layover o which to display a failure message - gui.failed = new qx.ui.layout.CanvasLayout(); - gui.failed.set({ - top: 0, - bottom: 0, - left: 0, - right: 0 - }); - gui.failed.setBackgroundColor("white"); - gui.failed.setDisplay(true); // initially displayed - gui.failed.setOpacity(0.7); // semi-transparent - - // Add the failure message - var style = - "color: red;" + - "font-size: large;" + - "font-weight: bold;"; - var o = new qx.ui.basic.Label("<span style='" + style + "'>" + - "Communication with SAMBA failed!", - "</span>"); - o.set({ - top : 0, - left : 20 - }); - gui.failed.add(o); - - // Add the failed layover to the canvas - module.canvas.add(gui.failed); - - return; - } - - // Successful RPC request. - // If the failure message was displayed, we no longer need it. - if (gui.failed) - { - gui.failed.setDisplay(false); - } - - // Create a function for formatting dates - var dateFormat = function(unixepoch) - { - if (unixepoch == 0) - { - return ""; - } - - var d = new Date(unixepoch * 1000); - return (d.getFullYear() + "-" + - ("0" + (d.getMonth() + 1)).substr(-2) + "-" + - ("0" + d.getDate()).substr(-2) + " " + - ("0" + d.getHours()).substr(-2) + ":" + - ("0" + d.getMinutes()).substr(-2)); - } - - // Set the status values - gui.rpc.status.setHtml(result.data.rpc.status); - gui.kdc.status.setHtml(result.data.kdc.status); - gui.ldap.status.setHtml(result.data.ldap.status); - gui.cldap.status.setHtml(result.data.cldap.status); - gui.wins.status.setHtml(result.data.wins.status); - gui.nbt.status.setHtml(result.data.nbt.status); - gui.smb.status.setHtml(result.data.smb.status); - - // If the NBT service is running... - if (result.data.nbt.status == "RUNNING") - { - // ... then output the statistics - gui.nbt.total_received.setHtml( - result.data.nbt.statistics.total_received.toString()); - gui.nbt.total_sent.setHtml( - result.data.nbt.statistics.total_sent.toString()); - gui.nbt.query_count.setHtml( - result.data.nbt.statistics.query_count.toString()); - gui.nbt.release_count.setHtml( - result.data.nbt.statistics.release_count.toString()); - gui.nbt.register_count.setHtml( - result.data.nbt.statistics.register_count.toString()); - } - else - { - // otherwise, clear the statistics fields - gui.nbt.total_received.setHtml(""); - gui.nbt.total_sent.setHtml(""); - gui.nbt.query_count.setHtml(""); - gui.nbt.release_count.setHtml(""); - gui.nbt.register_count.setHtml(""); - } - - // Initialize data for sessions list - var rowData = []; - - // If there are any sessions... - if (result.data.smb.sessions instanceof Array) - { - // ... then for each session... - for (var i = 0; i < result.data.smb.sessions.length; i++) - { - // ... add its info to the table data - var sess = result.data.smb.sessions[i]; - rowData.push([ - sess.account_name + "/" + sess.domain_name, - sess.client_ip, - dateFormat(sess.connect_time), - dateFormat(sess.auth_time), - dateFormat(sess.last_use_time), - sess.vuid.toString() - ]); - } - } - - // Whether there were sessions or not, reset the session table data - gui.smb.sessions.setData(rowData); - - // Initialize data for tcons list - var rowData = []; - - // If there are any tcons... - if (result.data.smb.tcons instanceof Array) - { - // ... then for each tcon... - for (var i = 0; i < result.data.smb.tcons.length; i++) - { - // ... add its info to the table data - var conn = result.data.smb.tcons[i]; - rowData.push([ - conn.share_name, - conn.client_ip, - dateFormat(conn.connect_time), - dateFormat(conn.last_use_time), - conn.tid.toString() - ]); - } - } - - // Whether there were tcons or not, reset the tcon table data - gui.smb.tcons.setData(rowData); -}; - -/** - * Singleton Instance Getter - */ -qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/swat/source/class/swat/module/statistics/Statistics.js b/webapps/swat/source/class/swat/module/statistics/Statistics.js deleted file mode 100644 index 99528605a1..0000000000 --- a/webapps/swat/source/class/swat/module/statistics/Statistics.js +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright: - * (C) 2006 by Derrell Lipman - * All rights reserved - * - * License: - * LGPL 2.1: http://creativecommons.org/licenses/LGPL/2.1/ - */ - -/** - * Swat statistics class - */ -qx.OO.defineClass("swat.module.statistics.Statistics", - swat.main.AbstractModule, -function() -{ - swat.main.AbstractModule.call(this); -}); - - -/** - * Create the module's finite state machine and graphical user interface. - * - * This function is called the first time a module is actually selected to - * appear. Creation of the module's actual FSM and GUI have been deferred - * until they were actually needed (now) so we need to create them. - * - * @param module {swat.main.Module} - * The module descriptor for the module. - */ -qx.Proto.initialAppear = function(module) -{ - // Replace the existing (temporary) finite state machine with the real one - swat.module.statistics.Fsm.getInstance().buildFsm(module); - - // Create the real gui - swat.module.statistics.Gui.getInstance().buildGui(module); -}; - - -/** - * Singleton Instance Getter - */ -qx.Class.getInstance = qx.lang.Function.returnInstance; diff --git a/webapps/swat/source/index.html b/webapps/swat/source/index.html deleted file mode 100644 index ea7bcfe871..0000000000 --- a/webapps/swat/source/index.html +++ /dev/null @@ -1,14 +0,0 @@ -<html> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Swat</title> - <script type="text/javascript" src="script/swat.js"></script> - </head> - <body> - <script type="text/javascript"> - - qx.core.Init.getInstance().setApplication(swat.main.Main); - - </script> - </body> -</html> |