/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.cids.search; import Sirius.navigator.ui.ComponentRegistry; import Sirius.navigator.ui.tree.SearchResultsTree; import Sirius.server.localserver.attribute.MemberAttributeInfo; import Sirius.server.middleware.types.MetaClass; import Sirius.server.middleware.types.MetaObject; import Sirius.server.middleware.types.MetaObjectNode; import Sirius.server.middleware.types.Node; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; import org.apache.log4j.Logger; import java.awt.Component; import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.EventObject; import java.util.HashMap; import java.util.List; import java.util.Set; import javax.swing.AbstractCellEditor; import javax.swing.Action; import javax.swing.DefaultListCellRenderer; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.SwingWorker; import javax.swing.UIManager; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; import de.cismet.cids.dynamics.CidsBean; /** * DOCUMENT ME! * * @author jruiz * @version $Revision$, $Date$ */ public class QuerySearchResultsActionPanel extends javax.swing.JPanel { //~ Static fields/initializers --------------------------------------------- private static final Logger LOG = Logger.getLogger(QuerySearchResultsActionPanel.class); //~ Instance fields -------------------------------------------------------- private QuerySearchResultsAction selectedAction; private final HashMap<String, String> attributeNames = new HashMap<String, String>(); private final Multimap<MetaClass, String> attributesToDisplay = ArrayListMultimap.create(); private final QuerySearch querySearch = new QuerySearch(true); private final MyAttrToHideTableModel attrToHideTableModel = new MyAttrToHideTableModel(); private final MyAttrToDisplayTableModel attrToDisplayTableModel = new MyAttrToDisplayTableModel(); private final MyTableModel tableModel = new MyTableModel(); private final Action closeAction; private String dateFormat; private int dividerLocation = 0; // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButton1; private javax.swing.JButton jButton10; private javax.swing.JButton jButton2; private javax.swing.JButton jButton3; private javax.swing.JButton jButton4; private javax.swing.JButton jButton5; private javax.swing.JButton jButton6; private javax.swing.JButton jButton7; private javax.swing.JButton jButton8; private javax.swing.JButton jButton9; private javax.swing.JComboBox jComboBox1; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel10; private javax.swing.JPanel jPanel11; private javax.swing.JPanel jPanel12; private javax.swing.JPanel jPanel14; private javax.swing.JPanel jPanel15; private javax.swing.JPanel jPanel18; private javax.swing.JPanel jPanel19; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JPanel jPanel5; private javax.swing.JPanel jPanel6; private javax.swing.JPanel jPanel7; private javax.swing.JPanel jPanel8; private javax.swing.JPanel jPanel9; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JSplitPane jSplitPane1; private javax.swing.JSplitPane jSplitPane2; private javax.swing.JTable jTable1; private javax.swing.JToggleButton jToggleButton1; private de.cismet.tools.gui.PaginationPanel paginationPanel1; private de.cismet.cids.search.QuerySearch querySearch1; private javax.swing.JTable tblToDisplay; private javax.swing.JTable tblToHide; // End of variables declaration//GEN-END:variables //~ Constructors ----------------------------------------------------------- /** * Creates a new QuerySearchResultsActionPanel object. */ public QuerySearchResultsActionPanel() { this((Action)null); } /** * Creates a new QuerySearchResultsActionPanel object. * * @param closeAction DOCUMENT ME! */ public QuerySearchResultsActionPanel(final Action closeAction) { this.closeAction = closeAction; initComponents(); } /** * Creates a new QuerySearchResultsActionPanel object. * * @param action DOCUMENT ME! */ public QuerySearchResultsActionPanel(final QuerySearchResultsAction action) { this(action, (Action)null); } /** * Creates a new QuerySearchResultsActionPanel object. * * @param actions DOCUMENT ME! */ public QuerySearchResultsActionPanel(final List<QuerySearchResultsAction> actions) { this(actions, (Action)null); } /** * Creates a new QuerySearchResultsActionPanel object. * * @param action DOCUMENT ME! * @param closeAction DOCUMENT ME! */ public QuerySearchResultsActionPanel(final QuerySearchResultsAction action, final Action closeAction) { this(Arrays.asList(action), closeAction); } /** * Creates new form QuerySearchResultsActionPanel. * * @param actions DOCUMENT ME! * @param closeAction DOCUMENT ME! */ public QuerySearchResultsActionPanel(final List<QuerySearchResultsAction> actions, final Action closeAction) { this.closeAction = closeAction; initComponents(); final SearchResultsTree searchResultsTree = ComponentRegistry.getRegistry().getSearchResultsTree(); searchResultsTree.addPropertyChangeListener("browse", new PropertyChangeListener() { @Override public void propertyChange(final PropertyChangeEvent evt) { if ((querySearch.getSelectedMethod() instanceof SearchQuerySearchMethod) && ((SearchQuerySearchMethod)querySearch.getSelectedMethod()).isSearching()) { final List<Node> nodes = searchResultsTree.getResultNodes(); if (nodes != null) { new SwingWorker<List<CidsBean>, Void>() { @Override protected List<CidsBean> doInBackground() throws Exception { final List<CidsBean> entities = new ArrayList<CidsBean>(); for (final Node node : nodes) { if ((node != null) && (node instanceof MetaObjectNode)) { final MetaObjectNode moNode = (MetaObjectNode)node; final MetaObject mo = moNode.getObject(); if (mo != null) { final CidsBean bean = mo.getBean(); entities.add(bean); } } } return entities; } @Override protected void done() { List<CidsBean> results = null; try { results = get(); } catch (final Exception ex) { LOG.warn("exeption whil building search result treeset", ex); } setSearchResults(results); } }.execute(); } } } }); final MyAttrTableCellRenderer cellRenderer = new MyAttrTableCellRenderer(); tblToDisplay.setDefaultRenderer(String.class, cellRenderer); tblToHide.setDefaultRenderer(String.class, cellRenderer); final MyAttrTableCellEditor cellEditor = new MyAttrTableCellEditor(); tblToDisplay.setDefaultEditor(String.class, cellEditor); tblToHide.setDefaultEditor(String.class, cellEditor); jToggleButton1ActionPerformed(null); metaClassChanged(getMetaClass()); querySearch.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(final PropertyChangeEvent evt) { if (evt.getSource().equals(querySearch) && evt.getPropertyName().equals(QuerySearch.PROP_METACLASS)) { final MetaClass metaClass = (MetaClass)evt.getNewValue(); metaClassChanged(metaClass); } } }); jComboBox1.setRenderer(new DefaultListCellRenderer() { @Override public Component getListCellRendererComponent(final JList list, final Object value, final int index, final boolean isSelected, final boolean cellHasFocus) { final Component comp = super.getListCellRendererComponent( list, value, index, isSelected, cellHasFocus); if (value == null) { ((JLabel)comp).setText( org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jComboBox1.null")); } else if (value instanceof QuerySearchResultsAction) { final QuerySearchResultsAction action = (QuerySearchResultsAction)value; ((JLabel)comp).setText(action.getName()); } return comp; } }); jComboBox1.addItem(null); for (final QuerySearchResultsAction action : actions) { jComboBox1.addItem(action); } if (actions.size() == 1) { jComboBox1.setVisible(false); } if (!actions.isEmpty()) { jComboBox1.setSelectedItem(actions.get(0)); } } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @param dateFormat DOCUMENT ME! */ public void setDateFormat(final String dateFormat) { this.dateFormat = dateFormat; } /** * 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() { java.awt.GridBagConstraints gridBagConstraints; jSplitPane2 = new javax.swing.JSplitPane(); jPanel1 = new javax.swing.JPanel(); querySearch1 = querySearch; jPanel9 = new javax.swing.JPanel(); jPanel5 = new javax.swing.JPanel(); jPanel6 = new javax.swing.JPanel(); jButton1 = new javax.swing.JButton(); jButton7 = new javax.swing.JButton(); jComboBox1 = new javax.swing.JComboBox(); jSplitPane1 = new javax.swing.JSplitPane(); jPanel8 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); jPanel7 = new javax.swing.JPanel(); jPanel12 = new javax.swing.JPanel(); jPanel4 = new javax.swing.JPanel(); jButton4 = new javax.swing.JButton(); jButton5 = new javax.swing.JButton(); jPanel10 = new javax.swing.JPanel(); jButton6 = new javax.swing.JButton(); jButton9 = new javax.swing.JButton(); jPanel11 = new javax.swing.JPanel(); jPanel15 = new javax.swing.JPanel(); jPanel2 = new javax.swing.JPanel(); jPanel14 = new javax.swing.JPanel(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); jPanel18 = new javax.swing.JPanel(); jPanel19 = new javax.swing.JPanel(); jButton8 = new javax.swing.JButton(); jButton10 = new javax.swing.JButton(); jScrollPane2 = new javax.swing.JScrollPane(); tblToDisplay = new javax.swing.JTable(); jScrollPane3 = new javax.swing.JScrollPane(); tblToHide = new javax.swing.JTable(); jPanel3 = new javax.swing.JPanel(); paginationPanel1 = querySearch.getPanginationPanel(); jToggleButton1 = new javax.swing.JToggleButton(); setLayout(new java.awt.GridBagLayout()); jSplitPane2.setBorder(null); jPanel1.setLayout(new java.awt.GridBagLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 6, 5, 0); jPanel1.add(querySearch1, gridBagConstraints); jSplitPane2.setLeftComponent(jPanel1); jPanel9.setLayout(new java.awt.GridBagLayout()); jPanel5.setLayout(new java.awt.GridBagLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; gridBagConstraints.weightx = 1.0; jPanel5.add(jPanel6, gridBagConstraints); if (closeAction != null) { jButton1.setAction(closeAction); org.openide.awt.Mnemonics.setLocalizedText( jButton1, org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton1.text")); // NOI18N jButton1.setMaximumSize(new java.awt.Dimension(126, 25)); jButton1.setMinimumSize(new java.awt.Dimension(126, 25)); jButton1.setPreferredSize(new java.awt.Dimension(126, 25)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END; gridBagConstraints.insets = new java.awt.Insets(0, 10, 0, 0); jPanel5.add(jButton1, gridBagConstraints); } org.openide.awt.Mnemonics.setLocalizedText( jButton7, org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton7.text")); // NOI18N jButton7.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { jButton7ActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END; gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0); jPanel5.add(jButton7, gridBagConstraints); jComboBox1.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { jComboBox1ActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; jPanel5.add(jComboBox1, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(0, 5, 10, 5); jPanel9.add(jPanel5, gridBagConstraints); jSplitPane1.setBorder(null); jSplitPane1.setDividerLocation(320); jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); jPanel8.setLayout(new java.awt.GridBagLayout()); jTable1.setAutoCreateRowSorter(true); jTable1.setModel(tableModel); jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF); jScrollPane1.setViewportView(jTable1); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); jPanel8.add(jScrollPane1, gridBagConstraints); jSplitPane1.setBottomComponent(jPanel8); jPanel7.setLayout(new java.awt.GridBagLayout()); jPanel12.setLayout(new java.awt.GridBagLayout()); jPanel4.setMaximumSize(new java.awt.Dimension(50, 2147483647)); jPanel4.setLayout(new java.awt.GridBagLayout()); jButton4.setIcon(new javax.swing.ImageIcon( getClass().getResource("/de/cismet/cids/search/arrow-curve-000-left.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText( jButton4, org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton4.text")); // NOI18N jButton4.setToolTipText(org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton4.toolTipText")); // NOI18N jButton4.setBorderPainted(false); jButton4.setContentAreaFilled(false); jButton4.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { jButton4ActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0); jPanel4.add(jButton4, gridBagConstraints); jButton5.setIcon(new javax.swing.ImageIcon( getClass().getResource("/de/cismet/cids/search/arrow-curve-180.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText( jButton5, org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton5.text")); // NOI18N jButton5.setToolTipText(org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton5.toolTipText")); // NOI18N jButton5.setBorderPainted(false); jButton5.setContentAreaFilled(false); jButton5.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { jButton5ActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END; gridBagConstraints.insets = new java.awt.Insets(5, 0, 0, 0); jPanel4.add(jButton5, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; jPanel4.add(jPanel10, gridBagConstraints); jButton6.setIcon(new javax.swing.ImageIcon( getClass().getResource("/de/cismet/cids/search/arrow-curve-000-double.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText( jButton6, org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton6.text")); // NOI18N jButton6.setToolTipText(org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton6.toolTipText")); // NOI18N jButton6.setBorderPainted(false); jButton6.setContentAreaFilled(false); jButton6.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { jButton6ActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; gridBagConstraints.insets = new java.awt.Insets(5, 0, 0, 0); jPanel4.add(jButton6, gridBagConstraints); jButton9.setIcon(new javax.swing.ImageIcon( getClass().getResource("/de/cismet/cids/search/arrow-curve-180-double.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText( jButton9, org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton9.text")); // NOI18N jButton9.setToolTipText(org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton9.toolTipText")); // NOI18N jButton9.setBorderPainted(false); jButton9.setContentAreaFilled(false); jButton9.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { jButton9ActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END; gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0); jPanel4.add(jButton9, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; jPanel4.add(jPanel11, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 6; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; jPanel4.add(jPanel15, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; gridBagConstraints.weighty = 1.0; jPanel12.add(jPanel4, gridBagConstraints); jPanel2.setLayout(new java.awt.GridBagLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; jPanel2.add(jPanel14, gridBagConstraints); jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/de/cismet/cids/search/arrow-090.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText( jButton2, org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton2.text")); // NOI18N jButton2.setToolTipText(org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton2.toolTipText")); // NOI18N jButton2.setBorderPainted(false); jButton2.setContentAreaFilled(false); jButton2.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; gridBagConstraints.weightx = 1.0; jPanel2.add(jButton2, gridBagConstraints); jButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/de/cismet/cids/search/arrow-270.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText( jButton3, org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton3.text")); // NOI18N jButton3.setToolTipText(org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton3.toolTipText")); // NOI18N jButton3.setBorderPainted(false); jButton3.setContentAreaFilled(false); jButton3.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; gridBagConstraints.weightx = 1.0; jPanel2.add(jButton3, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; jPanel2.add(jPanel18, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 6; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; jPanel2.add(jPanel19, gridBagConstraints); jButton8.setIcon(new javax.swing.ImageIcon( getClass().getResource("/de/cismet/cids/search/arrow-stop-090.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText( jButton8, org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton8.text")); // NOI18N jButton8.setToolTipText(org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton8.toolTipText")); // NOI18N jButton8.setBorderPainted(false); jButton8.setContentAreaFilled(false); jButton8.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { jButton8ActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; jPanel2.add(jButton8, gridBagConstraints); jButton10.setIcon(new javax.swing.ImageIcon( getClass().getResource("/de/cismet/cids/search/arrow-stop-270.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText( jButton10, org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton10.text")); // NOI18N jButton10.setToolTipText(org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jButton10.toolTipText")); // NOI18N jButton10.setBorderPainted(false); jButton10.setContentAreaFilled(false); jButton10.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { jButton10ActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; jPanel2.add(jButton10, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; gridBagConstraints.weighty = 1.0; jPanel12.add(jPanel2, gridBagConstraints); tblToDisplay.setModel(attrToDisplayTableModel); jScrollPane2.setViewportView(tblToDisplay); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0); jPanel12.add(jScrollPane2, gridBagConstraints); tblToHide.setModel(attrToHideTableModel); jScrollPane3.setViewportView(tblToHide); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 5); jPanel12.add(jScrollPane3, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); jPanel7.add(jPanel12, gridBagConstraints); jSplitPane1.setTopComponent(jPanel7); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.ipadx = 1; gridBagConstraints.ipady = 1; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; jPanel9.add(jSplitPane1, gridBagConstraints); jPanel3.setLayout(new java.awt.GridBagLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; jPanel3.add(paginationPanel1, gridBagConstraints); org.openide.awt.Mnemonics.setLocalizedText( jToggleButton1, org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.jToggleButton1.text")); // NOI18N jToggleButton1.setMaximumSize(new java.awt.Dimension(150, 25)); jToggleButton1.setMinimumSize(new java.awt.Dimension(150, 25)); jToggleButton1.setPreferredSize(new java.awt.Dimension(150, 25)); jToggleButton1.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { jToggleButton1ActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END; jPanel3.add(jToggleButton1, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(10, 5, 0, 5); jPanel9.add(jPanel3, gridBagConstraints); jSplitPane2.setRightComponent(jPanel9); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; add(jSplitPane2, gridBagConstraints); } // </editor-fold>//GEN-END:initComponents /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public QuerySearch getQuerySearch() { return querySearch; } /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void jButton7ActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_jButton7ActionPerformed if (selectedAction != null) { final QuerySearchResultsAction action = selectedAction; action.setMetaClass(getMetaClass()); action.setWhereCause(querySearch.getWhereCause()); final HashMap<String, String> attributeNamesToExport = new HashMap<String, String>(); for (final String attributeKey : (Collection<String>)attributesToDisplay.get(getMetaClass())) { attributeNamesToExport.put(attributeKey, attributeNames.get(attributeKey)); } action.setAttributeKeys((List<String>)attributesToDisplay.get(getMetaClass())); action.setAttributeNames(attributeNamesToExport); action.doAction(); } } //GEN-LAST:event_jButton7ActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void jButton4ActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_jButton4ActionPerformed int firstIndex = -1; final Collection<String> toAdd = new ArrayList<String>(); for (final int selectedIndex : tblToHide.getSelectedRows()) { if (firstIndex < 0) { firstIndex = selectedIndex; } final String selectedKey = attrToHideTableModel.getElementAt(selectedIndex); toAdd.add(selectedKey); } attributesToDisplay.get(getMetaClass()).addAll(toAdd); attrToHideTableModel.refresh(); attrToDisplayTableModel.refresh(); if (firstIndex > -1) { tblToHide.setRowSelectionInterval(firstIndex - 1, firstIndex - 1); tblToHide.scrollRectToVisible(new Rectangle(tblToHide.getCellRect(tblToHide.getSelectedRow(), 0, true))); } tblToHide.clearSelection(); tableModel.refresh(); } //GEN-LAST:event_jButton4ActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void jButton5ActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_jButton5ActionPerformed int firstIndex = -1; final Collection<String> toRemove = new ArrayList<String>(); for (final int selectedIndex : tblToDisplay.getSelectedRows()) { if (firstIndex < 0) { firstIndex = selectedIndex; } final String selectedKey = attrToDisplayTableModel.getElementAt(selectedIndex); toRemove.add(selectedKey); } attributesToDisplay.get(getMetaClass()).removeAll(toRemove); attrToHideTableModel.refresh(); attrToDisplayTableModel.refresh(); tblToHide.clearSelection(); if (firstIndex > -1) { tblToDisplay.setRowSelectionInterval(firstIndex - 1, firstIndex - 1); tblToDisplay.scrollRectToVisible(new Rectangle( tblToDisplay.getCellRect(tblToDisplay.getSelectedRow(), 0, true))); } tableModel.refresh(); } //GEN-LAST:event_jButton5ActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void jButton6ActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_jButton6ActionPerformed attributesToDisplay.get(getMetaClass()).addAll(attrToHideTableModel.getAllElements()); attrToHideTableModel.refresh(); attrToDisplayTableModel.refresh(); tblToHide.clearSelection(); tblToDisplay.clearSelection(); tableModel.refresh(); } //GEN-LAST:event_jButton6ActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void jButton9ActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_jButton9ActionPerformed attributesToDisplay.get(getMetaClass()).removeAll(attrToDisplayTableModel.getAllElements()); attrToHideTableModel.refresh(); attrToDisplayTableModel.refresh(); tblToHide.clearSelection(); tblToDisplay.clearSelection(); tableModel.refresh(); } //GEN-LAST:event_jButton9ActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void jButton2ActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_jButton2ActionPerformed final int[] selectedIndices = tblToDisplay.getSelectedRows(); if ((selectedIndices.length > 0) && (selectedIndices[0] > 0)) { final int[] newSelectedIndices = new int[selectedIndices.length]; for (int index = 0; index < selectedIndices.length; index++) { final int selectedIndex = selectedIndices[index]; final int newIndex = selectedIndex - 1; newSelectedIndices[index] = newIndex; Collections.swap(attrToDisplayTableModel.getAllElements(), selectedIndex, newIndex); } attrToDisplayTableModel.refresh(); final Rectangle rect = new Rectangle(); for (final int newSelectedIndex : newSelectedIndices) { tblToDisplay.addRowSelectionInterval(newSelectedIndex, newSelectedIndex); rect.add(tblToDisplay.getCellRect(newSelectedIndex, 0, true)); } tblToDisplay.scrollRectToVisible(rect); tableModel.refresh(); } } //GEN-LAST:event_jButton2ActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void jButton3ActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_jButton3ActionPerformed final int[] selectedIndices = tblToDisplay.getSelectedRows(); final int[] newSelectedIndices = new int[selectedIndices.length]; if ((selectedIndices.length > 0) && (selectedIndices[selectedIndices.length - 1] < (attrToDisplayTableModel.getSize() - 1))) { for (int index = selectedIndices.length - 1; index >= 0; index--) { final int selectedIndex = selectedIndices[index]; final int newIndex = selectedIndex + 1; newSelectedIndices[index] = newIndex; Collections.swap(attrToDisplayTableModel.getAllElements(), selectedIndex, newIndex); } attrToDisplayTableModel.refresh(); final Rectangle rect = new Rectangle(); for (final int newSelectedIndex : newSelectedIndices) { tblToDisplay.addRowSelectionInterval(newSelectedIndex, newSelectedIndex); rect.add(tblToDisplay.getCellRect(newSelectedIndex, 0, true)); } tblToDisplay.scrollRectToVisible(rect); tableModel.refresh(); } } //GEN-LAST:event_jButton3ActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void jButton8ActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_jButton8ActionPerformed final int[] selectedIndices = tblToDisplay.getSelectedRows(); if ((selectedIndices.length > 0) && (selectedIndices[0] > 0)) { final int[] newSelectedIndices = new int[selectedIndices.length]; for (int index = 0; index < selectedIndices.length; index++) { final int selectedIndex = selectedIndices[index]; final int newIndex = index; newSelectedIndices[index] = newIndex; Collections.swap(attrToDisplayTableModel.getAllElements(), selectedIndex, newIndex); } attrToDisplayTableModel.refresh(); final Rectangle rect = new Rectangle(); for (final int newSelectedIndex : newSelectedIndices) { tblToDisplay.addRowSelectionInterval(newSelectedIndex, newSelectedIndex); rect.add(tblToDisplay.getCellRect(newSelectedIndex, 0, true)); } tblToDisplay.scrollRectToVisible(rect); tableModel.refresh(); } } //GEN-LAST:event_jButton8ActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void jButton10ActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_jButton10ActionPerformed final int[] selectedIndices = tblToDisplay.getSelectedRows(); final Collection<String> toMove = new ArrayList<String>(); if ((selectedIndices.length > 0) && (selectedIndices[selectedIndices.length - 1] < (attrToDisplayTableModel.getSize() - 1))) { for (int index = selectedIndices.length - 1; index >= 0; index--) { final int selectedIndex = selectedIndices[index]; final String selectedKey = attrToDisplayTableModel.getElementAt( selectedIndex); toMove.add(selectedKey); } attributesToDisplay.get(getMetaClass()).removeAll(toMove); attributesToDisplay.get(getMetaClass()).addAll(toMove); attrToDisplayTableModel.refresh(); final Rectangle rect = new Rectangle(); for (int index = 0; index < toMove.size(); index++) { final int newSelectedIndex = attrToDisplayTableModel.getSize() - 1 - index; tblToDisplay.addRowSelectionInterval(newSelectedIndex, newSelectedIndex); rect.add(tblToDisplay.getCellRect(newSelectedIndex, 0, true)); } tblToDisplay.scrollRectToVisible(rect); tableModel.refresh(); } } //GEN-LAST:event_jButton10ActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void jToggleButton1ActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_jToggleButton1ActionPerformed if (jToggleButton1.isSelected()) { jSplitPane1.getTopComponent().setVisible(true); jSplitPane1.setDividerLocation(dividerLocation); jSplitPane1.setDividerSize((Integer)UIManager.get("SplitPane.dividerSize")); } else { dividerLocation = jSplitPane1.getDividerLocation(); jSplitPane1.setDividerSize(0); jSplitPane1.getTopComponent().setVisible(false); } } //GEN-LAST:event_jToggleButton1ActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void jComboBox1ActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_jComboBox1ActionPerformed if (jComboBox1.getSelectedItem() != null) { selectedAction = (QuerySearchResultsAction)jComboBox1.getSelectedItem(); jButton7.setText(selectedAction.getName()); jComboBox1.setSelectedItem(null); } } //GEN-LAST:event_jComboBox1ActionPerformed /** * DOCUMENT ME! * * @param defaultAttributeNames DOCUMENT ME! */ public void addDefaultAttributeNames(final HashMap<String, String> defaultAttributeNames) { attributeNames.putAll(defaultAttributeNames); } /** * DOCUMENT ME! * * @param metaClass DOCUMENT ME! * @param defaultAttributeOrder DOCUMENT ME! */ public void setDefaultAttributeOrder(final MetaClass metaClass, final List<String> defaultAttributeOrder) { attributesToDisplay.get(metaClass).clear(); for (final String attributeToDisplay : defaultAttributeOrder) { // if (attributeNames.containsKey(attributeToDisplay)) { attributesToDisplay.put(metaClass, attributeToDisplay); // } } } /** * DOCUMENT ME! * * @param metaClass DOCUMENT ME! */ private void metaClassChanged(final MetaClass metaClass) { if (metaClass != null) { final List<MemberAttributeInfo> mais = QuerySearch.getAttributesFromClass(metaClass); final boolean toDisplayIsEmpty = attributesToDisplay.get(metaClass).isEmpty(); for (final MemberAttributeInfo mai : mais) { final String key = mai.getKey().toString(); if (attributeNames.get(key) == null) { final String name = mai.getName(); attributeNames.put(key, name); } if (toDisplayIsEmpty) { attributesToDisplay.put(metaClass, key); } } attributesToDisplay.get(metaClass); tableModel.setMetaClass(metaClass); tableModel.setCidsBeans(null); paginationPanel1.setTotal(0); tableModel.refresh(); for (int i = 0; i < tableModel.getColumnCount(); i++) { jTable1.getColumnModel().getColumn(i).setMinWidth(50); } jTable1.getTableHeader().setResizingAllowed(true); attrToHideTableModel.refresh(); attrToDisplayTableModel.refresh(); } } /** * DOCUMENT ME! * * @param results DOCUMENT ME! */ public void setSearchResults(final List<CidsBean> results) { tableModel.setCidsBeans(results); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ private MetaClass getMetaClass() { return querySearch.getMetaClass(); } //~ Inner Classes ---------------------------------------------------------- /** * DOCUMENT ME! * * @version $Revision$, $Date$ */ private class MyTableModel extends AbstractTableModel { //~ Instance fields ---------------------------------------------------- private MetaClass metaClass; private List<CidsBean> cidsBeans; //~ Constructors ------------------------------------------------------- /** * Creates a new CidsBeanTableModel object. */ protected MyTableModel() { } //~ Methods ------------------------------------------------------------ /** * DOCUMENT ME! * * @param metaClass DOCUMENT ME! */ public void setMetaClass(final MetaClass metaClass) { this.metaClass = metaClass; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public int getColumnCount() { return getKeys().size(); } /** * DOCUMENT ME! * * @param column DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public String getColumnName(final int column) { return attributeNames.get(getKey(column)); } /** * DOCUMENT ME! * * @param column DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public Class getColumnClass(final int column) { return String.class; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public List<CidsBean> getCidsBeans() { return cidsBeans; } /** * DOCUMENT ME! * * @param cidsBeans DOCUMENT ME! */ public void setCidsBeans(final List<CidsBean> cidsBeans) { this.cidsBeans = cidsBeans; fireTableDataChanged(); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public int getRowCount() { if (cidsBeans == null) { return 0; } return cidsBeans.size(); } /** * DOCUMENT ME! * * @param modelIndices DOCUMENT ME! * * @return DOCUMENT ME! */ public Collection<CidsBean> getCidsBeansByIndices(final int[] modelIndices) { final Collection<CidsBean> cidsBeansByIndices = new ArrayList<CidsBean>(); for (int i = 0; i < modelIndices.length; i++) { cidsBeansByIndices.add(getCidsBeanByIndex(modelIndices[i])); } return cidsBeansByIndices; } /** * DOCUMENT ME! * * @param modelIndex DOCUMENT ME! * * @return DOCUMENT ME! */ public CidsBean getCidsBeanByIndex(final int modelIndex) { if (cidsBeans == null) { return null; } try { return (CidsBean)cidsBeans.get(modelIndex); } catch (Exception e) { if (LOG.isDebugEnabled()) { LOG.debug("CidsBean at index " + modelIndex + " not found. will return null", e); } return null; } } /** * DOCUMENT ME! * * @param cidsBean DOCUMENT ME! * * @return DOCUMENT ME! */ public int getIndexByCidsBean(final CidsBean cidsBean) { if (cidsBeans == null) { return -1; } try { return cidsBeans.indexOf(cidsBean); } catch (Exception e) { LOG.error("error in getIndexByCidsBean(). will return -1", e); return -1; } } /** * DOCUMENT ME! * * @param cidsBean DOCUMENT ME! */ public void addCidsBean(final CidsBean cidsBean) { if (cidsBeans != null) { cidsBeans.add(cidsBean); fireTableDataChanged(); } } /** * DOCUMENT ME! * * @param rowIndex DOCUMENT ME! * @param columnIndex DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public Object getValueAt(final int rowIndex, final int columnIndex) { final CidsBean cidsBean = getCidsBeanByIndex(rowIndex); if (cidsBean == null) { return null; } if ((columnIndex < 0) || (columnIndex >= getKeys().size())) { return null; } final String key = getKey(columnIndex); final MemberAttributeInfo mai = (MemberAttributeInfo)getMetaClass().getMemberAttributeInfos().get(key); final String fieldName = mai.getFieldName().toLowerCase(); final Object o = cidsBeans.get(rowIndex).getProperty(fieldName); if (o != null) { if (o instanceof Date) { return new SimpleDateFormat(dateFormat).format((Date)o); } else { return o.toString(); } } else { return null; } } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ private List<String> getKeys() { return (List<String>)attributesToDisplay.get(metaClass); } /** * DOCUMENT ME! * * @param index DOCUMENT ME! * * @return DOCUMENT ME! */ private String getKey(final int index) { return getKeys().get(index); } /** * DOCUMENT ME! */ private void refresh() { fireTableStructureChanged(); } } /** * DOCUMENT ME! * * @version $Revision$, $Date$ */ private class MyAttrToDisplayTableModel extends DefaultTableModel { //~ Methods ------------------------------------------------------------ @Override public Class<?> getColumnClass(final int columnIndex) { return String.class; } @Override public String getColumnName(final int column) { return org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.tblToDisplay.column.name"); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public List<String> getAllElements() { return (List<String>)attributesToDisplay.get(getMetaClass()); } @Override public Object getValueAt(final int row, final int column) { return getElementAt(row); } /** * DOCUMENT ME! * * @param index DOCUMENT ME! * * @return DOCUMENT ME! */ public String getElementAt(final int index) { if ((index < 0) || (index > getSize())) { return null; } return attributesToDisplay.get(getMetaClass()).toArray(new String[0])[index]; } @Override public void setValueAt(final Object aValue, final int row, final int column) { final String key = getElementAt(row); final String newName = (String)aValue; attributeNames.put(key, newName); refresh(); tableModel.refresh(); } @Override public int getRowCount() { return getSize(); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public int getSize() { return attributesToDisplay.get(getMetaClass()).size(); } @Override public int getColumnCount() { return 1; } /** * DOCUMENT ME! */ public void refresh() { fireTableDataChanged(); } } /** * DOCUMENT ME! * * @version $Revision$, $Date$ */ private class MyAttrToHideTableModel extends DefaultTableModel { //~ Methods ------------------------------------------------------------ @Override public Class<?> getColumnClass(final int columnIndex) { return String.class; } @Override public String getColumnName(final int column) { return org.openide.util.NbBundle.getMessage( QuerySearchResultsActionPanel.class, "QuerySearchResultsActionPanel.tblToHide.column.name"); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public List<String> getAllElements() { if (getMetaClass() == null) { return new ArrayList<String>(); } else { final List<String> allElements = new ArrayList<String>(); for (final MemberAttributeInfo mais : QuerySearch.getAttributesFromClass(getMetaClass())) { allElements.add(mais.getKey().toString()); } allElements.removeAll(attributesToDisplay.get(getMetaClass())); return allElements; } } @Override public Object getValueAt(final int row, final int column) { return getElementAt(row); } @Override public void setValueAt(final Object aValue, final int row, final int column) { final String key = getElementAt(row); final String newName = (String)aValue; attributeNames.put(key, newName); refresh(); } /** * DOCUMENT ME! * * @param index DOCUMENT ME! * * @return DOCUMENT ME! */ public String getElementAt(final int index) { return getAllElements().get(index); } @Override public int getRowCount() { return getSize(); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public int getSize() { return getAllElements().size(); } @Override public int getColumnCount() { return 1; } /** * DOCUMENT ME! */ public void refresh() { fireTableDataChanged(); } } /** * DOCUMENT ME! * * @version $Revision$, $Date$ */ private class MyAttrTableCellRenderer extends DefaultTableCellRenderer { //~ Methods ------------------------------------------------------------ @Override public Component getTableCellRendererComponent(final JTable table, final Object value, final boolean isSelected, final boolean hasFocus, final int row, final int column) { final Component component = super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column); if (value instanceof String) { try { final String name = attributeNames.get((String)value); final MemberAttributeInfo mai = (MemberAttributeInfo)getMetaClass().getMemberAttributeInfos() .get(value); final String fieldName = mai.getFieldName(); ((JLabel)component).setText(name); ((JLabel)component).setToolTipText(fieldName); } catch (final Exception ex) { LOG.fatal(ex, ex); } } return component; } } /** * DOCUMENT ME! * * @version $Revision$, $Date$ */ class MyAttrTableCellEditor extends AbstractCellEditor implements TableCellEditor { //~ Instance fields ---------------------------------------------------- private final JTextField component = new JTextField(); //~ Methods ------------------------------------------------------------ @Override public Component getTableCellEditorComponent(final JTable table, final Object value, final boolean isSelected, final int rowIndex, final int vColIndex) { final String name = attributeNames.get((String)value); ((JTextField)component).setText(name); return component; } @Override public Object getCellEditorValue() { final String name = ((JTextField)component).getText(); return name; } @Override public boolean isCellEditable(final EventObject eventObject) { if (eventObject instanceof MouseEvent) { return ((MouseEvent)eventObject).getClickCount() >= 2; } return false; } } }