updated project documentation
[javainspect.git] / doc / index.org
index be7db9b..b831a37 100644 (file)
@@ -1,38 +1,44 @@
 #+TITLE: JavaInspect - Utility to visualize java software
 
 #+TITLE: JavaInspect - Utility to visualize java software
 
------
-- [[http://www2.svjatoslav.eu/gitweb/?p=javainspect.git;a=snapshot;h=HEAD;sf=tgz][download latest snapshot]]
+* (document settings) :noexport:
+** use dark style for TWBS-HTML exporter
+#+HTML_HEAD: <link href="https://bootswatch.com/3/darkly/bootstrap.min.css" rel="stylesheet">
+#+HTML_HEAD: <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
+#+HTML_HEAD: <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js"></script>
+#+HTML_HEAD: <style type="text/css">
+#+HTML_HEAD:   footer {background-color: #111 !important;}
+#+HTML_HEAD:   pre {background-color: #111; color: #ccc;}
+#+HTML_HEAD: </style>
 
 
-- This program is free software; you can redistribute it and/or modify
-  it under the terms of version 3 of the [[https://www.gnu.org/licenses/lgpl.html][GNU Lesser General Public
-  License]] or later as published by the Free Software Foundation.
+* General
+- This program is free software: you can redistribute it and/or modify
+  it under the terms of the [[https://www.gnu.org/licenses/lgpl.html][GNU Lesser General Public License]] as
+  published by the Free Software Foundation, either version 3 of the
+  License, or (at your option) any later version.
 
 - Program authors:
   - Svjatoslav Agejenko
 
 - Program authors:
   - Svjatoslav Agejenko
-    - Homepage: http://svjatoslav.eu
+    - Homepage: https://svjatoslav.eu
     - Email: mailto://svjatoslav@svjatoslav.eu
     - Email: mailto://svjatoslav@svjatoslav.eu
+    - [[https://www.svjatoslav.eu/projects/][Other software projects hosted at svjatoslav.eu]]
 
   - Tony Bargnesi
     - GitHub fork for the project:
       https://github.com/abargnesi/javainspect
 
 
   - Tony Bargnesi
     - GitHub fork for the project:
       https://github.com/abargnesi/javainspect
 
-- [[http://www.svjatoslav.eu/programs.jsp][other applications hosted at svjatoslav.eu]]
+** Source code
+- [[https://www2.svjatoslav.eu/gitweb/?p=javainspect.git;a=snapshot;h=HEAD;sf=tgz][Download latest snapshot in TAR GZ format]]
 
 
-* (document settings) :noexport:
-** use dark style for TWBS-HTML exporter
-#+HTML_HEAD: <link href="https://bootswatch.com/4/darkly/bootstrap.min.css" rel="stylesheet">
-#+HTML_HEAD: <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
-#+HTML_HEAD: <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>"
-#+HTML_HEAD: <style type="text/css">
-#+HTML_HEAD:   footer {background-color: #111 !important;}
-#+HTML_HEAD:   pre {background-color: #111; color: #ccc;}
-#+HTML_HEAD: </style>
+- [[https://www2.svjatoslav.eu/gitweb/?p=javainspect.git;a=summary][Browse Git repository online]]
 
 
-* General
+- Clone Git repository using command:
+  : git clone https://www2.svjatoslav.eu/git/javainspect.git
+
+* Goal and operating principle
 Goal: simplify/speed up understanding the computer program code by
 automatically visualizing its structure.
 
 Goal: simplify/speed up understanding the computer program code by
 automatically visualizing its structure.
 
-[[http://www3.svjatoslav.eu/projects/sixth-3d/graphs/][See example produced graphs]] for [[http://www3.svjatoslav.eu/projects/sixth-3d/][Sixth 3D - 3D engine project]].
+[[https://www3.svjatoslav.eu/projects/sixth-3d/graphs/][See example produced graphs]] for [[https://www3.svjatoslav.eu/projects/sixth-3d/][Sixth 3D - 3D engine project]].
 
 JavaInspect can be used as a [[id:acf1896a-74b4-4914-acf6-a77075e07f25][standalone commandline utility]] as well as
 [[id:bbeeffc8-3767-440d-8d93-ec9124dd60ee][java library]]. JavaInspect uses primarily Java built-in reflection to
 
 JavaInspect can be used as a [[id:acf1896a-74b4-4914-acf6-a77075e07f25][standalone commandline utility]] as well as
 [[id:bbeeffc8-3767-440d-8d93-ec9124dd60ee][java library]]. JavaInspect uses primarily Java built-in reflection to
@@ -44,13 +50,9 @@ how to instuct Javainspect what to do.
 
 After discovering application structure and optionally filtering out
 unimportant parts, JavaInspect produces GraphViz dot file that
 
 After discovering application structure and optionally filtering out
 unimportant parts, JavaInspect produces GraphViz dot file that
-describes data to be visualized. Then launches GraphViz to generate
+describes data to be visualized. Then launches [[https://graphviz.org/][GraphViz]] to generate
 bitmap graph in PNG or SVG format.
 
 bitmap graph in PNG or SVG format.
 
-By default on your Desktop directory when operated in library mode or
-current working directory when operated as standalone commandline
-application.
-
 Notes:
 + JavaInspect is developed and tested so far only on GNU/Linux.
 + See: [[https://github.com/pahen/madge][Madge - similar tool for JavaScript]]
 Notes:
 + JavaInspect is developed and tested so far only on GNU/Linux.
 + See: [[https://github.com/pahen/madge][Madge - similar tool for JavaScript]]
@@ -58,13 +60,14 @@ Notes:
 * Example graphs
 + A very simple example:
 
 * Example graphs
 + A very simple example:
 
-    [[file:example.png][file:example.resized.png]]
+    file:example.png
 
     Graph legend:
 
     file:legend.png
 
 
     Graph legend:
 
     file:legend.png
 
-+ [[http://www3.svjatoslav.eu/projects/sixth-3d/graphs/][See example produced graphs]] for [[http://www3.svjatoslav.eu/projects/sixth-3d/][Sixth 3D - 3D engine project]].
+
++ [[https://www3.svjatoslav.eu/projects/sixth-3d/graphs/][See example produced graphs]] for [[https://www3.svjatoslav.eu/projects/sixth-3d/][Sixth 3D - 3D engine project]].
 
 * Usage
   :PROPERTIES:
 
 * Usage
   :PROPERTIES:
@@ -138,20 +141,18 @@ Control code in general does the following:
 1. Create graph object.
 2. Java reflection/classloaders does not provide mechanism for
    discovering all classes under given package. Therefore you need to
 1. Create graph object.
 2. Java reflection/classloaders does not provide mechanism for
    discovering all classes under given package. Therefore you need to
-   declare at least some classes to be added to the graph by:
-   + Manually adding individual classes to the graph.
-   + and/or: Let GraphViz recursively scan and parse specified
-     directories with Java source code files to discover class names.
-   + For every class added to the graph, GraphViz will recursively
-     inspect it and add all referecned classes to the graph as well.
+   declare at least some classes to be added to the graph by manually
+   adding individual classes to the graph. For every class added to
+   the graph, GraphViz will recursively inspect it and add all
+   referecned classes to the graph as well.
 3. Graphs easilly get very big and complex so optionally we filter
 3. Graphs easilly get very big and complex so optionally we filter
-   important code using classname wildcards patterns based blacklist
-   and/or whitelist.
+   important code using classname [[https://en.wikipedia.org/wiki/Glob_(programming)][glob]] patterns based blacklist and/or
+   whitelist.
 4. Optionally we can tune some rendering parameters like:
    + Possibility to remove orphaned classes (classes with no
      references) from the graph.
    + Specify target directory for generated visualization
 4. Optionally we can tune some rendering parameters like:
    + Possibility to remove orphaned classes (classes with no
      references) from the graph.
    + Specify target directory for generated visualization
-     files. (Default is user desktop directory)
+     files. (Default is current directory)
    + Keep intermediate GraphViz dot file for later inspection.
 5. Render graph.
 
    + Keep intermediate GraphViz dot file for later inspection.
 5. Render graph.
 
@@ -192,30 +193,8 @@ Result:
     - Generated DOT file: [[file:JavaInspect.dot][JavaInspect.dot]]
     - Generated PNG image: [[file:JavaInspect.png][JavaInspect.png]]
 
     - Generated DOT file: [[file:JavaInspect.dot][JavaInspect.dot]]
     - Generated PNG image: [[file:JavaInspect.png][JavaInspect.png]]
 
-*** example 2: scan java code, apply filters
-#+BEGIN_SRC java
-// Create graph
-final ClassGraph graph = new ClassGraph();
-
-// Recursively scan current directory for Java source code and attempt
-// to detect class names from there to be added to the graph.
-graph.addProject(".");
-
-// Blacklist example classes from being shown on the graph
-graph.blacklistClassPattern("eu.svjatoslav.inspector.java.structure.example.*");
-
-// do not show single classes with no relationships on the graph
-graph.hideOrphanedClasses();
-
-// Produce bitmap image titled "JavaInspect full project.png" to the
-// user Desktop directory.
-graph.generateGraph("JavaInspect full project");
-#+END_SRC
-Result:
-    - Generated PNG image: [[file:JavaInspect%20full%20project.png][JavaInspect full project.png]]
-
-*** example 3: GraphViz embedded in another project
-1. Download project Sixth [[http://www2.svjatoslav.eu/gitweb/?p=sixth.git;a=snapshot;h=HEAD;sf=tgz][code snapshot]].
+*** example 2: GraphViz embedded in another project
+1. Download project Sixth [[https://www2.svjatoslav.eu/gitweb/?p=sixth.git;a=snapshot;h=HEAD;sf=tgz][code snapshot]].
 2. Inspect and run *DataGraph.java*.
 
 *** Embedding JavaInspect in your Maven project
 2. Inspect and run *DataGraph.java*.
 
 *** Embedding JavaInspect in your Maven project
@@ -227,7 +206,7 @@ Declare JavaInspect as dependency:
     <dependency>
         <groupId>eu.svjatoslav</groupId>
         <artifactId>javainspect</artifactId>
     <dependency>
         <groupId>eu.svjatoslav</groupId>
         <artifactId>javainspect</artifactId>
-        <version>1.6</version>
+        <version>1.7</version>
     </dependency>
     ...
 </dependencies>
     </dependency>
     ...
 </dependencies>
@@ -292,8 +271,10 @@ LOT of cool ideas could be implemented. For intstance:
     - PlantUML (TODO)
     - Interactive 3D visualization (TODO)
 
     - PlantUML (TODO)
     - Interactive 3D visualization (TODO)
 
-- FEATURE: Replace internal java parser in package
-  eu.svjatoslav.inspector.java.methods with: https://javaparser.org/
+- FEATURE: Implement (or integrate existing java parser
+  https://javaparser.org/) to be able to produce code visualizations
+  based on source code (in addition to current reflection based
+  approach).
 
 - FEATURE: Integarte with [[http://plantuml.com/class-diagram][PlantUML]].
 
 
 - FEATURE: Integarte with [[http://plantuml.com/class-diagram][PlantUML]].
 
@@ -312,7 +293,7 @@ LOT of cool ideas could be implemented. For intstance:
 
 - FEATURE: Possibility to attach to JVM using JVM agent.
 
 
 - FEATURE: Possibility to attach to JVM using JVM agent.
 
-- FEATURE: Possibility to inspect graphs in 3D using [[http://www2.svjatoslav.eu/gitbrowse/sixth-3d/doc/index.html][Sixth 3D engine]].
+- FEATURE: Possibility to inspect graphs in 3D using [[https://www3.svjatoslav.eu/projects/sixth-3d/][Sixth 3D engine]].
 
 - FEATURE: Possibility to select classes/fields/values to be
   visualized in some graph query language. For greater flexibility in
 
 - FEATURE: Possibility to select classes/fields/values to be
   visualized in some graph query language. For greater flexibility in
@@ -326,3 +307,6 @@ LOT of cool ideas could be implemented. For intstance:
 
 - FEATURE: Configurable maven plugin to generate graphs as part of the
   project build/release process.
 
 - FEATURE: Configurable maven plugin to generate graphs as part of the
   project build/release process.
+* See also
+Similar or alternative solutions:
++ http://www.class-visualizer.net/