[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. |