diff m-toolbox/classes/@repogui/cb_connect.m @ 0:f0afece42f48

Import.
author Daniele Nicolodi <nicolodi@science.unitn.it>
date Wed, 23 Nov 2011 19:22:13 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/m-toolbox/classes/@repogui/cb_connect.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,95 @@
+% CB_CONNECT callback when the user clicks connect button.
+%
+% M Hewitson 22-09-08
+%
+% $Id: cb_connect.m,v 1.6 2011/04/08 08:56:26 hewitson Exp $
+%
+
+function cb_connect(varargin)
+
+  myh     = varargin{1};
+  mainfig = varargin{end};
+  status  = findobj(mainfig.handle, 'Tag', 'RepoguiStatusTxt');
+  panels  = mainfig.panels;
+
+  % Get conn
+  conn = mainfig.connection;
+
+  if isempty(conn)
+
+    % get hostname
+    hostname = get(findobj(mainfig.handle, 'Tag','RepoguiServerEdit'), 'String');
+
+    % get the database
+    db = get(findobj(mainfig.handle, 'Tag','RepoguiDatabaseEdit'), 'String');
+
+    if isempty(hostname)
+      set(status,'String','Impossible to connect: please select a server first','ForeGroundcolor','r');
+      error('### Please select a server first.');
+    elseif isempty(db)
+      set(status,'String','Impossible to connect: please select a database first','ForeGroundcolor','r');
+      error('### Please select a database first.');
+    end
+    
+    % check for username and password
+    dbuser = mainfig.dbuser;
+    dbpass = mainfig.dbpass;
+    
+    % verify if the server is reachable
+    try
+      java.net.InetAddress.getByName(hostname);
+    catch
+      set(status,'String','Impossible to connect: server not responding or no internet connection available','ForeGroundcolor','r');
+      error('### Please check internet connection and server availability.');
+    end
+
+    % connect
+    try
+       if ~isempty(dbpass) && ~isempty(dbuser)
+          conn = utils.mysql.connect(hostname, db, dbuser, dbpass, true);
+       else
+          [conn, dbpass] = utils.mysql.connect(hostname, db, true);
+       end
+    catch
+        set(status,'String','Impossible to connect: please check the provided username and password','ForeGroundcolor','r');
+        error('### Please check the provided username and password')
+    end
+      
+    
+    if ~ischar(conn) && ~ischar(dbpass)
+      if conn==-1 && dbpass==-1
+        % user cancelled
+        return;
+      end
+    end
+    
+    if isa(conn, 'database')
+      mainfig.connection = conn;
+      mainfig.username   = conn.Username;
+      set(myh, 'String', 'disconnect');
+      set(status, 'String', sprintf('connected to %s on %s as %s', db, hostname, conn.Username),'ForeGroundcolor','b');
+
+      % Set tables on query panel
+      buildConditions(mainfig);
+
+      % store the connection
+      mainfig.dbuser = conn.Username;
+      mainfig.dbpass = dbpass;
+    else
+      set(status, 'String', 'not connected','ForeGroundcolor','r');
+      error('Invalid connection.');
+    end
+  else
+    % disconnect
+    close(conn);
+    conn = [];
+    disp('* disconnected.');
+    mainfig.connection = conn;
+    mainfig.username   = '';
+    set(myh, 'String', 'connect');
+    set(status, 'String', 'not connected','ForeGroundcolor','r');
+    mainfig.dbuser = '';
+    mainfig.dbpass = '';
+  end
+
+end