forked from graphstream/gs-core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Changelog
1484 lines (1326 loc) · 74.5 KB
/
Changelog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
December 19 2009, antoinedutot
* Moved GraphListenerProxy, GraphListenerProxyThread and GraphListenerProxyCopy into the ui
package. These classes are now used only by the old viewer and replaced by io.ProxyPipe.
* The old viewer is still usable, although it does not use completely the new architecture.
*** Bon le dernier changement date de juillet 2009 ... il me semble que l'API a changé entre temps :-) ***
July 15 2009, antoinedutot
* Added the io2 package that will provide the new I/O mechanism that is everywhere in GS.
* The io2 package will become io when ready.
* Changed Graph so that it is a Filter from the I/O package.
* Added the ui2 package that will provide an almost complete rewrite of the graphstream
viewing capabilities with :
* A graphic graph that respect the new I/O mechanism.
* A new style sheet language that is more orthogonal.
* A new style group mechanism that should improve a lot drawing by grouping elements with
the same style to draw them at once in bulk operations.
* A new and hopefully simpler "sprite" mechanism that should avoid using the GraphViewerRemote.
* A simpler architecture for threads.
* Some technical documentation for developers of the UI package !! (with a justification
of the choices made :-)) (see the HowItWorks files).
* Added a (subtle!) change to the AbstractElement : when an attribute value is changed, if
the old value and the new values are the same, the "attributeChanged" event is not issued.
This will improve efficiency, and will avoid recursion problems when two graphs are
synchronised via the I/O mechanism.
March 22 2009, antoinedutot
* Finally commited the new GraphListener mechanism. There are three interfaces:
- GraphElementsListener (for listening at elements changes (node, edges, steps).
- GraphAttributesListener (for listenering at attributes changes).
- GraphListener that inherit the two above.
* The graph interface now respect these listeners.
* Also un-deprecated the Graph.getNodeSet() Graph.getEdgeSet(), Node.getEdgeSet(), Element.getAttributeKeySet(), etc.
so that they return an Iterable instead of a set. This allows to use the for-each statement
and do not allow to modify the returned sets.
March 09 2009, gsavin
* Add a reader for Tulip file format.
February 27 2009, gsavin:
* Refactoring of org.miv.graphstream.algorithm.generator.IncompleteGridGenerator.
This class a now a Generator, but can still generate DGS in the same way that before.
February 26 2009, gsavin:
* Update all licence preambles of the gs-core package.
* Remove all @author tags from sources.
February 23 2009, gsavin:
* Remove setId() method from Element. id becomes a final value set at
object creation.
* Remove setGraph() method from Node. graph becomes a final value set at
object creation
* Remove setNode[01]() from *Edge.. n0 and n1 become final values set at
object creation.
January 8 2008:
* Correct some bugs in the display(boolean) method of AdjacencyListGraph.
* Add a thread-safe graph : ConcurrentGraph
- AbstractConcurrentElement
- ConcurrentNode
- ConcurrentNodeFactory
- ConcurrentEdge
- ConcurrentEdgeFactory
- ConcurrentGraph
January 3 2008:
* Added some important modifications to the I/O package, trying to preserve the backward
compatibility ;-)
* The various readers can have now a version of begin() and read() that takes a
java.io.Reader as argument in addition to the java.io.InputStream and String arguments.
* The readers and writers are now able to handle attribute removal. To do this the Reader
can now register a GraphReaderListenerExtended in addition to the usual
GraphReaderListeners. This extended listener can handle more finely attributes and is
able to add them as well as remove them for dynamic graphs.
* All the readers have been updated to handle such listeners in addition to the usual ones.
* This should not cause any difference in the old code, excepted for implementors of the
GraphReader interface.
* The GraphWriter interface has been changed to handle two new writing methods that allows
to add or remove individual attributes to node, edges and graphs. This introduces an
incompatibility in the rare code blocks that implement GraphWriter.
- The while i/o package.
- The Flickr sub-project.
- The Amazon Crawler sub-project.
* Added a new kind of attribute handled automatically : hashes. Previously the String, Number
and array types where recognised only. Now hashes are also handled.
- org.miv.graphstream.graph.Element.
* Added a "graph.Attribute" interface. An attribute is an object that can be converted to a
hash.
* Introduced the version 004 of the DGS format.
* This format allows to remove attributes in a "change node" (cn) and "change edge" (ce)
by putting a '-' sign before the name of the attribute. The "+" sign is also supported
but not necessary.
* Also added the hability to read and write hashes in DGS 4, the syntax for a
hash attribute is a:[i:value j:value: k:value]. These hashes can be nested :
a:[b:[c:value]], etc.
- org.miv.graphstream.io.GraphReaderDGS,
- org.miv.graphstream.io.GraphWriterDGS.
* Added the "junit.jar" dependency in the "lib/" directory.
* Added the start of some automated testing in I/O and UI2 using JUnit.
August 31 2008:
* Corrected a quite mould bug : The DGS writer was not able to export directed graphs ... The
directed flag was ignored ... ah ah ah ...
August 29 2008:
* The node and edge identifiers are added to the SVG output so it is possible to write a SVG CSS
that defines styles for individual elements with the GraphWriterSVG.
August 28 2008:
* Added a SVG output in org.miv.graphstream.io as GraphWriterSVG. This output is different from
the SVG output provided by the graph viewer since it does not need a viewer. However it
does not yet support CSS and will probably never support sprites (as they are specific to
the graph viewer).
- org.miv.graphstream.io.GraphWriterSVG,
- org.miv.graphstream.io.test.TestGraphWriterSVG,
- org.miv.graphstream.io.test.TestGraphWriterSVG2.
* Finally added a LayoutAlgorithm class that allows to run a layout easily without having to
open a graph viewer. The layout algorithm takes as argument a graph and a Layout
implementation. Then it allows to compute a layout and store "xyz" attributes in the graph.
This should also way faster than the layout used in the viewer since there is no inter-thread
communication, and graphic output.
- org.miv.graphstream.algorithm.layout2.LayoutAlgorithm,
- org.miv.graphstream.io.test.TestGraphWriterSVG2 (for an usage example).
August 6 2008:
* Added several CSS new properties:
- "text-mode" with values: "normal", "truncated", "hidden", with hidden that allows to
completely hide the text label, and truncated that allows to truncate the label to
20 characters.
- Shadows:
- "shadow-style", with values "none" or "simple", this enables shadows.
- "shadow-width", with numeric value, the shadow has the form and size of the element,
plus this width.
- "shadow-offset", with two numeric values for the x and y offsets.
- "shadow-color", a colour list, for simple shadows, only the first colour is used.
- Actually shadows are only implemented for circle or square nodes. This is a test.
* See org.miv.graphstream.ui.swing.test.TestShadows.
August 1 2008:
* Add Frederic's dynamic random graph generator:
- org.miv.graphstream.algorithm.generator.RandomFixedDegreeDynamicGraphGenerator
* Add a void implementation of GraphListener:
- org.miv.graphstream.graph.GraphListenerHelper
July 31 2008:
* Move org.miv.graphstream.algorithm.Nervousness to
org.miv.graphstream.algorithm.measure.ElementNervousness
* New measurements class: GraphNervousness
July 30 2008:
* Add the "stepBegins" event to the GraphListener interface. Warning, this implies a lot of
modifications.
* Add a generator of incomplete graph grids.
- org.miv;graphstream.generator.IncompleteGridGenerator
July 28 2008:
* Improve parseFromURL() method of StyleSheet to support files.
July 16 2008:
* Add a parseFromURL method to StyleSheet which will be used in GraphicGraph to
load file or url.
July 15 2008:
* Added utility methods in Algorithms (graph.algorithm()) to get the position of a node more
easily and to compute edge lengths.
July 11 2008:
* The "ui.state" attribute is now working. It allows to specify arbitrary "meta classes" in
style sheets. For example : "node:foo { color: red; } node:bar { color: blue }". Then you
can put an attribute on nodes : "n.addAttribute( "ui.state", "foo" );".
This is mechanism works almost the same as classes but overrides it. This means that a
meta class will always have more precedence than a class (though they aggregate). It
will be easier later on to add more events that hook on these meta classes (in addition
to "clicked").
* Add a "for each" command in CLI. For example:
for each $I in {1,2,3} do add node "feuille$I" ; add edge "edge$I" "root" "feuille$I"
* Add a "for" command in CLI. For example:
for $I from 0 to 100 do add node "feuille$I" ; add edge "edge$I" "root" "feuille$I"
* CLITerm uses a css stylesheet (org/miv/graphstream/tool/workbench/cliterm.css).
* Prompt gains focus when cliterm window gains focus.
July 10 2008:
* Add delete actions in workbench.
* Action accessories work !
July 09 2008:
* Add action accessories in workbench (just to look for the moment)
* Fix a bug when deleting nodes/edges in the selection list
July 07 2008:
* Add an accessor for the SwingGraphViewer's context.
* Can select nodes in workbench by a click.
* Can select edges in workbench by double-clicking on a node and use the wheel to iterate
on edges.
* Can add nodes and edges by clicking on the graph.
July 05:
* Added meta-classes to style sheets. The two first meta classes provided
are ":clicked" and ":selected". They provide styles that are automatically
"aggregated" to the current style of an element (replacing only style properties
that are set in the ":clicked" or ":selected" style) when some event occurs.
The event for ":clicked" maps to mouse clicks on elements (sprites and nodes only
as graphs and edges are not clickable).
The event for ":selected" is associated to the addition or removal of the "ui.selected"
attribute to the corresponding node or edge.
* More globally, added "alternate" styles to the style class. This mechanism allows
to "extend" a style by aggregation with one or more other styles when some "events"
are activated. The aggregation mechanism works the same as for multiple classes
on a given element.
* See org.miv.graphstream.ui.swing.test.TestStyleEvents.
July 04 2008:
* Add a new graph interface in workbench.
* Add cli commands to set or unset attributes (fully regex!).
July 03 2008:
* Improve select CLI command: can use pattern to select nodes or edges
'select all nodes "n[0-9]"'
* Improve open interface and add save interface in workbench.
* Add a CLI command to enable/disable autolayout
* Add WorkbenchUtils to store usual graphical actions.
July 2 2008:
* The style sheet mechanism now is able to put several classes for one element.
July 01 2008:
* Add list commands to workbench
- list [nodes|edges] "pattern"
- list [node|edge] "id"
* Add copy/paste to workbench.
* Add open interface in workbench.
June 30 2008:
* Add GraphInfo box in WorkbenchGUI. it is able to display current context
and informations about graph which defines this context.
* Add a SelectionTree which displays selected elements and their attributes.
* Add a CLI logo.
* Add a node and an edge icons.
* Add a new listener, SelectionListener, which defines objects listening to the
context's selection list.
* Add selection commands (SelectOperators).
* Change display style to a 'gimp' display.
June 28 2008:
* WorkbenchGUI is able to display GraphViewer with the CLI command "create graph".
June 27 2008:
* Change the CLI commands architecture, adding a new class CLICommand
which will define a command. Add three commands:
- NodeOperations: add and remove nodes
- EdgeOperations: add and remove edges
- GraphOperations: create, open, display, select, list graphs.
The CLI is fully regex-based. All is in "org.miv.graphstream.workbench.cli".
* Begin the Workbench GUI. Can find in "org.miv.graphstream.workbench.gui".
June 26 2008:
* Add an abstract class to implements spanning tree algorithms
* Add the Kruskal's algorithm
* Add the Prim's algorithm
* Add a short tuto about spanning tree algorithms
* Added the start of multi-point edge implementation in the style-sheet and in the graph viewer. It is
possible to specify the points of an edge using the "edge-shape" property in the style sheet:
edge { edge-shape: (1,2,3), (4,5,6); }
For this to work, there must be no automatic layout algorithm.
* Add the beginning of a workbench project.
A command line interpreter is running, using the WorkbenchCore class.
* Fix a bug in GraphFactory ( split(".") --> split("[.]") because of regex )
June 3 2008:
* It is now possible to call Graph.removeGraphListener() in a graph listener !
* The GraphViewer.close() operation now correctly remove the listeners from the graph.
May 23 2008:
* Edge borders are now drawn.
* The graph can have a border that is drawn.
* A new style sheet property appears : "padding". It allows to put padding around some
elements. Actually, only the graph rule can understand it. It allows to put padding around
the whole graph rendering.
* Finally changed the names of the predefined attributes used by the graph viewer and the
default layout algorithm. Graphic attributes are prefixed by "ui." and layout attributes are
prefixed by "layout.".
- color becomes ui.color
- width becomes ui.width
- stylesheet becomes ui.stylesheet
- style becomes ui.style
- hide becomes ui.hide
- force becomes layout.force
- weight becomes layout.weight
Other attributes like "x", "y", "z", "xy", "xyz", and "label" are not prefixed since they
are used in several places and are not layout or graphic specific.
THE OLD NAMES WILL CONSERVE THEIR MEANING UNTIL VERSION 0.4.9. For the next release 0.5.0,
the prefixed versions will have to be used.
* Updated the manual and tutorials accordingly.
May 15 2008:
* Nodes, edges and sprites can now be hidden individually in the GraphViewer display using the
"ui.hide" attribute. Merely add the attribute without value to hide an element. Remove the
attribute to make it visible anew.
- org.miv.graphstream.ui.swing.SwingGraphRenderer,
- org.miv.graphstream.ui.swing.SwingNodeRenderer,
- org.miv.graphstream.ui.swing.SwingEdgeRenderer.
- org.miv.graphstream.ui.swing.test.TestHide.
May 12 2008:
* Edges can now have borders in the GraphViewer.
* Added the sketch of a graph editor. Not yet usable.
May 11 2008:
* Corrected a bug in the graph viewer that prevented multi-edges that go in different
direction to be drawn correctly.
* There was still bugs in the ElasticBox (bugs moisis).
* Polished the ShowGraph utility and re-added the ability to control the flow of events when
"playing" a dynamic graph. Added the ability to clear, load and accumulate (cascade) CSS
files. Also provided several "predefined" style sheets.
May 9 2008:
* Corrected a lot of bugs in the GraphViewer* and ElasticBox* things.
* The swing graph viewer now centre the view.
* The ElasticBox now stops when the global layout energy stabilises.
April 27 2008:
* The Swing graph viewer now can draw multi-edges. There is a restriction however :
the cubic-curve and angle styles are not supported. Loop edges also support multi-edges.
* It remains a bug with arrows on loop edges when pointing at text-box or text-ellipse nodes.
April 26 2008:
* Cubic-curve evaluator in ui.swing.Context.
* Arrows are now correctly oriented when drawn on cubic-curve edges.
* The swing renderer know is able to correctly compute the arrow position for text-box
and text-ellipse nodes (still not perfect, though).
! There is still a bug however when the arrow is on a cubic-curve edge.
* Sprites are now correctly positioned on cubic-curve edges.
* The flow sprite can now be curved and follows the edge shape.
- org.miv.graphstream.ui.swing.SwingEdgeRenderer,
- org.miv.graphstream.ui.swing.SwingSpriteRenderer,
- org.miv.graphstream.ui.swing.Context.
* The code is ready to draw multi-edges using cubic curves, but this is not enabled yet.
April 19 2008:
* Changed the GraphReaderWeb so that it can restrict its search to some sites. This allows to
parse sites of the same domain or in a set of domains for example. Corrected a bug in the
GraphReaderWeb that made it generate trees only. Now it generates
graphs. Added weights on edges created by the GraphReaderWeb.
- org.miv.graphstream.io.GraphReaderWeb.
* Added a tool that allows to create graphs from blogs.
- org.miv.graphstream.tool.BlogFerret.
April 18 2008:
* Corrected several bugs in the "elastic-box" graph layout. Added several tests.
* Added a tool that allows to save connected components of a graph to separate files.
- org.miv.graphstream.tool.SaveConnectedComponents.
* Added a basic tool that allows to show graphs.
- org.miv.graphstream.tool.ShowGraph.
April 13 2008:
* Added a MultiGraph, MultiNode and MultiEdge multi-graph implementation. The multi-graph
allows several edges between two nodes. MultiGraph inherits DefaultGraph, MultiNode
inherits DefaultNode and MultiEdge inherits DefaultEdge. The last two are made abstract to
allow the creation of a SingleGraph. This sould not break any old code.
* Created a SingleGraph, SingleNode and SingleEdge that inherit DefaultGraph, DefaultNode
and DefaultEdge. The use of DefaultGraph is the same as before, and SingleGraph work the
same as DefaultGraph (this is only a renaming of DefaultGraph).
The inheritance hierarchy is the following:
DefaultGraph
|
+--- SingleGraph (the same as DefaultGraph)
|
+--- MultiGraph (adds the ability to have several edges between two nodes)
DefaultNode (abstract)
|
+--- SingleNode (ensure there is always at most one edge between two nodes)
|
+--- MultiGraph (allows several edges between two nodes)
DefaultEdge (abstract)
|
+--- SingleEdge (ensure no other edge has the same sources and destination)
|
+--- MultiEdge (allows other edges to have both the same sources and destination)
Both MultiGraph/Edge/Node and SingleGraph/Edge/Node share a lot of code in common.
- org.miv.graphstream.graph.implementations.DefaultGraph,
- org.miv.graphstream.graph.implementations.DefaultNode,
- org.miv.graphstream.graph.implementations.DefaultEdge,
- org.miv.graphstream.graph.implementations.SingleGraph,
- org.miv.graphstream.graph.implementations.SingleNode,
- org.miv.graphstream.graph.implementations.SingleEdge,
- org.miv.graphstream.graph.implementations.MultiGraph,
- org.miv.graphstream.graph.implementations.MultiNode,
- org.miv.graphstream.graph.implementations.MultiEdge.
* The graph viewer does not yet draw correctly multi-edges, but supports them.
* Added a better test base for graphs, which will allow to do (poor) regression
tests. This is not ideal, but at least it exists.
- org.miv.graphstream.graph.test.TestBase,
- org.miv.graphstream.graph.test.TestBasic,
- org.miv.graphstream.graph.test.TestIterators,
- org.miv.graphstream.graph.test.TestMultiGraph.
* All these classes probably need a lot more polishing and testing.
April 02 2008:
* It is now possible to specify node positions using attributes "xy" and "xyz" in addition
of the old way using "x", "y" and "z". This is made possible by the new addAttribute()
method that can take a variable list of arguments. In this case the value is an array
of objects containing the two or three coordinates.
- org.miv.graphstream.ui.graphicGraph.GraphicNode.
* Added the start of a FAQ in the web site.
* Added a tutorial on node positioning and interaction with the mouse in the
graph viewer.
March 31 2008:
* Release 0.4.0
March 29 2008:
* Finished the tutorial on "sprites", added a tutorial on graph reading and writing.
* Added a DynamicGraphWriterHelper, a class that listen at a graph and writes back all the
events occurring on the graph to a file. There was already a GraphWriterHelper but it was
only able to take a snap shot of a graph at a given time.
- org.miv.graphstream.io.DynamicGraphWriterHelper.
* Added a Element.addAttribute(String,Object ... values) that allows to add arrays as attributes
easily. Done the same with sprites.
* It is now possible to specify several colours after the "color:" styling element in style
sheets. This will ultimately allow gradients and can already be used to specify several
colours for multicolour elements like pie-charts.
March 28 2008:
* Updated the manual : the DGS description is up to date, the installation instructions
are updated, the SVN usage is specified, the IO package description is corrected.
* The JavaDoc now has far less warnings, tags are OK.
* Renamed (anew) the SimpleGraph into its (we hope) final name : DefaultGraph.
- org.miv.graphstream.graph.implementations.DefaultGraph,
- org.miv.graphstream.graph.implementations.DefaultNode,
- org.miv.graphstream.graph.implementations.DefaultEdge,
- org.miv.graphstream.graph.implementations.DefaultNodeFactory,
- org.miv.graphstream.graph.implementations.DefaultEdgeFactory.
* A long awaited feature : it is now possible to remove elements using iterators on the
node and edge set of the graph (graph.getNodeIterator() and graph.getEdgeIterator()).
The other iterators (in the Node class) do not yet allow removing. Would it be useful ?
- org.miv.graphstream.graph.implementations.DefaultGraph.
March 27 2008:
* New sprite shapes available: flow, text-box, text-ellipse, pie-chart.
* The complete bounds of nodes is used to fit the graph in the viewer window and ensure all is
visible, not only the node centre. Consequently the border around the drawing passed from 30
pixels to 5 pixels.
* "loop" edges, that is edges that leave and enter the same node, are now drawn.
March 26 2008:
* Added and changed tutorials, figures, explanations, etc.
* Changed the sprite API of the GraphViewerRemote. The remote now produces Sprite objects that
can be manipulated in a more object-oriented way. The old sprite API of GraphViewerRemote
is still here but its use is discouraged since it is function-oriented.
- org.miv.graphstream.ui.GraphViewerRemote,
- org.miv.graphstream.ui.Sprite.
* The sprites can now be positioned using chosen units, either graph units, percents or
pixels.
* Specified the API docs for sprite positioning using either polar or spherical coordinates,
as well as the units in which lengths and radii are specified.
* Added two small logos in the doc/web/pix directory that are generated using the GraphStream
viewer. They now decorate pages in the HTML doc. One is a Moebius band, the other is a
flow.
* There is now a big quality difference between rendering quality levels 3 and 4. They are
both anti-aliased, but the level 4 renders shapes with sub-pixel accuracy. This avoids
integer positioning of elements that was quite displeasing, particularly for sprites.
March 20 2008:
* Added units to lengths in style sheets. The two possible units are "gu" for "Graph Units",
and "px" for "PiXels". It should be easy to add percents (of the graph width or height).
See org.miv.graphstream.ui.swing.test.TestStyles3 for an example.
March 19 2008:
* Finally removed the old UI package to replace it by the new UI2 package (that was renamed UI,
thus).
* Fixed the graph coordinate system as being "right-handed". This means that the Y positive
axis goes up and the Z positive axis goes "out of the screen".
* Added the possibility to move nodes with the mouse in the new swing graph viewer.
* Added a mechanism that allows to put a GraphViewerListener on a graph viewer using the
GraphViewerRemote. This allows to avoid any thread contention and is quite easy. Now it is
easy to listen at actions done by the user in the graph view (like selecting nodes, moving
them, the same for sprites, etc.).
* It is not yet possible to move sprites using the mouse : the constraints on attaching sprites
to edges and nodes makes it difficult.
March 14 2008:
* Added a GraphReaderListenerWriter. The goal of this class is to send to a
writer all the events coming from a graph reader. This allows to easily
convert a graph from a format into another.
- org.miv.graphstream.io.GraphReaderListenerWriter.
March 9 2008:
* Added the z-index specifier in style sheets. It is now possible to draw nodes, edges or
sprites above or under others.
* Changed the tutorial index. Added some tutorials, and started to edit them. A LOT OF
WORK IS STILL NEEDED HERE.
March 8 2008:
* Added arrow shapes, width and length, and various bugs corrections. Re-added the cubic
curve style to the edge shapes.
March 7 2008:
* The style sheet mechanism is now much more complete. Basic style, shape, colours, borders,
fonts, text styles, text alignment, edges arrows, etc. are now working.
* Sprites : A new mechanism has been added to append graphics to the graph display. This
allows to put arbitrary graphic elements everywhere in the graph space. Sprites can also
be attached to nodes or edges. In this case, their positioning is modified so that it
is easy to make a sprite orbit around a node or travel along edges. TODO it remains some
work so that the edge positioning uses polar coordinates.
Sprites, like nodes or edge support arbitrary attributes.
org.miv.graphstream.ui2.graphicGraph.Sprite,
org.miv.graphstream.ui2.graphicGraph.SpriteManager,
org.miv.graphstream.ui2.GraphViewerRemote.
* Sprites can be styled using style sheets like nodes or edges. It is now easy to specify
an image or label on sprites, and to change many aspects of their rendering.
* Several bugs corrected in the way the graph viewer avoid to redisplay an unchanged graph.
The viewer must now be far less CPU intensive.
* Corrected several bugs in the ElasticBox force-based graph layout implementation.
February 23 2008:
* The Swing graph rendering component in ui2.swing is now able to read basic styles from the
style sheet. A lot of work is still needed to :
- correctly interpret the styles by doing nice graphics ;
- augment the vocabulary of the style sheet.
February 22 2008:
* Added a ui.graphicGraph.stylesheet package that contains the definition of a style sheet,
styles for nodes, edges and graphs (and more!), a style sheet parser made using javacc (and
therefore requiring no external packages to run (naturally javacc is needed to produce
the parser, which is needed only when the .jj file is changed).
The style sheet follows CSS rules and as most as possible use the CSS syntax. However the
elements are not HTML elements (which is not a necessity in CSS), but elements of a graph
(node, edge, graph, and more). The cascading is "almost" :-) respected.
Naturally the style elements are not only CSS (for example "arrow-style"). Actually there
are few styles that can be set.
- org.miv.graphstream.ui.graphicGraph.stylesheet.*.
Naturally this is absolutely not useful and furthermore not used in the drawing classes !!
:-) (yet)
February 21 2008:
* Corrected several bugs in ElasticBox. The default layout should be much more stable (and
smooth). The way the temperature is handled is still buggy. It temperature cool factor
should take into account the size of the graph (in nodes count) ?
- org.miv.graphstream.algorithm.layout.elasticBox.ElasticBox.
Added a ui2.swing package to test ideas on the new UI. It works, but needs a lot of work !
The main idea is to add CSS style sheets to customise the display.
- org.miv.graphstream.ui2.swing.*.
February 20 2008:
* Added a new ui package named with originality ui2 that will allow to clean ui. The first
and actually unique class of this package is GraphViewerBase. GraphViewer, GraphViewerListener
and GraphViewerListenerProxy that are actually in the graph package should also do the move
to ui2 as soon as possible.
The new GraphViewerBase class defines the base implementation of a GraphViewer. It allows to
connect to a graph in a thread A, run a layout in a thread B and display the graph in a thread
C. In this C thread a GraphicGraph instance reflect the state of the A graph and the positions
computed in the B thread. The graph viewer allows with one method call to reflect the positions
computed by the layout in B to the graph in A. It also allows A to send commands to the layout
(set the force, the quality, etc.). It allows also with a single method to register listeners
for graphical events like a click on a node, on the background or a node moved by the mouse.
It can be used by anybody that want to create a graph renderer, all the ugly work of
synchronising the data is done. Rendering a graph is as simple as reading the graphic graph.
- org.miv.graphstream.ui2.GraphViewerBase.
February 19 2008:
* Added a GraphListenerProxy in the graph package. The proxy allows to listen at a graph across
threads boundaries. The proxy even allows to create and maintain an exact copy of the graph in
another thread (the two graph can pertain to a different graph implementation, for example
a GraphicGraph can be the copy of a SimpleGraph).
- org.miv.graphstream.graph.GraphListenerProxy.
* GraphicGraph, GraphicNode and GraphicEdge now implement (partially) Graph, Node and Edge.
- org.miv.graphstream.ui.graphicGraph.GraphicGraph,
- org.miv.graphstream.ui.graphicGraph.GraphicNode,
- org.miv.graphstream.ui.graphicGraph.GraphicEdge.
February 18 2008:
* Removed the qtviewer and ogl packages from ui. They are now in a separate project.
This will make GraphStream lighter : it will now depend only on Swing.
* The SimpleGraph class (and SimpleNode and SimpleEdge) now support loop edges (whose source
and target point to the same node).
- org.miv.graphstream.graph.implementations.SimpleGraph,
- org.miv.graphstream.graph.implementations.SimpleNode,
- org.miv.graphstream.graph.implementations.SimpleEdge.
February 17 2008:
* Moved the SimpleGraph and AdjacencyListGraph implementations and the various attached classes
to a graphs package besides org.miv.graphstream.graph. This allows to have a basic graph
package much more clear, and will allow to define new graph class in a cleaner way.
* The graph package is no more dependent on the ui package. The goal is to remove this complex
ui package, keeping only the swing viewer to conserve basic functionality. The ui will then
be provided by a stand alone library.
- org.miv.graphstream.graph.Graph,
- org.miv.graphstream.graph.SimpleGraph,
- org.miv.graphstream.graph.AdjancencyListGraph.
* Moved the GraphPanelListener from the ui.swingviewer package to the graph package, and
renamed it in GraphViewerListener.
* SwingGraphViewer and QtGraphViewer now implement GraphViewer.
- org.miv.graphstream.ui.swingviewer.SwingGraphViewer,
- org.miv.graphstream.ui.qtviewer.QtGraphViewer.
February 3 2008:
* Added the A* algorithm.
- org.miv.graphstream.algorithm.AStar,
- org.miv.graphstream.algorithm.test.TestAStar,
- org.miv.graphstream.algorithm.test.TestAStar2.
Decemeber 29 2007:
* Corrected a bug in GraphReaderDGS : number attributes were stored as a strings
instead of numbers. Added a new test that prints all the attributes of
a graph with their types.
- org.miv.graphstream.io.GraphReaderDGS,
- org.miv.graphstream.io.test.TestAttributes,
- org/miv/graphstream/io/test/data/Thing2.dgs
December 16 2007:
* Deprecated the two getNodeSet() and getEdgeSet() Graph methods since they
make the assertion that such sets exist in the graph implementation, which
is not always the case. One must use iterators instead of these methods.
Also deprecated similar Node methods : getEdgeSet(), getEnteringEdgeSet()
and getLeavingEdgeSet() for the same reason.
Changed all the classes in the algorithm package according to this. All
other parts of the API should be changed also.
- org.miv.graphstream.graph.Graph,
- org.miv.graphstream.graph.Node.
* The tutorial 2 is out. The tutorial 3 is on its way.
December 9 2007:
* Refactored CheckedGraph into SimpleGraph which is more intuitive. Identically,
CheckedNode and CheckedEdge have been refactored to SimpleNode and SimpleEdge.
- org.miv.graphstream.graph.SimpleGraph,
- org.miv.graphstream.graph.SimpleNode,
- org.miv.graphstream.graph.SimpleEdge.
December 7 2007:
* Creation of new sub-package "rmi" in the package distributed (group all rmi stuff).
* Added a "clean" GraphConnector interface which define all remote methods (independent
of the communication layer rmi, .....).
* Move all the class in the package distributed except GraphFactory an DistributedGraph
* Added GraphFactory class which allow to create an instance of Graph (checked, Adjancency ...)
* Added GraphConnectorFactory class which allow to create an instance of GraphConnector
* Added GraphParseTag class which parse a node id or edge id and cut the string in 2
parts : id and the graphId the element belong to.
The format of an element in a DistributedGraph is <graph id>/<element id>
* Added GraphResourceIdentifier class which define all the information to localize a remote graph
* Added GraphConnection class which encapsulate a GraphConnector from a GraphResourceIdentifier
* Added GraphServerRmi which launch a Connector listener (GraphConnectorRmiServer) over a
rmi server (start rmiregistry).
December 6 2007:
* A small change in LayoutRunner that observe the stabilisation and slow down
calculations if the algorithm is stabilised at more than 90%. This should
help to reduce the CPU cost of the layout algorithm. However it is an
experimental feature.
- org.miv.graphstream.algorithm.layout.LayoutRunner.
* The tutorial 1 is (at last) in the doc/web/tutorials/ directory.
November 28 2007:
* Modified the ConnectedComponents algorithm so that is can consider edges
as non-existent when they have a specific attribute set. Also added a
feature that set add an attribute on nodes according to the component they
pertain to. A set of values is given and the attribute is set to on of
these values according to the index of their component.
- org.miv.graphstream.algorithm.ConnectedComponent.
November 24 2007:
* The Fruchterman-Reingold inspired layout algorithm is working. With the
dynamic recursive space decomposition, it speeds up things and allows to
layout graphs of more than 10000 nodes in less than a minute on a Pentium
M 1.7Gz.
- org.miv.graphstream.algorithm.layout.elasticbox.ElasticBox,
- org.miv.graphstream.algorithm.layout.elasticbox.test.TestElasticBox.
November 22 2007:
* Added a whole new set of classes to build graph viewers using Qt Jambi
instead of Swing in the org.miv.graphstream.ui.qtviewer package. They
work the same as their Swing counterparts. Instead of a GraphPanel they
provide a GraphWidget. Default settings pane are also provided.
- org.miv.graphstream.ui.qtviewer.*.
* Added the ability to choose the layout class to use in GraphPanel and
GraphWidget.
- org.miv.graphstream.ui.qtviewer.GraphWidget,
- org.miv.graphstream.ui.swingviewer.GraphPanel.
* Added the base for a new graph layout based on the Fruchterman-Reingold
algorithm. It uses a recursive space decomposition instead of a mere grid
to speed up calculations.
- org.miv.graphstream.algorithm.layout.elasticbox.ElasticBox.
November 12 2007:
* Moved the org.miv.graphstream.ui.GraphRendererRunner in the
org.miv.graphstream.ui.swing package as it is dedicated to swing only.
November 11 2007:
* Changed the names of the classes in org.miv.graphstream.ui.ogl package to
better match their goal and to be uniform with the names in the corresponding
swing package. They now begin by "Ogl" instead of "Graph3D".
* Added a org.miv.graphstream.ui.ogl.OglGraphRendererQt and changed the
OglGraphRenderer into a OglGraphRendererSwing. The new class now allows
to use the QtJambi graphical toolkit instead of Swing.
* Renamed the org.miv.graphstream.ui.viewer package into org.miv.graphstream.ui.swingviewer
as it adds helper viewer classes for Swing only.
October 14 2007:
* Removed a bug in the iterator inner classes of AdjacencyListGraph.
- org.miv.graphstream.graph.AdjacencyListGraph
October 4 2007 (Special Dresden Release):
* Added a "Layout" interface so that SpringBox is no more the only way to
layout a graph. It will allow to implement several new layout algorithms
that will directly and transparently apply to any graph viewer.
* Changed the way the layout work: it is now possible to add weights to
nodes and edges and the Layout interface allows to define "curved" edges.
- org.miv.graphstream.algorithm.layout.Layout,
- org.miv.graphstream.algorithm.layout.LayoutListener,
- org.miv.graphstream.algorithm.layout.LayoutListenerHelper,
- org.miv.graphstream.algorithm.layout.LayoutRunner.
September 21 2007:
* Modified the GML reader so that keywords are always converted into lower
case (some bad GML writers use mixed case in their keywords) and so that
the unknown attributes in "graphics" are ignored instead of triggering
an error.
* Added A mechanism that allow the dynamic creation of nodes and edges
within a graph object. Each graph instance has a reference to a node and
an edge factory. These factories are responsible for the the creation of inheriting
nodes add edges. The class name of the elements to be generated can be
initialised with the org.miv.util.Evironment mechanism of by using a setter.
- org.miv.graphstream.graph.NodeFactory
- org.miv.graphstream.graph.EdgeFactory
- org.miv.graphstream.graph.CheckedEdgeFactory
- org.miv.graphstream.graph.CheckedNodeFactory
- org.miv.graphstream.graph.AdjacencyListEdgeFactory
- org.miv.graphstream.graph.AdjajcencyListNodeFactory
September 19 2007:
* Added a algorithms to compute the Newman-Girvan modularity on graphs.
* Added the modularity(String), modularity(E[][]), modularityMatrix() and
communities() methods in Algorithm. The modularity(String) method is an
utility that calls communities(), modularityMatrix() and modularity(E[][]).
The communities() method group nodes in sets (communities) according to an
attribute whose value is used to select in which set a node must be placed.
The modularityMatrix() takes the communities computed and produce the e
matrix defined by Newman-Girvan. The modularity(E[][]) takes this matrix
as input and produce the modularity value.
- org.miv.graphstream.algorithm.Algorithms.
* Added a Modularity algorithm class that makes the work of the communities()
method but is able to maintain dynamically the communities when the graph
evolves. When compute() is called, it performs only the creation of the e
matrix.
- org.miv.graphstream.algorithm.Modularity.
* Added a Element.getAttributeCount() method that allows to know how many
attributes a graph element contains.
- org.miv.graphstream.graph.Element,
- org.miv.graphstream.graph.AbstractElement,
- org.miv.graphstream.graph.OneAttributeElement.
September 18 2007:
* Added a Graph.algorithm() method that returns an instance of Algorithms
suited for the current graph instance and that allows to perform easily
and quickly several common algorithms on this graph instance. This
method allows to create several Algorithms descendants that will be able
to be optimized according to the internal representation of the Graph
implementation they work for.
- org.miv.graphstream.graph.Graph,
- org.miv.graphstream.graph.CheckedGraph,
- org.miv.graphstream.graph.AdjacencyListGraph.
September 3 2007:
* Added a Welsh and Powell coloring algorithm.
- org.miv.graphstream.aglorithm.coloring.WelshPowell,
- org.miv.graphstream.aglorithm.test.TestWelshPowell.
August 28 2007:
* Added a "Density" metric to the common algorithm.
- org.miv.graphstream.algorithm.Algorithms.
* Changed ConnectedComponents to work properly with big graphs.
- org.miv.graphstream.algorithm.ConnectedComponents.
July 31 2007:
* Added a SpringBoxListenerHelper class that allows to receive SpringBox
events in another thread than the spring box one. This allows the graph
node attributes to be modified automatically when the spring box changes
node positions and to listen at these changed for any other need.
- org.miv.graphstream.algorithm.layout.springbox.SpringBoxListenerHelper.
* Added a way to register such a listener in the GraphPanel class. Note that
this is not the only way to listen at the spring box (since it impose to
display the graph in a panel. You can also create yourself a
SpringBxRunner and put this listener in it).
- org.miv.graphstream.ui.viewer.GraphPanel#addSpringBoxListener().
* The Graph.display() methods now return the GraphViewer they create.
- org.miv.graphstream.graph.Graph,
- org.miv.graphstream.graph.CheckedGraph,
- org.miv.graphstream.graph.AdjacencyListGraph.
July 20 2007:
* Added private methods (invisible to the user) that change the way events are managed.
If an event is created during the invocation of the listeners of another event,
then it is temporary stored in a queue to be later executed in the right order.
- org.miv.graphstream.CheckedGraph
- org.miv.graphstream.AdjacencyListGraph
July 19 2007:
* Definitely use interfaces with graphs. Now the org.miv.graphstream.graph.Graph
class is an interface that provides common graph services. The same
for Node and Edge.
- org.miv.graphstream.graph.Graph
- org.miv.graphstream.graph.Edge
- org.miv.graphstream.graph.Node
* The old set (GRaph,Node,Edge) is renamed Checked{Graph|Node|Edge}.
- org.miv.graphstream.graph.CheckedGraph
- org.miv.graphstream.graph.CheckedEdge
- org.miv.graphstream.graph.CheckedNode
* Added a new set AdjacencyList{Graph|Node|Edge} that is less memory consuming
but slower.
- org.miv.graphstream.graph.AdjacencyListGraph
- org.miv.graphstream.graph.AdjacencyListEdge
- org.miv.graphstream.graph.AdjacencyListNode
* org.miv.graphstream.graph.Element becomes an interface and the original
Element class is changed into AbstractElement.
- org.miv.graphstream.graph.Element
- org.miv.graphstream.graph.AbstractElement
* Add a Class that implements the Element interface and allow the use
of only one attribute.
- org.miv.graphstream.graph.OneAttributeElement
July 13 2007:
* Started to add interfaces in the graph sub-package so as to be able
to define more Graph classes. I don't know if it is THE solution.
July 11 2007:
* The GraphWriter.changeEdge() method now does not allow to change the edge
orientation. Also added a changeGraph() method that allows to put
attributes on the graph itself (GML can do this).
- org.miv.graphstream.io.GraphWriter.
* Added an algorithm that compute the single source shortest path
problem with the Bellman-ford algorithm.
- org.miv.graphstream.algorithm.BellmanFord.
July 10 2007:
* ShowGraph now displays an error message in the GUI when a parse error or
an I/O error occurs. This is ugly, but at least informative.
- org.miv.graphstream.tool.ShowGraph.
* org.miv.graphstream.graph.Path: I tried to make it easier to use.
Added documentation.
* Changed Dijkstra algorithm. Hope it acts like the real one now.
- org.miv.graphstream.algorithm.Dijkstra.
July 9 2007:
* Changed the SwingStyleSheet to allow it to load icons and images from
any where on the disk or the web, not only in the classpath or in jars.
The only thing needed is to add the "file:/" or "http://" before the
icon resource name.
- org.miv.graphstream.ui.swing.SwingStyleSheet.
July 8 2007:
* Started changes in the GraphReaderGML.
* It now accepts single unquoted words as identifiers for nodes, edges,
graphs, etc.
* Arbitrary attributes may be a structure, a string, a single unquoted
word or a number.
* Add the ability to parse dynamic graphs. The "step" keyword as been
added. The "chgnode", "delnode", "chgedge" and "deledge" keywords have
been added.
* Understand the "graphics" keyword and map it to the GraphStream
rendering capabilities.
* Single edges can be directed while the whole graph is not using
the "directed true" directive in edges.
* It is able to parse arbitrary attributes, made of subattributes and
map them to existing classes and their respective attributes. There is
a "map" keyword to define which attribute is mapped to which Java class.
* All the example graphs given on the GML site are now readable (at last).
* Added standars keywords "Creator" and "Version" to the list of known
keywords. They are transformed into attributes of the graph.
- org.miv.graphstream.io.GraphReaderGML
7 7 7:
* Added the complexities in the graph package javadoc. Also deprecated the
algorithms (getClusteringCoefficient, getDegreeDistribution, etc.) in the
Graph class and redirected them to the
org.miv.graphstream.algorithm.Algorithms class :
- org.miv.graphstream.graph.Graph,
- org.miv.graphstream.graph.Node,
- org.miv.graphstream.graph.Edge,
- org.miv.graphstream.graph.Element,
- org.miv.graphstream.graph.DepthFirstIterator,
- org.miv.graphstream.graph.BreadthFirstIterator.
* Added the missing complexities in the org.miv.graphstream.algorithm.
- org.miv.graphstream.algorithm.Algorithms,
- org.miv.graphstream.algorithm.Dijkstra.
July 6 2007:
* Added a tape-recorder like set of buttons to the ShowGraph utility that
allows to play/pause/advance event-by-event or step-by-step in a dynamic
graph. By default ShowGraph starts and directly reads the graph. It now
accepts the "-pause" option that allows to start it in "paused" state and
start the dynamic graph only when the "play" button is used.
- org.miv.graphstream.tool.ShowGraph.
* Corrected some bugs in GraphReaderDGS that prevented the step-by-step
event reading feature to work properly.
- org.miv.graphstream.io.GraphReaderDGS.
July 5 2007:
* Add a pattern recognition for java.awt.Color.toString() in the
GraphicGraph.
- org.miv.graphstream.ui.graphicGraph.GraphicGraph
* Correct a little bug in the GraphWriterDGS. String values of Object
parameters are now surrounded with quotes.
- org.miv.graphstream.io.GraphWriterDGS
July 4 2007:
* Add getAverageDegree and getDegreeAverageDeviation to the list of simple
algorithms:
- org.miv.graphstream.algorithm.Algorithms
July 3 2007:
* Changed the BreadthFirstIterator so that it handles and respect edge
orientation. This is now a configurable option of the iterator.
- org.miv.graphstream.graph.BreadthFirstIterator,
- org.miv.graphstream.graph.Node.
* Added a DepthFirstIterator that does the same thing as the
BreadthFirstIterator, but explores the graph in a different order.
- org.miv.graphstream.graph.DepthFirstIterator,
- org.miv.graphstream.graph.Node.
July 2 2007:
* Added a GraphReaderWeb that does not read a file but an URL (either local
"file:/foo/bar" or distant "http://graphstream.sf.net"), and produces a
node for this page. Then it extracts all the links from this URL and
produces a node for each page found, adding a link from the start page to
all these new pages. This is done recursively until a given "depth" of
exploration is reached. The reader is able to produces nodes only for
sites, or for all pages found (this quickly produces very dense graphs, be
careful!).
- org.miv.graphstream.io.GraphReaderWeb.
* Changed the GraphReaderFactory so that when it encounters a file name that
starts with "http://" or "https://" or that ends with ".html" or ".htm" it
produces a GraphReaderWeb. This is disputable as there may exist a lot
more of extensions for web pages...
- org.miv.graphstream.io.GraphReaderFactory
* Added a new class in the tools named "Ferret". The ferret is a little
explorer that uses the GraphReaderWeb to produces graph files. It can
also display them as the exploration goes. TODO: add a GUI to this tool,
actually it only handles command line options... too bad.
- org.miv.graphstream.tool.Ferret.
June 28 2007:
* Added a readerFor() method in GraphReaderFactory that takes a filename as
argument and a graph. It creates a GraphReaderListenerHelper and connects
the reader to the graph. This way each event will be propagated in the
graph.
- org.miv.graphstream.io.GraphReaderFactory.
* Added a graph "recoder" that works as a listener for a graph and writes
all events occuring in the graph to a file.
- org.miv;graphstream.io.GraphRecorder.
June 27 2007:
* Added the JOGL jars and native libraries in the lib/ directory. Changed
the NOTICE accordingly.
* Changed the GraphWriter interface. The obscure attribute filtering thing
is dead and removed. By default, all attributes are output. You can
filter them if you want, but you have to tell it (before, it was the
reverse, no attributes was output, unless they were unfiltered).
The corresponding graph writer implementations have been changed
accordingly:
- org.miv.graphstream.io.GraphWriter,
- org.miv.graphstream.io.GraphWriterDGS,
- org.miv.graphstream.io.GraphWriterDOT,
- org.miv.graphstream.io.GraphWriterHelper (no more really needed though).
* Changed the DGS graph format. The default format is now the 003 iteration.
There is no more node and edge typing lines at start. Attributes are no
more typed but must appear formated as: "name=value" or "name:value". The
value may be a string (quoted or not), a number or a symbol. It can also
be a sequence of string, number and symbols separated by commas (,). The
old DGS reader is still active but has been renamed GraphReaderDGS1And2.
The GraphReaderFactory is able to distinguish between the 001/002 formats