Added all important commandline options. Updated documentation.
[javainspect.git] / doc / index.html
1 <!doctype html>
2 <html lang="en">
3 <head>
4 <title>JavaInspect - Utility to visualize java software</title>
5 <!-- 2017-12-26 Tue 23:30 -->
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width, initial-scale=1">
8 <meta name="generator" content="Org-mode">
9 <meta name="author" content="Svjatoslav Agejenko">
10 <link href="https://bootswatch.com/4/darkly/bootstrap.min.css" rel="stylesheet">
11 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
12 <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>"
13 <style type="text/css">
14 footer {background-color: #111 !important;}
15 pre {background-color: #111; color: #ccc;}
16 </style>
17 <style type="text/css">
18 /* org mode styles on top of twbs */
19
20 html {
21     position: relative;
22     min-height: 100%;
23 }
24
25 body {
26     font-size: 18px;
27     margin-bottom: 105px;
28 }
29
30 footer {
31     position: absolute;
32     bottom: 0;
33     width: 100%;
34     height: 101px;
35     background-color: #f5f5f5;
36 }
37
38 footer > div {
39     padding: 10px;
40 }
41
42 footer p {
43     margin: 0 0 5px;
44     text-align: center;
45     font-size: 16px;
46 }
47
48 #table-of-contents {
49     margin-top: 20px;
50     margin-bottom: 20px;
51 }
52
53 blockquote p {
54     font-size: 18px;
55 }
56
57 pre {
58     font-size: 16px;
59 }
60
61 .footpara {
62     display: inline-block;
63 }
64
65 figcaption {
66   font-size: 16px;
67   color: #666;
68   font-style: italic;
69   padding-bottom: 15px;
70 }
71
72 /* from twbs docs */
73
74 .bs-docs-sidebar.affix {
75     position: static;
76 }
77 @media (min-width: 768px) {
78     .bs-docs-sidebar {
79         padding-left: 20px;
80     }
81 }
82
83 /* All levels of nav */
84 .bs-docs-sidebar .nav > li > a {
85     display: block;
86     padding: 4px 20px;
87     font-size: 14px;
88     font-weight: 500;
89     color: #999;
90 }
91 .bs-docs-sidebar .nav > li > a:hover,
92 .bs-docs-sidebar .nav > li > a:focus {
93     padding-left: 19px;
94     color: #A1283B;
95     text-decoration: none;
96     background-color: transparent;
97     border-left: 1px solid #A1283B;
98 }
99 .bs-docs-sidebar .nav > .active > a,
100 .bs-docs-sidebar .nav > .active:hover > a,
101 .bs-docs-sidebar .nav > .active:focus > a {
102     padding-left: 18px;
103     font-weight: bold;
104     color: #A1283B;
105     background-color: transparent;
106     border-left: 2px solid #A1283B;
107 }
108
109 /* Nav: second level (shown on .active) */
110 .bs-docs-sidebar .nav .nav {
111     display: none; /* Hide by default, but at >768px, show it */
112     padding-bottom: 10px;
113 }
114 .bs-docs-sidebar .nav .nav > li > a {
115     padding-top: 1px;
116     padding-bottom: 1px;
117     padding-left: 30px;
118     font-size: 12px;
119     font-weight: normal;
120 }
121 .bs-docs-sidebar .nav .nav > li > a:hover,
122 .bs-docs-sidebar .nav .nav > li > a:focus {
123     padding-left: 29px;
124 }
125 .bs-docs-sidebar .nav .nav > .active > a,
126 .bs-docs-sidebar .nav .nav > .active:hover > a,
127 .bs-docs-sidebar .nav .nav > .active:focus > a {
128     padding-left: 28px;
129     font-weight: 500;
130 }
131
132 /* Nav: third level (shown on .active) */
133 .bs-docs-sidebar .nav .nav .nav {
134     padding-bottom: 10px;
135 }
136 .bs-docs-sidebar .nav .nav .nav > li > a {
137     padding-top: 1px;
138     padding-bottom: 1px;
139     padding-left: 40px;
140     font-size: 12px;
141     font-weight: normal;
142 }
143 .bs-docs-sidebar .nav .nav .nav > li > a:hover,
144 .bs-docs-sidebar .nav .nav .nav > li > a:focus {
145     padding-left: 39px;
146 }
147 .bs-docs-sidebar .nav .nav .nav > .active > a,
148 .bs-docs-sidebar .nav .nav .nav > .active:hover > a,
149 .bs-docs-sidebar .nav .nav .nav > .active:focus > a {
150     padding-left: 38px;
151     font-weight: 500;
152 }
153
154 /* Show and affix the side nav when space allows it */
155 @media (min-width: 992px) {
156     .bs-docs-sidebar .nav > .active > ul {
157         display: block;
158     }
159     /* Widen the fixed sidebar */
160     .bs-docs-sidebar.affix,
161     .bs-docs-sidebar.affix-bottom {
162         width: 213px;
163     }
164     .bs-docs-sidebar.affix {
165         position: fixed; /* Undo the static from mobile first approach */
166         top: 20px;
167     }
168     .bs-docs-sidebar.affix-bottom {
169         position: absolute; /* Undo the static from mobile first approach */
170     }
171     .bs-docs-sidebar.affix .bs-docs-sidenav,.bs-docs-sidebar.affix-bottom .bs-docs-sidenav {
172         margin-top: 0;
173         margin-bottom: 0
174     }
175 }
176 @media (min-width: 1200px) {
177     /* Widen the fixed sidebar again */
178     .bs-docs-sidebar.affix-bottom,
179     .bs-docs-sidebar.affix {
180         width: 263px;
181     }
182 }
183 </style>
184 <script type="text/javascript">
185 $(function() {
186     'use strict';
187
188     $('.bs-docs-sidebar li').first().addClass('active');
189
190     $(document.body).scrollspy({target: '.bs-docs-sidebar'});
191
192     $('.bs-docs-sidebar').affix();
193 });
194 </script>
195 </head>
196 <body>
197 <div id="content" class="container">
198 <div class="row"><div class="col-md-9"><h1 class="title">JavaInspect - Utility to visualize java software</h1>
199 <hr >
200 <ul class="org-ul">
201 <li><a href="http://www2.svjatoslav.eu/gitweb/?p=javainspect.git;a=snapshot;h=HEAD;sf=tgz">download latest snapshot</a>
202 </li>
203
204 <li>This program is free software; you can redistribute it and/or modify
205 it under the terms of version 3 of the <a href="https://www.gnu.org/licenses/lgpl.html">GNU Lesser General Public
206 License</a> or later as published by the Free Software Foundation.
207 </li>
208
209 <li>Program authors:
210 <ul class="org-ul">
211 <li>Svjatoslav Agejenko
212 <ul class="org-ul">
213 <li>Homepage: <a href="http://svjatoslav.eu">http://svjatoslav.eu</a>
214 </li>
215 <li>Email: <a href="mailto://svjatoslav@svjatoslav.eu">mailto://svjatoslav@svjatoslav.eu</a>
216 </li>
217 </ul>
218 </li>
219
220 <li>Tony Bargnesi
221 <ul class="org-ul">
222 <li>GitHub fork for the project:
223 <a href="https://github.com/abargnesi/javainspect">https://github.com/abargnesi/javainspect</a>
224 </li>
225 </ul>
226 </li>
227 </ul>
228 </li>
229
230 <li><a href="http://www.svjatoslav.eu/programs.jsp">other applications hosted at svjatoslav.eu</a>
231 </li>
232 </ul>
233
234 <div id="outline-container-sec-1" class="outline-2">
235 <h2 id="sec-1"><span class="section-number-2">1</span> General</h2>
236 <div class="outline-text-2" id="text-1">
237 <p>
238 Goal: simplify/speed up understanding the computer program code by
239 automatically visualizing its structure.
240 </p>
241
242 <p>
243 JavaInspect is a Java library/commandline utility that primarily uses
244 Java reflection to discover and visualize any part of Java program.
245 </p>
246
247 <p>
248 JavaInspect currently has no GUI, configuration files, embedded
249 scripting support, direct Maven or Ant integration. See <a href="#sec-3">usage</a> to learn
250 how to instuct Javainspect what to do.
251 </p>
252
253 <p>
254 After discovering application structure and optionally filtering out
255 unimportant parts, JavaInspect produces GraphViz dot file that
256 describes data to be visualized. Then launches GraphViz to generate
257 bitmap graph in PNG or SVG format.
258 </p>
259
260 <p>
261 By default on your Desktop directory when operated in library mode or
262 current working directory when operated as standalone commandline
263 application.
264 </p>
265
266 <p>
267 Note: GraphViz is developed and tested so far only on GNU/Linux.
268 </p>
269 </div>
270 </div>
271
272 <div id="outline-container-sec-2" class="outline-2">
273 <h2 id="sec-2"><span class="section-number-2">2</span> Example graphs</h2>
274 <div class="outline-text-2" id="text-2">
275 <ul class="org-ul">
276 <li>A very simple example:
277
278
279 <figure>
280 <p><a href="example.png"><img src="example.resized.png" class="img-responsive" alt="example.resized.png"></a>
281 </p>
282 </figure>
283
284 <p>
285 Graph legend:
286 </p>
287
288
289 <figure>
290 <p><img src="legend.png" class="img-responsive" alt="legend.png">
291 </p>
292 </figure>
293 </li>
294
295 <li>Example visualization of <a href="http://www2.svjatoslav.eu/gitbrowse/sixth-3d/doc/">Sixth 3D</a> project: <a href="http://www2.svjatoslav.eu/gitbrowse/sixth-3d/doc/codeGraph/">architecture graphs</a>.
296 </li>
297 </ul>
298 </div>
299 </div>
300
301 <div id="outline-container-sec-3" class="outline-2">
302 <h2 id="sec-3"><a id="ID-2ad2889e-6c95-4662-b3f4-2c341fc74522" name="ID-2ad2889e-6c95-4662-b3f4-2c341fc74522"></a><span class="section-number-2">3</span> Usage</h2>
303 <div class="outline-text-2" id="text-3">
304 <p>
305 JavaInspect can be controlled in 2 different ways:
306 </p>
307 <ul class="org-ul">
308 <li><a href="#sec-3-1">as standalone commandline utility</a>
309 </li>
310 <li><a href="#sec-3-2">as embedded Java library via Java API</a>
311 </li>
312 </ul>
313 </div>
314
315 <div id="outline-container-sec-3-1" class="outline-3">
316 <h3 id="sec-3-1"><a id="ID-acf1896a-74b4-4914-acf6-a77075e07f25" name="ID-acf1896a-74b4-4914-acf6-a77075e07f25"></a><span class="section-number-3">3.1</span> usage as commandline utility</h3>
317 <div class="outline-text-3" id="text-3-1">
318 <p>
319 To enable commandline support, (study and) execute script:
320 </p>
321 <pre class="example">
322 commandline launcher/install
323 </pre>
324
325 <p>
326 Warning: It was tested only on Debian Stretch linux.
327 </p>
328
329 <p>
330 Available commandline arguments:
331 </p>
332 <p class="verse">
333 -j (existing files)&#x2026;<br >
334 &#xa0;&#xa0;&#xa0;&#xa0;JAR file(s) to render.<br >
335 <br >
336 -n (mandatory, string)<br >
337 &#xa0;&#xa0;&#xa0;&#xa0;Graph name.<br >
338 <br >
339 &#x2013;debug<br >
340 &#xa0;&#xa0;&#xa0;&#xa0;Show debug info.<br >
341 <br >
342 -k<br >
343 &#xa0;&#xa0;&#xa0;&#xa0;Keep dot file.<br >
344 <br >
345 -h<br >
346 &#xa0;&#xa0;&#xa0;&#xa0;Hide orphaned classes.<br >
347 <br >
348 -w (one to many strings)&#x2026;<br >
349 &#xa0;&#xa0;&#xa0;&#xa0;Whitelist glob(s).<br >
350 <br >
351 -b (one to many strings)&#x2026;<br >
352 &#xa0;&#xa0;&#xa0;&#xa0;Blacklist glob(s).<br >
353 <br >
354 -d (existingdirectory)<br >
355 &#xa0;&#xa0;&#xa0;&#xa0;Target directory. Default is current directory.<br >
356 <br >
357 -t (options: png, svg)<br >
358 &#xa0;&#xa0;&#xa0;&#xa0;Target image type. Default is: svg.<br >
359 </p>
360 </div>
361 </div>
362 <div id="outline-container-sec-3-2" class="outline-3">
363 <h3 id="sec-3-2"><a id="ID-bbeeffc8-3767-440d-8d93-ec9124dd60ee" name="ID-bbeeffc8-3767-440d-8d93-ec9124dd60ee"></a><span class="section-number-3">3.2</span> usage via Java API</h3>
364 <div class="outline-text-3" id="text-3-2">
365 <p>
366 Requires that classes to be visualised are available in the classpath.
367 </p>
368
369 <p>
370 To get JavaInspect into same classpath with your projecs I so far came
371 up with 2 solutions:
372 </p>
373
374 <ol class="org-ol">
375 <li>Add JavaInspect library in your project as a dependency.
376 </li>
377
378 <li>Create new Java project for the purpose visualizing your other
379 projects and include JavaInspect and your projecs binary artifacts
380 (Jar's) into new project classpath. Built binary Jar's (with no
381 source code) are sufficient because JavaInspect operates via
382 reflection.
383 </li>
384 </ol>
385
386 <p>
387 Simple Java based control/configuration code needs to be written for
388 each project. I usually put such code into directories devoted for
389 JUnit tests. Because it needs not to be compiled/embedded into final
390 product or project artifact I'm just willing to visualize.
391 </p>
392
393 <p>
394 Control code in general does the following:
395 </p>
396 <ol class="org-ol">
397 <li>Create graph object.
398 </li>
399 <li>Java reflection/classloaders does not provide mechanism for
400 discovering all classes under given package. Therefore you need to
401 declare at least some classes to be added to the graph by:
402 <ul class="org-ul">
403 <li>Manually adding individual classes to the graph.
404 </li>
405 <li>and/or: Let GraphViz recursively scan and parse specified
406 directories with Java source code files to discover class names.
407 </li>
408 <li>For every class added to the graph, GraphViz will recursively
409 inspect it and add all referecned classes to the graph as well.
410 </li>
411 </ul>
412 </li>
413 <li>Graphs easilly get very big and complex so optionally we filter
414 important code using classname wildcards patterns based blacklist
415 and/or whitelist.
416 </li>
417 <li>Optionally we can tune some rendering parameters like:
418 <ul class="org-ul">
419 <li>Possibility to remove orphaned classes (classes with no
420 references) from the graph.
421 </li>
422 <li>Specify target directory for generated visualization
423 files. (Default is user desktop directory)
424 </li>
425 <li>Keep intermediate GraphViz dot file for later inspection.
426 </li>
427 </ul>
428 </li>
429 <li>Render graph.
430 </li>
431 </ol>
432 </div>
433
434
435 <div id="outline-container-sec-3-2-1" class="outline-4">
436 <h4 id="sec-3-2-1"><span class="section-number-4">3.2.1</span> example 1: individually picked objects</h4>
437 <div class="outline-text-4" id="text-3-2-1">
438 <p>
439 This example demonstrates generating of class graph from hand picked
440 classes and visualizing GraphViz itself.
441 </p>
442
443 <div class="org-src-container">
444
445 <pre class="src src-java"><span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Create graph</span>
446 <span style="color: #F92672;">final</span> <span style="color: #66D9EF;">ClassGraph</span> <span style="color: #FD971F;">graph</span> = <span style="color: #F92672;">new</span> <span style="color: #66D9EF;">ClassGraph</span>();
447
448 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Add some random object to the graph. GraphViz will detect Class from</span>
449 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">the object.</span>
450 graph.add(graph);
451
452 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Also add some random class to the graph.</span>
453 graph.add(Utils.<span style="color: #F92672;">class</span>);
454
455 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Keep intermediary GraphViz DOT file for reference.</span>
456 graph.setKeepDotFile(<span style="color: #FF80F4;">true</span>);
457
458 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Produce bitmap image titled "JavaInspect.png" to the user Desktop</span>
459 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">directory</span>
460 graph.generateGraph(<span style="color: #EEDC82;">"JavaInspect"</span>);
461 </pre>
462 </div>
463
464 <p>
465 Note: if desired, more compact version of the above:
466 </p>
467 <div class="org-src-container">
468
469 <pre class="src src-java"><span style="color: #F92672;">new</span> <span style="color: #66D9EF;">ClassGraph</span>().add(randomObject, RandomClass.<span style="color: #F92672;">class</span>)
470                 .setKeepDotFile(<span style="color: #FF80F4;">true</span>).generateGraph(<span style="color: #EEDC82;">"JavaInspect"</span>);
471 </pre>
472 </div>
473
474
475 <p>
476 Result:
477 </p>
478 <ul class="org-ul">
479 <li>Generated DOT file: <a href="JavaInspect.dot">JavaInspect.dot</a>
480 </li>
481 <li>Generated PNG image: <a href="JavaInspect.png">JavaInspect.png</a>
482 </li>
483 </ul>
484 </div>
485 </div>
486
487 <div id="outline-container-sec-3-2-2" class="outline-4">
488 <h4 id="sec-3-2-2"><span class="section-number-4">3.2.2</span> example 2: scan java code, apply filters</h4>
489 <div class="outline-text-4" id="text-3-2-2">
490 <div class="org-src-container">
491
492 <pre class="src src-java"><span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Create graph</span>
493 <span style="color: #F92672;">final</span> <span style="color: #66D9EF;">ClassGraph</span> <span style="color: #FD971F;">graph</span> = <span style="color: #F92672;">new</span> <span style="color: #66D9EF;">ClassGraph</span>();
494
495 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Recursively scan current directory for Java source code and attempt</span>
496 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">to detect class names from there to be added to the graph.</span>
497 graph.addProject(<span style="color: #EEDC82;">"."</span>);
498
499 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Blacklist example classes from being shown on the graph</span>
500 graph.blacklistClassPattern(<span style="color: #EEDC82;">"eu.svjatoslav.inspector.java.structure.example.*"</span>);
501
502 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">do not show single classes with no relationships on the graph</span>
503 graph.hideOrphanedClasses();
504
505 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Produce bitmap image titled "JavaInspect full project.png" to the</span>
506 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">user Desktop directory.</span>
507 graph.generateGraph(<span style="color: #EEDC82;">"JavaInspect full project"</span>);
508 </pre>
509 </div>
510 <p>
511 Result:
512 </p>
513 <ul class="org-ul">
514 <li>Generated PNG image: <a href="JavaInspect%20full%20project.png">JavaInspect full project.png</a>
515 </li>
516 </ul>
517 </div>
518 </div>
519
520 <div id="outline-container-sec-3-2-3" class="outline-4">
521 <h4 id="sec-3-2-3"><span class="section-number-4">3.2.3</span> example 3: GraphViz embedded in another project</h4>
522 <div class="outline-text-4" id="text-3-2-3">
523 <ol class="org-ol">
524 <li>Download project Sixth <a href="http://www2.svjatoslav.eu/gitweb/?p=sixth.git;a=snapshot;h=HEAD;sf=tgz">code snapshot</a>.
525 </li>
526 <li>Inspect and run *DataGraph.java*.
527 </li>
528 </ol>
529 </div>
530 </div>
531
532 <div id="outline-container-sec-3-2-4" class="outline-4">
533 <h4 id="sec-3-2-4"><span class="section-number-4">3.2.4</span> Embedding JavaInspect in your Maven project</h4>
534 <div class="outline-text-4" id="text-3-2-4">
535 <p>
536 Declare JavaInspect as dependency:
537 </p>
538 <div class="org-src-container">
539
540 <pre class="src src-xml">&lt;<span style="color: #A6E22E;">dependencies</span>&gt;
541     ...
542     &lt;<span style="color: #A6E22E;">dependency</span>&gt;
543         &lt;<span style="color: #A6E22E;">groupId</span>&gt;eu.svjatoslav&lt;/<span style="color: #A6E22E;">groupId</span>&gt;
544         &lt;<span style="color: #A6E22E;">artifactId</span>&gt;javainspect&lt;/<span style="color: #A6E22E;">artifactId</span>&gt;
545         &lt;<span style="color: #A6E22E;">version</span>&gt;1.6&lt;/<span style="color: #A6E22E;">version</span>&gt;
546     &lt;/<span style="color: #A6E22E;">dependency</span>&gt;
547     ...
548 &lt;/<span style="color: #A6E22E;">dependencies</span>&gt;
549 </pre>
550 </div>
551
552
553 <p>
554 Add Maven repository to retrieve artifact from:
555 </p>
556 <div class="org-src-container">
557
558 <pre class="src src-xml">&lt;<span style="color: #A6E22E;">repositories</span>&gt;
559     ...
560     &lt;<span style="color: #A6E22E;">repository</span>&gt;
561         &lt;<span style="color: #A6E22E;">id</span>&gt;svjatoslav.eu&lt;/<span style="color: #A6E22E;">id</span>&gt;
562         &lt;<span style="color: #A6E22E;">name</span>&gt;Svjatoslav repository&lt;/<span style="color: #A6E22E;">name</span>&gt;
563         &lt;<span style="color: #A6E22E;">url</span>&gt;http://www2.svjatoslav.eu/maven/&lt;/<span style="color: #A6E22E;">url</span>&gt;
564     &lt;/<span style="color: #A6E22E;">repository</span>&gt;
565     ...
566 &lt;/<span style="color: #A6E22E;">repositories</span>&gt;
567 </pre>
568 </div>
569 </div>
570 </div>
571 </div>
572 </div>
573
574 <div id="outline-container-sec-4" class="outline-2">
575 <h2 id="sec-4"><span class="section-number-2">4</span> Requirements</h2>
576 <div class="outline-text-2" id="text-4">
577 <p>
578 <a href="http://www.graphviz.org/">GraphViz</a> - shall be installed on the computer.
579 </p>
580
581 <p>
582 On Ubuntu/Debian use:
583 </p>
584 <div class="org-src-container">
585
586 <pre class="src src-sh">sudo apt-get install graphviz
587 </pre>
588 </div>
589 </div>
590 </div>
591 <div id="outline-container-sec-5" class="outline-2">
592 <h2 id="sec-5"><span class="section-number-2">5</span> TO DO</h2>
593 <div class="outline-text-2" id="text-5">
594 <p>
595 Note: Because this is side project (and I have many of them) I can
596 only contribute few hours per year at average. Any help is welcome.  A
597 LOT of cool ideas could be implemented. For intstance:
598 </p>
599
600 <ul class="org-ul">
601 <li>BUG: Should not hide references if there are too many of them to
602 classes if referring classes are not visible anyway because of
603 blacklist/whitelist rules. Basically reference counting should
604 exclude not visible classes.
605 </li>
606
607 <li>BUG: Orphaned class removal does not work always. There are many
608 bugs and corner cases to find and fix still.
609 </li>
610
611 <li>BUG: Code is not very readable. Document and refactor for better
612 maintainability.
613 </li>
614
615 <li>FEATURE: Create installable DEB package.
616 <ul class="org-ul">
617 <li>Submit it to some Debian developer for integration or become
618 Debian package maintainer.
619 </li>
620 </ul>
621 </li>
622
623 <li>FEATURE: Make it modular. That is: central part, an application
624 model could be standalone and serializable.
625
626 <ul class="org-ul">
627 <li>There could be multiple ways to acquire model:
628 <ul class="org-ul">
629 <li>By introspecting application via Java reflections (current mode
630 of operation).
631 </li>
632 <li>By parsing java source. (unfinished)
633 </li>
634 </ul>
635 </li>
636
637 <li>There could be ways to manipulate model:
638 <ul class="org-ul">
639 <li>Store/load/compare.
640 </li>
641 <li>Trim uninteresting parts.
642 </li>
643 <li>Highlight important parts.
644 </li>
645 </ul>
646 </li>
647
648 <li>There could be multiple ways to render model:
649 <ul class="org-ul">
650 <li>PNG/SVG (currently implemented)
651 </li>
652 <li>PlantUML (TODO)
653 </li>
654 <li>Interactive 3D visualization (TODO)
655 </li>
656 </ul>
657 </li>
658 </ul>
659 </li>
660
661 <li>FEATURE: Replace internal java parser in package
662 eu.svjatoslav.inspector.java.methods with: <a href="https://javaparser.org/">https://javaparser.org/</a>
663 </li>
664
665 <li>FEATURE: Integarte with <a href="http://plantuml.com/class-diagram">PlantUML</a>.
666 </li>
667
668 <li>FEATURE: Add dark theme for generated graphs.
669 </li>
670
671 <li>FEATURE: Sort Class fields by alphabet.
672 </li>
673
674 <li>FEATURE: Visualize also concrete field values so it could be used as
675 ultra cool runtime logging/debugging framework.
676 </li>
677
678 <li>FEATURE: Possibility to visualize structure and data from JVM
679 snapshot.
680 </li>
681
682 <li>FEATURE: Possibility to attach to remote process to visualize
683 data/structure using JVM debug port and mechanism.
684 </li>
685
686 <li>FEATURE: Possibility to attach to JVM using JVM agent.
687 </li>
688
689 <li>FEATURE: Possibility to inspect graphs in 3D using <a href="http://www2.svjatoslav.eu/gitbrowse/sixth-3d/doc/index.html">Sixth 3D engine</a>.
690 </li>
691
692 <li>FEATURE: Possibility to select classes/fields/values to be
693 visualized in some graph query language. For greater flexibility in
694 comparison to currently supported glob syntax.
695 </li>
696
697 <li>FEATURE: Add option to control JavaInspect via JSON or XML config
698 file. For example different graphs for given project could be
699 defined once in plain text config, possibly with the aid of some
700 interactive utility. Then defined graphs could be updated as part of
701 project build or release process.
702 </li>
703
704 <li>FEATURE: Configurable maven plugin to generate graphs as part of the
705 project build/release process.
706 </li>
707 </ul>
708 </div>
709 </div>
710 </div><div class="col-md-3"><nav id="table-of-contents">
711 <div id="text-table-of-contents" class="bs-docs-sidebar">
712 <ul class="nav">
713 <li><a href="#sec-1">1. General</a></li>
714 <li><a href="#sec-2">2. Example graphs</a></li>
715 <li><a href="#sec-3">3. Usage</a>
716 <ul class="nav">
717 <li><a href="#sec-3-1">3.1. usage as commandline utility</a></li>
718 <li><a href="#sec-3-2">3.2. usage via Java API</a></li>
719 </ul>
720 </li>
721 <li><a href="#sec-4">4. Requirements</a></li>
722 <li><a href="#sec-5">5. TO DO</a></li>
723 </ul>
724 </div>
725 </nav>
726 </div></div></div>
727 <footer id="postamble" class="">
728 <div><p class="author">Author: Svjatoslav Agejenko</p>
729 <p class="date">Created: 2017-12-26 Tue 23:30</p>
730 <p class="creator"><a href="http://www.gnu.org/software/emacs/">Emacs</a> 25.1.1 (<a href="http://orgmode.org">Org-mode</a> 8.2.10)</p>
731 </div>
732 </footer>
733 </body>
734 </html>