/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ /* * AttributeViewer.java * * Created on 1. Juli 2004, 13:42 */ package Sirius.navigator.ui.attributes; import Sirius.navigator.connection.SessionManager; import Sirius.navigator.method.MethodManager; import Sirius.navigator.plugin.interfaces.EmbededControlBar; import Sirius.navigator.resource.*; import Sirius.navigator.types.treenode.*; import Sirius.navigator.ui.*; import Sirius.navigator.ui.dnd.*; import Sirius.navigator.ui.tree.MetaCatalogueTree; import Sirius.server.middleware.types.MetaObject; import Sirius.server.middleware.types.MetaObjectNode; import Sirius.server.newuser.permission.PermissionHolder; import org.apache.log4j.Logger; import org.openide.util.Exceptions; import java.util.List; import java.util.Vector; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import javax.swing.AbstractButton; import javax.swing.SwingWorker; import javax.swing.event.*; /** * DOCUMENT ME! * * @author pascal * @version $Revision$, $Date$ */ public class AttributeViewer extends javax.swing.JPanel implements EmbededControlBar { //~ Instance fields -------------------------------------------------------- protected SwingWorker worker = null; private final ResourceManager resources = ResourceManager.getManager(); private Object treeNode = null; private final Logger logger; // Variables declaration - do not modify//GEN-BEGIN:variables private Sirius.navigator.ui.attributes.AttributeTable attributeTable; private Sirius.navigator.ui.attributes.AttributeTree attributeTree; private javax.swing.JPanel controlBar; private javax.swing.JButton editButton; private Sirius.navigator.ui.widget.TitleBar titleBar; // End of variables declaration//GEN-END:variables //~ Constructors ----------------------------------------------------------- /** * Creates new form AttributeViewer. */ public AttributeViewer() { // this.resources = ResourceManager.getManager(); this.logger = Logger.getLogger(this.getClass()); initComponents(); // this.attributeTree.setTransferHandler(new AttributeTree.MetaObjectTransferHandler()); this.attributeTree.addTreeSelectionListener(new AttributeListener()); this.attributeTree.setIgnoreInvisibleAttributes(true); final AttributeNodeDnDHandler attributeNodeDnDHandler = new AttributeNodeDnDHandler(this.attributeTree); // XXX test ... // this.attributeTree.setIgnoreSubsitute(false); // this.attributeTree.setIgnoreArrayHelperObjects(false); } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @param treeNode DOCUMENT ME! */ public void setTreeNodes(final List<Object> treeNode) { if ((treeNode != null) && (treeNode.size() == 1)) { setTreeNode(treeNode.get(0)); } else { clear(); } } /** * DOCUMENT ME! * * @param treeNode DOCUMENT ME! */ public void setTreeNode(final Object treeNode) { if (logger.isDebugEnabled()) { logger.debug("setTreeNode: " + treeNode.hashCode()); } editButton.setEnabled(false); if ((worker != null) && !worker.isDone() && !worker.isCancelled()) { logger.warn("cancelling running getMetaObject worker thread of tree node " + treeNode.hashCode()); worker.cancel(false); worker = null; } this.treeNode = treeNode; this.attributeTable.clear(); this.attributeTree.setTreeNode(treeNode); if ((treeNode != null) && PropertyManager.getManager().isEditable() && (treeNode instanceof ObjectTreeNode)) { final ObjectTreeNode objectTreeNode = (ObjectTreeNode)treeNode; if (objectTreeNode.isMetaObjectFilled()) { this.editButton.setEnabled( objectTreeNode.getMetaObject().getBean().hasObjectWritePermission( SessionManager.getSession().getUser())); } else { if (logger.isDebugEnabled()) { logger.debug("starting getMetaObject worker thread for tree node " + treeNode.hashCode()); } worker = new SwingWorker<MetaObject, Void>() { @Override protected MetaObject doInBackground() throws Exception { return objectTreeNode.getMetaObject(); } @Override protected void done() { if (logger.isDebugEnabled()) { logger.debug("MetaObject loaded from server for tree node " + treeNode.hashCode()); } try { final MetaObject metaObject = this.get(); if (!isCancelled()) { editButton.setEnabled(metaObject.getBean().hasObjectWritePermission( SessionManager.getSession().getUser())); } else { logger.warn("getMetaObject worker cancelled for tree node " + treeNode.hashCode()); } } catch (InterruptedException ex) { logger.warn(ex.getMessage(), ex); } catch (ExecutionException ex) { logger.error(ex.getMessage(), ex); editButton.setEnabled(false); } catch (CancellationException cex) { if (logger.isDebugEnabled()) { logger.warn("getMetaObject worker thread forcibly cancelled for tree node:" + treeNode.hashCode() + ": " + cex.getMessage(), cex); } } } }; worker.execute(); } } else { this.editButton.setEnabled(false); } } @Override public void setControlBarVisible(final boolean isVisible) { controlBar.setVisible(isVisible); } @Override public Vector<AbstractButton> getControlBarButtons() { final Vector<AbstractButton> buttons = new Vector<AbstractButton>(); buttons.add(editButton); return buttons; } /** * Getter for property treeNode. * * @return Value of property treeNode. */ public Object getTreeNode() { return this.treeNode; } /** * Clears the table an the tree. */ public void clear() { this.attributeTree.clear(); this.attributeTable.clear(); } /** * 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. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; controlBar = new javax.swing.JPanel(); titleBar = new Sirius.navigator.ui.widget.TitleBar(); editButton = new javax.swing.JButton(); final javax.swing.JSplitPane splitPane = new javax.swing.JSplitPane(); final javax.swing.JScrollPane tableScrollPane = new javax.swing.JScrollPane(); attributeTable = new Sirius.navigator.ui.attributes.AttributeTable(); final javax.swing.JScrollPane treeScrollPane = new javax.swing.JScrollPane(); attributeTree = new Sirius.navigator.ui.attributes.AttributeTree(); setLayout(new java.awt.BorderLayout()); controlBar.setLayout(new java.awt.GridBagLayout()); titleBar.setIcon(resources.getIcon("floatingframe.gif")); titleBar.setTitle(org.openide.util.NbBundle.getMessage( AttributeViewer.class, "AttributeViewer.titleBar.title")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; controlBar.add(titleBar, gridBagConstraints); editButton.setIcon(resources.getIcon("objekt_bearbeiten.gif")); editButton.setToolTipText(org.openide.util.NbBundle.getMessage( AttributeViewer.class, "AttributeViewer.editButton.toolTipText")); // NOI18N editButton.setActionCommand("edit"); editButton.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)); editButton.setContentAreaFilled(false); editButton.setEnabled(false); editButton.setFocusPainted(false); editButton.setMaximumSize(new java.awt.Dimension(16, 16)); editButton.setMinimumSize(new java.awt.Dimension(16, 16)); editButton.setPreferredSize(new java.awt.Dimension(16, 16)); editButton.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent evt) { editButtonActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 4); controlBar.add(editButton, gridBagConstraints); add(controlBar, java.awt.BorderLayout.NORTH); splitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); splitPane.setResizeWeight(0.5); splitPane.setOneTouchExpandable(PropertyManager.getManager().isAdvancedLayout()); tableScrollPane.setPreferredSize(new java.awt.Dimension(250, 150)); attributeTable.setMinimumSize(new java.awt.Dimension(100, 50)); attributeTable.setPreferredSize(null); tableScrollPane.setViewportView(attributeTable); splitPane.setTopComponent(tableScrollPane); treeScrollPane.setPreferredSize(new java.awt.Dimension(250, 150)); treeScrollPane.setRequestFocusEnabled(false); attributeTree.setMaximumSize(null); attributeTree.setMinimumSize(new java.awt.Dimension(100, 50)); attributeTree.setPreferredSize(null); treeScrollPane.setViewportView(attributeTree); splitPane.setBottomComponent(treeScrollPane); add(splitPane, java.awt.BorderLayout.CENTER); } // </editor-fold>//GEN-END:initComponents /** * DOCUMENT ME! * * @param evt DOCUMENT ME! */ private void editButtonActionPerformed(final java.awt.event.ActionEvent evt) //GEN-FIRST:event_editButtonActionPerformed { //GEN-HEADEREND:event_editButtonActionPerformed if ((this.getTreeNode() != null) && (this.getTreeNode() instanceof ObjectTreeNode) && (ComponentRegistry.getRegistry().getAttributeEditor() != null)) { final ObjectTreeNode selectedNode = (ObjectTreeNode)this.getTreeNode(); logger.info("evt.getModifiers():" + evt.getModifiers()); // NOI18N final MetaCatalogueTree metaCatalogueTree = ComponentRegistry.getRegistry().getCatalogueTree(); if ((java.awt.event.ActionEvent.CTRL_MASK & evt.getModifiers()) > 0) { logger.warn("performing unauthorized edit action"); // NOI18N ComponentRegistry.getRegistry().showComponent(ComponentRegistry.ATTRIBUTE_EDITOR); if (ComponentRegistry.getRegistry().getActiveCatalogue() == metaCatalogueTree) { ComponentRegistry.getRegistry() .getAttributeEditor() .setTreeNode(metaCatalogueTree.getSelectionPath(), selectedNode); } else { ComponentRegistry.getRegistry().getAttributeEditor().setTreeNode(selectedNode); } } else if (MethodManager.getManager().checkPermission( (MetaObjectNode)selectedNode.getNode(), PermissionHolder.WRITEPERMISSION)) { ComponentRegistry.getRegistry().showComponent(ComponentRegistry.ATTRIBUTE_EDITOR); if (ComponentRegistry.getRegistry().getActiveCatalogue() == metaCatalogueTree) { ComponentRegistry.getRegistry() .getAttributeEditor() .setTreeNode(metaCatalogueTree.getSelectionPath(), selectedNode); } else { ComponentRegistry.getRegistry().getAttributeEditor().setTreeNode(selectedNode); } } else { logger.warn("insufficient permission to edit node " + selectedNode); // NOI18N } } } //GEN-LAST:event_editButtonActionPerformed //~ Inner Classes ---------------------------------------------------------- /** * DOCUMENT ME! * * @version $Revision$, $Date$ */ private class AttributeListener implements TreeSelectionListener { //~ Methods ------------------------------------------------------------ @Override public void valueChanged(final TreeSelectionEvent e) { final Object object = e.getPath().getLastPathComponent(); if (e.isAddedPath() && (object != null)) { // AttributePanel.this.setAttributes(((AttributeNode)object).getMetaAttributes()); attributeTable.setAttributes(((AttributeNode)object).getAttributes()); } else { // AttributePanel.this.tableModel.clear(); attributeTable.clear(); } } } }