Package net.jumperz.app.MMonjaDB.eclipse.view

Source Code of net.jumperz.app.MMonjaDB.eclipse.view.MDBList

package net.jumperz.app.MMonjaDB.eclipse.view;

import org.eclipse.jface.action.*;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.*;
import org.eclipse.swt.layout.*;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.*;
import org.eclipse.swt.widgets.Composite;

import com.mongodb.DB;
import com.mongodb.DBObject;
import com.mongodb.Mongo;

import java.text.Collator;
import java.util.*;
import net.jumperz.util.*;
import java.io.*;
import net.jumperz.gui.*;

import net.jumperz.app.MMonjaDB.eclipse.MUtil;
import net.jumperz.app.MMonjaDB.eclipse.dialog.*;
import net.jumperz.app.MMonjaDBCore.MDataManager;
import net.jumperz.app.MMonjaDBCore.MOutputView;
import net.jumperz.app.MMonjaDBCore.action.*;
import net.jumperz.app.MMonjaDBCore.action.mj.MShowAllDbStatsAction;
import net.jumperz.app.MMonjaDBCore.event.*;
import java.util.*;

public class MDBList
extends MAbstractView
implements MOutputView
{
private Table table;
private Image image;
private java.util.List statsList;
private int sortOrder = 0;
//--------------------------------------------------------------------------------
public MDBList()
{
MEventManager.getInstance().register2( this );
}
//--------------------------------------------------------------------------------
public void init2()
{
parent.setLayout( formLayout );

table = new Table( parent, SWT.BORDER | SWT.FULL_SELECTION );
table.setHeaderVisible( true );
table.setLinesVisible( true );
FormData d1 = new FormData();
d1.top = new FormAttachment( 0, 1 );
d1.left = new FormAttachment( 0, 1 );
d1.right = new FormAttachment( 100, -1 );
d1.bottom = new FormAttachment( 100, -1 );
table.setLayoutData( d1 );

  //listeners
table.addListener( SWT.MouseDoubleClick, this );
table.addListener( SWT.Selection, this );
table.addListener( SWT.KeyDown, this );

image = MUtil.getImage( parent.getShell().getDisplay(), "database.png" );

if( dataManager.getMongo() != null )
  {
  actionManager.executeAction( "mj show all db stats" );
  }
}
//--------------------------------------------------------------------------------
public void setFocus()
{
}
//--------------------------------------------------------------------------------
private  void onShowDbs( MShowDBAction action )
{
/*
  //check Context
if( action.getContext() != MDataManager.getInstance().getMongo() )
  {
  debug( "invalid state" );
  return;
  }
*/

actionManager.executeAction( "mj show all db stats" );
}
//--------------------------------------------------------------------------------
private void onTableSelect( Event event )
{
TableItem[] items = table.getSelection();
if( items.length != 1 )
  {
  return;
  }
String dbName = items[ 0 ].getText( 0 );

if( isActive() )
  {
  actionManager.executeAction( "use " + dbName );
  }
}
// --------------------------------------------------------------------------------
protected void handleEvent2( Event event )
{
if( event.widget == table )
  {
  switch( event.type )
    {
    case SWT.Selection:
      onTableSelect( event );
      break;
    }
  }
else if( MSwtUtil.getTableColumns( table ).contains( event.widget ) )
  {
  switch( event.type )
    {
    case SWT.Selection:
      onTableColumnSelect( ( TableColumn )event.widget );
      break;
    case SWT.Resize:
      onTableColumnResize();
      break;
    }
  }
}
//--------------------------------------------------------------------------------
private double toDouble( Object value )
{
if( value instanceof Integer )
  {
  Integer intval = ( Integer )value;
  return ( new Double( intval.intValue() ) ).doubleValue();
  }
else if( value instanceof Double )
  {
  return ( ( Double )value ).doubleValue();
  }
else
  {
  if( value.toString().matches( "^[0-9\\.]+$" ) )
    {
    return Double.parseDouble( value.toString() );
    }
  else
    {
    return 0;
    }
  }
}
//--------------------------------------------------------------------------------
private void onTableColumnSelect( TableColumn column )
{
final String columnName = column.getText();

  //sort order
if( sortOrder == 1 )
  {
  sortOrder = -1;
  }
else
  {
  sortOrder = 1;
  }

final int _sortOrder = sortOrder;

Comparator c = new Comparator(){/**************/
public int compare( Object o1, Object o2 )
{
Map map1 = ( Map )o1;
Map map2 = ( Map )o2;

Object value1 = map1.get( columnName );
Object value2 = map2.get( columnName );

debug( value1.getClass() );
debug( value2.getClass() );


if( value1 == null || value2 == null )
  {
  return 0;
  }

if( ( value1 instanceof Integer || value1 instanceof Double )
&& ( value2 instanceof Integer || value2 instanceof Double )
  )
  {
  double double1 = toDouble( value1 );
  double double2 = toDouble( value2 );
  if( double1 > double2 )
    {
    return 1 * _sortOrder;
    }
  else if( double1 == double2 )
    {
    return 0;
    }
  else
    {
    return -1 * _sortOrder;
    }
  }

String str1 = value1.toString();
String str2 = value2.toString();
Collator collator = Collator.getInstance( Locale.getDefault() );
return collator.compare( str1, str2 ) * _sortOrder;
}
public boolean equals( Object o1, Object o2 )
{
return o1.equals( o2 );
}
};/***************/

Collections.sort( statsList, c );

drawTable( statsList );
}
// --------------------------------------------------------------------------------
private void onTableColumnResize()
{
MSwtUtil.setTableColumnWidthToProperties( DBLIST_TABLE, table, prop );
}
//--------------------------------------------------------------------------------
private void clearTable()
{
  //reset table
TableColumn[] columns = table.getColumns();
for( int i = 0; i < columns.length;  ++i )
  {
  columns[ i ].dispose();
  }
table.removeAll();
}
//--------------------------------------------------------------------------------
private Map convertMap( Map data )
{
Map sortedMap = null;
sortedMap = new LinkedHashMap();
sortedMap.put( "db", data.get( "db" ) );
Map tmpMap = new HashMap();
tmpMap.putAll( data );
tmpMap.remove( "db" );
sortedMap.putAll( tmpMap );
return sortedMap;
}
//--------------------------------------------------------------------------------
private void drawTable( final java.util.List list )
{
final MDBList dbList = this;
shell.getDisplay().asyncExec( new Runnable(){ public void run()  {//*****

clearTable();

if( list.size() == 0 )
  {
  return;
  }

java.util.List columnNameList = new ArrayList();
try
 
    //set columns
  {
  Map sortedMap = convertMap( ( Map )list.get( 0 ) );
  Iterator p = sortedMap.keySet().iterator();
  while( p.hasNext() )
    {
    String columnName = ( String )p.next();
    TableColumn column = new TableColumn ( table, SWT.NONE );
    column.setText( columnName );
    columnNameList.add( columnName );   
    //column.setWidth( 35 );
    }
 
  //MSwtUtil.getTableColumnWidthFromProperties( DBLIST_TABLE, table, prop, new int[]{ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40 } );
  MSwtUtil.getTableColumnWidthFromProperties2( DBLIST_TABLE, table, prop );
  MSwtUtil.addListenerToTableColumns2( table, dbList );
  }
 
  debug( columnNameList );
 
    //draw items
  {
  for( int i = 0; i < list.size(); ++i )
    {
    TableItem item = new TableItem( table, SWT.NONE );
    item.setImage( image );
    Map data = convertMap( ( Map )list.get( i ) );

    data.put( data_type, data_type_db );
    for( int k = 0; k < columnNameList.size(); ++k )
      {
      String columnName = ( String )columnNameList.get( k );
      Object value = data.get( columnName );
      if( value != null )
        {
        item.setText( k, value.toString() );     
        }
      else
        {
        item.setText( k, "" );
        }
      }
    }
  }
 
  }
catch( Exception e )
  {
  e.printStackTrace();
  MEventManager.getInstance().fireErrorEvent( e );
  }

DB db = MDataManager.getInstance().getDB();
if( db != null )
  {
  selectItem( db.getName() );
  }

}});//*****
}
//--------------------------------------------------------------------------------
private synchronized void onShowAllDbStats( MShowAllDbStatsAction action )
{
/*
  //check Context
if( action.getContext() != MDataManager.getInstance().getMongo() )
  {
  debug( "invalid state" );
  return;
  }
*/

statsList = action.getStatsList();
if( statsList.size() == 0 )
  {
  return;
  }

drawTable( statsList );
}
//--------------------------------------------------------------------------------
private void selectItem( String dbName )
{
if( table.getItemCount() == 0 )
  {
  return;
  }
TableItem[] items = table.getItems();
for( int i = 0; i < items.length; ++i )
  {
  String itemName = items[ i ].getText( 0 );
  if( itemName.equals( dbName ) )
    {
    if( table.getSelectionIndex() == i )
      {
      break;
      }
    else
      {
      table.select( i );
      break
      }
    }
  }
}
//--------------------------------------------------------------------------------
private void onUse( MUseAction action )
{
final String dbName = action.getDBName();

shell.getDisplay().asyncExec( new Runnable(){ public void run()  {//*****

selectItem( dbName );

}});//*****
}
//--------------------------------------------------------------------------------
private void onDisconnect()
{
shell.getDisplay().asyncExec( new Runnable(){ public void run()  {//*****

clearTable();
statsList = new ArrayList();

}});//*****

}
//--------------------------------------------------------------------------------
public void dispose()
{
MEventManager.getInstance().removeObserver2( this );

super.dispose();
}
//--------------------------------------------------------------------------------
public void update( final Object e, final Object source )
{
//threadPool.addCommand( new MCommand() {  public void execute(){ //-----------------

final MEvent event = ( MEvent )e;
final String eventName = event.getEventName();

if( eventName.indexOf( event_showdbs + "_end" ) == 0 )
  {
  MShowDBAction action = ( MShowDBAction )source;
  onShowDbs( action )
  }
else if( eventName.indexOf( event_mj_all_db_stats + "_end" ) == 0 )
  {
  MShowAllDbStatsAction action = ( MShowAllDbStatsAction )source;
  onShowAllDbStats( action );
  }
else if( eventName.indexOf( event_use + "_end" ) == 0 )
  {
  MUseAction action = ( MUseAction )source;
  onUse( action );
  }
else if( event.getEventName().indexOf( event_disconnect + "_end" ) == 0 )
  {
  onDisconnect();
  }

//  } public void breakCommand(){}  } ); //------------
}
//--------------------------------------------------------------------------------
/*
    public void init(IViewSite site, IMemento memento) throws PartInitException {

    debug( "--" );
    debug( site );
    debug( memento );
        init(site);
    }
//--------------------------------------------------------------------------------
public void saveState(IMemento memento)
{
debug( "--saveState--" );
debug( memento );
}*/
//--------------------------------------------------------------------------------
TOP

Related Classes of net.jumperz.app.MMonjaDB.eclipse.view.MDBList

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.