/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* AttributeEditor.java
*
* Created on 1. Juli 2004, 13:42
*/
package de.cismet.cids.editors;
import Sirius.navigator.connection.SessionManager;
import Sirius.navigator.resource.ResourceManager;
import Sirius.navigator.types.treenode.ObjectTreeNode;
import Sirius.navigator.ui.ComponentRegistry;
import Sirius.navigator.ui.RequestsFullSizeComponent;
import Sirius.navigator.ui.attributes.AttributeViewer;
import Sirius.navigator.ui.attributes.editor.AttributeEditor;
import Sirius.navigator.ui.tree.MetaCatalogueTree;
import Sirius.server.middleware.types.MetaObject;
import Sirius.server.middleware.types.MetaObjectNode;
import Sirius.server.middleware.types.Node;
import Sirius.server.newuser.User;
import org.jdesktop.swingx.JXErrorPane;
import org.jdesktop.swingx.error.ErrorInfo;
import org.openide.util.NbBundle;
import org.openide.util.WeakListeners;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.List;
import java.util.Vector;
import java.util.logging.Level;
import javax.swing.AbstractButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.SwingWorker;
import javax.swing.Timer;
import de.cismet.cids.dynamics.CidsBean;
import de.cismet.cids.dynamics.DisposableCidsBeanStore;
import de.cismet.tools.CismetThreadPool;
import de.cismet.tools.StaticDebuggingTools;
import de.cismet.tools.gui.ComponentWrapper;
import de.cismet.tools.gui.StaticSwingTools;
import de.cismet.tools.gui.WrappedComponent;
/**
* DOCUMENT ME!
*
* @author pascal
* @version $Revision$, $Date$
*/
public class NavigatorAttributeEditorGui extends AttributeEditor {
//~ Static fields/initializers ---------------------------------------------
// do not remove!
private static final ResourceManager resources = ResourceManager.getManager();
//~ Instance fields --------------------------------------------------------
private transient PropertyChangeListener strongReferenceOnWeakListener = null;
private final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(this.getClass());
private Object treeNode = null;
private MetaObject backupObject = null;
private MetaObject editorObject = null;
private JComponent wrappedWaitingPanel;
private BeanInitializer currentInitializer = null;
private DisposableCidsBeanStore currentBeanStore = null;
private JComponent editorComponent = null;
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton cancelButton;
private javax.swing.JButton commitButton;
private javax.swing.JPanel controlBar;
private javax.swing.JButton copyButton;
private javax.swing.JScrollPane editorScrollPane;
private javax.swing.JButton jButton1;
private javax.swing.JLabel lblEditorCreation;
private javax.swing.JPanel panDebug;
private javax.swing.JButton pasteButton;
private javax.swing.JScrollPane scpEditor;
private javax.swing.JPanel switchPanel;
// End of variables declaration//GEN-END:variables
//~ Constructors -----------------------------------------------------------
/**
* Creates new form AttributeEditor.
*/
public NavigatorAttributeEditorGui() {
initComponents();
if (!StaticDebuggingTools.checkHomeForFile("cidsNavigatorGuiHiddenDebugControls")) { // NOI18N
panDebug.setVisible(false);
}
final ComponentWrapper cw = CidsObjectEditorFactory.getInstance().getComponentWrapper();
if (cw != null) {
wrappedWaitingPanel = (JComponent)cw.wrapComponent(lblEditorCreation);
}
// Nur fuer die Uebergangsphase sollange noch von AttributeEditor geerbt wird
ActionListener[] alr = commitButton.getActionListeners();
for (final ActionListener al : alr) {
commitButton.removeActionListener(al);
}
alr = cancelButton.getActionListeners();
for (final ActionListener al : alr) {
cancelButton.removeActionListener(al);
}
commitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
if (((backupObject != null)
&& (editorObject.getBean().hasArtificialChangeFlag()
|| editorObject.isChanged()))
|| (backupObject == null)) {
if (editorObject.getBean().hasObjectWritePermission(SessionManager.getSession().getUser())) {
if ((e.getModifiers() & ActionEvent.SHIFT_MASK) == 0) {
final int answer = JOptionPane.showConfirmDialog(
NavigatorAttributeEditorGui.this,
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.NavigatorAttributeEditorGui().commitButton.JOptionPane.message"), // NOI18N
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.NavigatorAttributeEditorGui().commitButton.JOptionPane.title"), // NOI18N
JOptionPane.YES_NO_CANCEL_OPTION);
if (answer == JOptionPane.YES_OPTION) {
saveIt();
} else if (answer == JOptionPane.CANCEL_OPTION) {
} else {
reloadFromDB();
clear();
}
} else {
saveIt(false);
}
} else {
JOptionPane.showMessageDialog(
NavigatorAttributeEditorGui.this,
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.NavigatorAttributeEditorGui().commitButton.JOptionPane.noobjectpermission.message"),
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.NavigatorAttributeEditorGui().commitButton.JOptionPane.noobjectpermission.title"),
JOptionPane.WARNING_MESSAGE);
return;
}
} else {
if ((e.getModifiers() & ActionEvent.SHIFT_MASK) == 0) {
clear();
}
}
}
});
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
if (((backupObject != null)
&& (editorObject.getBean().hasArtificialChangeFlag()
|| editorObject.isChanged()))
|| (backupObject == null)) {
final int answer = JOptionPane.showConfirmDialog(
NavigatorAttributeEditorGui.this,
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.NavigatorAttributeEditorGui().cancelButton.JOptionPane.message"), // NOI18N
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.NavigatorAttributeEditorGui().cancelButton.JOptionPane.title"), // NOI18N
JOptionPane.YES_NO_OPTION);
if (answer == JOptionPane.YES_OPTION) {
reloadFromDB();
clear();
}
} else {
if (currentBeanStore instanceof EditorSaveListener) {
((EditorSaveListener)currentBeanStore).editorClosed(
new EditorClosedEvent(
EditorSaveListener.EditorSaveStatus.CANCELED));
}
clear();
}
}
});
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @param args DOCUMENT ME!
*/
public static void main(final String[] args) {
System.out.println(
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.NavigatorAttributeEditorGui().commitButton.JOptionPane.noobjectpermission.message"));
}
@Override
public void setControlBarVisible(final boolean isVisible) {
controlBar.setVisible(isVisible);
}
@Override
public Vector<AbstractButton> getControlBarButtons() {
final Vector<AbstractButton> buttons = new Vector<AbstractButton>();
buttons.add(commitButton);
buttons.add(cancelButton);
buttons.add(copyButton);
buttons.add(pasteButton);
return buttons;
}
/**
* DOCUMENT ME!
*/
private void refreshAttributeTable() {
final AttributeViewer viewer = ComponentRegistry.getRegistry().getAttributeViewer();
final Object node = ComponentRegistry.getRegistry().getActiveCatalogue().getSelectedNode();
viewer.setTreeNode(node);
}
/**
* DOCUMENT ME!
*/
private void refreshSearchTree() {
final List<Node> oldNodes = ComponentRegistry.getRegistry().getSearchResultsTree().getResultNodes();
if (oldNodes == null) {
// The search result tree has no elements. So it should not be refreshed
return;
}
final Node[] newNodes = new Node[oldNodes.size()];
for (int index = 0; index < oldNodes.size(); index++) {
final Node node = oldNodes.get(index);
if (node instanceof MetaObjectNode) {
// Bei MetaObjectNodes wird der Node neu erzeugt, damit der Name gleich dem ToString Wert des
// veränderten Objektes ist
try {
final MetaObjectNode metaObjectNode = (MetaObjectNode)node;
final MetaObject metaObject = metaObjectNode.getObject();
final CidsBean cidsBean = metaObject.getBean();
newNodes[index] = new MetaObjectNode(cidsBean);
} catch (final Exception ex) {
if (log.isDebugEnabled()) {
log.debug("error while creating new MetaObjectNode", ex);
}
// wenn was schief läuft, dann wenigstens den alten node übernehmen
newNodes[index] = node;
}
} else {
newNodes[index] = node;
}
}
ComponentRegistry.getRegistry().getSearchResultsTree().setResultNodes(newNodes, false, null);
}
/**
* DOCUMENT ME!
*/
private void refreshTree() {
if (treePath != null) {
try {
final MetaCatalogueTree metaCatalogueTree = ComponentRegistry.getRegistry().getCatalogueTree();
metaCatalogueTree.refreshTreePath(treePath);
} catch (Exception e) {
log.error("Error when refreshing Tree", e); // NOI18N
}
}
}
/**
* DOCUMENT ME!
*
* @param orig DOCUMENT ME!
*/
private void createBackup(final MetaObject orig) {
try {
final int oid = orig.getID();
final int cid = orig.getMetaClass().getID();
final String domain = orig.getDomain();
final User user = SessionManager.getSession().getUser();
backupObject = null;
backupObject = SessionManager.getConnection().getMetaObject(user, oid, cid, domain);
} catch (Exception e) {
log.error("Error during Backupcreation. Cannot detect whether the object is changed.", e); // NOI18N
JOptionPane.showMessageDialog(
NavigatorAttributeEditorGui.this,
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.createBackup().exception.JOptionPane.message"), // NOI18N
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.createBackup().exception.JOptionPane.title"), // NOI18N
JOptionPane.WARNING_MESSAGE);
}
}
/**
* DOCUMENT ME!
*/
private void reloadFromDB() {
try {
final ObjectTreeNode otn = (ObjectTreeNode)treeNode;
final int oid = otn.getMetaObject().getID();
if (oid == -1) {
return;
}
final int cid = otn.getMetaObject().getMetaClass().getID();
final String domain = otn.getMetaObject().getDomain();
final User user = SessionManager.getSession().getUser();
final MetaObject reloaded = SessionManager.getConnection().getMetaObject(user, oid, cid, domain);
reloaded.setAllClasses();
if (log.isDebugEnabled()) {
log.debug("Reloaded MO:" + reloaded.getDebugString()); // NOI18N
}
otn.setMetaObject(reloaded);
refreshAttributeTable();
} catch (Exception e) {
log.error("Error durig reload from DB.", e); // NOI18N
final ErrorInfo ei = new ErrorInfo(org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.reloadFromDB().ErrorInfo.title"), // NOI18N
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.reloadFromDB().ErrorInfo.message"), // NOI18N
null,
null,
e,
Level.SEVERE,
null);
JXErrorPane.showDialog(this, ei);
}
if (currentBeanStore instanceof EditorSaveListener) {
((EditorSaveListener)currentBeanStore).editorClosed(new EditorClosedEvent(
EditorSaveListener.EditorSaveStatus.CANCELED));
}
}
/**
* DOCUMENT ME!
*/
public void cancelEditing() {
if (currentBeanStore instanceof EditorSaveListener) {
((EditorSaveListener)currentBeanStore).editorClosed(
new EditorClosedEvent(
EditorSaveListener.EditorSaveStatus.CANCELED));
}
clear();
}
/**
* DOCUMENT ME!
*/
public void saveIt() {
saveIt(true);
}
/**
* DOCUMENT ME!
*
* @param savedBean DOCUMENT ME!
*/
protected void executeAfterSuccessfullSave(final CidsBean savedBean) {
}
/**
* DOCUMENT ME!
*
* @param closeEditor DOCUMENT ME!
*/
public void saveIt(final boolean closeEditor) {
final ObjectTreeNode otn = (ObjectTreeNode)treeNode;
final MetaObject mo = otn.getMetaObject();
final CidsBean oldBean = mo.getBean();
final EditorSaveListener editorSaveListener;
if (currentBeanStore instanceof EditorSaveListener) {
editorSaveListener = (EditorSaveListener)currentBeanStore;
if (!editorSaveListener.prepareForSave()) {
// editor is not ready for safe? then stop save procedure...
return;
}
} else {
editorSaveListener = null;
}
try {
final CidsBean savedInstance = oldBean.persist();
((ObjectTreeNode)treeNode).setMetaObject(savedInstance.getMetaObject());
if (closeEditor) {
final JOptionPane jop = new JOptionPane(
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.saveIt().jop.message"), // NOI18N
JOptionPane.INFORMATION_MESSAGE);
final JDialog dialog = jop.createDialog(
NavigatorAttributeEditorGui.this,
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.saveIt().dialog.title")); // NOI18N
final Timer t = new Timer(2000, new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
dialog.setVisible(false);
dialog.dispose();
}
});
t.setRepeats(false);
t.start();
StaticSwingTools.showDialog(dialog);
clear();
} else {
// final AttributeViewer viewer = ComponentRegistry.getRegistry().getAttributeViewer();
// final MetaCatalogueTree tree = ComponentRegistry.getRegistry().getActiveCatalogue();
editorObject = savedInstance.getMetaObject();
createBackup(editorObject);
// --- CidsBean bean = editorObject.getBean(); final PropertyChangeListener propertyChangeListener = new
// PropertyChangeListener() {
//
// @Override public void propertyChange(PropertyChangeEvent evt) { viewer.repaint(); tree.repaint();
//
// } }; if (currentBeanStore instanceof JComponent) { strongReferenceOnWeakListener =
// propertyChangeListener; } else { log.error("A CidsBeansStore must be instanceof JComponent here,
// but it was " + currentBeanStore + "!"); }
// bean.addPropertyChangeListener(WeakListeners.propertyChange(propertyChangeListener, bean)); ---
// editorObject.getBean().addPropertyChangeListener(new PropertyChangeListener() {
//
// @Override public void propertyChange(PropertyChangeEvent evt) { viewer.repaint(); tree.repaint();
//
// } });
currentBeanStore.setCidsBean(savedInstance);
for (final PropertyChangeListener pcl : oldBean.getPropertyChangeListeners()) {
savedInstance.addPropertyChangeListener(pcl);
}
}
if (editorSaveListener != null) {
editorSaveListener.editorClosed(new EditorClosedEvent(
EditorSaveListener.EditorSaveStatus.SAVE_SUCCESS,
savedInstance));
}
refreshTree();
refreshSearchTree();
executeAfterSuccessfullSave(savedInstance);
} catch (Exception ex) {
if (editorSaveListener != null) {
editorSaveListener.editorClosed(new EditorClosedEvent(EditorSaveListener.EditorSaveStatus.SAVE_ERROR));
}
final Throwable firstCause = getFirstCause(ex);
log.error("Error while saving", ex); // NOI18N
if ((firstCause != null) && (firstCause.getMessage() != null)
&& firstCause.getMessage().equals("not allowed to insert meta object")) {
final ErrorInfo ei = new ErrorInfo(org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.saveIt().JOptionPane.title"), // NOI18N
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.saveIt().JOptionPane.message"), // NOI18N
null,
null,
ex,
Level.SEVERE,
null);
JXErrorPane.showDialog(NavigatorAttributeEditorGui.this, ei);
} else {
final ErrorInfo ei = new ErrorInfo(org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.saveIt().ErrorInfo.title"), // NOI18N
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.saveIt().ErrorInfo.message"), // NOI18N
null,
null,
ex,
Level.SEVERE,
null);
JXErrorPane.showDialog(NavigatorAttributeEditorGui.this, ei);
}
refreshTree();
refreshSearchTree();
}
if (closeEditor) {
clear();
}
}
@Override
public void setTreeNode(final Object node) {
if ((treeNode != null) && (editorObject != null)) {
if (editorObject.getBean().hasArtificialChangeFlag() || editorObject.isChanged()) {
final int answer = JOptionPane.showConfirmDialog(
NavigatorAttributeEditorGui.this,
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.setTreeNode().confirmDialog.message"), // NOI18N
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.setTreeNode().confirmDialog.title"), // NOI18N
JOptionPane.YES_NO_CANCEL_OPTION);
if (answer == JOptionPane.YES_OPTION) {
saveIt();
} else if (answer == JOptionPane.NO_OPTION) {
reloadFromDB();
} else { // Cancel
return;
}
}
}
final AttributeViewer viewer = ComponentRegistry.getRegistry().getAttributeViewer();
final MetaCatalogueTree tree = ComponentRegistry.getRegistry().getActiveCatalogue();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
removeAndDisposeEditor();
scpEditor.getViewport().setView(wrappedWaitingPanel);
NavigatorAttributeEditorGui.this.revalidate();
}
});
treeNode = node;
if (treeNode instanceof ObjectTreeNode) {
// final DescriptionPane desc = ComponentRegistry.getRegistry().getDescriptionPane();
cancelButton.setEnabled(false);
commitButton.setEnabled(false);
CismetThreadPool.execute(new SwingWorker<JComponent, Void>() {
@Override
protected JComponent doInBackground() throws Exception {
Thread.currentThread().setName("NavigatorAttributeEditorGui setTreeNode()");
final ObjectTreeNode otn = (ObjectTreeNode)treeNode;
editorObject = otn.getMetaObject();
backupObject = null;
new Thread(new Runnable() {
@Override
public void run() {
try {
createBackup(editorObject);
} finally {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
cancelButton.setEnabled(true);
commitButton.setEnabled(true);
}
});
}
}
}).start();
// editorObject.getBean().addPropertyChangeListener(new PropertyChangeListener() {
//
// @Override
// public void propertyChange(PropertyChangeEvent evt) {
// viewer.repaint();
// tree.repaint();
// //commitButton.setEnabled(!backupObject.propertyEquals(mo)); //vielleicht einfach zuviel des guten
//
// }
// });
// try {
// EditorBeanInitializerStore.getInstance().initialize(editorObject.getBean());
// } catch (Exception ex) {
// log.error("Exception while initializing Bean with template values!", ex);
// }
final JComponent ed = CidsObjectEditorFactory.getInstance().getEditor(editorObject);
return ed;
}
@Override
protected void done() {
try {
JComponent ed = get();
if (log.isDebugEnabled()) {
log.debug("editor:" + ed); // NOI18N
}
removeAndDisposeEditor();
editorComponent = ed;
switchPanel.remove(scpEditor);
if (ed instanceof RequestsFullSizeComponent) {
switchPanel.add(ed, BorderLayout.CENTER);
} else {
switchPanel.add(scpEditor, BorderLayout.CENTER);
scpEditor.getViewport().setView(ed);
}
if (ed instanceof WrappedComponent) {
ed = ((WrappedComponent)ed).getOriginalComponent();
}
if (ed instanceof DisposableCidsBeanStore) {
currentBeanStore = (DisposableCidsBeanStore)ed;
currentInitializer = EditorBeanInitializerStore.getInstance()
.getInitializer(editorObject.getMetaClass());
copyButton.setEnabled(true);
if (currentInitializer != null) {
// enable editor attribute paste only for NEW MOs and initializers which implement
// the BeanInitializerForcePaste interface
final boolean isNewBean = currentBeanStore.getCidsBean().getMetaObject().getStatus()
== MetaObject.NEW;
pasteButton.setEnabled(
isNewBean
|| (currentInitializer instanceof BeanInitializerForcePaste));
}
}
final CidsBean bean = editorObject.getBean();
final PropertyChangeListener propertyChangeListener = new PropertyChangeListener() {
@Override
public void propertyChange(final PropertyChangeEvent evt) {
viewer.repaint();
tree.repaint();
}
};
strongReferenceOnWeakListener = propertyChangeListener;
bean.addPropertyChangeListener(WeakListeners.propertyChange(propertyChangeListener, bean));
NavigatorAttributeEditorGui.this.revalidate();
if (log.isDebugEnabled()) {
log.debug("editor added"); // NOI18N
}
} catch (Exception e) {
final ErrorInfo ei = new ErrorInfo(
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.done().ErrorInfo.title"), // NOI18N
org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.done().ErrorInfo.message"), // NOI18N
null,
null,
e,
Level.SEVERE,
null);
log.error(
"Error while displaying Editor"
+ ei.getState()
+ editorObject.getDebugString()
+ "\n",
e); // NOI18N
JXErrorPane.showDialog(NavigatorAttributeEditorGui.this, ei);
clear();
}
}
});
} else {
log.warn("Given Treenode is not instance of ObjectTreeMode, but: " + node.getClass()); // NOI18N
}
}
/**
* DOCUMENT ME!
*
* @param th DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
private Throwable getFirstCause(final Throwable th) {
if (th == null) {
return null;
} else if (th.getCause() == null) {
return th;
} else {
return getFirstCause(th.getCause());
}
}
/**
* DOCUMENT ME!
*/
private void removeAndDisposeEditor() {
if (currentBeanStore != null) {
currentBeanStore.dispose();
}
if (editorComponent instanceof RequestsFullSizeComponent) {
switchPanel.remove(editorComponent);
// switchPanel.removeAll();
} else {
scpEditor.getViewport().removeAll();
}
// release the strong reference on the listener, so that the weak listener can be GCed.
strongReferenceOnWeakListener = null;
currentBeanStore = null;
editorComponent = null;
}
@Override
protected void clear() {
currentInitializer = null;
removeAndDisposeEditor();
commitButton.setEnabled(false);
cancelButton.setEnabled(false);
copyButton.setEnabled(false);
pasteButton.setEnabled(false);
revalidate();
repaint();
ComponentRegistry.getRegistry().getAttributeViewer().repaint();
this.treeNode = null;
backupObject = null;
editorObject = null;
}
@Override
public Object getTreeNode() {
return treeNode;
}
@Override
public boolean isChanged() {
return true;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public MetaObject getEditorObject() {
return editorObject;
}
/**
* 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() {
final java.awt.GridBagConstraints gridBagConstraints;
final javax.swing.JToggleButton pinButton = new javax.swing.JToggleButton();
final javax.swing.JToggleButton editButton = new javax.swing.JToggleButton();
editorScrollPane = new javax.swing.JScrollPane();
lblEditorCreation = new javax.swing.JLabel();
controlBar = new javax.swing.JPanel();
commitButton = new javax.swing.JButton();
cancelButton = new javax.swing.JButton();
copyButton = new javax.swing.JButton();
pasteButton = new javax.swing.JButton();
switchPanel = new javax.swing.JPanel();
scpEditor = new javax.swing.JScrollPane();
panDebug = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
pinButton.setIcon(resources.getIcon("attr_pin_off.gif"));
pinButton.setToolTipText(org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.pinButton.tooltip")); // NOI18N
pinButton.setActionCommand("pin");
pinButton.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
pinButton.setContentAreaFilled(false);
pinButton.setFocusPainted(false);
pinButton.setMaximumSize(new java.awt.Dimension(16, 16));
pinButton.setMinimumSize(new java.awt.Dimension(16, 16));
pinButton.setPreferredSize(new java.awt.Dimension(16, 16));
pinButton.setRolloverIcon(resources.getIcon("attr_pin_off.gif"));
pinButton.setRolloverSelectedIcon(resources.getIcon("attr_pin_on.gif"));
pinButton.setSelectedIcon(resources.getIcon("attr_pin_on.gif"));
editButton.setIcon(resources.getIcon("objekt_bearbeiten.gif"));
editButton.setToolTipText(org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.editButton.tooltip")); // NOI18N
editButton.setActionCommand("edit");
editButton.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
editButton.setContentAreaFilled(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.setRolloverIcon(resources.getIcon("objekt_bearbeiten.gif"));
editButton.setRolloverSelectedIcon(resources.getIcon("objekt_bearbeiten.gif"));
editButton.setSelectedIcon(resources.getIcon("objekt_bearbeiten.gif"));
editorScrollPane.setPreferredSize(new java.awt.Dimension(250, 150));
lblEditorCreation.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
lblEditorCreation.setIcon(new javax.swing.ImageIcon(
getClass().getResource("/Sirius/navigator/resource/img/load.png"))); // NOI18N
controlBar.setLayout(new java.awt.GridBagLayout());
commitButton.setIcon(resources.getIcon("save_objekt.gif"));
commitButton.setToolTipText(org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.commitButton.tooltip")); // NOI18N
commitButton.setActionCommand("commit");
commitButton.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
commitButton.setContentAreaFilled(false);
commitButton.setEnabled(false);
commitButton.setFocusPainted(false);
commitButton.setMaximumSize(new java.awt.Dimension(16, 16));
commitButton.setMinimumSize(new java.awt.Dimension(16, 16));
commitButton.setPreferredSize(new java.awt.Dimension(16, 16));
commitButton.setRolloverIcon(resources.getIcon("save_objekt.gif"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 4);
controlBar.add(commitButton, gridBagConstraints);
cancelButton.setIcon(resources.getIcon("zurueck_objekt.gif"));
cancelButton.setToolTipText(org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.cancelButton.tooltip")); // NOI18N
cancelButton.setActionCommand("cancel");
cancelButton.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
cancelButton.setContentAreaFilled(false);
cancelButton.setEnabled(false);
cancelButton.setFocusPainted(false);
cancelButton.setMaximumSize(new java.awt.Dimension(16, 16));
cancelButton.setMinimumSize(new java.awt.Dimension(16, 16));
cancelButton.setPreferredSize(new java.awt.Dimension(16, 16));
cancelButton.setRolloverIcon(resources.getIcon("zurueck_objekt.gif"));
controlBar.add(cancelButton, new java.awt.GridBagConstraints());
copyButton.setIcon(resources.getIcon("document-copy.png"));
copyButton.setToolTipText(org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.copyButton.tooltip")); // NOI18N
copyButton.setActionCommand("cancel");
copyButton.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
copyButton.setContentAreaFilled(false);
copyButton.setEnabled(false);
copyButton.setFocusPainted(false);
copyButton.setMaximumSize(new java.awt.Dimension(16, 16));
copyButton.setMinimumSize(new java.awt.Dimension(16, 16));
copyButton.setPreferredSize(new java.awt.Dimension(16, 16));
copyButton.setRolloverIcon(resources.getIcon("document-copy.png"));
copyButton.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
copyButtonActionPerformed(evt);
}
});
controlBar.add(copyButton, new java.awt.GridBagConstraints());
pasteButton.setIcon(resources.getIcon("clipboard-paste.png"));
pasteButton.setToolTipText(org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.pasteButton.tooltip")); // NOI18N
pasteButton.setActionCommand("paste");
pasteButton.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
pasteButton.setContentAreaFilled(false);
pasteButton.setEnabled(false);
pasteButton.setFocusPainted(false);
pasteButton.setMaximumSize(new java.awt.Dimension(16, 16));
pasteButton.setMinimumSize(new java.awt.Dimension(16, 16));
pasteButton.setPreferredSize(new java.awt.Dimension(16, 16));
pasteButton.setRolloverIcon(resources.getIcon("clipboard-paste.png"));
pasteButton.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
pasteButtonActionPerformed(evt);
}
});
controlBar.add(pasteButton, new java.awt.GridBagConstraints());
add(controlBar, java.awt.BorderLayout.NORTH);
switchPanel.setLayout(new java.awt.BorderLayout());
switchPanel.add(scpEditor, java.awt.BorderLayout.CENTER);
panDebug.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
jButton1.setText(org.openide.util.NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.jButton1.text")); // NOI18N
jButton1.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
panDebug.add(jButton1);
switchPanel.add(panDebug, java.awt.BorderLayout.NORTH);
add(switchPanel, java.awt.BorderLayout.CENTER);
} // </editor-fold>//GEN-END:initComponents
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void jButton1ActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_jButton1ActionPerformed
if ((getTreeNode() != null) && (getTreeNode() instanceof ObjectTreeNode)) {
final MetaObject mo = ((ObjectTreeNode)getTreeNode()).getMetaObject();
log.fatal("Current MetaObject:" + mo.getDebugString()); // NOI18N
EditorBeanInitializerStore.getInstance()
.registerInitializer(mo.getMetaClass(), new DefaultBeanInitializer(mo.getBean()));
}
} //GEN-LAST:event_jButton1ActionPerformed
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void copyButtonActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_copyButtonActionPerformed
if (currentBeanStore != null) {
final CidsBean bean = currentBeanStore.getCidsBean();
final boolean isNewBean = bean.getMetaObject().getStatus() == MetaObject.NEW;
if (currentBeanStore instanceof BeanInitializerProvider) {
final BeanInitializerProvider beanInitProvider = (BeanInitializerProvider)currentBeanStore;
currentInitializer = beanInitProvider.getBeanInitializer();
if (currentInitializer != null) {
EditorBeanInitializerStore.getInstance()
.registerInitializer(bean.getMetaObject().getMetaClass(), currentInitializer);
} else {
log.error("BeanInitializerProvider delivers null as initializer."); ////NOI18N
}
} else {
currentInitializer = new DefaultBeanInitializer(bean);
EditorBeanInitializerStore.getInstance()
.registerInitializer(bean.getMetaObject().getMetaClass(), currentInitializer);
}
// enable editor attribute paste only for new MOs and initializers which implement the
// BeanInitializerForcePaste interface
pasteButton.setEnabled((currentInitializer != null)
&& (isNewBean || (currentInitializer instanceof BeanInitializerForcePaste)));
}
} //GEN-LAST:event_copyButtonActionPerformed
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void pasteButtonActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_pasteButtonActionPerformed
if (currentBeanStore != null) {
final CidsBean bean = currentBeanStore.getCidsBean();
final int res = JOptionPane.showConfirmDialog(StaticSwingTools.getFirstParentFrame(this),
NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.pasteButtonActionPerformed.message"),
NbBundle.getMessage(
NavigatorAttributeEditorGui.class,
"NavigatorAttributeEditorGui.pasteButtonActionPerformed.title"),
JOptionPane.OK_CANCEL_OPTION);
if (res == JOptionPane.OK_OPTION) {
try {
EditorBeanInitializerStore.getInstance().initialize(bean);
} catch (Exception ex) {
log.error(ex, ex);
}
}
}
} //GEN-LAST:event_pasteButtonActionPerformed
}