mirror of https://github.com/apache/openjpa.git
Remove Java2HTML dependency. Use FishEye directly for Source code browsing
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@946850 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e8b0679ed1
commit
e835d87c06
|
@ -74,15 +74,6 @@
|
|||
</fileset>
|
||||
</path>
|
||||
|
||||
<path id="java2html.classpath"
|
||||
description="Classpath for generating HTML version of source code using Java2HTML library">
|
||||
<pathelement location="${rsrc.dir}" />
|
||||
<fileset dir="${java2html.lib}">
|
||||
<include name="*.jar" />
|
||||
</fileset>
|
||||
</path>
|
||||
|
||||
|
||||
<fileset id="canonical.metamodel" dir="${src.dir}"
|
||||
description="Set of *.java files generated for static, cannonical domain model">
|
||||
<include name="**/*_.java"/>
|
||||
|
@ -113,11 +104,6 @@
|
|||
The directory for OpenJPA libraries can not be located at ${openjpa.lib}.
|
||||
Make sure openjpa.lib property value is correct in build.properties file.
|
||||
</fail>
|
||||
<available file="${java2html.lib}" property="java2html.exists"/>
|
||||
<fail unless="java2html.exists">*** Error:
|
||||
The directory for Java2HTML libraries can not be located at ${java2html.lib}.
|
||||
Make sure java2html.lib property value is correct in build.properties file.
|
||||
</fail>
|
||||
<condition property="build.mode.is.valid">
|
||||
<or>
|
||||
<equals arg1="${build.mode}" arg2="jse" casesensitive="false" trim="true"/>
|
||||
|
@ -171,8 +157,7 @@
|
|||
clean,
|
||||
generate-canonical-model,
|
||||
compile,
|
||||
enhance,
|
||||
generate-html-source">
|
||||
enhance">
|
||||
<subant antfile="build.${build.mode}.xml"
|
||||
target="package"
|
||||
inheritrefs="true"
|
||||
|
@ -180,29 +165,4 @@
|
|||
buildpath="${basedir}"/>
|
||||
</target>
|
||||
|
||||
<target name="generate-html-source" if="java2html.exists"
|
||||
description="Generates HTML Source Code using Java2HTML utility">
|
||||
<delete dir="${generated.html.dir}" failonerror="false"/>
|
||||
<mkdir dir="${generated.html.dir}"/>
|
||||
<java classname="de.java2html.Java2Html" fork="true">
|
||||
<classpath refid="java2html.classpath"/>
|
||||
<arg value="-srcdir"/>
|
||||
<arg value="${src.dir}"/>
|
||||
<arg value="-targetdir"/>
|
||||
<arg value="${generated.html.dir}"/>
|
||||
<arg value="-style"/>
|
||||
<arg value="Eclipse"/>
|
||||
</java>
|
||||
<java classname="de.java2html.Java2Html" fork="true">
|
||||
<classpath refid="java2html.classpath"/>
|
||||
<arg value="-srcdir"/>
|
||||
<arg value="${generated.src.dir}"/>
|
||||
<arg value="-targetdir"/>
|
||||
<arg value="${generated.html.dir}"/>
|
||||
<arg value="-style"/>
|
||||
<arg value="Eclipse"/>
|
||||
</java>
|
||||
<replace dir="${generated.html.dir}" token="10pt" value="14pt">
|
||||
</replace>
|
||||
</target>
|
||||
</project>
|
||||
|
|
|
@ -131,9 +131,6 @@ font-size:16px;
|
|||
<br>
|
||||
In JEE mode, OpenJPA library and JDBC drivers are configured in JEE server and hence variables in
|
||||
this file are irrelevant.
|
||||
<LI>Edit <A HREF="load.properties"><code>load.properties</code></A> to specify load parameters such as number of
|
||||
Books etc. OpenBooks uses this data to populate a database with some sample data.
|
||||
This example file has some typical values. If you are satisfied with it, you can leave them as it is.
|
||||
</OL>
|
||||
|
||||
|
||||
|
@ -159,11 +156,9 @@ font-size:16px;
|
|||
<h2><A name="Run">Run OpenBooks</A></h2>
|
||||
If you have built OpenBooks for JSE, then go to the <code>target/openbooks</code> directory.
|
||||
<br>
|
||||
Invoke the Ant script to populate the database.<br>
|
||||
<code>$ ant -f run.xml load</code>
|
||||
<br>
|
||||
Then invoke the Ant script to run OpenBooks<br>
|
||||
<code>$ ant -f run.xml run</code>
|
||||
Invoke the Ant script to run OpenBooks<br>
|
||||
<code>$ ant -f run.xml</code>
|
||||
|
||||
<hr>
|
||||
If you have build OpenBooks for JEE, a Web Application Archive <code>openbooks.war</code> will be
|
||||
created in <code>target/openbooks</code> directory. You need to deploy <code>openbooks.war</code>
|
||||
|
@ -172,5 +167,17 @@ font-size:16px;
|
|||
<code>http://<app server host>:<port>/openbooks/</code>
|
||||
<br>
|
||||
to access OpenBooks as an web application.
|
||||
<hr>
|
||||
|
||||
<h2><A name="Seed">Populate OpenBooks Database</A></h2>
|
||||
OpenBooks checks for existing data at first connection to the database.
|
||||
If the database is empty, the schema is defined and populated with initial data.
|
||||
However, you can explicitly populate the database in JSE build.
|
||||
Edit <A HREF="load.properties"><code>load.properties</code></A>
|
||||
to specify load parameters such as number of Books etc. OpenBooks uses this data to populate a database
|
||||
with some sample data. This example file has some typical values. If you are satisfied with it,
|
||||
you can leave them as it is. Then invoke the Ant script<br>
|
||||
<code>$ ant -f run.xml load</code>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<!-- Ant script for running OpenBooks -->
|
||||
<!-- -->
|
||||
<!-- ====================================================================== -->
|
||||
<project name="OpenBooks" default="info">
|
||||
<project name="OpenBooks" default="run">
|
||||
<property file="run.properties"/>
|
||||
<property name="jpa.provider" value="openjpa" />
|
||||
<property name="load.properties" value="load.properties" />
|
||||
|
@ -63,13 +63,5 @@
|
|||
<classpath refid="run.classpath" />
|
||||
</java>
|
||||
</target>
|
||||
|
||||
<target name="info" depends="check-env">
|
||||
<echo>
|
||||
Runs OpenBooks demo application.
|
||||
See index.html for instructions.
|
||||
</echo>
|
||||
</target>
|
||||
|
||||
</project>
|
||||
|
||||
|
|
|
@ -15,32 +15,25 @@ package jpa.tools.swing;
|
|||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.FlowLayout;
|
||||
import java.awt.Font;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.net.URLDecoder;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import javax.swing.Box;
|
||||
import javax.swing.DefaultComboBoxModel;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JEditorPane;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.text.html.HTMLDocument;
|
||||
import javax.swing.text.html.HTMLEditorKit;
|
||||
|
||||
|
||||
/**
|
||||
* A viewer for source code.
|
||||
* The input to this viewer is a set of *.html file names which may or may not have anchors.
|
||||
* The input to this viewer is a root URL and set of anchors.
|
||||
* The viewer shows the anchors in a combo-box and displays the
|
||||
* corresponding HTML in the main editor.
|
||||
*
|
||||
* @author Pinaki Poddar
|
||||
*
|
||||
|
@ -49,32 +42,28 @@ import javax.swing.text.html.HTMLEditorKit;
|
|||
public class SourceCodeViewer extends JPanel implements ActionListener {
|
||||
private final JEditorPane _editor;
|
||||
private final JComboBox _bookmarks;
|
||||
private Map<String, File> _files = new TreeMap<String, File>();
|
||||
private Map<String, String> _anchors;
|
||||
private String _root;
|
||||
|
||||
public SourceCodeViewer(String dir) {
|
||||
/**
|
||||
* Create a Source Code Viewer for a set of anchors.
|
||||
* @param root the root url
|
||||
* @param anchors the key is a visible text and value is the URL
|
||||
* relative to the root.
|
||||
*/
|
||||
public SourceCodeViewer(String root, Map<String,String> anchors) {
|
||||
super(true);
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
|
||||
_anchors = anchors;
|
||||
_root = root;
|
||||
_editor = new JEditorPane();
|
||||
_editor.setEditorKit(new HTMLEditorKit());
|
||||
_editor.setContentType("text/html");
|
||||
_editor.setFont(new Font("Courier New", Font.PLAIN, 16));
|
||||
_editor.setEditable(false);
|
||||
|
||||
File root = getFile(dir);
|
||||
if (root != null) {
|
||||
List<File> files = new FileScanner("html", true).scan(root);
|
||||
for (File f : files) {
|
||||
String fileName = f.getAbsolutePath();
|
||||
String key = fileName.substring(
|
||||
root.getAbsolutePath().length()+1,
|
||||
fileName.length()- "html".length()-1)
|
||||
.replace(File.separatorChar,'.');
|
||||
_files.put(key, f);
|
||||
}
|
||||
}
|
||||
|
||||
DefaultComboBoxModel model = new DefaultComboBoxModel();
|
||||
for (String key : _files.keySet()) {
|
||||
for (String key : anchors.keySet()) {
|
||||
model.addElement(key);
|
||||
}
|
||||
_bookmarks = new JComboBox(model);
|
||||
|
@ -86,73 +75,26 @@ public class SourceCodeViewer extends JPanel implements ActionListener {
|
|||
add(new JScrollPane(_editor), BorderLayout.CENTER);
|
||||
JPanel topPanel = new JPanel();
|
||||
((FlowLayout)topPanel.getLayout()).setAlignment(FlowLayout.LEADING);
|
||||
topPanel.add(new JLabel("Select File "));
|
||||
topPanel.add(new JLabel("Go to "));
|
||||
topPanel.add(_bookmarks);
|
||||
topPanel.add(Box.createHorizontalGlue());
|
||||
add(topPanel, BorderLayout.NORTH);
|
||||
|
||||
if (_anchors != null && !_anchors.isEmpty())
|
||||
showPage(_anchors.keySet().iterator().next());
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
String name = (String)_bookmarks.getSelectedItem();
|
||||
String anchor = (String)_bookmarks.getSelectedItem();
|
||||
showPage(anchor);
|
||||
}
|
||||
|
||||
private void showPage(String anchor) {
|
||||
try {
|
||||
HTMLDocument doc = new HTMLDocument();
|
||||
_editor.read(new FileInputStream(_files.get(name)), doc);
|
||||
_editor.setPage(_root + _anchors.get(anchor));
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the given string for a matching file. The string is first
|
||||
* tested to see if it is an existing file path. If it does not
|
||||
* represent an existing file, it is checked as a resource name of a
|
||||
* file.
|
||||
* @param name the file path or resource name
|
||||
*/
|
||||
private File getFile(String name) {
|
||||
if (name == null)
|
||||
return null;
|
||||
|
||||
File file = new File(name);
|
||||
if (file.exists())
|
||||
return file;
|
||||
|
||||
URL url = Thread.currentThread().getContextClassLoader().getResource(name);
|
||||
if (url == null) {
|
||||
url = getClass().getClassLoader().getResource(name);
|
||||
}
|
||||
if (url != null) {
|
||||
String urlFile = url.getFile();
|
||||
if (urlFile != null) {
|
||||
File rsrc = new File(URLDecoder.decode(urlFile));
|
||||
if (rsrc.exists())
|
||||
return rsrc;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
InputStream getResource(String resource) {
|
||||
InputStream stream = getClass().getResourceAsStream(resource);
|
||||
if (stream == null) {
|
||||
stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource);
|
||||
}
|
||||
return stream;
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
SourceCodeViewer viewer = new SourceCodeViewer(args.length == 0 ? "source" : args[0]);
|
||||
JFrame frame = new JFrame("Source Code Viewer");
|
||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
frame.getContentPane().add(viewer);
|
||||
frame.pack();
|
||||
frame.setVisible(true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -21,11 +21,14 @@ import java.awt.Cursor;
|
|||
import java.awt.Dimension;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintStream;
|
||||
import java.net.URL;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.swing.AbstractAction;
|
||||
|
@ -35,6 +38,7 @@ import javax.swing.Icon;
|
|||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JEditorPane;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JScrollPane;
|
||||
|
@ -47,6 +51,7 @@ import javax.swing.SwingUtilities;
|
|||
import javax.swing.SwingWorker;
|
||||
import javax.swing.event.TreeSelectionEvent;
|
||||
import javax.swing.event.TreeSelectionListener;
|
||||
import javax.swing.text.html.HTMLEditorKit;
|
||||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
import javax.swing.tree.DefaultTreeCellRenderer;
|
||||
|
||||
|
@ -61,7 +66,12 @@ import jpa.tools.swing.ScrollingTextPane;
|
|||
import jpa.tools.swing.SourceCodeViewer;
|
||||
import jpa.tools.swing.StatusBar;
|
||||
import jpa.tools.swing.SwingHelper;
|
||||
import openbook.domain.Author;
|
||||
import openbook.domain.Book;
|
||||
import openbook.domain.Customer;
|
||||
import openbook.domain.Inventory;
|
||||
import openbook.domain.LineItem;
|
||||
import openbook.domain.PurchaseOrder;
|
||||
import openbook.server.OpenBookService;
|
||||
import openbook.server.ServiceFactory;
|
||||
import openbook.util.PropertyHelper;
|
||||
|
@ -414,7 +424,9 @@ public class Demo extends JFrame implements Thread.UncaughtExceptionHandler {
|
|||
}
|
||||
|
||||
public class ViewSourceAction extends OpenBookAction {
|
||||
SourceCodeViewer _sourceViewer;
|
||||
private SourceCodeViewer _sourceViewer;
|
||||
private static final String SRC_ROOT = "http://fisheye6.atlassian.com/browse/~raw,r=HEAD/openjpa/" +
|
||||
"trunk/openjpa-examples/openbooks/src/main/java/";
|
||||
|
||||
public ViewSourceAction(String name, String iconLocation, String tooltip) {
|
||||
super(name, iconLocation, tooltip);
|
||||
|
@ -422,11 +434,34 @@ public class Demo extends JFrame implements Thread.UncaughtExceptionHandler {
|
|||
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (_sourceViewer == null) {
|
||||
_sourceViewer = new SourceCodeViewer("source");
|
||||
String root = PropertyHelper.getString(_config, "openbook.source.url", SRC_ROOT);
|
||||
_sourceViewer = new SourceCodeViewer(root, getAnchors());
|
||||
}
|
||||
showTab(_tabbedPane, "Source Code", _sourceViewer);
|
||||
}
|
||||
|
||||
Map<String, String> getAnchors() {
|
||||
Map<String,String> anchors = new TreeMap<String, String>();
|
||||
anchors.put("domain.Book", toJavaFilePath(Book.class));
|
||||
anchors.put("domain.Author", toJavaFilePath(Author.class));
|
||||
anchors.put("domain.Customer", toJavaFilePath(Customer.class));
|
||||
anchors.put("domain.Inventory", toJavaFilePath(Inventory.class));
|
||||
anchors.put("domain.PurchaseOrder", toJavaFilePath(PurchaseOrder.class));
|
||||
anchors.put("domain.LineItem", toJavaFilePath(LineItem.class));
|
||||
|
||||
anchors.put("OpenBooks Service", toJavaFilePath(OpenBookService.class));
|
||||
anchors.put("Generic Persistence Service", "openbook/server/PersistenceService.java");
|
||||
anchors.put("OpenBooks Service Implementation", "openbook/server/OpenBookServiceImpl.java");
|
||||
|
||||
anchors.put("clinet.Buy Book", toJavaFilePath(BuyBookPage.class));
|
||||
|
||||
return anchors;
|
||||
}
|
||||
|
||||
private String toJavaFilePath(Class<?> cls) {
|
||||
return cls.getName().replace('.', '/') + ".java";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue