Gephi 0.9.0

@mbastian mbastian released this Dec 20, 2015 · 417 commits to master since this release

New features highlight

  • Compatibility with Java 7 and 8 on all platforms
  • Performance and memory-usage improvements thanks to a redesigned core
  • New Appearance module that merges the Ranking and Partition modules
  • New palette chooser and generator for partitions. The generator algorithm is designed to find the most suitable color palette
  • Multi-graph support, it's now possible to import multiple edges with different relationship types between nodes
  • Dynamic graphs can now be represented by a collection of timestamps, in addition of intervals
  • Multiple graphs can be imported at the same time, typically a collection of graphs at different timestamps

Other new or improved features

  • Auto-apply on dynamic partition (#606)
  • Workspace selection as tabs (#1105)
  • Add Applications shortcut in DMG file (#1117)
  • Implement directional zoom (#1126)
  • Add progress when taking screenshots (#1133)
  • Add support for color names and hex/oct codes in importers (#1146)
  • Add edge color parsing in GML importer (#1147)
  • Add multiple files import support (#1150)
  • GEXF 1.3 support for import/export (#1152)
  • Add Import Spreadsheet option to File menu (#1155)
  • Update ForceAtlas2 adaptive speed to better formula (#1158)
  • Add Noverlap layout (#1161)
  • Add OpenOrd layout (#1162)
  • Add clear UI hook for mouse selection configuration panel (#1165)
  • Bundle JRE in Mac OS App (#1170)
  • Print application log to output window (#1171)
  • Add copy to clipboard context menu on Import's report panel (#1182)
  • Add new edge filter based on edge type (#1189)
  • Add filter that keeps only nodes that have self-loop (#1203)
  • Add import support for TGF graph format (#1240)

Removed features

  • Remove hierarchical graphs support
  • Remove support for 3D graph navigation
  • Remove proprietary DB drivers (SQLServer, Teradata)
  • Remove pie charts in context and partition modules
  • Removed HITS statistics
  • Removed Clustering module

Project file compatibility

The .gephi files created with Gephi 0.9.0 won't work on earlier versions as the format code has been redesigned. However, files from 0.8.2 and anterior can be opened by Gephi 0.9.0. Therefore, we advise not to overwrite your project files if you still plan to use earlier versions of Gephi.

Bugfixes

  • graphml edgedefault not handled to spec (#147)
  • Misleading average edge weights in dynamic networks (#156)
  • Color the edge with the opposite node color when selected in Overview (#292)
  • ImportController.getFileImporter() should match importer name and extension (#319)
  • DOT parser is broken (#320)
  • Control Command on Mac (#327)
  • Can't import two files on the same time (#338)
  • Excessive Redrawing of windows Mac OS X (#401)
  • Database edge list UI not remembering settings, and a validation error (#451)
  • Partition colors generated at each workspace switch (#453)
  • Colors in partition filter inconsistent with real partition colors Filters (#455)
  • Freeze color mappings across graphs (#461)
  • Partition not applicable after filtering (#471)
  • Change filter button aspect to "Stop" when filtering is active Filters (#476)
  • No way to reset workspace layout (#480)
  • Picking a second partition colour does not bring up the colour picker, but changes the colour (#533)
  • Edge filter reduces displayed thickness of UNfiltered edges (#538)
  • Preview outputs margin automatic fitting (#572)
  • Node label outlines offset in Preview (#654)
  • Appending to exiting graph resets layout (#657)
  • Export filter as a true/false column does nothing (#680)
  • Reset size option/dialog should default to the current default node size (10.0?) and not 1.0 (#699)
  • Catch blank nodes during CSV import (#723)
  • NumberFormatException when loading dot file containing "[H,S,V]" colors (#739)
  • Gephi isn't compatible with Java 7 and 8 on all platforms (Windows, Mac OS X, Linux) (#748)
  • No way to filter out nodes that do not have a particular value? (#750)
  • WTF: Gephi deletes my GML file (#757)
  • Make partition colors persistent with the attribute column (#760)
  • Incorrect average degree on directed graphs (#767)
  • Add edge issue: node id not displayed in the GUI Data Laboratory (#782)
  • UNION filter does not work (#809)
  • Gephi hangs when applying degree filter (#813)
  • Networkx gexf parser conflict with gephi (#818)
  • Error and file deletion when importing non-gzipped .gexf files (#835)
  • Error while exporting a graph as a GML file (#905)
  • GDF import defaults to "directed" edge type, should be "undirected" (#906)
  • Center on graph is not working on flat graph (#916)
  • Cannot open graph files in /tmp (#918)
  • Gephi generates invalid GML files (#919)
  • File can't have repeated column names (#921)
  • Gephi should be DPI-aware or offer a DPI setting (#961)
  • Duplicate dynamic attribute value in GEFX causes Gephi to fail silently (#964)
  • gephi shouldn't delete files when it can't open them (#1041)
  • fail to parse valid DOT file if no node attribute present (#1053)
  • Edge colors are unnecessarily dark (#1060)
  • GraphML Importer doesn't recognize node attributes (#1084)
  • Add icon to rename workspace action (#1104)
  • Upgrade DBDrivers JDBC dependencies versions (#1115)
  • Error when saving a project file if the file has been deleted (#1119)
  • Gephi.app won't start from case-sensitive filesystem (#1144)
  • ImportGML forces all columns to be string even though Double is parsed (#1151)
  • Window title is truncated in some cases (#1156)
  • Memory leak when closing projects (#1157)
  • Control zoom so it can't move further than viewfield (#1159)
  • Rectangle selection with ctrl key doesn't work on OS X (#1166)
  • Filter duplicate doesn't properly clone properties (#1190)
  • Support quoted attributes in DOT import (#1195)
  • Color undirected edge with mixture of adjacent node colors in Overview (#1211)
  • Preview display with retina display support (#1222)
  • Make data laboratory refresh when the graph is filtered (#1238)

API Changes

  • The functionalities of DynamicAPI have either been replaced by native GraphAPI support or added to the TimelineAPI, effectively removing DynamicAPI from the codebase. The TimeFormat can be set via setTimeFormat() on GraphModel. Estimators are now configurable per column and can directly be set from the Column. Obtaining the minimum time bounds can now be obtained from the TimeIndex directly from GraphModel.
  • The createQuery() method in FilterController now takes a FilterBuilder instead of a Filter. It allows to track down builders down to the query level.
  • The ImportAPI now supports importing multiple graphs at the time and supports graph slices through an additional parameter on ContainerLoader. The setTimestamp() and setInterval() allows to define a point or period of existence for the entire graph. The ImportController also allow multiple containers to be processed through a new process() method. In parallel, ImporterUI now takes multiple importers and so does the Processor interface that now takes multiple containers.
  • The NodeFilter and EdgeFilter interfaces now inherit from a new ElementFilter so it's easier to create filters that work at the element level.
  • The filter() method in Operator now takes an array of Subgraph instead of Graph. This gives access to operations such as union or not.
  • Remove ClusteringAPI from codebase. It needs a complete rewrite.
  • Add ability to configure timezone with setTimeZone() on ContainerLoader in ImportAPI.
  • Remove standalone ContainerFactory class in ImportAPI and replace it with Container.Factory. Also add the ability to configure the TimeRepresentation in ContainerLoader. Finally, add color parsing utility in ImportUtils. It can be used to parse color names or codes.
  • The AttributeModel parameter in the execute() method of Statistics interface in StatisticsAPI has been removed as all features are now in GraphModel.
  • The ChangeListener in WorkspaceInformation has been replaced with a PropertyChangeListener.
  • Both RankingAPI and PartitionAPI have been replaced by a new AppearanceAPI, which supports both concepts. The SPI allows to create Transformer services, which can support either ranking or partition transformations. Ranking and Partition instances are defined in the API and gives access to underlying data. The core concept in appearance are functions, which wrap the transformation entirely and can be accessed in AppearanceModel.
  • The Processing dependency in PreviewAPI has been removed and replaced by regular Java2D. Therefore, the ProcessingTarget is now the G2DTarget. Also add a resize() method to facilitate integration.
  • Addition of a EdgeWeightMergeStrategy enum to control the way parallel edge weights are merged in ImportAPI.
  • Add ability to create WorkspacePersistenceProvider with a new SPI interface: WorkspaceBytesPersistenceProvider. The XML-based interface has being renamed into WorkspaceXMLPersistenceProvider.
  • Importers can now use the setValueString() method on ElementDraft. This will automatically parse the value based on the declared type reducing parsing code on the importer side. If the type is already in the right type, use the setValue() instead.
  • Refactoring of the import API. Introduction of a ColumnDraft interface which represents a to-be-created column and the method to manipulate them in ContainerLoader. The NodeDraft and EdgeDraft classes now inherits from a new ElementDraft, centralizing a lot of the code. The EdgeDraftGetter and NodeDraftGetter have been removed and their methods moved directly to the node/edge draft. New elements are now created using the ElementDraft.Factory, which can be obtained with the factory() method on ContainerLoader. Previously the ContainerUnloader returned an AttributeModel. This has been replaced with iterables over column drafts. The EdgeDefault enum becomes EdgeDiretionDefault and represents a graph-level configuration. The EdgeDefault is now edge-level configuration and can be set by setEdgeDirection() on EdgeDraft. Finally, convenient setColor() methods have been added to ElementDraft.
  • Complete rewrite of the GraphAPI and add GraphStore as dependency. The new API is entirely defined in the GraphStore project and Gephi makes it available through the GraphAPI. The AttributesAPI functionalities have been consolidated into the new graph API and therefore has been removed. There is too many API changes to be listed all but notable ones are the following.
    • All attribute features (e.g. add column) are now directly accessible from the GraphModel, and there's no more AttributeModel.
    • The AttributeColumn is renamed into Column, the AttributeTable is renamed into Table, AttributeOrigin is renamed into Origin and the AttributeType has been replaced by the direct usage of Class objects. Moreover, the AttributeUtils is now entirely static (i.e. no more needed to obtain an instance) and has multiple important additions such as full parse support.
    • The support for hierarchical graphs has been removed, but multi-graph support added. Each edge now can have a relationship type, and is zero by default. These types can be associated with an arbitrary label object, which can be configured in GraphModel.addEdgeType().
    • All node/edge data are now directly accessible from the interface. For instance, attribute values can be retrieved with the getAttribute() methods. All properties such as color or position are also accessible directly on the Node/Edge interfaces.
    • Dynamic graphs can now be represented with timestamps as well. Intervals are still supported but the API user must configure the preferred representation through the Configuration (must be done at initialization). The way elements' existence overtime has been greatly simplified with the addition of timestamp/interval management methods on Element, which both Node and Edge extends. See for instance addTimestamp(), addInterval(), getTimestamps() or getIntervals(). Similarly, each attribute getter or setter in Element is available with timestamps and intervals parameters so attribute values over time can be configured. Behind the scenes, the dynamic types used are defined in org.gephi.graph.api.types.
    • There's a new Subgraph interface that extends Graph and is available from GraphModel.getGraph(GraphView). This subgraph interface has additional features such as union() or intersection().
    • The graph listening system with GraphListener has been entirely replaced with a pull-based system of observers. The system no longer sends events at each update but listeners can create observers, which periodically check if something has changed. There's multiple types of observers: GraphObserver for topology changes, TableObserver for new/removed columns and ColumnObserver for attribute value changes. These observers can obtain diff objects such as GraphDiff or TableDiff to exactly obtain what has changed.