You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2010/10/12 19:47:57 UTC
svn commit: r1021859 - in /openjpa/tools/trunk/openjpa-tools/src/main:
java/org/apache/openjpa/swing/ java/org/apache/openjpa/swing/layout/
java/org/apache/openjpa/tools/metamodel/
resources/org/apache/openjpa/tools/metamodel/
Author: ppoddar
Date: Tue Oct 12 17:47:57 2010
New Revision: 1021859
URL: http://svn.apache.org/viewvc?rev=1021859&view=rev
Log:
Add tabular display, close/refresh actions
Modified:
openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/swing/ErrorDialog.java
openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/swing/layout/FRLayoutManager.java
openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/tools/metamodel/MetamodelBrowser.java
openjpa/tools/trunk/openjpa-tools/src/main/resources/org/apache/openjpa/tools/metamodel/localizer.properties
Modified: openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/swing/ErrorDialog.java
URL: http://svn.apache.org/viewvc/openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/swing/ErrorDialog.java?rev=1021859&r1=1021858&r2=1021859&view=diff
==============================================================================
--- openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/swing/ErrorDialog.java (original)
+++ openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/swing/ErrorDialog.java Tue Oct 12 17:47:57 2010
@@ -79,6 +79,7 @@ public final class ErrorDialog extends J
*/
public ErrorDialog(JComponent owner, Icon icon, Throwable t) {
super();
+ t.printStackTrace();
setTitle(t.getClass().getName());
setModal(true);
if (icon != null && icon instanceof ImageIcon)
Modified: openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/swing/layout/FRLayoutManager.java
URL: http://svn.apache.org/viewvc/openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/swing/layout/FRLayoutManager.java?rev=1021859&r1=1021858&r2=1021859&view=diff
==============================================================================
--- openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/swing/layout/FRLayoutManager.java (original)
+++ openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/swing/layout/FRLayoutManager.java Tue Oct 12 17:47:57 2010
@@ -127,7 +127,7 @@ public class FRLayoutManager implements
private Map<Component,Rectangle2D> initializeBoundsRandom(Container parent) {
Set<Component> components = layout.keySet();
- size = parent.getSize();
+ size = parent.getPreferredSize();
Insets insets = parent.getInsets();
info("initializeBoundsRandom: " + toString("Parent Area ", size) + " No of components "
+ components.size() + " Layout components " + layout.size());
@@ -168,7 +168,7 @@ public class FRLayoutManager implements
private Map<Component,Rectangle2D> initializeBoundsGrid(Container parent) {
Set<Component> components = layout.keySet();
- size = parent.getSize();
+ size = parent.getPreferredSize();
Insets insets = parent.getInsets();
info("initializeBoundsGrid:" + toString("Parent Area ", size));
Map<Component,Rectangle2D> bounds = new HashMap<Component,Rectangle2D>();
@@ -346,8 +346,8 @@ public class FRLayoutManager implements
public void layoutContainer(Container parent) {
// find(parent);
if (isInitialized()) {
- resize(parent.getSize(),size, parent.getInsets());
- size = new Dimension(parent.getSize());
+ resize(parent.getPreferredSize(),size, parent.getInsets());
+ size = new Dimension(parent.getPreferredSize());
_dirty = false;
return;
}
@@ -359,7 +359,7 @@ public class FRLayoutManager implements
double[] quality = layoutQuality(bounds);
info("Initial layout quality " + quality[0] + " Overlap = " + quality[1] +
" average edge length " + quality[3] + " of " + quality[2] + " edges");
- coefficient = Math.sqrt(area(parent.getSize())/layout.size());
+ coefficient = Math.sqrt(area(parent.getPreferredSize())/layout.size());
boolean done = false;
double temperature = 100;//area(parent.getSize())/Math.sqrt(components.length);
int max = 20;
Modified: openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/tools/metamodel/MetamodelBrowser.java
URL: http://svn.apache.org/viewvc/openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/tools/metamodel/MetamodelBrowser.java?rev=1021859&r1=1021858&r2=1021859&view=diff
==============================================================================
--- openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/tools/metamodel/MetamodelBrowser.java (original)
+++ openjpa/tools/trunk/openjpa-tools/src/main/java/org/apache/openjpa/tools/metamodel/MetamodelBrowser.java Tue Oct 12 17:47:57 2010
@@ -14,6 +14,7 @@
package org.apache.openjpa.tools.metamodel;
import java.awt.BorderLayout;
+import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
@@ -27,23 +28,24 @@ import java.util.concurrent.ExecutionExc
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.metamodel.Attribute;
-import javax.persistence.metamodel.ManagedType;
+import javax.persistence.metamodel.Metamodel;
import javax.swing.AbstractAction;
import javax.swing.Action;
-import javax.swing.JButton;
+import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
-import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
import javax.swing.JToolBar;
import javax.swing.SwingWorker;
+import org.apache.openjpa.conf.OpenJPAVersion;
import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.swing.ErrorDialog;
import org.apache.openjpa.swing.Images;
import org.apache.openjpa.swing.SwingHelper;
-import org.apache.openjpa.swing.graph.GraphPanel;
import org.apache.openjpa.swing.print.PrintableDelegateComponent;
/**
@@ -56,21 +58,45 @@ import org.apache.openjpa.swing.print.Pr
@SuppressWarnings("serial")
public class MetamodelBrowser extends JFrame implements Runnable {
private JMenuBar menubar;
- private JScrollPane scrollableView;
- private GraphPanel<ManagedType<?>> graphView;
+ private JToolBar toolbar;
+ private JTabbedPane tabs;
- private OpenUnitAction openUnitAction;
+ private OpenUnitAction openUnitAction;
+ private CloseUnitAction closeUnitAction;
private RefreshUnitAction refreshUnitAction;
private ExitAction exitAction;
private PrintAction printAction;
private MaskAction maskEdgeAction;
private HelpAction helpAction;
private AboutAction aboutAction;
+ private Dimension VIEW_AREA = new Dimension(1500,1000);
+
+ private static String _about;
+ private static Localizer _loc;
+
+ /**
+ * Statically validates that OpenJPA runtime is available.
+ */
+ static {
+ try {
+ _loc = Localizer.forPackage(MetamodelBrowser.class);
+ _about = "OpenJPA MetaModel Browser\r\n" +
+ "Running on OpenJPA version " +
+ OpenJPAVersion.MAJOR_RELEASE+"." +OpenJPAVersion.MINOR_RELEASE;
+ } catch (Throwable e) {
+ JOptionPane.showMessageDialog(null, "Initialization Error\r\n" +
+ "Ensure OpenJPA libraries are available in classpath", "Classpath Problem",
+ JOptionPane.ERROR_MESSAGE);
+ System.exit(1);
+ }
+ }
- private static final Localizer _loc = Localizer.forPackage(MetamodelBrowser.class);
/**
- * @param args
+ * Main entry point initializes a look and feel and triggers the Swing console in
+ * a event dispatcher thread.
+ *
+ * @param args no argument
*/
public static void main(String[] args) throws Exception {
MetamodelUIManager.setLookAndFeel();
@@ -83,28 +109,30 @@ public class MetamodelBrowser extends JF
public void run() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ Container content = getContentPane();
+ content.setLayout(new BorderLayout());
+
createActions();
menubar = createMenuBar();
- graphView = createViewingArea();
- JToolBar toolbar = createToolbar();
-
- Container content = getContentPane();
- content.setLayout(new BorderLayout());
+ toolbar = createToolbar();
+ tabs = createViewingArea();
setJMenuBar(menubar);
- scrollableView = new JScrollPane(graphView);
- scrollableView.setPreferredSize(new Dimension(1000, 800));
content.add(toolbar, BorderLayout.NORTH);
- content.add(scrollableView, BorderLayout.CENTER);
+ content.add(tabs, BorderLayout.CENTER);
pack();
SwingHelper.position(this, null);
setVisible(true);
}
+ /**
+ * Create action elements.
+ */
void createActions() {
openUnitAction = new OpenUnitAction("action.open");
+ closeUnitAction = new CloseUnitAction("action.close");
refreshUnitAction = new RefreshUnitAction("action.refresh");
printAction = new PrintAction("action.print");
exitAction = new ExitAction("action.exit");
@@ -115,10 +143,14 @@ public class MetamodelBrowser extends JF
aboutAction = new AboutAction("action.about");
}
+ /**
+ * Create toolbar buttons.
+ */
JToolBar createToolbar() {
JToolBar bar = new JToolBar();
bar.setFloatable(false);
bar.add(openUnitAction);
+ bar.add(closeUnitAction);
bar.add(refreshUnitAction);
bar.add(printAction);
bar.addSeparator();
@@ -126,12 +158,16 @@ public class MetamodelBrowser extends JF
return bar;
}
+ /**
+ * Creates the menu.
+ */
JMenuBar createMenuBar() {
JMenuBar bar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
bar.add(fileMenu);
fileMenu.add(openUnitAction);
+ fileMenu.add(closeUnitAction);
fileMenu.add(refreshUnitAction);
fileMenu.addSeparator();
fileMenu.add(printAction);
@@ -150,13 +186,101 @@ public class MetamodelBrowser extends JF
return bar;
}
+
+ /**
+ * Creates a tabbed pane as the main viewing area.
+ */
+ JTabbedPane createViewingArea() {
+ JTabbedPane tabs = new JTabbedPane();
+ tabs.setPreferredSize(VIEW_AREA);
+ return tabs;
+ }
+
+ /**
+ * Adds a scrollable view in a new tab.
+ */
+ void addTab(String label, JComponent view) {
+ JScrollPane scroll = new JScrollPane(view);
+ scroll.setPreferredSize(VIEW_AREA);
+ scroll.setName(label);
+ tabs.add(label, scroll);
+ tabs.setSelectedComponent(scroll);
+ }
+
+ void removeTab() {
+ Component c = tabs.getSelectedComponent();
+ if (c != null)
+ tabs.remove(c);
+ }
+
+ void replaceTab(JComponent view) {
+ JScrollPane scroll = (JScrollPane)tabs.getSelectedComponent();
+ scroll.getViewport().setView(view);
+ }
- GraphPanel<ManagedType<?>> createViewingArea() {
- GraphPanel<ManagedType<?>> pane = new GraphPanel<ManagedType<?>>();
- return pane;
+
+ /**
+ * Show a modal error dialog.
+ */
+ void error(Throwable t) {
+ new ErrorDialog(t).setVisible(true);
+ }
+
+ /**
+ * Show a modal warning message.
+ * @param title dialog title
+ * @param key localized message key
+ */
+ void warning(String title, String key) {
+ JOptionPane.showMessageDialog(this, _loc.get(key).toString(), title, JOptionPane.WARNING_MESSAGE);
+ }
+
+ /**
+ * Gets the current visible component on the main viewing area.
+ */
+ JComponent getCurrentView() {
+ return (JComponent)((JScrollPane)tabs.getSelectedComponent()).getViewport().getView();
}
+ String getCurrentUnit() {
+ Component c = tabs.getSelectedComponent();
+ return c.getName();
+ }
+ /**
+ * Create a Persistence Unit of given name.
+ * The unit is constructed such that the meta-model is accessible without an active
+ * database connection.
+ *
+ * @param unitName is the name of the persistence unit.
+ */
+ EntityManagerFactory createUnit(final String unitName) {
+ final SwingWorker<EntityManagerFactory, Void> task = new SwingWorker<EntityManagerFactory, Void>() {
+ @Override
+ protected EntityManagerFactory doInBackground() throws Exception {
+ Map<String,Object> props = new HashMap<String, Object>();
+ props.put("openjpa.Id", unitName);
+ props.put("openjpa.BrokerFactory", InMemoryBrokerFactory.class.getName());
+ return Persistence.createEntityManagerFactory(unitName, props);
+ }
+ };
+ task.execute();
+ try {
+ return task.get();
+ } catch (ExecutionException ex) {
+ error(ex.getCause());
+ } catch (InterruptedException ie) {
+
+ }
+ return null;
+ }
+
+ /**
+ * Abstract root of all actions.
+ * The action qualifiers such as label, icon or tool tips are sourced from
+ * standard OpenJPA's localization mechanics.
+ *
+ */
public abstract class BaseAction extends AbstractAction {
public BaseAction(String key) {
super();
@@ -167,7 +291,7 @@ public class MetamodelBrowser extends JF
putValue(Action.LARGE_ICON_KEY, Images.getIcon(_loc.get(key + ".icon").toString()));
}
}
-
+
/**
* Opens a new persistence domain model to be displayed.
*
@@ -178,67 +302,74 @@ public class MetamodelBrowser extends JF
}
public void actionPerformed(ActionEvent e) {
- final String unitName = JOptionPane.showInputDialog(MetamodelBrowser.this, "Persistence Unit",
- "Enter Persistence Unit Name", JOptionPane.PLAIN_MESSAGE);
-
- final SwingWorker<EntityManagerFactory, Void> task = new SwingWorker<EntityManagerFactory, Void>() {
- @Override
- protected EntityManagerFactory doInBackground() throws Exception {
- firePropertyChange("message", "", "Opening persistence unit " + unitName);
- Map<String,Object> props = new HashMap<String, Object>();
- props.put("openjpa.BrokerFactory", "org.apache.openjpa.tools.metamodel.InMemoryBrokerFactory");
- EntityManagerFactory emf = Persistence.createEntityManagerFactory(unitName, props);
- return emf;
- }
- };
- JProgressBar progressBar = new JProgressBar();
- JButton cancel = new JButton(new AbstractAction() {
- public void actionPerformed(ActionEvent e) {
- task.cancel(true);
- }
- });
- cancel.setText("Abort");
- progressBar.add(cancel);
- progressBar.setIndeterminate(true);
- progressBar.setVisible(true);
- task.execute();
- try {
- EntityManagerFactory emf = task.get();
- if (task.isCancelled()) {
- return;
- }
- MetamodelView newView = new MetamodelView(emf.getMetamodel());
- graphView = newView;
- scrollableView.setViewportView(graphView);
- repaint();
- } catch (ExecutionException ex) {
- new org.apache.openjpa.swing.ErrorDialog(ex.getCause()).setVisible(true);
- } catch (InterruptedException ie) {
-
+ final String unitName = JOptionPane.showInputDialog(MetamodelBrowser.this,
+ "Persistence Unit", "Enter Persistence Unit Name", JOptionPane.QUESTION_MESSAGE);
+ if (unitName == null) {
+ return;
+ }
+ if (unitName.trim().length() == 0) {
+ warning("Must specify Unit Name", "no-unit");
+ return;
}
-
+ EntityManagerFactory emf = createUnit(unitName);
+ if (emf == null) {
+ return;
+ }
+ Metamodel mm = emf.getMetamodel();
+ if (mm.getManagedTypes().isEmpty()) {
+ warning("Empty Model", "empty-model");
+ return;
+ }
+ MetamodelView newView = new MetamodelView(mm);
+ addTab(unitName, newView);
+ repaint();
}
-
}
- public class CloseUnitAction extends BaseAction {
- public CloseUnitAction(String name) {
+ /**
+ * Reloads the current unit.
+ *
+ */
+ public class RefreshUnitAction extends BaseAction {
+ public RefreshUnitAction(String name) {
super(name);
}
public void actionPerformed(ActionEvent e) {
+ String unitName = getCurrentUnit();
+ EntityManagerFactory emf = createUnit(unitName);
+ if (emf == null) {
+ return;
+ }
+ Metamodel mm = emf.getMetamodel();
+ if (mm.getManagedTypes().isEmpty()) {
+ warning("Empty Model", "empty-model");
+ return;
+ }
+ MetamodelView newView = new MetamodelView(mm);
+ replaceTab(newView);
+ repaint();
}
}
- public class SaveUnitAction extends BaseAction {
- public SaveUnitAction(String name) {
+ /**
+ * Closes the current unit.
+ *
+ */
+ public class CloseUnitAction extends BaseAction {
+ public CloseUnitAction(String name) {
super(name);
}
public void actionPerformed(ActionEvent e) {
+ removeTab();
}
}
+ /**
+ * Prints the current view.
+ *
+ */
public class PrintAction extends BaseAction {
public PrintAction(String name) {
super(name);
@@ -246,8 +377,8 @@ public class MetamodelBrowser extends JF
public void actionPerformed(ActionEvent e) {
PrinterJob printerJob = PrinterJob.getPrinterJob();
- PrintableDelegateComponent printable = new PrintableDelegateComponent(MetamodelBrowser.this.graphView, printerJob
- .getPageFormat(null));
+ PrintableDelegateComponent printable = new PrintableDelegateComponent(getCurrentView(),
+ printerJob.getPageFormat(null));
printable.setScale(0.5);
printerJob.setPrintable(printable);
boolean print = printerJob.printDialog();
@@ -261,24 +392,26 @@ public class MetamodelBrowser extends JF
}
}
- public class RefreshUnitAction extends BaseAction {
- public RefreshUnitAction(String name) {
- super(name);
- }
-
- public void actionPerformed(ActionEvent e) {
- }
- }
-
+ /**
+ * Exits the application.
+ *
+ */
public class ExitAction extends BaseAction {
public ExitAction(String name) {
super(name);
}
public void actionPerformed(ActionEvent e) {
+ System.exit(0);
}
}
+ /**
+ * Masks selected edges.
+ * <br>
+ * <B>not implemented</B>
+ *
+ */
public class MaskAction extends BaseAction {
final Class<?> maskType;
@@ -288,25 +421,36 @@ public class MetamodelBrowser extends JF
}
public void actionPerformed(ActionEvent e) {
+ JOptionPane.showMessageDialog(MetamodelBrowser.this, "Not Implemented");
}
}
+ /**
+ * Shows help.
+ * <br>
+ * <B>not implemented</B>
+ *
+ */
public class HelpAction extends BaseAction {
public HelpAction(String name) {
super(name);
}
public void actionPerformed(ActionEvent e) {
+ JOptionPane.showMessageDialog(MetamodelBrowser.this, "Not Implemented");
}
}
+ /**
+ * Shows typical about dialog box.
+ */
public class AboutAction extends BaseAction {
public AboutAction(String name) {
super(name);
}
public void actionPerformed(ActionEvent e) {
- JOptionPane.showMessageDialog(MetamodelBrowser.this, "OpenJPA MetaModel Browser");
+ JOptionPane.showMessageDialog(MetamodelBrowser.this, _about);
}
}
}
Modified: openjpa/tools/trunk/openjpa-tools/src/main/resources/org/apache/openjpa/tools/metamodel/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/tools/trunk/openjpa-tools/src/main/resources/org/apache/openjpa/tools/metamodel/localizer.properties?rev=1021859&r1=1021858&r2=1021859&view=diff
==============================================================================
--- openjpa/tools/trunk/openjpa-tools/src/main/resources/org/apache/openjpa/tools/metamodel/localizer.properties (original)
+++ openjpa/tools/trunk/openjpa-tools/src/main/resources/org/apache/openjpa/tools/metamodel/localizer.properties Tue Oct 12 17:47:57 2010
@@ -32,10 +32,15 @@ icon.error: images/error.gif
# <action>.icon : The resource path for the icon for toolbar or button
# -----------------------------------------------------------------------------
action.open.name:Open...
-action.open.tooltip: "Open a Persistence Unit"
-action.open.help: "Open a Persistence Unit"
+action.open.tooltip: Open a Persistence Unit
+action.open.help: Open a Persistence Unit
action.open.icon:images/open.png
+action.close.name:Close
+action.close.tooltip: Close Persistence Unit
+action.close.help: Close Persistence Unit
+action.close.icon:images/cancel.png
+
action.print.name:Print
action.print.icon:images/print.gif
action.about.name:About