/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.cids.custom.switchon.objecteditors; import java.awt.event.ActionListener; import java.util.HashSet; import java.util.List; import javax.swing.JButton; import javax.swing.RowFilter; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter; import de.cismet.cids.custom.switchon.objectrenderer.MetadataRenderer; import de.cismet.cids.custom.switchon.wizards.DefaultPropertySetter; import de.cismet.cids.dynamics.CidsBean; import de.cismet.cids.dynamics.CidsBeanStore; import de.cismet.cids.dynamics.Disposable; import de.cismet.tools.gui.StaticSwingTools; /** * DOCUMENT ME! * * @author Gilles Baatz * @version $Revision$, $Date$ */ public class MetaDataPanel extends javax.swing.JPanel implements CidsBeanStore, Disposable { //~ Static fields/initializers --------------------------------------------- private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(MetadataEditor.class); //~ Instance fields -------------------------------------------------------- private CidsBean cidsBean; private List<CidsBean> metadatas; private org.jdesktop.beansbinding.BindingGroup bindingGroup; // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnAddMetaData; private javax.swing.JButton btnEditMetaData; private javax.swing.JButton btnRemoveMetaData; private javax.swing.JButton btnSeeDetails; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JTable tblMetaDatas; // End of variables declaration//GEN-END:variables //~ Constructors ----------------------------------------------------------- /** * Creates new form MetaDataPanel. */ public MetaDataPanel() { bindingGroup = new org.jdesktop.beansbinding.BindingGroup(); initComponents(); tblMetaDatas.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(final ListSelectionEvent e) { final boolean oneOrMoreSelected = tblMetaDatas.getSelectedRowCount() > 0; btnEditMetaData.setEnabled(oneOrMoreSelected); btnRemoveMetaData.setEnabled(oneOrMoreSelected); } }); final org.jdesktop.beansbinding.ELProperty eLProperty = org.jdesktop.beansbinding.ELProperty.create( "${metadatas}"); final org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings .createJTableBinding( org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, eLProperty, tblMetaDatas); org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding( org.jdesktop.beansbinding.ELProperty.create("${name}")); columnBinding.setColumnName("Name"); columnBinding.setEditable(false); columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${type.name}")); columnBinding.setColumnName("Type"); columnBinding.setEditable(false); columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${contact}")); columnBinding.setColumnName("Contact"); columnBinding.setEditable(false); columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${content}")); columnBinding.setColumnName("Document"); columnBinding.setEditable(false); bindingGroup.addBinding(jTableBinding); jTableBinding.bind(); } //~ Methods ---------------------------------------------------------------- /** * 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; btnAddMetaData = new javax.swing.JButton(); btnRemoveMetaData = new javax.swing.JButton(); btnEditMetaData = new javax.swing.JButton(); jScrollPane2 = new javax.swing.JScrollPane(); tblMetaDatas = new javax.swing.JTable(); btnSeeDetails = new javax.swing.JButton(); setLayout(new java.awt.GridBagLayout()); org.openide.awt.Mnemonics.setLocalizedText( btnAddMetaData, org.openide.util.NbBundle.getMessage(MetaDataPanel.class, "MetaDataPanel.btnAddMetaData.text")); // NOI18N btnAddMetaData.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { btnAddMetaDataActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 10, 10, 5); add(btnAddMetaData, gridBagConstraints); org.openide.awt.Mnemonics.setLocalizedText( btnRemoveMetaData, org.openide.util.NbBundle.getMessage(MetaDataPanel.class, "MetaDataPanel.btnRemoveMetaData.text")); // NOI18N btnRemoveMetaData.setEnabled(false); btnRemoveMetaData.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { btnRemoveMetaDataActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 10, 5); add(btnRemoveMetaData, gridBagConstraints); org.openide.awt.Mnemonics.setLocalizedText( btnEditMetaData, org.openide.util.NbBundle.getMessage(MetaDataPanel.class, "MetaDataPanel.btnEditMetaData.text")); // NOI18N btnEditMetaData.setEnabled(false); btnEditMetaData.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { btnEditMetaDataActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 10, 5); add(btnEditMetaData, gridBagConstraints); tblMetaDatas.setAutoCreateRowSorter(true); tblMetaDatas.setModel(new javax.swing.table.DefaultTableModel( new Object[][] {}, new String[] {})); tblMetaDatas.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jScrollPane2.setViewportView(tblMetaDatas); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 5; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(10, 10, 5, 10); add(jScrollPane2, gridBagConstraints); org.openide.awt.Mnemonics.setLocalizedText( btnSeeDetails, org.openide.util.NbBundle.getMessage(MetaDataPanel.class, "MetaDataPanel.btnSeeDetails.text")); // NOI18N btnSeeDetails.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { btnSeeDetailsActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 1; gridBagConstraints.insets = new java.awt.Insets(5, 10, 10, 5); add(btnSeeDetails, gridBagConstraints); btnSeeDetails.setVisible(false); } // </editor-fold>//GEN-END:initComponents /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void btnAddMetaDataActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_btnAddMetaDataActionPerformed final CidsBean metaData; try { metaData = CidsBean.createNewCidsBeanFromTableName("SWITCHON", "metadata"); } catch (Exception ex) { LOG.error("Metadata-CidsBean could not be created.", ex); return; } final MetadataEditor metadataEditor = new MetadataEditor(); metadataEditor.setCidsBean(metaData); new ShowEditorInDialog(StaticSwingTools.getParentFrame(this), metadataEditor).showDialog(); // add the newly created metaData-CidsBean metadatas.addAll(metadataEditor.getNewlyAddedCidsBeans()); } //GEN-LAST:event_btnAddMetaDataActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void btnRemoveMetaDataActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_btnRemoveMetaDataActionPerformed final int selectedRow = tblMetaDatas.getSelectedRow(); if (selectedRow != -1) { final CidsBean selectedMetaData = metadatas.get(tblMetaDatas.convertRowIndexToModel( selectedRow)); metadatas.remove(selectedMetaData); } } //GEN-LAST:event_btnRemoveMetaDataActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void btnEditMetaDataActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_btnEditMetaDataActionPerformed final int selectedRow = tblMetaDatas.getSelectedRow(); if (selectedRow != -1) { final CidsBean selectedMetaData = metadatas.get(tblMetaDatas.convertRowIndexToModel( selectedRow)); final MetadataEditor metadataEditor = new MetadataEditor(); metadataEditor.setCidsBean(selectedMetaData); new ShowEditorInDialog(StaticSwingTools.getParentFrame(this), metadataEditor).showDialog(); // replace the old cidsBean with the persisted cidsBean final HashSet<CidsBean> persistedCidsBeans = metadataEditor.getModifiedCidsBeans(); if (!persistedCidsBeans.isEmpty()) { // only one cidsBean can be returned metadatas.remove(selectedMetaData); metadatas.add(persistedCidsBeans.iterator().next()); } } } //GEN-LAST:event_btnEditMetaDataActionPerformed /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void btnSeeDetailsActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_btnSeeDetailsActionPerformed final int selectedRow = tblMetaDatas.getSelectedRow(); if (selectedRow != -1) { final CidsBean selectedMetaData = metadatas.get(tblMetaDatas.convertRowIndexToModel( selectedRow)); final MetadataRenderer metadataRenderer = new MetadataRenderer(); metadataRenderer.setCidsBean(selectedMetaData); new ShowEditorInDialog(StaticSwingTools.getParentFrame(this), metadataRenderer).showDialog(); } } //GEN-LAST:event_btnSeeDetailsActionPerformed @Override public CidsBean getCidsBean() { return cidsBean; } @Override public void setCidsBean(final CidsBean cidsBean) { bindingGroup.unbind(); if (cidsBean != null) { this.cidsBean = cidsBean; this.metadatas = cidsBean.getBeanCollectionProperty("metadata"); bindingGroup.bind(); if (tblMetaDatas.getColumnModel().getColumnCount() > 0) { tblMetaDatas.getColumnModel().getColumn(2).setCellRenderer(new NullCellRenderer()); tblMetaDatas.getColumnModel().getColumn(3).setCellRenderer(new NullCellRenderer()); } // set filter to hide standard meta data final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tblMetaDatas.getModel()); tblMetaDatas.setRowSorter(sorter); sorter.setRowFilter( new RowFilter<TableModel, Integer>() { @Override public boolean include(final RowFilter.Entry<? extends TableModel, ? extends Integer> entry) { return !DefaultPropertySetter.isStandardMetaData(metadatas.get(entry.getIdentifier())); } }); } } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public List<CidsBean> getMetadatas() { return metadatas; } /** * DOCUMENT ME! * * @param metadatas DOCUMENT ME! */ public void setMetadatas(final List<CidsBean> metadatas) { this.metadatas = metadatas; } @Override public void dispose() { bindingGroup.unbind(); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public CidsBean getSelectedMetaData() { final int selectedRow = tblMetaDatas.getSelectedRow(); if (selectedRow != -1) { final CidsBean selectedRepresentation = metadatas.get(tblMetaDatas.convertRowIndexToModel( selectedRow)); return selectedRepresentation; } else { return null; } } /** * Removes all actionListeners from the Add-button and adds the parameter actionListener. * * @param actionListener The ActionListener which will be added to the button. */ public void replaceActionListenerOfAddButton(final ActionListener actionListener) { removeActionListeners(btnAddMetaData); btnAddMetaData.addActionListener(actionListener); } /** * Removes all actionListeners from the Edit-button and adds the parameter actionListener. * * @param actionListener The ActionListener which will be added to the button. */ public void replaceActionListenerOfEditButton(final ActionListener actionListener) { removeActionListeners(btnEditMetaData); btnEditMetaData.addActionListener(actionListener); } /** * Remove all ActionListeners from a button. * * @param button DOCUMENT ME! */ private void removeActionListeners(final JButton button) { for (final ActionListener l : button.getActionListeners()) { button.removeActionListener(l); } } /** * Clear the selection of the table with the MetaDatas. */ public void clearTableSelection() { tblMetaDatas.clearSelection(); } /** * DOCUMENT ME! */ public void makeNonEditable() { btnAddMetaData.setVisible(false); btnEditMetaData.setVisible(false); btnRemoveMetaData.setVisible(false); btnSeeDetails.setVisible(true); } //~ Inner Classes ---------------------------------------------------------- /** * Print no if the value is null, otherwise yes. * * @version $Revision$, $Date$ */ private class NullCellRenderer extends DefaultTableCellRenderer { //~ Methods ------------------------------------------------------------ @Override protected void setValue(final Object value) { if (value == null) { this.setText("No"); } else { this.setText("Yes"); } } } }