/* * To change this template, choose Tools | Templates * and open the template in the editor. */ /* * EditTableData.java * * Created on May 21, 2010, 12:26:14 AM */ package org.hbaseexplorer.components; import java.awt.Component; import java.io.IOException; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Put; import org.hbaseexplorer.HBaseExplorerApp; import org.hbaseexplorer.components.renderers.EditTableCellRenderer; import org.hbaseexplorer.datamodels.EditTableDataModel; import org.hbaseexplorer.domain.FilterModel; import org.hbaseexplorer.domain.HBTriplet; import org.hbaseexplorer.domain.RowData; import org.hbaseexplorer.domain.Table; import org.hbaseexplorer.exception.ExplorerException; import org.jdesktop.application.Action; /** * * @author zaharije */ public class EditTableData extends javax.swing.JPanel { private Table table; private String rowKey; private FilterModel filterModel; /** Creates new form EditTableData */ public EditTableData(Table table) { initComponents(); this.table = table; this.filterModel = new FilterModel(); //tableData.setDefaultRenderer(String.class, new EditTableCellRenderer()); showData(0); } private void showData(int skip) { EditTableDataModel model = new EditTableDataModel(table, skip, rowKey, filterModel); autoResizeColWidth(tableData, model); TableColumnModel columnModel = tableData.getColumnModel(); for (int i = 0; i < tableData.getColumnCount(); i++) { columnModel.getColumn(i).setCellRenderer(new EditTableCellRenderer()); } rowKey = model.getRowKey(); txtFieldRowKey.setText(rowKey); } public EditTableDataModel getTableModel() { return (EditTableDataModel)tableData.getModel(); } private JTable autoResizeColWidth(JTable table, EditTableDataModel model) { table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); table.setModel(model); int margin = 5; for (int i = 0; i < table.getColumnCount(); i++) { int vColIndex = i; DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel(); TableColumn col = colModel.getColumn(vColIndex); int width = 0; // Get width of column header TableCellRenderer renderer = col.getHeaderRenderer(); if (renderer == null) { renderer = table.getTableHeader().getDefaultRenderer(); } Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false, false, 0, 0); width = comp.getPreferredSize().width; // Get maximum width of column data for (int r = 0; r < table.getRowCount(); r++) { renderer = table.getCellRenderer(r, vColIndex); comp = renderer.getTableCellRendererComponent(table, table.getValueAt(r, vColIndex), false, false, r, vColIndex); width = Math.max(width, comp.getPreferredSize().width); } // Add margin width += 2 * margin; // Set the width col.setPreferredWidth(width); } ((DefaultTableCellRenderer) table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment( SwingConstants.LEFT); // table.setAutoCreateRowSorter(true); table.getTableHeader().setReorderingAllowed(false); return table; } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jToolBar1 = new javax.swing.JToolBar(); btnFirst = new javax.swing.JButton(); btnNext = new javax.swing.JButton(); txtFieldRowKey = new javax.swing.JTextField(); btnGo = new javax.swing.JButton(); jToolBar2 = new javax.swing.JToolBar(); jButton1 = new javax.swing.JButton(); btnAddColumn = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); btnAddRow = new javax.swing.JButton(); btnRemoveRow = new javax.swing.JButton(); checkBoxFilter = new javax.swing.JCheckBox(); btnFilter = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); tableData = new javax.swing.JTable(); setName("Form"); // NOI18N jToolBar1.setRollover(true); jToolBar1.setName("jToolBar1"); // NOI18N javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(org.hbaseexplorer.HBaseExplorerApp.class).getContext().getActionMap(EditTableData.class, this); btnFirst.setAction(actionMap.get("fristBtnClickAction")); // NOI18N org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(org.hbaseexplorer.HBaseExplorerApp.class).getContext().getResourceMap(EditTableData.class); btnFirst.setText(resourceMap.getString("btnFirst.text")); // NOI18N btnFirst.setFocusable(false); btnFirst.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnFirst.setName("btnFirst"); // NOI18N btnFirst.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jToolBar1.add(btnFirst); btnNext.setAction(actionMap.get("nextBtnClickAction")); // NOI18N btnNext.setText(resourceMap.getString("btnNext.text")); // NOI18N btnNext.setFocusable(false); btnNext.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnNext.setName("btnNext"); // NOI18N btnNext.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jToolBar1.add(btnNext); txtFieldRowKey.setFont(resourceMap.getFont("txtFieldRowKey.font")); // NOI18N txtFieldRowKey.setText(resourceMap.getString("txtFieldRowKey.text")); // NOI18N txtFieldRowKey.setName("txtFieldRowKey"); // NOI18N jToolBar1.add(txtFieldRowKey); btnGo.setAction(actionMap.get("btnGoClickAction")); // NOI18N btnGo.setText(resourceMap.getString("btnGo.text")); // NOI18N btnGo.setFocusable(false); btnGo.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnGo.setName("btnGo"); // NOI18N btnGo.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jToolBar1.add(btnGo); jToolBar2.setRollover(true); jToolBar2.setName("jToolBar2"); // NOI18N jButton1.setAction(actionMap.get("btnSaveClickAction")); // NOI18N jButton1.setText(resourceMap.getString("jButton1.text")); // NOI18N jButton1.setFocusable(false); jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jButton1.setName("jButton1"); // NOI18N jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jToolBar2.add(jButton1); btnAddColumn.setAction(actionMap.get("btnAddColumnClickAction")); // NOI18N btnAddColumn.setText(resourceMap.getString("btnAddColumn.text")); // NOI18N btnAddColumn.setFocusable(false); btnAddColumn.setHorizontalTextPosition(0); btnAddColumn.setName("btnAddColumn"); // NOI18N btnAddColumn.setVerticalTextPosition(3); jToolBar2.add(btnAddColumn); jButton2.setAction(actionMap.get("btnDeleteColumnActionClick")); // NOI18N jButton2.setText(resourceMap.getString("jButton2.text")); // NOI18N jButton2.setFocusable(false); jButton2.setHorizontalTextPosition(0); jButton2.setName("jButton2"); // NOI18N jButton2.setVerticalTextPosition(3); jToolBar2.add(jButton2); btnAddRow.setText(resourceMap.getString("btnAddRow.text")); // NOI18N btnAddRow.setEnabled(false); btnAddRow.setFocusable(false); btnAddRow.setHorizontalTextPosition(0); btnAddRow.setName("btnAddRow"); // NOI18N btnAddRow.setVerticalTextPosition(3); jToolBar2.add(btnAddRow); btnRemoveRow.setText(resourceMap.getString("btnRemoveRow.text")); // NOI18N btnRemoveRow.setEnabled(false); btnRemoveRow.setFocusable(false); btnRemoveRow.setHorizontalTextPosition(0); btnRemoveRow.setName("btnRemoveRow"); // NOI18N btnRemoveRow.setVerticalTextPosition(3); jToolBar2.add(btnRemoveRow); checkBoxFilter.setAction(actionMap.get("checkBoxFilter")); // NOI18N checkBoxFilter.setText(resourceMap.getString("checkBoxFilter.text")); // NOI18N checkBoxFilter.setFocusable(false); checkBoxFilter.setHorizontalTextPosition(0); checkBoxFilter.setName("checkBoxFilter"); // NOI18N checkBoxFilter.setVerticalTextPosition(3); jToolBar2.add(checkBoxFilter); btnFilter.setAction(actionMap.get("btnFilterClickAction")); // NOI18N btnFilter.setText(resourceMap.getString("btnFilter.text")); // NOI18N btnFilter.setEnabled(false); btnFilter.setFocusable(false); btnFilter.setHorizontalTextPosition(0); btnFilter.setName("btnFilter"); // NOI18N btnFilter.setVerticalTextPosition(3); jToolBar2.add(btnFilter); jScrollPane1.setName("jScrollPane1"); // NOI18N tableData.setFont(resourceMap.getFont("tableData.font")); // NOI18N tableData.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null, null}, {null, null, null, null}, {null, null, null, null}, {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" } )); tableData.setName("tableData"); // NOI18N jScrollPane1.setViewportView(tableData); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jToolBar1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 420, Short.MAX_VALUE) .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 420, Short.MAX_VALUE) .add(jToolBar2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 420, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(jToolBar1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 25, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jToolBar2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 25, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 295, Short.MAX_VALUE)) ); }// </editor-fold>//GEN-END:initComponents @Action public void fristBtnClickAction() { rowKey = null; showData(0); } @Action public void nextBtnClickAction() { showData(1); } @Action public void btnSaveClickAction() { RowData changedData = getTableModel().getData().getChangedData(); if (changedData.size() > 0) { try { Put put = changedData.convertToPut(); table.getHTable().put(put); showData(0); } catch (IOException ex) { throw new ExplorerException("Error saving to table " + table.getFullName()); } } else { JOptionPane.showMessageDialog(this, "Nothing to save."); } } @Action public void btnAddColumnClickAction() { JFrame mainFrame = HBaseExplorerApp.getApplication().getMainFrame(); NewColumnDialog dialog = new NewColumnDialog(mainFrame, table); dialog.setLocationRelativeTo(mainFrame); HBaseExplorerApp.getApplication().show(dialog); HBTriplet triplet = dialog.getTriplet(); if (triplet != null) { try { Put put = new Put(rowKey.getBytes()); put.add(triplet.getFamily(), triplet.getQualifier(), triplet.getValue()); table.getHTable().put(put); showData(0); } catch (IOException ex) { throw new ExplorerException("Error adding column : " + triplet); } } } @Action public void btnDeleteColumnActionClick() { int rowId = tableData.getSelectedRow(); if (rowId != -1) { String family = tableData.getModel().getValueAt(rowId, 0).toString(); String column = tableData.getModel().getValueAt(rowId, 1).toString(); int result = JOptionPane.showConfirmDialog( this, "Are you sure you wanna to delete\n" + rowKey +"\n" + family + ":" + column, "Delete column", JOptionPane.YES_NO_OPTION ); if (result == JOptionPane.YES_OPTION) { Delete delete = new Delete(rowKey.getBytes()); delete.deleteColumns(family.getBytes(), column.getBytes()); try { table.getHTable().delete(delete); } catch (IOException ex) { throw new ExplorerException("Error deleting " + rowKey + "@" + family + ":" + column); } showData(0); } } } @Action public void btnGoClickAction() { rowKey = txtFieldRowKey.getText(); showData(0); } @Action public void checkBoxFilter() { btnFilter.setEnabled(checkBoxFilter.isSelected()); filterModel.setEnabled(checkBoxFilter.isSelected()); showData(0); } @Action public void btnFilterClickAction() { JFrame mainFrame = HBaseExplorerApp.getApplication().getMainFrame(); FilterDialog dialog = new FilterDialog(mainFrame, table); dialog.setFilterModel(filterModel); dialog.setLocationRelativeTo(mainFrame); HBaseExplorerApp.getApplication().show(dialog); filterModel = dialog.getFilterModel(); showData(0); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnAddColumn; private javax.swing.JButton btnAddRow; private javax.swing.JButton btnFilter; private javax.swing.JButton btnFirst; private javax.swing.JButton btnGo; private javax.swing.JButton btnNext; private javax.swing.JButton btnRemoveRow; private javax.swing.JCheckBox checkBoxFilter; private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JToolBar jToolBar1; private javax.swing.JToolBar jToolBar2; private javax.swing.JTable tableData; private javax.swing.JTextField txtFieldRowKey; // End of variables declaration//GEN-END:variables }