@ -25,7 +25,12 @@ namespace SharpDbTools.Forms
/// </summary>
/// </summary>
public class DbModelInfoTreeNode : TreeNode , IRequiresRebuildSource
public class DbModelInfoTreeNode : TreeNode , IRequiresRebuildSource
{
{
BackgroundWorker loadMetadataFromFileBackgroundWorker ;
BackgroundWorker backgroundWorker ;
ProgressEllipsis progress ;
Timer timer ;
const string fileLoadMessage = ": loading from file" ;
const string connectionLoadMessage = ": loading from connection" ;
string message ;
public DbModelInfoTreeNode ( string name ) : base ( name )
public DbModelInfoTreeNode ( string name ) : base ( name )
{
{
@ -65,6 +70,11 @@ namespace SharpDbTools.Forms
TreeNode dbNode = CreateMetaDataNode ( this . LogicalConnectionName ) ;
TreeNode dbNode = CreateMetaDataNode ( this . LogicalConnectionName ) ;
this . Nodes . Add ( connectionPropsNode ) ;
this . Nodes . Add ( connectionPropsNode ) ;
this . Nodes . Add ( dbNode ) ;
this . Nodes . Add ( dbNode ) ;
timer = new Timer ( ) ;
timer . Interval = 1 0 0 0 ;
timer . Tick + = new EventHandler ( this . TimerClick ) ;
progress = new ProgressEllipsis ( 4 ) ;
}
}
public string LogicalConnectionName {
public string LogicalConnectionName {
@ -192,14 +202,35 @@ namespace SharpDbTools.Forms
private void LoadMetadataFromFileClickHandler ( object sender , EventArgs e )
private void LoadMetadataFromFileClickHandler ( object sender , EventArgs e )
{
{
LoggingService . Debug ( "load metadata from file clicked" ) ;
LoggingService . Debug ( "load metadata from file clicked" ) ;
this . loadMetadataFromFileB ackgroundWorker = new BackgroundWorker ( ) ;
this . b ackgroundWorker = new BackgroundWorker ( ) ;
loadMetadataFromFileB ackgroundWorker. DoWork + = new DoWorkEventHandler ( this . LoadMetadataFromFileDoWork ) ;
b ackgroundWorker. DoWork + = new DoWorkEventHandler ( this . LoadMetadataFromFileDoWork ) ;
loadMetadataFromFileB ackgroundWorker. RunWorkerCompleted + =
b ackgroundWorker. RunWorkerCompleted + =
new RunWorkerCompletedEventHandler ( this . LoadMetadataFromFileF inished ) ;
new RunWorkerCompletedEventHandler ( this . LoadMetadataFinished ) ;
string logicalConnectionName = ( string ) this . Tag ;
string logicalConnectionName = ( string ) this . Tag ;
this . Text = logicalConnectionName + ": loading..." ;
this . message = logicalConnectionName + fileLoadMessage ;
this . ContextMenuStrip . Enabled = false ;
this . ContextMenuStrip . Enabled = false ;
this . loadMetadataFromFileBackgroundWorker . RunWorkerAsync ( logicalConnectionName ) ;
timer . Start ( ) ;
this . backgroundWorker . RunWorkerAsync ( logicalConnectionName ) ;
}
private void TimerClick ( object sender , EventArgs eventArgs )
{
string ellipsis = progress . Text ;
progress . performStep ( ) ;
string displayMsg = this . message + ellipsis ;
SetText ( displayMsg ) ;
}
delegate void TextSetterDelegate ( string text ) ;
public void SetText ( string text )
{
if ( this . TreeView . InvokeRequired ) {
this . TreeView . Invoke ( new TextSetterDelegate ( this . SetText ) , new object [ ] { text } ) ;
return ;
}
this . Text = text ;
}
}
private void LoadMetadataFromFileDoWork ( object sender , DoWorkEventArgs args )
private void LoadMetadataFromFileDoWork ( object sender , DoWorkEventArgs args )
@ -210,26 +241,47 @@ namespace SharpDbTools.Forms
}
}
}
}
private void LoadMetadataFromFileF inished ( object sender , RunWorkerCompletedEventArgs args )
private void LoadMetadataFinished ( object sender , RunWorkerCompletedEventArgs args )
{
{
if ( this . TreeView . InvokeRequired ) {
this . TreeView . Invoke ( new EventHandler < RunWorkerCompletedEventArgs >
( this . LoadMetadataFinished ) ) ;
return ;
}
this . timer . Stop ( ) ;
this . Text = ( string ) this . Tag ;
this . Text = ( string ) this . Tag ;
this . ContextMenuStrip . Enabled = true ;
this . ContextMenuStrip . Enabled = true ;
this . backgroundWorker . Dispose ( ) ;
this . backgroundWorker = null ;
this . FireRebuildRequired ( ) ;
this . FireRebuildRequired ( ) ;
}
}
private void LoadMetadataFromConnectionClickHandler ( object sender , EventArgs args )
private void LoadMetadataFromConnectionClickHandler ( object sender , EventArgs args )
{
{
string connectionLogicalName = this . Text ;
LoggingService . Debug ( "load metadata from connection clicked" ) ;
LoggingService . Debug ( "load metadata from connection clicked for connection with name: "
this . backgroundWorker = new BackgroundWorker ( ) ;
+ connectionLogicalName ) ;
backgroundWorker . DoWork + = new DoWorkEventHandler ( this . LoadMetadataFromConnectionDoWork ) ;
try {
backgroundWorker . RunWorkerCompleted + =
DbModelInfoService . LoadMetadataFromConnection ( connectionLogicalName ) ;
new RunWorkerCompletedEventHandler ( this . LoadMetadataFinished ) ;
}
string logicalConnectionName = ( string ) this . Tag ;
catch ( DbException e ) {
this . message = logicalConnectionName + connectionLoadMessage ;
MessageService . ShowError ( e ,
this . ContextMenuStrip . Enabled = false ;
"An Exception was thrown while trying to connect to: " + connectionLogicalName ) ;
timer . Start ( ) ;
this . backgroundWorker . RunWorkerAsync ( logicalConnectionName ) ;
}
private void LoadMetadataFromConnectionDoWork ( object sender , DoWorkEventArgs args )
{
string connectionLogicalName = args . Argument as string ;
if ( connectionLogicalName ! = null ) {
try {
DbModelInfoService . LoadMetadataFromConnection ( connectionLogicalName ) ;
}
catch ( DbException e ) {
MessageService . ShowError ( e ,
"An Exception was thrown while trying to connect to: " + connectionLogicalName ) ;
}
}
}
this . FireRebuildRequired ( ) ;
}
}
}
}
}
}