svn commit: samba r20220 - in branches/SAMBA_4_0: services/samba swat swat/apps swat/apps/plug-ins swat/apps/samba/utils

derrell at samba.org derrell at samba.org
Sat Dec 16 19:07:38 GMT 2006


Author: derrell
Date: 2006-12-16 19:07:37 +0000 (Sat, 16 Dec 2006)
New Revision: 20220

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=20220

Log:
Apply patch from Brad Henry with some additional qooxdoo/json-rpc SWAT
functionality: basic admin console.

Added:
   branches/SAMBA_4_0/services/samba/adm.esp
   branches/SAMBA_4_0/swat/apps/plug-ins/
   branches/SAMBA_4_0/swat/apps/plug-ins/echo.js
   branches/SAMBA_4_0/swat/apps/plug-ins/nbt_stats.js
   branches/SAMBA_4_0/swat/apps/samba/utils/admin_console.html
Modified:
   branches/SAMBA_4_0/swat/menu.js


Changeset:
Added: branches/SAMBA_4_0/services/samba/adm.esp
===================================================================
--- branches/SAMBA_4_0/services/samba/adm.esp	2006-12-16 19:05:50 UTC (rev 20219)
+++ branches/SAMBA_4_0/services/samba/adm.esp	2006-12-16 19:07:37 UTC (rev 20220)
@@ -0,0 +1,22 @@
+<%
+
+jsonrpc_include("resources.esp");
+
+libinclude("base.js");
+libinclude("management.js");
+
+function _echo(params, error) {
+	var echo_string = params[0];
+	return echo_string;
+}
+jsonrpc.method.echo = _echo;
+
+function _nbt_packet_stats(params, error) {
+	var stats = nbtd_statistics();
+	stats.server_status = new Object();
+	stats.server_status = server_status("nbt");
+	return stats;
+}
+jsonrpc.method.NBTPacketStats = _nbt_packet_stats;
+
+%>

Added: branches/SAMBA_4_0/swat/apps/plug-ins/echo.js
===================================================================
--- branches/SAMBA_4_0/swat/apps/plug-ins/echo.js	2006-12-16 19:05:50 UTC (rev 20219)
+++ branches/SAMBA_4_0/swat/apps/plug-ins/echo.js	2006-12-16 19:07:37 UTC (rev 20220)
@@ -0,0 +1,71 @@
+
+// This function takes the main pane widget and jams its widget in the right
+// sub-pane.
+
+function _asyncEchoHandler(result, ex, id, paneWidget) {
+	var replyTextArea = null;
+	var refreshButton = null;
+	var echoTextField = null;
+
+	if (ex == null) {
+		// We need to remove anything previously drawn in this area.
+		paneWidget.removeAll();
+
+		echoTextField = new qx.ui.form.TextField();
+		echoTextField.setTop(0);
+		echoTextField.setLeft(0);
+
+		refreshButton = new qx.ui.form.Button("Refresh");
+		refreshButton.setTop(0);
+		refreshButton.setLeft(150);
+
+		replyTextArea = new
+			qx.ui.form.TextArea(result);
+		replyTextArea.setWrap(true);
+		replyTextArea.setWidth("100%");
+		replyTextArea.setHeight("50%");
+		replyTextArea.setTop(30);
+		replyTextArea.setBottom(50);
+		replyTextArea.setLeft(0);
+		replyTextArea.setRight(20);
+	} else {
+		alert("Async(" + id + ") exception: " + ex);
+	}
+	paneWidget.add(replyTextArea);
+	paneWidget.add(refreshButton);
+	paneWidget.add(echoTextField);
+
+	// Provide a handler for the button.
+	with (refreshButton) {
+		addEventListener("execute", function(e) {
+			this.debug("executed: " + this.getLabel());
+			this.debug("echoTextField.getValue(): " + echoTextField.getValue());
+			_echoPlugInDisplay(paneWidget, echoTextField.getValue());
+		});
+	};
+}
+
+function _echoPlugInDisplay(paneWidget, echoText) {
+	if (echoText == null) {
+		echoText = "Hello World!";
+	}
+
+        var rpc = new qx.io.remote.Rpc();
+        rpc.setTimeout(60000);
+        rpc.setUrl("/services/");
+        rpc.setServiceName("samba.adm");
+        rpc.setCrossDomain(false);
+
+        mycall = rpc.callAsync(
+                function(result, ex, id) {
+			_asyncEchoHandler(result, ex, id, paneWidget);
+                },
+                "echo",
+		echoText);
+}
+
+function EchoPlugIn() {
+	var o = new Object();
+	o.display = _echoPlugInDisplay;
+	return o;
+}

Added: branches/SAMBA_4_0/swat/apps/plug-ins/nbt_stats.js
===================================================================
--- branches/SAMBA_4_0/swat/apps/plug-ins/nbt_stats.js	2006-12-16 19:05:50 UTC (rev 20219)
+++ branches/SAMBA_4_0/swat/apps/plug-ins/nbt_stats.js	2006-12-16 19:07:37 UTC (rev 20220)
@@ -0,0 +1,62 @@
+
+// This function takes the main pane widget and jams its widget in the right
+// sub-pane.
+
+function _asyncNBTStatsHandler(result, ex, id, paneWidget) {
+	var statusTextArea = null;
+
+	var listData = [];
+	listData.push({
+		server_status : { text : result.server_status },
+		total_received : { text : result.total_received.toString() },
+		total_sent : { text : result.total_sent.toString() },
+		query_count : { text : result.query_count.toString() },
+		release_count : { text : result.release_count.toString() },
+		register_count : { text : result.register_count.toString() }
+	});
+
+	if (ex == null) {
+		// We need to remove anything previously drawn in this area.
+		paneWidget.removeAll();
+
+		statusTextArea = new
+			qx.ui.form.TextArea("Server Status: " +
+				result.server_status.toString() + "\n" +
+				"Total Received: " +
+				result.total_received.toString() + "\n" +
+				"Total Sent: " +
+				result.total_sent.toString() + "\n" +
+				"Query Count: " +
+				result.query_count.toString() + "\n" +
+				"Release Count: " +
+				result.release_count.toString() + "\n" +
+				"Register Count: " +
+				result.register_count.toString() + "\n");
+		statusTextArea.setWrap(true);
+		statusTextArea.setWidth("100%");
+		statusTextArea.setHeight("100%");
+	} else {
+		alert("Async(" + id + ") exception: " + ex);
+	}
+	paneWidget.add(statusTextArea);
+}
+
+function _NBTStatsPlugInDisplay(paneWidget) {
+        var rpc = new qx.io.remote.Rpc();
+        rpc.setTimeout(60000);
+        rpc.setUrl("/services/");
+        rpc.setServiceName("samba.adm");
+        rpc.setCrossDomain(false);
+
+        mycall = rpc.callAsync(
+                function(result, ex, id) {
+			_asyncNBTStatsHandler(result, ex, id, paneWidget);
+                },
+                "NBTPacketStats");
+}
+
+function NBTStatsPlugIn() {
+	var o = new Object();
+	o.display = _NBTStatsPlugInDisplay;
+	return o;
+}

Added: branches/SAMBA_4_0/swat/apps/samba/utils/admin_console.html
===================================================================
--- branches/SAMBA_4_0/swat/apps/samba/utils/admin_console.html	2006-12-16 19:05:50 UTC (rev 20219)
+++ branches/SAMBA_4_0/swat/apps/samba/utils/admin_console.html	2006-12-16 19:07:37 UTC (rev 20220)
@@ -0,0 +1,258 @@
+<HTML>
+
+<HEAD>
+	<META http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<TITLE>Samba Admin Console</TITLE>
+
+	<LINK type="text/css" rel="stylesheet" href="../../resource/css/layout-samba.css"/>
+	<!--[if IE]>
+	<LINK
+		type="text/css" rel="stylesheet" href="../../resource/css/layout-samba.css"/>
+	<![endif]-->
+	<SCRIPT type="text/javascript" src="../../script/qx.js"></SCRIPT>
+
+	<!--> Include plug-in applications <!-->
+	<SCRIPT type="text/javascript" src="../../plug-ins/echo.js"></SCRIPT>
+	<SCRIPT type="text/javascript" src="../../plug-ins/nbt_stats.js"></SCRIPT>
+</HEAD>
+
+<BODY>
+	<SCRIPT type="text/javascript" src="../../script/layout-samba.js"></SCRIPT>
+	<DIV style="position: absolute; background-color: transparent; right:0; top:0; z-index: 1000000001;">
+		<IMG src="../../../images/logo.png">
+	</DIV>
+
+	<DIV id="demoHead">
+		Samba Administrative Console
+	</DIV>
+	<SCRIPT type="text/javascript">
+
+// All global variables will be members of this object.
+globals = new Object();
+
+//paneWidget is the split-pane.
+globals.paneWidget = qx.ui.splitpane.SplitPane;
+
+//appTree is paneWidget's left pane.
+globals.appTree = new Object();
+
+//appInstance is paneWidget's right pane.
+globals.appInstance = new qx.ui.layout.CanvasLayout();
+
+function createApplicationTree() {
+	var app_treeRowStructure =
+		qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard(
+			"Plug-in Apps",
+			"icon/16/desktop.png",
+			"icon/16/dictionary.png");
+	var app_tree = new
+		qx.ui.treefullcontrol.Tree(app_treeRowStructure);
+
+	with (app_tree) {
+		setBackgroundColor(255);
+		setBorder(qx.renderer.border.BorderPresets.getInstance().inset);
+		setOverflow("scrollY");
+		setWidth("100%");
+		setHeight("100%");
+	};
+
+	app_tree.getManager().addEventListener("changeSelection", function(e) {
+		sel = new Object();
+		sel = app_tree.getSelectedElement();
+		var appName = sel.getUserData("PlugIn Name");
+		this.debug("changeSelection: " + appName);
+		var obj = sel.getUserData("PlugIn Object");
+
+		obj.display(globals.appInstance);
+
+	});
+
+	return app_tree;
+}
+
+function addButtonClickHandler(addMenu, el, e) {
+	if (addMenu.isSeeable()) {
+		addMenu.hide();
+	} else {
+		addMenu.setLeft(qx.dom.DomLocation.getPageBoxLeft(el));
+		addMenu.setTop(qx.dom.DomLocation.getPageBoxBottom(el));
+		addMenu.show();
+	};
+}
+
+function removeButtonExecuteHandler() {
+	// Get list of installed plug-in applications.
+	// Display list as a menu
+}
+
+function aboutButtonExecuteHandler(aboutWindow) {
+	aboutWindow.open();
+}
+
+function addMenuButtonExecuteHandler(plugInName, plugIn) {
+	treeRowStructure =
+		qx.ui.treefullcontrol.TreeRowStructure.getInstance().standard(plugInName);
+	var treeElement =
+		new qx.ui.treefullcontrol.TreeFolder(treeRowStructure);
+
+	treeElement.setUserData("PlugIn Name", plugInName);
+	treeElement.setUserData("PlugIn Object", plugIn);
+
+	globals.appTree.add(treeElement);
+
+	// Select the most recently added plugin in the tree-menu.
+	globals.appTree.setSelectedElement(globals.appTree.getLastTreeChild());
+
+	plugIn.display(globals.appInstance);
+}
+
+function createConsoleButtons(mainWindow) {
+	// Get list of available plug-in applications.
+	// Display list of applications as a menu.
+	var addMenu = new qx.ui.menu.Menu();
+	var descriptionMenuButton =
+		new qx.ui.menu.MenuButton("Select a plug-in.");
+	var menuSeparator = new qx.ui.menu.MenuSeparator();
+	var echoMenuButton = new qx.ui.menu.MenuButton("Echo");
+
+	with (echoMenuButton) {
+		addEventListener("execute", function(e) {
+			this.debug("executed: " + this.getLabel());
+			var plugIn = new EchoPlugIn();
+			addMenuButtonExecuteHandler("Echo Test", plugIn);
+		});
+	};
+
+	var NBTStatsMenuButton =
+		new qx.ui.menu.MenuButton("NBT Packet Statistics");
+
+	with (NBTStatsMenuButton) {
+		addEventListener("execute", function(e) {
+			this.debug("executed: " + this.getLabel());
+			var plugIn = new NBTStatsPlugIn();
+			addMenuButtonExecuteHandler("NBT Packet Statistics", plugIn);
+		});
+	};
+
+	addMenu.add(descriptionMenuButton);
+	addMenu.add(menuSeparator);
+	addMenu.add(echoMenuButton);
+	addMenu.add(NBTStatsMenuButton);
+
+	mainWindow.add(addMenu);
+
+	var addButton = new qx.ui.form.Button("Add Plug-in");
+
+	with (addButton) {
+		setTop(0);
+		setLeft(0);
+
+		addEventListener("click", function(e) {
+			this.debug("clicked: " + this.getLabel());
+			var el = this.getElement();
+			addButtonClickHandler(addMenu, el);
+			e.setPropagationStopped(true);
+		});
+
+		addEventListener("mousedown", function(e) {
+			this.debug("mousedown: " + this.getLabel());
+			e.setPropagationStopped(true);
+		});
+
+		setEnabled(true);
+	};
+
+	var removeButton = new qx.ui.form.Button("Remove Plug-in");
+	with (removeButton) {
+		setTop(0);
+		setLeft(66);
+
+		addEventListener("execute", function(e) {
+			this.debug("Executed: " + this.getLabel());
+			removeButtonExecuteHandler();
+		});
+
+		setEnabled(true);
+	};
+
+	var aboutWindow = new qx.ui.window.Window("About");
+	aboutWindow.setSpace(100, "auto", 100, "auto");
+	aboutWindow.setModal(false);
+	aboutWindow.setShowMinimize(false);
+	aboutWindow.setShowMaximize(false);
+
+	var aboutText = new qx.ui.basic.Label("Blah.");
+	aboutWindow.add(aboutText);
+
+	mainWindow.add(aboutWindow);
+
+	var aboutButton = new qx.ui.form.Button("About");
+
+	with (aboutButton) {
+		setTop(0);
+		setLeft(154);
+		addEventListener("execute", function(e) {
+			this.debug("Executed: " + this.getLabel());
+			aboutButtonExecuteHandler(aboutWindow);
+		});
+		setEnabled(true);
+	};
+
+	mainWindow.add(addButton);
+	mainWindow.add(removeButton);
+	mainWindow.add(aboutButton);
+}
+
+qx.core.Init.getInstance().defineMain(
+	function() {
+		// Enable JSON-RPC debugging.
+		qx.Settings.setCustomOfClass("qx.io.Json", "enableDebug", true);
+
+		var consoleFrame = new qx.ui.layout.CanvasLayout;
+		consoleFrame.setLocation(0,60);
+		consoleFrame.setBottom(120);
+		consoleFrame.setRight(280);
+		consoleFrame.setPadding(20);
+
+		consoleFrame.addToDocument();
+
+		var mainWindow = new qx.ui.window.Window("Console");
+		mainWindow.setSpace(0, 700, 0, 400);
+		mainWindow.allowMinimize = false;
+		mainWindow.showMinimize = false;
+
+		// The default window move method is slow.
+		mainWindow.setMoveMethod("frame");
+
+		consoleFrame.add(mainWindow);
+
+		// We need buttons to add and remove plug-ins.
+		createConsoleButtons(mainWindow);
+
+		// Make a splitpane.
+		globals.paneWidget = new qx.ui.splitpane.HorizontalSplitPane("1*","2*");
+		globals.paneWidget.setEdge(28,0);
+		globals.paneWidget.setLiveResize(true);
+
+		mainWindow.add(globals.paneWidget);
+
+		// plug-in application tree is on the left.
+		globals.appTree = createApplicationTree();
+
+		globals.paneWidget.addLeft(globals.appTree);
+
+		// What is drawn in the right pane is up to the plug-in.
+		// It is a blank canvas for now.
+		globals.appInstance.setTop(0);
+		globals.appInstance.setLeft(0);
+		globals.appInstance.setBottom(50);
+		globals.appInstance.setRight(20);
+
+		globals.paneWidget.addRight(globals.appInstance);
+
+		mainWindow.open();
+	}
+);
+	</SCRIPT>
+</BODY>
+</HTML>

Modified: branches/SAMBA_4_0/swat/menu.js
===================================================================
--- branches/SAMBA_4_0/swat/menu.js	2006-12-16 19:05:50 UTC (rev 20219)
+++ branches/SAMBA_4_0/swat/menu.js	2006-12-16 19:07:37 UTC (rev 20220)
@@ -38,6 +38,7 @@
 swat_menus.json = simple_menu(
 	"JSON Tests",
 	"ldb browser",          session_uri("/apps/samba/utils/ldbbrowse.html"),
+	"admin console",	session_uri("/apps/samba/utils/admin_console.html"),
 	"qooxdoo examples",	session_uri("/apps/qooxdoo-examples/index.html"));
 
 



More information about the samba-cvs mailing list