New features
----------------
* New Data Laboratory (Manipulate columns, Search/Replace, Merge, Sparklines...)
* Longitudinal network visualization, topology changing over time, as well as attributes
* Timeline is now working properly, appears automatically when the graph is dynamic, single button to enable filtering
* Show/Hide labels from filters - can be reset by the 'Reset Visible' action (left of graph window)
* Display edge weight as labels on visualization
* New StAX GEXF importer and exporter, with hierarchy and dynamic support
* New List/Arrays attribute types. Can only be imported from GEXF for now.
* NOT Operator (Filters)
* MASK Operator (Filters) - keep edges according to source/target/both/any - can easily obtain neighbors of a set of nodes
* Flatten Filter - Flatten a hierarchical graph to the visible view, transform meta-edges into normal edges
* New Giant Component Filter
* Time Frame import, new option in 'Import Report' to import successive static files and transform into dynamic
* Zoom slider in visualization options
* 'Import missing nodes' option in import report - choose whether to create them or not
* Set size for the 'Reset Size' action, by right-clicking on the reset size button
* Get degree column from Undirected graphs
* Statistics reports now saved in Gephi projects
* New 'Rescale Weight' option in Preview, to force weight looks the same as Overview
* New 'Original' option for edges color in Preview, keeps the original edge color, coming from Partition for instance
* Copy and move nodes to new or existing workspace
* New preview presets
* Localization is now possible, and change language from Gephi
* When parallel edges are found during import, it now increases the weight of the edge by default
* Meta-edges have now a separate scale slider in Visualization settings, change how thick they are compared to normal edges
* Option in Ego Filter to include the parent node or not
* Ranking and Partition list of attributes are now sorted
* Ranking now updates itself with filtered graphs. Clicking on Apply will refresh bounds and the transformation (color, size) is correct
* It's now possible to drag a filter sub query to become a main query
* With dynamic attributes, Ranking, Partition, Visualization and Filters will use the current Timeline range to find values
* Edge weight can be dynamic, type DYNAMIC_FLOAT. Force Atlas layout will use the current Timeline range
* Filters are refreshed when the graph is modified, the current filter is reexecuted
Bugfixes
-----------
* Wrong edge removed from Edge Weight filter (bug 603469)
* Filtering with convex hulls displayed (bug 541819)
* NullPointerException when filtering undirected graphs (bug 571153)
* NullPointerException on importing dynamic graph (bug 581872)
* gtk+ slider problem (bug 529913)
* Meta-edges are not displayed (bug 584283)
* Preview is not displaying meta-edges (bug 584289)
* Errors with Yifan Hu MultiLevel Layout on a filtered graph (bug 594643)
* Node Size Mode and Filter Paramaters don't save in project (bug 596430)
* Memory Leak in GEXF/GraphML Parser (bug 596872)
* Incorrect mutual edge weight on Preview (bug 610469)
* Progress is not shown when opening/saving project (bug 594644)
* Unable to cancel a project opening (bug 616415)
* Slowness on picking a partition entry (bug 519549)
* EdgeList Database Configuration is not saved (bug 571263)
* 'start' and 'end' attributes are missing when exporting dynamic GEXF (bug 521848)
* Partition "All Blacks" feature randomizes colors (bug 601066)
* Filtered graph not exported with "Select" pressed (bug 573685)
* Partition Settings in Filter not saved on switching workspaces (bug 616052)
* Opening Archived ZIP files is broken (bug 578876)
* Exception on clicking on 'Hierarchy' while running multilevel layout (bug 631663)
* GraphML importer doesn't import node labels data (bug 581629)
* Cannot save / saves as when opening a Gephi by doubleclick a graph in Windows (bug 583397)
* ForceAtlas and Fruchterman Reingold not layouting with meta-edges (bug 584286)
* Memory Leak in Graph Distance (bug 587450)
* NullPointerException when executing the "Eigenvector Centrality" Statistic (bug 589731)
* NullPointerException when switching between workspaces while a layout is running (bug 597458)
* Can't drag a filter sub-query to become a root query (bug 626495)
* Ranking parameters re-initialized at each new ranking (bug 594231)
* Ranking not refreshed when graph filtered (bug 632459)
* Node invisible (too small) when created with the node pencil (bug 574807)
* Error when opening Plugin Center (bug 616829)
* Can't select Postgresql driver in database import settings (bug 595223)
* Can't display edge weight as text (bug 603134)
* Import transform to Undirected don't merge weight (bug 603478)
* Right click on workspace after deleting a node throws "node can't be null" (bug 605947)
* In/Out degree metric doesn't work with undirected graphs (bug 606305)
* NullPointerException when selecting "--Choose a Layout" in the Layout ComboBox (bug 606964)
* Workspace Selection failed to refresh after closing workspace (bug 616814)
* Visualization selection color inversion between 'out' and 'both' color (bug 618726)
* 'Format' not recognized on DL import (bug 619069)
* Edit window not hidden on tabs (bug 552494)
* dynamic graph unrecognized if everlasting nodes (bug 555637)
* FileNotFoundException during saving of PDF file (bug 572876)
* "Node must be in the graph" error when importing a hierarchical graph with height greater than 1 (bug 577180)
* Auto-scale flips the graph (bug 577843)
* Impossible to cancel the Average Path Length Statistic calculation (bug 590226)
* Preview ratio not available at first time (bug 594176)
* Default selection of Nodes in Data Laboratory necessary (bug 594515)
* "CommandLineParsing null" message when error on opening file from command line or desktop (bug 594630)
* Can't import the same file twice in Welcome window (bug 598157)
* csv file export problem (bug 598767)
* Can't close project when generating a graph (bug 631341)
* Visualization size limitation (bug 602470)
* duplicate label in filter window (bug 604003)
* Partitions don't refresh when opening project not from Overview (bug 612902)
* z-coordinate not exported in GraphML (bug 614606)
* Wrong node positions when setting X or Y to zero (bug 615844)
* Selected filter query not properly refreshed in UI (bug 626483)
* Export to pdf background is always white (bug 583386)
* SVG files not listed in Export dialog (bug 626394)
* Wrong node size when Ranking has same min and max size (bug 631689)
* Read positions from dot files (bug 594793)
* Ranking and Partition parameters list not ordered (bug 594520)
* Node Degree not in Label Text settings (bug 598170)
* Wrong folder selected in the Export Panel when changing file type (bug 620337)
* Generating a graph on a previously loaded undirected graph (bug 624671)
* Wrong stroke weight when SVG imported in Illustrator (bug 626378)
* Filtering not refreshed when sub-queries set or removed (bug 594511)
* Errors at PDF export when labels have font size zero (bug 626865)
* Text not displayed in Preview (bug 627567)
* Edges native color are not displayed in Preview (bug 586237)
* Edge weight scale is different between Graph and Preview (bug 569329)
* Negative edges not rendered in Preview (bug 628223)
* Edges weight not merged with parallel edges (bug 648600)
* Partition filter automatically filters null value (bug 648600)
* Exception on opening project file (bug 648617)
* Ego Filter doesn't include the node itself (bug 649908)
* PDF Export only with default font (bug 651273)
* Nodes not unselected after turning off Selection on Filter Panel (bug 649920)
API Changes
---------------
* Add a 'flatten()' method to 'HierarchicalGraph' to flatten the hierarchical graph and transform meta edges into regular edges.
* Add 'destroy(Filter filter)' in 'FilterBuilder' to receive notification when a filter query is removed and clean-up.
* Add 'MetaEdgeBuilder' in Graph SPI to allow custom builders. Add 'GraphSettings.setMetaEdgeBuilder()' in the graph model settings.
* Modify 'StatisticsModel' to store reports directly instead of 'Statistics' instance. As a consequence, the model has now a 'getReport()' and a 'getResult()' method that UI can use. The currently running statistics can now be get with a new 'getRunning()' method.
* Simplify and improve attribute events management. Event listeners now subscribe directly from the 'AttributeModel' instead of 'AttributeTable' and will receive events for all tables. Refactoring of the 'AttributeEvent' class with 'AttributeTable' as source and a new 'AttributeEventData' object as data. A new 'SET_VALUE' has been implemented for getting events when attribute values are set.
* Changes in 'AttributeRowFactory', the 'newNodeRow()' method now takes the owner object 'NodeData' as a parameter. Similarly for 'newEdgeRow()' and 'newRowForTable()'.
* Add 'getEdge(Node, Node)' in GraphAPI for consistency reasons.
* Changes in Processor SPI. The 'Processor' has now setters instead of a 'process()' method with parameters. How processors are created remains the same. Creation of a 'ProcessorUI' interface for processors settings configuration. A 'ProcessorUI' implementation provides a panel, which is shown when the import report is closing. The 'ProcessorUI' also allows to disable a processor with some conditions.
* Add 'getColor()' method in 'NodeDraft' and 'EdgeDraft'.
* Define the "Overview, "Data Laboratory" and "Preview" as perspectives. Create a new SPI for perspecives and perspective members. Members are simply the 'TopComponent' that belong to a perspective. Plugins can implement 'PerspectiveMember' to define the open and close behaviour.
* Add list/array types in Attributes API. All native types has now a related list type, except dynamic types. The list types inherits from 'AbstractList'.
* Changes in the way Import API deals with time intervals and dynamic data. Support for dynamic attributes has been added with a new 'addAttributeValue()' method in 'NodeDraft' and 'EdgeDraft'. For improving data cleanup possibilities, 'NodeDraftGetter' and 'EdgeDraftgetter' now returns an 'AttributeRow' instead of a list of attribute values only. Finally to profit from latest improvements, draft elements returns directly a 'TimeInterval' type instead of the list of slices. Methods with 'Slice' have been renamed to 'Interval' for consistency reasons.
* Add dynamic types into Attributes API. Dynamic types store values with a time interval and query can be customized with estimators. All dynamic types inherit from 'DynamicType'
* Graph API event management improvements. The 'GraphEvent' has now precise events, including 'ADD_NODES', 'REMOVE_NODES', 'ADD_EDGES', 'REMOVE_EDGES' and 'VISIBLE_VIEW'. A new 'GraphEventData' interface has been created to retrieve elements related to the events.
* Export API refactoring, inspired from ImportAPI. Create an 'ExporterBuilder' interface for exporter creation and different exporters: 'GraphExporter', 'VectorExporter', 'ByteExporter' and 'CharacterExporter' that covers common cases. The way exporters write data has been rationalized by using either 'java.io.Writer' (text) or 'java.io.OutputStream' (byte). The 'ExportController' has been improved to support all use-cases, including file, writer and stream export.
* Add Spigot support to the ImportAPI and SPI. Like 'DatabaseImporter', the 'SpigotImporter' interface is a new type of Importers. Modifications have also be made to the 'ImportController' to support spigot import.
* Refactoring and improvements in the Import API and SPI. The refactoring aim is to solve the singleton issue with importers and let users implement builders interface that create importers instance. Therefore an 'ImporterBuilder' interface has been created and should be registered with the '@ServiceProvider' annotation. The various importers types have been simplified and leave more choice to the implementations about how the input is managed. XML and Text file importers has been merged in a 'FileImporter' interface, working with the 'java.io.Reader'. Utility static methods, for instance <em>get Document from Reader</em> can now be found in a new 'ImportUtils' class. The 'ImportController' has been simplified for File import and now accepts 'java.io.Reader' also. The main improvement on these modules in the support of UI components for importers. The aim is to let importers define an 'ImporterUI' implementation to manage settings of these importers.
* Improvements in the GraphAPI identifiers management. The system is now storing String identifiers coming from users. New getters and setters methods have been created in 'Graph': 'Graph.setId(Node, String)', 'Graph.setId(Edge, String)', 'Graph.getNode(String)', 'Graph.getEdge(String)'. The 'NodeData.setId()' and 'EdgeData.setId()' methods have been removed, compatibility can't be kept. Factory has also be changed to allow to create elements with String ID directly, as it's not possible anymore to do it from 'NodeData'.
* Changes in AttributesAPI with event management. The lookup system in 'AttributeTable' has been replaced by a more traditional event management system, with new 'AttributeEvent' and 'AttributeListener' interfaces. The dispatch implementation is also now on a separate thread.
* Changes in Import modules to separate core and user interfaces. The 'ImportController' is now doing import task only and a new 'ImportControllerUI' is displaying the user interface (Report Panel). The 'ImportControllerUI' interface is located in the DesktopProject module and should be user to properly import file from Plugins. The 'ImportController' methods could be used from the toolkit.