Package org.mongodb.meclipse.views.objects

Source Code of org.mongodb.meclipse.views.objects.Connection

package org.mongodb.meclipse.views.objects;

import static org.mongodb.meclipse.MeclipsePlugin.getCaption;

import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.views.properties.IPropertySource;
import org.mongodb.meclipse.MeclipsePlugin;
import org.mongodb.meclipse.preferences.MongoInstance;
import org.mongodb.meclipse.views.objects.properties.ConnectionPropertySource;

import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;

/**
* @author Flavio [FlaPer87] Percoco Premoli
*/
public final class Connection extends TreeParent {
  private Action delete;
  private boolean isDown = false;

  public Connection(String name) {
    super(name);
    makeActions();
  }

  private void makeActions() {
    final Connection conn = this;
    delete = new Action() {
      public void run() {
        if (view != null) {
          MeclipsePlugin.getDefault().removeMongo(conn.getName());
          view.refreshMe();
        }
      }
    };

    delete.setText(getCaption("connection.delete"));
    delete.setToolTipText(getCaption("connection.tooltip.delete"));
  }

  // public TreeObject [] getChildren() {
  // loadDatabases();
  // return super.getChildren();
  // }

  /**
   * In the style of lazy-loading, this is where we actually initiate the
   * connection to a MongoDB instance - and this is where a user would 1st
   * request to see data obtained via the connection.
   *
   * @return
   */
  public Mongo getMongo() {
    MongoInstance mongoInstance = MeclipsePlugin.getDefault()
        .getMongoInstance(this.getName());
    Exception ex;
    if (mongoInstance.getMongo() == null) {
      Mongo mongo;
      try {
        mongo = new Mongo(mongoInstance.getHost(),
            mongoInstance.getPort());
        mongo.getDatabaseNames();
        mongoInstance.setMongo(mongo); // add the active Mongo instance
                        // to the plug-in's state
        isDown = false;
        return mongo;
        /* catch some possible exceptions */
      } catch (MongoException e) {
        ex = e;
      } catch (UnknownHostException e) {
        ex = e;
      }
      if (!isDown) {
        this.showMessage(String.format(
            getCaption("connection.connectionError"),
            this.getName(), mongoInstance.getHost(), ex));
        isDown = true;
      }
      return null;
    } else {
      return mongoInstance.getMongo();
    }
  }

  @Override
  public TreeObject[] getChildren() {
    List<Database> children = new ArrayList<Database>();
    Mongo mongo = getMongo();
    if (mongo != null) {
      try {
        for (String name : mongo.getDatabaseNames()) {
          Database database = new Database(name);
          database.setParent(this);
          database.setViewer(view);
          children.add(database);
        }
      } catch (Exception e) {
        MeclipsePlugin.getDefault().getMongoInstance(this.getName())
            .setMongo(null);
        e.printStackTrace();
      }
    }
    return children.toArray(new TreeObject[children.size()]);
  }

  /*
   * @Override public void doubleClickAction() { if (getChildren().length ==
   * 0) { loadDatabases(); } }
   */

  @Override
  public void fillContextMenu(IMenuManager manager) {
    manager.add(delete);
    manager.add(new Separator());
    super.fillContextMenu(manager);
  }

  public DBObject getServerStatus() {
    String firstDbName = getMongo().getDatabaseNames().get(0);
    DBObject status = getMongo().getDB(firstDbName).command("serverStatus");
    return status;
  }

  /**
   * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
   */
  @Override
  @SuppressWarnings("rawtypes")
  public Object getAdapter(Class adapter) {
    if (adapter == IPropertySource.class) {
      return new ConnectionPropertySource(this);
    }
    return null;
  }

  private void showMessage(String message) {
    MessageDialog.openInformation(this.view.getViewer().getControl()
        .getShell(), getCaption("connection.title.view"), message);
  }
}
TOP

Related Classes of org.mongodb.meclipse.views.objects.Connection

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.