/* Copyright 2002-2005 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ojb.tools.mapping.reversedb2.gui;
import org.apache.ojb.broker.metadata.DescriptorRepository;
import org.apache.ojb.tools.mapping.reversedb2.actions.ActionSaveAsOJBRepository;
import org.apache.ojb.tools.mapping.reversedb2.dnd2.DragHelper;
import org.apache.ojb.tools.mapping.reversedb2.dnd2.DropTargetHelper;
import org.apache.ojb.tools.mapping.reversedb2.ojbmetatreemodel.OjbMetaTreeNodesDragWorker;
import org.apache.ojb.tools.mapping.reversedb2.ojbmetatreemodel.ReverseDbNodesToOjbMetaDropWorker;
import org.apache.ojb.tools.mapping.reversedb2.propertyEditors.PropertyEditor;
import org.apache.ojb.tools.mapping.reversedb2.propertyEditors.PropertyEditorTarget;
/**
*
* @author Administrator
*/
public class JIFrmOJBRepository extends javax.swing.JInternalFrame {
private javax.swing.tree.DefaultMutableTreeNode rootNode =
new javax.swing.tree.DefaultMutableTreeNode("Root");
private java.util.HashMap hmCachedPopupMenus = new java.util.HashMap();
private java.util.HashMap hmPropertyEditors = new java.util.HashMap();
private DescriptorRepository aRepository;
/** Creates new form JIFrmOJBRepository */
public JIFrmOJBRepository(DescriptorRepository repository)
{
this.aRepository = repository;
initComponents();
jTree1.setModel(new org.apache.ojb.tools.mapping.reversedb2.ojbmetatreemodel.OjbMetaDataTreeModel(repository));
DropTargetHelper helper = new DropTargetHelper();
helper.registerDropPasteWorker (new ReverseDbNodesToOjbMetaDropWorker());
jTree1.setDropTarget(helper.getDropTarget ());
/* getGlassPane().setDropTarget(helper.getDropTarget());
this.setDropTarget(helper.getDropTarget());
*/
// this.jScrollPane1.setDropTarget(helper.getDropTarget());
// this.jSplitPane1.setDropTarget(helper.getDropTarget());
new DragHelper(new OjbMetaTreeNodesDragWorker()).registerComponent(jTree1);
setJMenuBar(this.jMenuBar1);
pack();
}
/** 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.
*/
private void initComponents()//GEN-BEGIN:initComponents
{
jMenuBar1 = new javax.swing.JMenuBar();
mnuFile = new javax.swing.JMenu();
mnuFileSave = new javax.swing.JMenuItem();
jSplitPane1 = new javax.swing.JSplitPane();
jScrollPane1 = new javax.swing.JScrollPane();
jTree1 = new javax.swing.JTree();
jScrlProperty = new javax.swing.JScrollPane();
mnuFile.setMnemonic('F');
mnuFile.setText("File");
mnuFileSave.setAction(new ActionSaveAsOJBRepository(aRepository));
mnuFile.add(mnuFileSave);
jMenuBar1.add(mnuFile);
setClosable(true);
setIconifiable(true);
setMaximizable(true);
setResizable(true);
jTree1.addMouseListener(new java.awt.event.MouseAdapter()
{
public void mousePressed(java.awt.event.MouseEvent evt)
{
jTree1MousePressed(evt);
}
public void mouseReleased(java.awt.event.MouseEvent evt)
{
jTree1MousePressed(evt);
}
});
jTree1.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener()
{
public void valueChanged(javax.swing.event.TreeSelectionEvent evt)
{
jTree1ValueChanged(evt);
}
});
jScrollPane1.setViewportView(jTree1);
jSplitPane1.setLeftComponent(jScrollPane1);
jSplitPane1.setRightComponent(jScrlProperty);
getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER);
pack();
}//GEN-END:initComponents
private void jTree1ValueChanged(javax.swing.event.TreeSelectionEvent evt)//GEN-FIRST:event_jTree1ValueChanged
{//GEN-HEADEREND:event_jTree1ValueChanged
// Add your handling code here:
Object selectedObject = evt.getPath().getLastPathComponent();
if (selectedObject instanceof PropertyEditorTarget)
{
PropertyEditorTarget p = (PropertyEditorTarget)selectedObject;
if (p.getPropertyEditorClass() != null)
{
try
{
if(!this.hmPropertyEditors.containsKey(p.getPropertyEditorClass()))
{
this.hmPropertyEditors.put(p.getPropertyEditorClass(), p.getPropertyEditorClass().newInstance());
}
PropertyEditor propertyEditor = (PropertyEditor)hmPropertyEditors.get(p.getPropertyEditorClass());
this.jScrlProperty.setViewportView(propertyEditor);
propertyEditor.setEditorTarget(p);
}
catch (Throwable t)
{
t.printStackTrace();
this.jScrlProperty.setViewportView(null);
}
}
else
{
this.jScrlProperty.setViewportView(null);
}
}
else
{
this.jScrlProperty.setViewportView(null);
}
}//GEN-LAST:event_jTree1ValueChanged
private javax.swing.JPopupMenu createPopupMenuForActionTarget(org.apache.ojb.tools.mapping.reversedb2.ActionTarget at)
{
javax.swing.JPopupMenu createdMenu = new javax.swing.JPopupMenu();
java.util.Iterator it = at.getActions();
while (it.hasNext())
{
createdMenu.add((javax.swing.Action)it.next());
}
return createdMenu;
}
private void jTree1MousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_jTree1MousePressed
{//GEN-HEADEREND:event_jTree1MousePressed
// Add your handling code here:
if (evt.isPopupTrigger())
{
javax.swing.tree.TreePath selPath = jTree1.getPathForLocation(evt.getX(), evt.getY());
if (selPath != null)
{
if (selPath.getLastPathComponent() instanceof org.apache.ojb.tools.mapping.reversedb2.ActionTarget)
{
org.apache.ojb.tools.mapping.reversedb2.ActionTarget at =
(org.apache.ojb.tools.mapping.reversedb2.ActionTarget)selPath.getLastPathComponent();
javax.swing.JPopupMenu popupMenu = null;
if (at.actionListStatic())
{
popupMenu = (javax.swing.JPopupMenu) this.hmCachedPopupMenus.get(at.getClass());
if (popupMenu == null)
{
popupMenu = createPopupMenuForActionTarget(at);
this.hmCachedPopupMenus.put(at.getClass(), popupMenu);
}
}
else if (at.actionListCachable())
{
popupMenu = (javax.swing.JPopupMenu) this.hmCachedPopupMenus.get(at);
if (popupMenu == null)
{
popupMenu = createPopupMenuForActionTarget(at);
this.hmCachedPopupMenus.put(at, popupMenu);
}
}
else
{
popupMenu = createPopupMenuForActionTarget(at);
}
jTree1.setSelectionPath(selPath);
popupMenu.show(jTree1, evt.getX(), evt.getY());
int posY = evt.getY();
while ((popupMenu.getLocationOnScreen().y +
popupMenu.getSize().height) >
getToolkit().getScreenSize().height)
{
posY--;
// popupMenu.hide();
popupMenu.show(jTree1, evt.getX(), posY);
}
}
}
}
}//GEN-LAST:event_jTree1MousePressed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JMenuItem mnuFileSave;
private javax.swing.JSplitPane jSplitPane1;
private javax.swing.JScrollPane jScrlProperty;
private javax.swing.JTree jTree1;
private javax.swing.JMenu mnuFile;
private javax.swing.JMenuBar jMenuBar1;
// End of variables declaration//GEN-END:variables
}