[Mongobrowser-commit] SF.net SVN: mongobrowser:[13] trunk/mongobrowser/src/com/mebigfatguy/ mongobr
Status: Pre-Alpha
Brought to you by:
dbrosius
|
From: <dbr...@us...> - 2009-12-24 02:03:17
|
Revision: 13
http://mongobrowser.svn.sourceforge.net/mongobrowser/?rev=13&view=rev
Author: dbrosius
Date: 2009-12-24 00:26:39 +0000 (Thu, 24 Dec 2009)
Log Message:
-----------
Initial Checkin
Added Paths:
-----------
trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/
trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/ConnectionDialog.java
trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/IntegerDocument.java
trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoBrowserFrame.java
trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoControlPanel.java
trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoDataPanel.java
trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoPanel.java
trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoTreeNode.java
Added: trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/ConnectionDialog.java
===================================================================
--- trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/ConnectionDialog.java (rev 0)
+++ trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/ConnectionDialog.java 2009-12-24 00:26:39 UTC (rev 13)
@@ -0,0 +1,115 @@
+package com.mebigfatguy.mongobrowser.dialogs;
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import com.mebigfatguy.mongobrowser.MongoBundle;
+
+public class ConnectionDialog extends JDialog {
+
+ private JTextField serverField;
+ private JTextField portField;
+ private JButton okButton;
+ private JButton cancelButton;
+ private boolean ok = false;
+
+ public ConnectionDialog() {
+ setTitle(MongoBundle.getString(MongoBundle.Key.ConnectToServer));
+ initComponents();
+ initListeners();
+ pack();
+ }
+
+ private void initComponents() {
+ Container cp = getContentPane();
+ cp.setLayout(new BorderLayout(4, 4));
+ cp.add(createFormPanel(), BorderLayout.CENTER);
+ cp.add(createCtrlPanel(), BorderLayout.SOUTH);
+
+ }
+
+ private JPanel createFormPanel() {
+ JPanel p = new JPanel();
+ p.setLayout(new FormLayout("3dlu, 100px, 5dlu, 200px, 3dlu", "3dlu, pref, 2dlu, pref, 3dlu"));
+ CellConstraints cc = new CellConstraints();
+
+ JLabel serverLabel = new JLabel(MongoBundle.getString(MongoBundle.Key.Server));
+ p.add(serverLabel, cc.xy(2, 2));
+
+ serverField = new JTextField();
+ p.add(serverField, cc.xy(4, 2));
+ serverField.setText("localhost");
+
+ serverLabel.setLabelFor(serverField);
+
+ JLabel portLabel = new JLabel(MongoBundle.getString(MongoBundle.Key.Port));
+ p.add(portLabel, cc.xy(2, 4));
+
+ portField = new JTextField();
+ portField.setDocument(new IntegerDocument());
+ p.add(portField, cc.xy(4, 4));
+ portField.setText("27017");
+
+ portLabel.setLabelFor(portField);
+
+ return p;
+ }
+
+ private JPanel createCtrlPanel() {
+ JPanel p = new JPanel();
+ p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
+ p.add(Box.createHorizontalGlue());
+
+ okButton = new JButton(MongoBundle.getString(MongoBundle.Key.OK));
+ p.add(okButton);
+ p.add(Box.createHorizontalStrut(10));
+
+ cancelButton = new JButton(MongoBundle.getString(MongoBundle.Key.Cancel));
+ p.add(cancelButton);
+ p.add(Box.createHorizontalStrut(10));
+
+ return p;
+ }
+
+ private void initListeners() {
+ okButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent ae) {
+ ok = true;
+ dispose();
+ }
+ });
+
+ cancelButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent ae) {
+ dispose();
+ }
+ });
+
+ }
+
+ public boolean isOK() {
+ return ok;
+ }
+
+ public String getHost() {
+ return serverField.getText();
+ }
+
+ public int getPort() {
+ return Integer.parseInt(portField.getText());
+ }
+
+
+}
Property changes on: trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/ConnectionDialog.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:mimetype
+ text/plain
Added: svn:eol-style
+ native
Added: trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/IntegerDocument.java
===================================================================
--- trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/IntegerDocument.java (rev 0)
+++ trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/IntegerDocument.java 2009-12-24 00:26:39 UTC (rev 13)
@@ -0,0 +1,33 @@
+package com.mebigfatguy.mongobrowser.dialogs;
+
+import java.awt.Toolkit;
+
+import javax.swing.text.AttributeSet;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.PlainDocument;
+
+public class IntegerDocument extends PlainDocument {
+
+ private static final long serialVersionUID = -6755728406523769124L;
+
+ /**
+ * intercepts string insertions to make sure that the values to be put into
+ * a text component is only an integer value
+ *
+ * @param pos where the text is being inserted
+ * @param insertStr the new text that was typed
+ * @param atts the attributes for the text (unused)
+ */
+ @Override
+ public void insertString(int pos, String insertStr, AttributeSet atts) throws BadLocationException {
+ StringBuilder text = new StringBuilder(getText(0, getLength()));
+ try {
+ text.insert(pos, insertStr);
+ Integer.parseInt(text.toString());
+ super.insertString(pos, insertStr, atts);
+ } catch (Exception e) {
+ Toolkit.getDefaultToolkit().beep();
+ }
+ }
+
+}
Property changes on: trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/IntegerDocument.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:mimetype
+ text/plain
Added: svn:eol-style
+ native
Added: trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoBrowserFrame.java
===================================================================
--- trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoBrowserFrame.java (rev 0)
+++ trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoBrowserFrame.java 2009-12-24 00:26:39 UTC (rev 13)
@@ -0,0 +1,106 @@
+package com.mebigfatguy.mongobrowser.dialogs;
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+
+import com.mebigfatguy.mongobrowser.MongoBundle;
+import com.mebigfatguy.mongobrowser.MongoContext;
+import com.mebigfatguy.mongobrowser.actions.ConnectAction;
+import com.mebigfatguy.mongobrowser.actions.DisconnectAction;
+import com.mongodb.DB;
+import com.mongodb.Mongo;
+
+public class MongoBrowserFrame extends JFrame {
+
+ private JMenuItem connectItem;
+ private JMenuItem disconnectItem;
+ private MongoControlPanel ctrlPanel;
+ private MongoDataPanel dataPanel;
+ private Mediator mediator = new Mediator();
+
+ private Mongo activeServer;
+ private DB database;
+
+ public MongoBrowserFrame() {
+ super(MongoBundle.getString(MongoBundle.Key.Title));
+ initComponents();
+ initMenus();
+ initListeners();
+ pack();
+ }
+
+ private void initComponents() {
+ Container cp = getContentPane();
+ cp.setLayout(new BorderLayout(4, 4));
+ ctrlPanel = new MongoControlPanel(mediator);
+ cp.add(ctrlPanel, BorderLayout.NORTH);
+ dataPanel = new MongoDataPanel(mediator);
+ cp.add(dataPanel, BorderLayout.CENTER);
+ }
+
+ private void initMenus() {
+
+ JMenuBar mb = new JMenuBar();
+ JMenu databasesMenu = new JMenu(MongoBundle.getString(MongoBundle.Key.Servers));
+ connectItem = new JMenuItem(new ConnectAction(mediator));
+ databasesMenu.add(connectItem);
+ disconnectItem = new JMenuItem(new DisconnectAction(mediator));
+ mb.add(databasesMenu);
+ databasesMenu.add(disconnectItem);
+
+ setJMenuBar(mb);
+ }
+
+ private void initListeners() {
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent we) {
+ dispose();
+ System.exit(0);
+ }
+ });
+ }
+
+ class Mediator implements MongoContext {
+
+ private Mongo activeServer;
+ private DB activeDatabase;
+
+ @Override
+ public Mongo getServer() {
+ return activeServer;
+ }
+
+ @Override
+ public void setServer(Mongo server) {
+ activeServer = server;
+ connectItem.setEnabled(server == null);
+ disconnectItem.setEnabled(server != null);
+ if (server != null) {
+ ctrlPanel.init();
+ dataPanel.init();
+ } else {
+ ctrlPanel.term();
+ dataPanel.term();
+ }
+ }
+
+ public DB getDatabase() {
+ return activeDatabase;
+ }
+
+ public void setDatabase(DB database) {
+ activeDatabase = database;
+ if (activeDatabase != null)
+ dataPanel.init();
+ else
+ dataPanel.term();
+ }
+ }
+}
Property changes on: trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoBrowserFrame.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:mimetype
+ text/plain
Added: svn:eol-style
+ native
Added: trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoControlPanel.java
===================================================================
--- trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoControlPanel.java (rev 0)
+++ trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoControlPanel.java 2009-12-24 00:26:39 UTC (rev 13)
@@ -0,0 +1,105 @@
+package com.mebigfatguy.mongobrowser.dialogs;
+
+import java.awt.Color;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import com.mebigfatguy.mongobrowser.MongoBundle;
+import com.mebigfatguy.mongobrowser.MongoContext;
+import com.mongodb.Mongo;
+
+public class MongoControlPanel extends JPanel implements MongoPanel {
+
+ private MongoContext context;
+ private JLabel dbLabel;
+ private JComboBox dbComboBox;
+
+ public MongoControlPanel(MongoContext ctxt) {
+ context = ctxt;
+ initComponents();
+ initListeners();
+ }
+
+ @Override
+ public void init() {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ Mongo db = context.getServer();
+ List<String> databases = db.getDatabaseNames();
+ DefaultComboBoxModel model = (DefaultComboBoxModel)dbComboBox.getModel();
+ for (String database : databases) {
+ model.addElement(database);
+ }
+ model.addElement(new Object() {
+ public String toString() {
+ return "New Database...";
+ }
+ });
+ dbComboBox.setEnabled(true);
+ }
+ });
+
+ }
+
+ @Override
+ public void term() {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ Mongo db = context.getServer();
+ DefaultComboBoxModel model = (DefaultComboBoxModel)dbComboBox.getModel();
+ model.removeAllElements();
+ dbComboBox.setEnabled(false);
+ }
+ });
+ }
+
+ private void initComponents() {
+ setBorder(BorderFactory.createLineBorder(Color.BLACK));
+ setLayout(new FormLayout("3dlu, pref, 1dlu, 150px, pref", "pref"));
+ CellConstraints cc = new CellConstraints();
+
+ JLabel dbLabel = new JLabel(MongoBundle.getString(MongoBundle.Key.Database));
+ dbComboBox = new JComboBox(new DefaultComboBoxModel());
+ dbComboBox.setEnabled(false);
+ dbLabel.setLabelFor(dbComboBox);
+ add(dbLabel, cc.xy(2, 1));
+ add(dbComboBox, cc.xy(4, 1));
+ }
+
+ private void initListeners() {
+ dbComboBox.addItemListener(new ItemListener() {
+
+ @Override
+ public void itemStateChanged(ItemEvent ie) {
+ if (ie.getStateChange() == ItemEvent.SELECTED) {
+ Object sel = dbComboBox.getSelectedItem();
+ if (sel instanceof String) {
+ context.setDatabase(context.getServer().getDB((String)sel));
+ } else {
+ String dbName = JOptionPane.showInputDialog(MongoBundle.getString(MongoBundle.Key.NewDatabase));
+ if (dbName != null) {
+ context.setDatabase(context.getServer().getDB(dbName));
+ DefaultComboBoxModel model = (DefaultComboBoxModel) dbComboBox.getModel();
+ model.insertElementAt(dbName, model.getSize() - 1);
+ }
+ }
+ } else {
+ context.setDatabase(null);
+ }
+ }
+
+ });
+ }
+
+}
Property changes on: trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoControlPanel.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:mimetype
+ text/plain
Added: svn:eol-style
+ native
Added: trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoDataPanel.java
===================================================================
--- trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoDataPanel.java (rev 0)
+++ trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoDataPanel.java 2009-12-24 00:26:39 UTC (rev 13)
@@ -0,0 +1,148 @@
+package com.mebigfatguy.mongobrowser.dialogs;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.Set;
+
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JTree;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreePath;
+
+import com.mebigfatguy.mongobrowser.MongoBundle;
+import com.mebigfatguy.mongobrowser.MongoContext;
+import com.mongodb.BasicDBObject;
+import com.mongodb.DB;
+import com.mongodb.DBCollection;
+
+public class MongoDataPanel extends JPanel implements MongoPanel {
+
+ private MongoContext context;
+ private JTree tree;
+ private JMenuItem newCollectionItem;
+ private JMenuItem newObjectItem;
+ private JMenuItem newKeyValueItem;
+
+ public MongoDataPanel(MongoContext ctxt) {
+ context = ctxt;
+ initComponents();
+ initListeners();
+ }
+
+ @Override
+ public void init() {
+ DB db = context.getDatabase();
+ DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
+ MongoTreeNode root = (MongoTreeNode)model.getRoot();
+
+ if (db != null) {
+ Set<String> collections = db.getCollectionNames();
+ for (String collection : collections) {
+ MongoTreeNode col = new MongoTreeNode(MongoTreeNode.Type.Collection, collection);
+ root.add(col);
+ }
+ } else {
+ root.removeAllChildren();
+ }
+ model.nodeStructureChanged(root);
+ }
+
+ @Override
+ public void term() {
+ }
+
+ private void initComponents() {
+ setLayout(new BorderLayout(4, 4));
+
+ MongoTreeNode root = new MongoTreeNode(MongoTreeNode.Type.Root, "root");
+ tree = new JTree(root);
+ tree.setRootVisible(false);
+ DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
+ add(new JScrollPane(tree), BorderLayout.CENTER);
+
+ newCollectionItem = new JMenuItem(MongoBundle.getString(MongoBundle.Key.NewCollection));
+ newObjectItem = new JMenuItem(MongoBundle.getString(MongoBundle.Key.NewObject));
+ newKeyValueItem = new JMenuItem(MongoBundle.getString(MongoBundle.Key.NewKeyValue));
+ }
+
+ private void initListeners() {
+ final JPopupMenu menu = new JPopupMenu();
+
+ tree.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ showPopup(e);
+ }
+
+ @Override
+ public void mousePressed(MouseEvent e) {
+ showPopup(e); }
+
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ showPopup(e); }
+
+ private void showPopup(MouseEvent e) {
+ int x = e.getX();
+ int y = e.getY();
+ if (e.isPopupTrigger()) {
+ menu.removeAll();
+ TreePath path = tree.getPathForLocation(x, y);
+ if (path == null) {
+ menu.add(newCollectionItem);
+ menu.show(tree, x, y);
+ } else {
+ MongoTreeNode node = (MongoTreeNode)path.getLastPathComponent();
+ if (node.getType() == MongoTreeNode.Type.Collection) {
+ menu.add(newObjectItem);
+ menu.show(tree, x, y);
+ }
+ }
+ }
+ }
+ });
+
+ newCollectionItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent ae) {
+ String collectionName = JOptionPane.showInputDialog(tree, MongoBundle.getString(MongoBundle.Key.NewCollection));
+ if (collectionName != null) {
+ DB db = context.getDatabase();
+ DBCollection dbCollection = db.getCollection(collectionName);
+ DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
+ MongoTreeNode root = (MongoTreeNode)model.getRoot();
+ MongoTreeNode collectionNode = new MongoTreeNode(MongoTreeNode.Type.Collection, collectionName);
+ collectionNode.setUserObject(dbCollection);
+ root.add(collectionNode);
+ model.nodeStructureChanged(root);
+ }
+ }
+ });
+
+ newObjectItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent ae) {
+ String objectName = JOptionPane.showInputDialog(tree, MongoBundle.getString(MongoBundle.Key.NewCollection));
+ if (objectName != null) {
+ TreePath path = tree.getSelectionPath();
+ MongoTreeNode collectionNode = (MongoTreeNode)path.getLastPathComponent();
+ DBCollection dbCollection = (DBCollection) collectionNode.getUserObject();
+ BasicDBObject dbObj = new BasicDBObject();
+ dbCollection.insert(dbObj);
+ DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
+ MongoTreeNode objectNode = new MongoTreeNode(MongoTreeNode.Type.Object, objectName);
+ objectNode.setUserObject(dbObj);
+ collectionNode.add(objectNode);
+ model.nodeStructureChanged((MongoTreeNode)model.getRoot());
+ }
+ }
+ });
+ }
+}
Property changes on: trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoDataPanel.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:mimetype
+ text/plain
Added: svn:eol-style
+ native
Added: trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoPanel.java
===================================================================
--- trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoPanel.java (rev 0)
+++ trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoPanel.java 2009-12-24 00:26:39 UTC (rev 13)
@@ -0,0 +1,6 @@
+package com.mebigfatguy.mongobrowser.dialogs;
+
+public interface MongoPanel {
+ void init();
+ void term();
+}
Property changes on: trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoPanel.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:mimetype
+ text/plain
Added: svn:eol-style
+ native
Added: trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoTreeNode.java
===================================================================
--- trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoTreeNode.java (rev 0)
+++ trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoTreeNode.java 2009-12-24 00:26:39 UTC (rev 13)
@@ -0,0 +1,22 @@
+package com.mebigfatguy.mongobrowser.dialogs;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+
+public class MongoTreeNode extends DefaultMutableTreeNode {
+ enum Type {Root, Collection, Object, KeyValue};
+
+ Type nodeType;
+
+ public MongoTreeNode(Type type, String name) {
+ super(name);
+ nodeType = type;
+ }
+
+ public boolean isLeaf() {
+ return nodeType == Type.KeyValue;
+ }
+
+ public Type getType() {
+ return nodeType;
+ }
+}
Property changes on: trunk/mongobrowser/src/com/mebigfatguy/mongobrowser/dialogs/MongoTreeNode.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:mimetype
+ text/plain
Added: svn:eol-style
+ native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|