com.mebigfatguy.mongobrowser.dialogs.ManageIndicesDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.mebigfatguy.mongobrowser.dialogs.ManageIndicesDialog.java

Source

/*
 * mongobrowser - a webstart gui application for viewing, 
 *                editing and administering a Mongo Database
 * Copyright 2009-2011 MeBigFatGuy.com
 * Copyright 2009-2011 Dave Brosius
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 *    http://www.apache.org/licenses/LICENSE-2.0 
 *    
 * Unless required by applicable law or agreed to in writing, 
 * software distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and limitations 
 * under the License. 
 */
package com.mebigfatguy.mongobrowser.dialogs;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import com.mebigfatguy.mongobrowser.MongoBundle;
import com.mebigfatguy.mongobrowser.SwingUtils;
import com.mebigfatguy.mongobrowser.model.IndexDescription;
import com.mebigfatguy.mongobrowser.model.IndexFieldList;

public class ManageIndicesDialog extends JDialog {

    private static final long serialVersionUID = -4263800895451732866L;
    private static int INDEX_SEQ = 1;

    private JTable indicesTable;
    private JButton addIndexButton;
    private JButton removeIndexButton;
    private JButton okButton;
    private JButton cancelButton;
    private boolean ok = false;

    public ManageIndicesDialog(List<IndexDescription> indices) {
        setTitle(MongoBundle.getString(MongoBundle.Key.ManageIndices));
        initComponents(indices);
        initListeners();
        pack();
    }

    /**
     * did the user click ok
     * 
     * @return if the user clicked ok
     */
    public boolean isOK() {
        return ok;
    }

    public List<IndexDescription> getIndicesNames() {

        ManageIndicesModel model = (ManageIndicesModel) indicesTable.getModel();
        return model.getIndices();
    }

    private void initComponents(List<IndexDescription> indices) {
        Container cp = getContentPane();
        cp.setLayout(new BorderLayout(4, 4));
        cp.add(createIndicesListPanel(indices), BorderLayout.CENTER);
        cp.add(createCtrlPanel(), BorderLayout.SOUTH);

        SwingUtils.sizeUniformly(okButton, cancelButton, addIndexButton, removeIndexButton);
    }

    private void initListeners() {
        okButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                ok = true;
                dispose();
            }
        });

        cancelButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                dispose();
            }
        });

        addIndexButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                String indexName = createUniqueIndexName();
                IndexDescription index = new IndexDescription(indexName, new IndexFieldList());
                ManageIndicesModel model = (ManageIndicesModel) indicesTable.getModel();
                model.add(index);
            }
        });

        removeIndexButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                ManageIndicesModel model = (ManageIndicesModel) indicesTable.getModel();
                int[] selRows = indicesTable.getSelectedRows();
                for (int i = selRows.length - 1; i >= 0; i--) {
                    model.removeAt(selRows[i]);
                }
            }
        });
    }

    private JPanel createIndicesListPanel(List<IndexDescription> indices) {
        JPanel p = new JPanel();
        p.setLayout(new FormLayout("6dlu, pref:grow, 5dlu, pref, 6dlu",
                "6dlu, 12dlu:grow, pref, 3dlu, pref, 12dlu:grow, 6dlu, pref, 6dlu"));
        CellConstraints cc = new CellConstraints();

        ManageIndicesModel model = new ManageIndicesModel(indices);

        indicesTable = new JTable(model);
        indicesTable.setDefaultEditor(String.class, new DefaultCellEditor(new JTextField()));
        indicesTable.setDefaultEditor(IndexFieldList.class, new IndexFieldListCellEditor());
        indicesTable.setDefaultRenderer(IndexFieldList.class, new IndexFieldListCellRenderer());
        p.add(new JScrollPane(indicesTable), cc.xywh(2, 2, 1, 5));

        addIndexButton = new JButton(MongoBundle.getString(MongoBundle.Key.AddIndex));
        p.add(addIndexButton, cc.xy(4, 3));

        removeIndexButton = new JButton(MongoBundle.getString(MongoBundle.Key.RemoveIndex));
        p.add(removeIndexButton, cc.xy(4, 5));

        return p;
    }

    /**
     * creates a panel holding the ok and cancel buttons
     * 
     * @return the ok/cancel button panel
     */
    private JPanel createCtrlPanel() {
        JPanel p = new JPanel();
        p.setBorder(BorderFactory.createEmptyBorder(20, 0, 10, 0));
        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 String createUniqueIndexName() {
        String name = null;
        do {
            name = MongoBundle.getString(MongoBundle.Key.IndexPrefix) + INDEX_SEQ++;
        } while (indexExists(name));

        return name;
    }

    private boolean indexExists(String name) {
        ManageIndicesModel model = (ManageIndicesModel) indicesTable.getModel();
        for (int i = 0; i < model.getRowCount(); i++) {
            if (name.equals(model.getValueAt(i, 0))) {
                return true;
            }
        }

        return false;
    }
}