← Back to team overview

gephi.team team mailing list archive

[Merge] lp:~vojtech-bardiovsky/gephi/vna-import into lp:gephi

 

Mathieu Bastian has proposed merging lp:~vojtech-bardiovsky/gephi/vna-import into lp:gephi.

Requested reviews:
  Mathieu Bastian (mathieu.bastian)

For more details, see:
https://code.launchpad.net/~vojtech-bardiovsky/gephi/vna-import/+merge/54940
-- 
https://code.launchpad.net/~vojtech-bardiovsky/gephi/vna-import/+merge/54940
Your team Gephi Team is subscribed to branch lp:gephi.
=== added directory 'VnaPlugin'
=== added file 'VnaPlugin/build.xml'
--- VnaPlugin/build.xml	1970-01-01 00:00:00 +0000
+++ VnaPlugin/build.xml	2011-03-26 03:04:26 +0000
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
+<!-- for some information on what you could do (e.g. targets to override). -->
+<!-- If you delete this file and reopen the project it will be recreated. -->
+<project name="org.gephi.io.importer.plugin.vnaplugin" default="netbeans" basedir=".">
+    <description>Builds, tests, and runs the project org.gephi.io.importer.plugin.vnaplugin.</description>
+    <import file="nbproject/build-impl.xml"/>
+</project>

=== added file 'VnaPlugin/manifest.mf'
--- VnaPlugin/manifest.mf	1970-01-01 00:00:00 +0000
+++ VnaPlugin/manifest.mf	2011-03-26 03:04:26 +0000
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+OpenIDE-Module: org.gephi.io.importer.plugin.vnaplugin
+OpenIDE-Module-Localizing-Bundle: org/gephi/io/importer/plugin/vnaplugin/Bundle.properties
+OpenIDE-Module-Specification-Version: 1.0
+

=== added directory 'VnaPlugin/nbproject'
=== added file 'VnaPlugin/nbproject/build-impl.xml'
--- VnaPlugin/nbproject/build-impl.xml	1970-01-01 00:00:00 +0000
+++ VnaPlugin/nbproject/build-impl.xml	2011-03-26 03:04:26 +0000
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+*** GENERATED FROM project.xml - DO NOT EDIT  ***
+***         EDIT ../build.xml INSTEAD         ***
+-->
+<project name="org.gephi.io.importer.plugin.vnaplugin-impl" basedir="..">
+    <fail message="Please build using Ant 1.7.1 or higher.">
+        <condition>
+            <not>
+                <antversion atleast="1.7.1"/>
+            </not>
+        </condition>
+    </fail>
+    <property file="nbproject/private/suite-private.properties"/>
+    <property file="nbproject/suite.properties"/>
+    <fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail>
+    <property file="${suite.dir}/nbproject/private/platform-private.properties"/>
+    <property file="${suite.dir}/nbproject/platform.properties"/>
+    <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2";>
+        <attribute name="name"/>
+        <attribute name="value"/>
+        <sequential>
+            <property name="@{name}" value="${@{value}}"/>
+        </sequential>
+    </macrodef>
+    <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2";>
+        <attribute name="property"/>
+        <attribute name="value"/>
+        <sequential>
+            <property name="@{property}" value="@{value}"/>
+        </sequential>
+    </macrodef>
+    <property file="${user.properties.file}"/>
+    <nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+    <nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+    <nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+    <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness).">
+        <condition>
+            <not>
+                <contains string="${cluster.path.evaluated}" substring="platform"/>
+            </not>
+        </condition>
+    </fail>
+    <import file="${harness.dir}/build.xml"/>
+</project>

=== added file 'VnaPlugin/nbproject/genfiles.properties'
--- VnaPlugin/nbproject/genfiles.properties	1970-01-01 00:00:00 +0000
+++ VnaPlugin/nbproject/genfiles.properties	2011-03-26 03:04:26 +0000
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=f458774a
+build.xml.script.CRC32=d4f20b59
+build.xml.stylesheet.CRC32=a56c6a5b@1.42.2
+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=f458774a
+nbproject/build-impl.xml.script.CRC32=eafd874e
+nbproject/build-impl.xml.stylesheet.CRC32=238281d1@1.42.2

=== added file 'VnaPlugin/nbproject/project.properties'
--- VnaPlugin/nbproject/project.properties	1970-01-01 00:00:00 +0000
+++ VnaPlugin/nbproject/project.properties	2011-03-26 03:04:26 +0000
@@ -0,0 +1,2 @@
+javac.source=1.6
+javac.compilerargs=-Xlint -Xlint:-serial

=== added file 'VnaPlugin/nbproject/project.xml'
--- VnaPlugin/nbproject/project.xml	1970-01-01 00:00:00 +0000
+++ VnaPlugin/nbproject/project.xml	2011-03-26 03:04:26 +0000
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://www.netbeans.org/ns/project/1";>
+    <type>org.netbeans.modules.apisupport.project</type>
+    <configuration>
+        <data xmlns="http://www.netbeans.org/ns/nb-module-project/3";>
+            <code-name-base>org.gephi.io.importer.plugin.vnaplugin</code-name-base>
+            <suite-component/>
+            <module-dependencies>
+                <dependency>
+                    <code-name-base>org.gephi.data.attributes.api</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>0.7.1.3</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.gephi.io.importer.api</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>0.7.1.9</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.gephi.utils.longtask</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>0.7.1.1</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.openide.filesystems</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>7.38.2</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.openide.util</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>8.6.1</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.openide.util.lookup</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>8.3.1</specification-version>
+                    </run-dependency>
+                </dependency>
+            </module-dependencies>
+            <public-packages>
+                <package>org.gephi.io.importer.plugin.vnaplugin</package>
+            </public-packages>
+        </data>
+    </configuration>
+</project>

=== added file 'VnaPlugin/nbproject/suite.properties'
--- VnaPlugin/nbproject/suite.properties	1970-01-01 00:00:00 +0000
+++ VnaPlugin/nbproject/suite.properties	2011-03-26 03:04:26 +0000
@@ -0,0 +1,1 @@
+suite.dir=${basedir}/..

=== added directory 'VnaPlugin/src'
=== added directory 'VnaPlugin/src/org'
=== added directory 'VnaPlugin/src/org/gephi'
=== added directory 'VnaPlugin/src/org/gephi/io'
=== added directory 'VnaPlugin/src/org/gephi/io/importer'
=== added directory 'VnaPlugin/src/org/gephi/io/importer/plugin'
=== added directory 'VnaPlugin/src/org/gephi/io/importer/plugin/vnaplugin'
=== added file 'VnaPlugin/src/org/gephi/io/importer/plugin/vnaplugin/Bundle.properties'
--- VnaPlugin/src/org/gephi/io/importer/plugin/vnaplugin/Bundle.properties	1970-01-01 00:00:00 +0000
+++ VnaPlugin/src/org/gephi/io/importer/plugin/vnaplugin/Bundle.properties	2011-03-26 03:04:26 +0000
@@ -0,0 +1,12 @@
+OpenIDE-Module-Display-Category=Plugin
+OpenIDE-Module-Long-Description=\
+    Plugin for importing from netdraw .vna files (http://netwiki.amath.unc.edu/DataFormats/NetDrawVna).
+OpenIDE-Module-Name=VnaPlugin
+OpenIDE-Module-Short-Description=Plugin for importing from netdraw .vna files.
+
+fileType_VNA_Name=VNA Files
+
+ImporterVnaUI.displayName=VNA import
+ImporterVnaUI.message.linear=Line width increases linearly with its value.
+ImporterVnaUI.message.square_root=Line width increases with a square root of its value.
+ImporterVnaUI.message.logarithmic=Line width increases logarithmically with its value.
\ No newline at end of file

=== added file 'VnaPlugin/src/org/gephi/io/importer/plugin/vnaplugin/ImporterBuilderVNA.java'
--- VnaPlugin/src/org/gephi/io/importer/plugin/vnaplugin/ImporterBuilderVNA.java	1970-01-01 00:00:00 +0000
+++ VnaPlugin/src/org/gephi/io/importer/plugin/vnaplugin/ImporterBuilderVNA.java	2011-03-26 03:04:26 +0000
@@ -0,0 +1,59 @@
+/*
+Copyright 2008-2010 Gephi
+Authors : Vojtech Bardiovsky <vojtech.bardiovsky@xxxxxxxxx>
+Website : http://www.gephi.org
+
+This file is part of Gephi.
+
+Gephi is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+Gephi is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Gephi.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package org.gephi.io.importer.plugin.vnaplugin;
+
+import org.gephi.io.importer.api.FileType;
+import org.gephi.io.importer.spi.FileImporter;
+import org.gephi.io.importer.spi.FileImporterBuilder;
+import org.openide.filesystems.FileObject;
+import org.openide.util.NbBundle;
+import org.openide.util.lookup.ServiceProvider;
+
+/**
+ * @author Vojtech Bardiovsky
+ */
+@ServiceProvider(service = FileImporterBuilder.class)
+public final class ImporterBuilderVNA implements FileImporterBuilder {
+
+    public static final String IDENTIFER = "vna";
+
+    @Override
+    public FileImporter buildImporter() {
+        return new ImporterVNA();
+    }
+
+    @Override
+    public String getName() {
+        return IDENTIFER;
+    }
+
+    @Override
+    public FileType[] getFileTypes() {
+        FileType ft = new FileType(".vna", NbBundle.getMessage(getClass(), "fileType_VNA_Name"));
+        return new FileType[]{ft};
+    }
+
+    @Override
+    public boolean isMatchingImporter(FileObject fileObject) {
+        return fileObject.getExt().equalsIgnoreCase("vna");
+    }
+}
+

=== added file 'VnaPlugin/src/org/gephi/io/importer/plugin/vnaplugin/ImporterVNA.java'
--- VnaPlugin/src/org/gephi/io/importer/plugin/vnaplugin/ImporterVNA.java	1970-01-01 00:00:00 +0000
+++ VnaPlugin/src/org/gephi/io/importer/plugin/vnaplugin/ImporterVNA.java	2011-03-26 03:04:26 +0000
@@ -0,0 +1,400 @@
+/*
+Copyright 2008-2010 Gephi
+Authors : Vojtech Bardiovsky <vojtech.bardiovsky@xxxxxxxxx>
+Website : http://www.gephi.org
+
+This file is part of Gephi.
+
+Gephi is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+Gephi is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Gephi.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.gephi.io.importer.plugin.vnaplugin;
+
+import java.io.LineNumberReader;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.gephi.data.attributes.api.AttributeColumn;
+import org.gephi.data.attributes.api.AttributeType;
+import org.gephi.io.importer.api.ContainerLoader;
+import org.gephi.io.importer.api.EdgeDraft;
+import org.gephi.io.importer.api.ImportUtils;
+import org.gephi.io.importer.api.Issue;
+import org.gephi.io.importer.api.NodeDraft;
+import org.gephi.io.importer.api.Report;
+import org.gephi.io.importer.spi.FileImporter;
+import org.gephi.utils.longtask.spi.LongTask;
+import org.gephi.utils.progress.Progress;
+import org.gephi.utils.progress.ProgressTicket;
+
+/**
+ * Netdraw .vna files importer implemented as a simple state machine due to very
+ * loose specification of .vna format.
+ *
+ * @author Vojtech Bardiovsky
+ */
+public class ImporterVNA implements FileImporter, LongTask {
+
+    //Architecture
+    private Reader reader;
+    private ContainerLoader container;
+    private Report report;
+    private ProgressTicket progressTicket;
+    private boolean cancel = false;
+
+    private EdgeWidthFunction edgeWidthFunction;
+
+    Pattern pattern;
+
+    /**
+     * States for the state machine.
+     */
+    private enum State {DEFAULT, NODE_DATA, NODE_PROPERTIES, TIE_DATA,
+                        NODE_DATA_DEF, NODE_PROPERTIES_DEF, TIE_DATA_DEF};
+
+    /**
+     * Attributes defined by the VNA file: VNA files allow some or no properties
+     * to be defined for nodes and edges.
+     */
+    private enum Attributes {OTHER, NODE_X, NODE_Y, NODE_COLOR, NODE_SIZE,
+                             NODE_SHAPE, NODE_SHORT_LABEL, EDGE_STRENGTH};
+    /**
+     * Declared column labels for all sections.
+     */
+    private AttributeColumn[] nodeDataColumns, tieDataColumns;
+    private String[] nodePropertiesLabels;
+    /**
+     * Declared attributes for the node properties declaration section.
+     */
+    private Attributes[] nodeDataAttributes;
+    /**
+     * Declared attributes for the edge declaration section.
+     */
+    private Attributes[] tieAttributes;
+
+    @Override
+    public boolean execute(ContainerLoader container) {
+        this.container = container;
+        this.report = new Report();
+        LineNumberReader lineReader = ImportUtils.getTextReader(reader);
+        try {
+            importData(lineReader);
+        } catch (Exception e) {
+            report.logIssue(new Issue(e, Issue.Level.SEVERE));
+        }
+        return !cancel;
+    }
+
+    private void importData(LineNumberReader reader) throws Exception {
+        List<String> lines = new ArrayList<String>();
+        while (reader.ready()) {
+            String line = reader.readLine();
+            if (line != null && !line.isEmpty()) {
+                lines.add(line);
+            }
+        }
+        
+        State state = State.DEFAULT;
+        Progress.start(progressTicket, lines.size());
+        String[] split;
+
+        final Pattern nodeDataPattern = Pattern.compile("^\\*node data\\s*", Pattern.CASE_INSENSITIVE);
+        final Pattern nodePropertiesPattern = Pattern.compile("^\\*node properties\\s*", Pattern.CASE_INSENSITIVE);
+        final Pattern tieDataPattern = Pattern.compile("^\\*tie data\\s*", Pattern.CASE_INSENSITIVE);
+
+        for (String line : lines) {
+            if (cancel) {
+                return;
+            }
+            if (nodeDataPattern.matcher(line).matches()) {
+                state = State.NODE_DATA_DEF;
+                continue;
+            } else if (nodePropertiesPattern.matcher(line).matches()) {
+                state = State.NODE_PROPERTIES_DEF;
+                continue;
+            } else if (tieDataPattern.matcher(line).matches()) {
+                state = State.TIE_DATA_DEF;
+                continue;
+            }
+            switch (state) {
+                case NODE_DATA_DEF:
+                    String[] nodeDataLabels = line.split("[\\s,]+");
+                    nodeDataColumns = new AttributeColumn[nodeDataLabels.length];
+                    for (int i = 1; i < nodeDataLabels.length; i++) {
+                        nodeDataColumns[i] = container.getAttributeModel().getNodeTable().addColumn(nodeDataLabels[i], AttributeType.STRING);
+                    }
+                    state = State.NODE_DATA;
+                    break;
+                case NODE_PROPERTIES_DEF:
+                    // Initialize node properties labels and fill nodeAttributes
+                    // if some attributes can be used for NodeDraft
+                    nodePropertiesLabels = line.split("[\\s,]+");
+                    nodeDataAttributes = new Attributes[nodePropertiesLabels.length];
+                    for (int i = 1; i < nodePropertiesLabels.length; i++) {
+                        if (nodePropertiesLabels[i].equalsIgnoreCase("x")) {
+                            nodeDataAttributes[i] = Attributes.NODE_X;
+                        } else if (nodePropertiesLabels[i].equalsIgnoreCase("y")) {
+                            nodeDataAttributes[i] = Attributes.NODE_Y;
+                        } else if (nodePropertiesLabels[i].equalsIgnoreCase("color")) {
+                            nodeDataAttributes[i] = Attributes.NODE_COLOR;
+                        } else if (nodePropertiesLabels[i].equalsIgnoreCase("size")) {
+                            nodeDataAttributes[i] = Attributes.NODE_SIZE;
+                        } else if (nodePropertiesLabels[i].equalsIgnoreCase("shortlabel")) {
+                            nodeDataAttributes[i] = Attributes.NODE_SHORT_LABEL;
+                        } else if (nodePropertiesLabels[i].equalsIgnoreCase("shape")) {
+                            nodeDataAttributes[i] = Attributes.NODE_SHAPE;
+                        } else {
+                            throw new RuntimeException("Unexpected node parameter at line '" + line + "';");
+                        }
+                    }
+                    state = State.NODE_PROPERTIES;
+                    break;
+                case TIE_DATA_DEF:
+                    String tieDataLabels[] = line.split("[\\s,]+");
+                    tieDataColumns = new AttributeColumn[tieDataLabels.length];
+                    tieAttributes = new Attributes[tieDataColumns.length];
+                    if (tieDataColumns.length < 2) {
+                        throw new RuntimeException("Edge data labels definition does not contain two necessary variables ('from' and 'to').");
+                    }
+                    // Initialize edge labels and fill edgeAttributes if some
+                    // attributes can be used for EdgeDraft
+                    for (int i = 2; i < tieDataColumns.length; i++) {
+                        if (tieDataLabels[i].equalsIgnoreCase("strength")) {
+                            tieAttributes[i] = Attributes.EDGE_STRENGTH;
+                        } else {
+                            tieAttributes[i] = Attributes.OTHER;
+                            tieDataColumns[i] = container.getAttributeModel().getEdgeTable().addColumn(tieDataLabels[i], AttributeType.STRING);
+                        }
+                    }
+                    state = State.TIE_DATA;
+                    break;
+                case NODE_DATA:
+                    // new node
+                    split = split(line);
+                    if (split.length != nodeDataColumns.length) {
+                        report.logIssue(new Issue("Number of labels and number of data mismatch in: '" + line + "'", Issue.Level.WARNING));
+                        break;
+                    }
+                    addNode(split);
+                    // parse - if parse error => LOG error
+                    break;
+                case NODE_PROPERTIES:
+                    split = split(line);
+                    if (split.length != nodePropertiesLabels.length) {
+                        report.logIssue(new Issue("Number of labels and number of data mismatch in: '" + line + "'", Issue.Level.WARNING));
+                        break;
+                    }
+                    addNodeProperties(split);
+                    // parse - if parse error => LOG error
+                    break;
+                case TIE_DATA:
+                    split = split(line);
+                    if (split.length != tieDataColumns.length) {
+                        report.logIssue(new Issue("Number of labels and number of data mismatch in: '" + line + "'", Issue.Level.WARNING));
+                        break;
+                    }
+                    addEdge(split);
+                    // parse - if parse error => LOG error
+                    break;
+            }
+            Progress.progress(progressTicket);
+        }
+    }
+
+    /**
+     * Splits the line using space separator, but respecting quotes.
+     */
+    private String[] split(String line) {
+        // Pattern for splitting by spaces but respecting quotes.
+        if (pattern == null) {
+            pattern = Pattern.compile("[^\\s\"]+|\"([^\"]*)\"");
+        }
+        List<String> tokens = new ArrayList<String>();
+        Matcher patternMatcher = pattern.matcher(line);
+        while (patternMatcher.find()) {
+            if ((patternMatcher.group(1)) != null) {
+                tokens.add(patternMatcher.group(1));
+            } else {
+                tokens.add(patternMatcher.group());
+            }
+        }
+        return tokens.toArray(new String[]{});
+    }
+
+    private void addNode(String[] nodeData) {
+        NodeDraft node;
+        String id = nodeData[0];
+        if (!container.nodeExists(id)) {
+            node = container.factory().newNodeDraft();
+            node.setId(id);
+            container.addNode(node);
+        } else {
+            node = container.getNode(id);
+        }
+        for (int i = 1; i < nodeDataColumns.length; i++) {
+            node.addAttributeValue(nodeDataColumns[i], nodeData[i]);
+        }
+    }
+
+    private void addNodeProperties(String[] nodeProperties) {
+        NodeDraft node;
+        String id = nodeProperties[0];
+        if (!container.nodeExists(id)) {
+            node = container.factory().newNodeDraft();
+            node.setId(id);
+            container.addNode(node);
+        } else {
+            node = container.getNode(id);
+        }
+        int i = 0;
+        try {
+            for (i = 1; i < nodeProperties.length; i++) {
+                switch (nodeDataAttributes[i]) {
+                    case NODE_X:
+                        node.setX(Float.parseFloat(nodeProperties[i]));
+                        break;
+                    case NODE_Y:
+                        node.setY(Float.parseFloat(nodeProperties[i]));
+                        break;
+                    case NODE_COLOR:
+                        // Add just shades of red as NetDraw VNA is not specific
+                        // about color.
+                        node.setColor(Integer.parseInt(nodeProperties[i]), 0, 0);
+                        break;
+                    case NODE_SIZE:
+                        node.setSize(Float.parseFloat(nodeProperties[i]));
+                        break;
+                    case NODE_SHORT_LABEL:
+                        node.setLabel(nodeProperties[i]);
+                        break;
+                }
+            }
+        } catch (NumberFormatException e) {
+            report.logIssue(new Issue("Error parsing numerical value at '" + nodeProperties[i] + "'.", Issue.Level.WARNING));
+        }
+    }
+
+    private void addEdge(String[] edgeData) {
+        NodeDraft sourceNode;
+        if (!container.nodeExists(edgeData[0])) {
+            sourceNode = container.factory().newNodeDraft();
+            sourceNode.setId(edgeData[0]);
+            container.addNode(sourceNode);
+        } else {
+            sourceNode = container.getNode(edgeData[0]);
+        }
+        NodeDraft targetNode;
+        if (!container.nodeExists(edgeData[1])) {
+            targetNode = container.factory().newNodeDraft();
+            targetNode.setId(edgeData[1]);
+            container.addNode(targetNode);
+        } else {
+            targetNode = container.getNode(edgeData[1]);
+        }
+        EdgeDraft edge = container.getEdge(sourceNode, targetNode);
+        if (edge == null) {
+            edge = container.factory().newEdgeDraft();
+            edge.setSource(sourceNode);
+            edge.setTarget(targetNode);
+            int i = 0;
+            try {
+                for (i = 2; i < edgeData.length; i++) {
+                    switch (tieAttributes[i]) {
+                        case EDGE_STRENGTH:
+                            float weight = Float.parseFloat(edgeData[i]);
+                            if (edgeWidthFunction != null) {
+                                weight = edgeWidthFunction.computeTransformation(weight);
+                            }
+                            edge.setWeight(weight);
+                            break;
+                        case OTHER:
+                            edge.addAttributeValue(tieDataColumns[i], edgeData[i]);
+                            break;
+                    }
+                }
+            } catch (NumberFormatException e) {
+                report.logIssue(new Issue("Error parsing numerical value at '" + edgeData[i] + "'.", Issue.Level.WARNING));
+            }
+            container.addEdge(edge);
+        }
+    }
+
+    public void setEdgeWidthFunction(EdgeWidthFunction function) {
+        this.edgeWidthFunction = function;
+    }
+
+    @Override
+    public void setReader(Reader reader) {
+        this.reader = reader;
+    }
+
+    @Override
+    public ContainerLoader getContainer() {
+        return container;
+    }
+
+    @Override
+    public Report getReport() {
+        return report;
+    }
+
+    @Override
+    public boolean cancel() {
+        cancel = true;
+        return true;
+    }
+
+    @Override
+    public void setProgressTicket(ProgressTicket progressTicket) {
+        this.progressTicket = progressTicket;
+    }
+
+    public static class EdgeWidthFunction {
+        public enum Function {LINEAR, SQUARE_ROOT, LOGARITHMIC};
+        
+        public final Function function;
+        public final float coefficient;
+
+        public EdgeWidthFunction(Function function, float coefficient) {
+            this.function = function;
+            this.coefficient = coefficient;
+        }
+
+        public float computeTransformation(float value) {
+            switch (function) {
+                case LINEAR:
+                    return value * coefficient;
+                case LOGARITHMIC:
+                    return (float) Math.log(value + 10);
+                case SQUARE_ROOT:
+                    return (float) Math.sqrt(value);
+            }
+            return 0;
+        }
+
+        @Override
+        public String toString() {
+            switch (function) {
+                case LINEAR:
+                    return "Linear";
+                case LOGARITHMIC:
+                    return "Logartihmic";
+                case SQUARE_ROOT:
+                    return "Square root";
+            }
+            return null;
+        }
+    }
+}

=== added file 'VnaPlugin/src/org/gephi/io/importer/plugin/vnaplugin/ImporterVnaUI.java'
--- VnaPlugin/src/org/gephi/io/importer/plugin/vnaplugin/ImporterVnaUI.java	1970-01-01 00:00:00 +0000
+++ VnaPlugin/src/org/gephi/io/importer/plugin/vnaplugin/ImporterVnaUI.java	2011-03-26 03:04:26 +0000
@@ -0,0 +1,149 @@
+/*
+Copyright 2008-2010 Gephi
+Authors : Vojtech Bardiovsky <vojtech.bardiovsky@xxxxxxxxx>
+Website : http://www.gephi.org
+
+This file is part of Gephi.
+
+Gephi is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+Gephi is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with Gephi.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package org.gephi.io.importer.plugin.vnaplugin;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import org.gephi.io.importer.plugin.vnaplugin.ImporterVNA.EdgeWidthFunction;
+import org.gephi.io.importer.spi.Importer;
+import org.gephi.io.importer.spi.ImporterUI;
+import org.openide.util.NbBundle;
+import org.openide.util.lookup.ServiceProvider;
+
+/**
+ * VNA importer UI.
+ * @author Vojtech Bardiovsky
+ */
+@ServiceProvider(service = ImporterUI.class)
+public class ImporterVnaUI implements ImporterUI {
+
+    private ImporterVNA importer;
+    private JComboBox comboBox;
+    private JTextField textField;
+    private JLabel messageLabel;
+    private JPanel panel;
+
+    private final String MESSAGE_LINEAR = NbBundle.getMessage(getClass(), "ImporterVnaUI.message.linear");
+    private final String MESSAGE_SQUARE_ROOT = NbBundle.getMessage(getClass(), "ImporterVnaUI.message.square_root");
+    private final String MESSAGE_LOGARITHMIC = NbBundle.getMessage(getClass(), "ImporterVnaUI.message.logarithmic");
+
+    @Override
+    public void setup(Importer importer) {
+        this.importer = (ImporterVNA) importer;
+    }
+
+    @Override
+    public JPanel getPanel() {
+        panel = new JPanel(new GridBagLayout());
+        comboBox = new JComboBox(EdgeWidthFunction.Function.values());
+        textField = new JTextField("1", 5);
+        messageLabel = new JLabel(MESSAGE_LINEAR);
+
+        comboBox.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                comboBoxSelectionChanged(e);
+            }
+        });
+
+        GridBagConstraints constraints = new GridBagConstraints();
+        constraints.weightx = 1.0;
+        constraints.weighty = 1.0;
+        constraints.anchor = GridBagConstraints.NORTHWEST;
+        constraints.insets = new Insets(5, 5, 5, 5);
+
+        constraints.gridx = 0;
+        constraints.gridy = 0;
+        panel.add(comboBox, constraints);
+
+        constraints.gridx = 1;
+        panel.add(textField, constraints);
+
+        constraints.gridx = 0;
+        constraints.gridy = 1;
+        constraints.gridwidth = 2;
+        panel.add(messageLabel, constraints);
+
+        constraints.gridy = 2;
+        constraints.gridwidth = 2;
+        constraints.fill = GridBagConstraints.VERTICAL;
+        panel.add(new JPanel());
+
+        panel.setPreferredSize(new Dimension(350, 100));
+        panel.setSize(new Dimension(350, 100));
+
+        return panel;
+    }
+
+    private void comboBoxSelectionChanged(ActionEvent e) {
+        switch ((EdgeWidthFunction.Function) comboBox.getSelectedItem()) {
+            case LINEAR:
+                messageLabel.setText(MESSAGE_LINEAR);
+                textField.setEditable(true);
+                break;
+            case LOGARITHMIC:
+                messageLabel.setText(MESSAGE_LOGARITHMIC);
+                textField.setEditable(false);
+                break;
+            case SQUARE_ROOT:
+                messageLabel.setText(MESSAGE_SQUARE_ROOT);
+                textField.setEditable(false);
+                break;
+        }
+    }
+
+    @Override
+    public void unsetup(boolean update) {
+        if (update) {
+            float coefficient = 1;
+            if (((EdgeWidthFunction.Function) comboBox.getSelectedItem()).equals(EdgeWidthFunction.Function.LINEAR)) {
+                try {
+                    coefficient = Float.parseFloat(textField.getText());
+                } catch (NumberFormatException e) {}
+            }
+            importer.setEdgeWidthFunction(new EdgeWidthFunction((EdgeWidthFunction.Function) comboBox.getSelectedItem(), coefficient));
+        }
+        panel = null;
+        importer = null;
+        textField = null;
+        messageLabel = null;
+        comboBox = null;
+    }
+
+    @Override
+    public String getDisplayName() {
+        return NbBundle.getMessage(getClass(), "ImporterVnaUI.displayName");
+    }
+
+    @Override
+    public boolean isUIForImporter(Importer importer) {
+        return importer instanceof ImporterVNA;
+    }
+
+}

=== added directory 'VnaPlugin/test'
=== added directory 'VnaPlugin/test/unit'
=== added directory 'VnaPlugin/test/unit/src'
=== added directory 'VnaPlugin/test/unit/src/org'
=== added directory 'VnaPlugin/test/unit/src/org/gephi'
=== added directory 'VnaPlugin/test/unit/src/org/gephi/io'
=== added directory 'VnaPlugin/test/unit/src/org/gephi/io/importer'
=== added directory 'VnaPlugin/test/unit/src/org/gephi/io/importer/plugin'
=== added directory 'VnaPlugin/test/unit/src/org/gephi/io/importer/plugin/vnaplugin'
=== added file 'VnaPlugin/test/unit/src/org/gephi/io/importer/plugin/vnaplugin/ImporterVNATest.java'
--- VnaPlugin/test/unit/src/org/gephi/io/importer/plugin/vnaplugin/ImporterVNATest.java	1970-01-01 00:00:00 +0000
+++ VnaPlugin/test/unit/src/org/gephi/io/importer/plugin/vnaplugin/ImporterVNATest.java	2011-03-26 03:04:26 +0000
@@ -0,0 +1,82 @@
+package org.gephi.io.importer.plugin.vnaplugin;
+
+import org.gephi.io.importer.api.Report;
+import org.gephi.io.importer.api.Container;
+import org.openide.util.Lookup;
+import org.gephi.io.importer.api.ContainerFactory;
+import java.io.StringReader;
+import org.gephi.io.importer.api.Issue;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ * JUnit test for {@link ImporterVNA}.
+ * 
+ * @author Vojtech Bardiovsky
+ */
+public class ImporterVNATest {
+
+    /**
+     * Test of execute method, of class ImporterVNA.
+     */
+    @Test
+    public void testExecute() {
+        Container container = Lookup.getDefault().lookup(ContainerFactory.class).newContainer();
+        container.setReport(new Report());
+        ImporterVNA instance = new ImporterVNA();
+        instance.setReader(new StringReader(INPUT_1));
+        instance.execute(container.getLoader());
+        for (Issue issue : instance.getReport().getIssues()) {
+            System.out.println(issue.getLevel() + " - " + issue.getMessage());
+        };
+        System.out.println("Testing executed.");
+    }
+
+    private static final String INPUT_1 = "*Node data\n" +
+                                          "ID gender role betweenness\n" +
+                                          "HOLLY female participant 78.33333588\n" +
+                                          "BRAZEY female participant 0\n" +
+                                          "CAROL female participant 1.333333373\n" +
+                                          "PAM female participant 32.5\n" +
+                                          "PAT female participant 39.5\n" +
+                                          "JENNIE female participant 6.333333492\n" +
+                                          "PAULINE female participant 12.5\n" +
+                                          "*Node properties\n" +
+                                          "ID x y color shape size shortlabel\n" +
+                                          "HOLLY 1160 271 255 1 10 HOLLY\n" +
+                                          "BRAZEY 1214 577 255 1 10 BRAZEY\n" +
+                                          "CAROL 671 612 255 1 10 CAROL\n" +
+                                          "PAM 985 127 255 1 10 PAM\n" +
+                                          "PAT 802 402 255 1 10 PAT\n" +
+                                          "JENNIE 729 187 255 1 10 JENNIE\n" +
+                                          "PAULINE 69 590 255 1 10 PAULINE\n" +
+                                          "ANN 877 818 255 1 10 ANN\n" +
+                                          "MICHAEL 182 224 255 1 10 MICHAEL\n" +
+                                          "BILL 380 137 255 1 10 BILL\n" +
+                                          "LEE 617 44 255 1 10 LEE\n" +
+                                          "DON 281 656 255 1 10 DON\n" +
+                                          "JOHN 617 839 255 1 10 JOHN\n" +
+                                          "HARRY 382 410 255 1 10 HARRY\n" +
+                                          "*Tie data\n" +
+                                          "from to friends strength\n" +
+                                          "HOLLY PAM 1 1\n" +
+                                          "PAT HOLLY 1 2\n" +
+                                          "PAULINE PAT 1 2\n" +
+                                          "JOHN RUSS 1 3\n" +
+                                          "HARRY HOLLY 1 2\n" +
+                                          "HARRY MICHAEL 1 1\n" +
+                                          "BERT RUSS 1 3\n" +
+                                          "RUSS GERY 1 1\n" +
+                                          "RUSS STEVE 1 3\n" +
+                                          "RUSS BERT 1 2\n" +
+                                          "HOLLY BRAZEY 0 7\n" +
+                                          "HOLLY CAROL 0 17\n" +
+                                          "BRAZEY PAULINE 0 7\n" +
+                                          "BRAZEY ANN 0 6\n" +
+                                          "BRAZEY MICHAEL 0 15\n" +
+                                          "PAM MICHAEL 0 9\n" +
+                                          "PAM BILL 0 16\n" +
+                                          "PAM LEE 0 13\n" +
+                                          "JENNIE BRAZEY 0 8\n" +
+                                          "PAULINE JENNIE 0 5\n";
+}
\ No newline at end of file

=== modified file 'nbproject/project.properties'
--- nbproject/project.properties	2011-03-06 23:48:09 +0000
+++ nbproject/project.properties	2011-03-26 03:04:26 +0000
@@ -1,206 +1,208 @@
-app.icon=branding/core/core.jar/org/netbeans/core/startup/frame48.gif
-app.name=gephi07beta
-app.title=Gephi 0.7 beta
-project.org.apache.tools.bzip2=BZIP2Wrapper
-project.org.gephi.algorithms=Algorithms
-project.org.gephi.clustering.api=ClusteringAPI
-project.org.gephi.clustering.plugin=ClusteringPlugin
-project.org.gephi.datalab.api=DataLaboratoryAPI
-project.org.gephi.datalab.plugin=DataLaboratoryPlugin
-project.org.gephi.desktop.clustering=DesktopClustering
-project.org.gephi.desktop.context=DesktopContext
-project.org.gephi.desktop.datalab=DesktopDataLaboratory
-project.org.gephi.desktop.importer=DesktopImport
-project.org.gephi.desktop.layout=DesktopLayout
-project.org.gephi.desktop.mrufiles.api=MostRecentFilesAPI
-project.org.gephi.desktop.perspective=DesktopPerspective
-project.org.gephi.desktop.preview=DesktopPreview
-project.org.gephi.desktop.progress=DesktopProgress
-project.org.gephi.desktop.project=DesktopProject
-project.org.gephi.desktop.recentfiles=DesktopRecentFiles
-project.org.gephi.desktop.spigot=DesktopSpigot
-project.org.gephi.desktop.timeline=DesktopTimeline
-project.org.gephi.desktop.welcome=WelcomeScreen
-project.org.gephi.dynamic=DynamicImpl
-project.org.gephi.dynamic.api=DynamicAPI
-project.org.gephi.filters=FiltersImpl
-project.org.gephi.filters.plugin=FiltersPlugin
-project.org.gephi.io.exporter.api=ExportAPI
-project.org.gephi.io.exporter.plugin=ExportPlugin
-project.org.gephi.io.exporter.preview=PreviewExport
-project.org.gephi.io.generator.api=GeneratorAPI
-project.org.gephi.io.generator.plugin=GeneratorPlugin
-project.org.gephi.io.importer.api=ImportAPI
-project.org.gephi.io.importer.plugin=ImportPlugin
-project.org.gephi.io.processor.plugin=ProcessorPlugin
-project.org.gephi.io.spigot.plugin=SpigotPlugin
-project.org.gephi.javacsv=Javacsv
-project.org.gephi.layout.plugin=LayoutPlugin
-project.org.gephi.lib.batik=BatikWrapper
-project.org.gephi.desktop.filters=DesktopFilters
-project.org.gephi.desktop.hierarchy=DesktopHierarchy
-project.org.gephi.desktop.io.export=DesktopExport
-project.org.gephi.desktop.partition=DesktopPartition
-project.org.gephi.desktop.ranking=DesktopRanking
-project.org.gephi.desktop.statistics=DesktopStatistics
-project.org.gephi.desktop.tools=DesktopTools
-project.org.gephi.filters.api=FiltersAPI
-project.org.gephi.io.database.drivers=DBDrivers
-project.org.gephi.desktop.generate=DesktopGenerate
-project.org.gephi.lib.beansbinding=BeansBindingWrapper
-project.org.gephi.lib.commons.codec=CommonsCodec
-project.org.gephi.lib.flamingo=FlamingoWrapper
-project.org.gephi.lib.itext=iTextWrapper
-project.org.gephi.lib.javacsv=JavaCSVWrapper
-project.org.gephi.lib.javamail=JavaMailWrapper
-project.org.gephi.lib.jcalendar=JCalendarWrapper
-project.org.gephi.lib.staxutils=StaxUtils
-project.org.gephi.partition.api=PartitionAPI
-project.org.gephi.partition.plugin=PartitionPlugin
-project.org.gephi.preview=PreviewImpl
-project.org.gephi.preview.api=PreviewAPI
-project.org.gephi.lib.processing=ProcessingWrapper
-project.org.gephi.ranking.api=RankingAPI
-project.org.gephi.statistics.api=StatisticsAPI
-project.org.gephi.statistics.plugin=StatisticsPlugin
-project.org.gephi.timeline.api=TimelineAPI
-project.org.gephi.tools.plugin=ToolsPlugin
-project.org.gephi.tools.api=ToolsAPI
-project.org.gephi.ui.components=UIComponents
-project.org.gephi.ui.components.SplineEditor=SplineEditor
-project.org.gephi.ui.exporter.plugin=ExportPluginUI
-project.org.gephi.ui.exporter.preview=PreviewExportUI
-project.org.gephi.ui.filters.plugin=FiltersPluginUI
-project.org.gephi.ui.generator.plugin=GeneratorPluginUI
-project.org.gephi.ui.importer.plugin=ImportPluginUI
-project.org.gephi.ui.partition.plugin=PartitionPluginUI
-project.org.gephi.ui.processor.plugin=ProcessorPluginUI
-project.org.gephi.ui.project=ProjectUI
-project.org.gephi.ui.propertyeditor=AttributeColumnPropertyEditor
-project.org.gephi.ui.ranking.plugin=RankingPluginUI
-project.org.gephi.ui.spigot.plugin=SpigotPluginUI
-project.org.gephi.ui.statistics.plugin=StatisticsPluginUI
-project.org.gephi.ui.workspace=WorkspaceUI
-project.org.gephi.lib.validation=ValidationAPI
-project.org.gephi.utils=Utils
-project.org.gephi.utils.collection=CollectionUtils
-project.org.gephi.visualization.api=VisualizationAPI
-project.org.jdesktop.swingx=SwingX
-project.org.jfree=JFreeChart
-project.org.gephi.utils.longtask=LongTaskAPI
-project.org.joda.time=JodaWrapper
-project.org.netbeans.swing.dirchooser=DirectoryChooser
-run.args.extra=-J-Xms256m -J-Xmx1000m -J-Dsun.java2d.noddraw=true -J-Dsun.awt.noerasebackground=true
-branding.token=${app.name}
-app.conf=nbproject/gephi07beta.conf
-modules=\
-    ${project.org.gephi.project.api}:\
-    ${project.org.gephi.branding.desktop}:\
-    ${project.org.gephi.ui.utils}:\
-    ${project.org.gephi.visualization}:\
-    ${project.org.gephi.lib.jogl}:\
-    ${project.org.gephi.graph.api}:\
-    ${project.org.gephi.lib.gleem}:\
-    ${project.org.gephi.data.attributes.api}:\
-    ${project.org.gephi.layout.api}:\
-    ${project.org.gephi.data.attributes}:\
-    ${project.org.gephi.graph.dhns}:\
-    ${project.org.gephi.desktop.generate}:\
-    ${project.org.gephi.lib.validation}:\
-    ${project.org.jdesktop.swingx}:\
-    ${project.org.gephi.utils.longtask}:\
-    ${project.org.gephi.io.database.drivers}:\
-    ${project.org.jfree}:\
-    ${project.org.gephi.timeline.api}:\
-    ${project.org.gephi.ui.components}:\
-    ${project.org.gephi.desktop.io.export}:\
-    ${project.org.netbeans.swing.dirchooser}:\
-    ${project.org.gephi.tools.api}:\
-    ${project.org.gephi.tools.plugin}:\
-    ${project.org.gephi.desktop.tools}:\
-    ${project.org.gephi.desktop.ranking}:\
-    ${project.org.gephi.ui.components.SplineEditor}:\
-    ${project.org.gephi.filters.api}:\
-    ${project.org.gephi.lib.processing}:\
-    ${project.org.gephi.preview.api}:\
-    ${project.org.gephi.preview}:\
-    ${project.org.gephi.desktop.hierarchy}:\
-    ${project.org.gephi.partition.api}:\
-    ${project.org.gephi.desktop.partition}:\
-    ${project.org.gephi.ui.workspace}:\
-    ${project.org.gephi.statistics.api}:\
-    ${project.org.gephi.desktop.statistics}:\
-    ${project.org.gephi.ui.propertyeditor}:\
-    ${project.org.gephi.lib.batik}:\
-    ${project.org.gephi.desktop.filters}:\
-    ${project.org.gephi.statistics.plugin}:\
-    ${project.org.gephi.ui.statistics.plugin}:\
-    ${project.org.gephi.ui.project}:\
-    ${project.org.gephi.layout.plugin}:\
-    ${project.org.gephi.desktop.layout}:\
-    ${project.org.gephi.io.exporter.plugin}:\
-    ${project.org.gephi.ui.exporter.plugin}:\
-    ${project.org.gephi.io.exporter.api}:\
-    ${project.org.gephi.io.generator.plugin}:\
-    ${project.org.gephi.ui.generator.plugin}:\
-    ${project.org.gephi.io.generator.api}:\
-    ${project.org.gephi.io.importer.api}:\
-    ${project.org.gephi.io.importer.plugin}:\
-    ${project.org.gephi.io.processor.plugin}:\
-    ${project.org.gephi.desktop.importer}:\
-    ${project.org.gephi.filters.plugin}:\
-    ${project.org.gephi.ui.filters.plugin}:\
-    ${project.org.gephi.partition.plugin}:\
-    ${project.org.gephi.algorithms}:\
-    ${project.org.gephi.clustering.api}:\
-    ${project.org.gephi.clustering.plugin}:\
-    ${project.org.gephi.desktop.clustering}:\
-    ${project.org.gephi.desktop.context}:\
-    ${project.org.gephi.desktop.preview}:\
-    ${project.org.gephi.desktop.timeline}:\
-    ${project.org.joda.time}:\
-    ${project.org.gephi.ui.ranking.plugin}:\
-    ${project.org.gephi.ranking.api}:\
-    ${project.org.gephi.utils.collection}:\
-    ${project.org.gephi.desktop.welcome}:\
-    ${project.org.gephi.desktop.mrufiles.api}:\
-    ${project.org.gephi.desktop.project}:\
-    ${project.org.gephi.lib.itext}:\
-    ${project.org.gephi.io.exporter.preview}:\
-    ${project.org.gephi.ui.exporter.preview}:\
-    ${project.org.gephi.desktop.progress}:\
-    ${project.org.gephi.filters}:\
-    ${project.org.gephi.visualization.api}:\
-    ${project.org.gephi.lib.beansbinding}:\
-    ${project.org.gephi.utils}:\
-    ${project.org.gephi.ui.importer.plugin}:\
-    ${project.org.gephi.io.spigot.plugin}:\
-    ${project.org.gephi.ui.spigot.plugin}:\
-    ${project.org.gephi.desktop.spigot}:\
-    ${project.org.gephi.ui.partition.plugin}:\
-    ${project.org.gephi.dynamic}:\
-    ${project.org.gephi.dynamic.api}:\
-    ${project.org.gephi.desktop.perspective}:\
-    ${project.org.gephi.ui.processor.plugin}:\
-    ${project.org.gephi.lib.staxutils}:\
-    ${project.org.gephi.lib.commons.codec}:\
-    ${project.org.gephi.lib.flamingo}:\
-    ${project.org.gephi.lib.javacsv}:\
-    ${project.org.gephi.datalab.api}:\
-    ${project.org.gephi.datalab.plugin}:\
-    ${project.org.gephi.desktop.datalab}:\
-    ${project.org.apache.tools.bzip2}:\
-    ${project.org.gephi.desktop.recentfiles}:\
-    ${project.org.gephi.lib.javamail}:\
-    ${project.org.gephi.lib.jcalendar}
-project.org.gephi.branding.desktop=DesktopBranding
-project.org.gephi.data.attributes=AttributesImpl
-project.org.gephi.data.attributes.api=AttributesAPI
-project.org.gephi.graph.api=GraphAPI
-project.org.gephi.lib.jogl=JOGLWrapper
-project.org.gephi.layout.api=LayoutAPI
-project.org.gephi.project.api=ProjectAPI
-project.org.gephi.ui.utils=UIUtils
-project.org.gephi.visualization=VisualizationModule
-project.org.gephi.lib.gleem=Gleem
-project.org.gephi.graph.dhns=DHNSGraph
+app.icon=branding/core/core.jar/org/netbeans/core/startup/frame48.gif
+app.name=gephi07beta
+app.title=Gephi 0.7 beta
+project.org.apache.tools.bzip2=BZIP2Wrapper
+project.org.gephi.algorithms=Algorithms
+project.org.gephi.clustering.api=ClusteringAPI
+project.org.gephi.clustering.plugin=ClusteringPlugin
+project.org.gephi.datalab.api=DataLaboratoryAPI
+project.org.gephi.datalab.plugin=DataLaboratoryPlugin
+project.org.gephi.desktop.clustering=DesktopClustering
+project.org.gephi.desktop.context=DesktopContext
+project.org.gephi.desktop.datalab=DesktopDataLaboratory
+project.org.gephi.desktop.importer=DesktopImport
+project.org.gephi.desktop.layout=DesktopLayout
+project.org.gephi.desktop.mrufiles.api=MostRecentFilesAPI
+project.org.gephi.desktop.perspective=DesktopPerspective
+project.org.gephi.desktop.preview=DesktopPreview
+project.org.gephi.desktop.progress=DesktopProgress
+project.org.gephi.desktop.project=DesktopProject
+project.org.gephi.desktop.recentfiles=DesktopRecentFiles
+project.org.gephi.desktop.spigot=DesktopSpigot
+project.org.gephi.desktop.timeline=DesktopTimeline
+project.org.gephi.desktop.welcome=WelcomeScreen
+project.org.gephi.dynamic=DynamicImpl
+project.org.gephi.dynamic.api=DynamicAPI
+project.org.gephi.filters=FiltersImpl
+project.org.gephi.filters.plugin=FiltersPlugin
+project.org.gephi.io.exporter.api=ExportAPI
+project.org.gephi.io.exporter.plugin=ExportPlugin
+project.org.gephi.io.exporter.preview=PreviewExport
+project.org.gephi.io.generator.api=GeneratorAPI
+project.org.gephi.io.generator.plugin=GeneratorPlugin
+project.org.gephi.io.importer.api=ImportAPI
+project.org.gephi.io.importer.plugin=ImportPlugin
+project.org.gephi.io.importer.plugin.vnaplugin=VnaPlugin
+project.org.gephi.io.processor.plugin=ProcessorPlugin
+project.org.gephi.io.spigot.plugin=SpigotPlugin
+project.org.gephi.javacsv=Javacsv
+project.org.gephi.layout.plugin=LayoutPlugin
+project.org.gephi.lib.batik=BatikWrapper
+project.org.gephi.desktop.filters=DesktopFilters
+project.org.gephi.desktop.hierarchy=DesktopHierarchy
+project.org.gephi.desktop.io.export=DesktopExport
+project.org.gephi.desktop.partition=DesktopPartition
+project.org.gephi.desktop.ranking=DesktopRanking
+project.org.gephi.desktop.statistics=DesktopStatistics
+project.org.gephi.desktop.tools=DesktopTools
+project.org.gephi.filters.api=FiltersAPI
+project.org.gephi.io.database.drivers=DBDrivers
+project.org.gephi.desktop.generate=DesktopGenerate
+project.org.gephi.lib.beansbinding=BeansBindingWrapper
+project.org.gephi.lib.commons.codec=CommonsCodec
+project.org.gephi.lib.flamingo=FlamingoWrapper
+project.org.gephi.lib.itext=iTextWrapper
+project.org.gephi.lib.javacsv=JavaCSVWrapper
+project.org.gephi.lib.javamail=JavaMailWrapper
+project.org.gephi.lib.jcalendar=JCalendarWrapper
+project.org.gephi.lib.staxutils=StaxUtils
+project.org.gephi.partition.api=PartitionAPI
+project.org.gephi.partition.plugin=PartitionPlugin
+project.org.gephi.preview=PreviewImpl
+project.org.gephi.preview.api=PreviewAPI
+project.org.gephi.lib.processing=ProcessingWrapper
+project.org.gephi.ranking.api=RankingAPI
+project.org.gephi.statistics.api=StatisticsAPI
+project.org.gephi.statistics.plugin=StatisticsPlugin
+project.org.gephi.timeline.api=TimelineAPI
+project.org.gephi.tools.plugin=ToolsPlugin
+project.org.gephi.tools.api=ToolsAPI
+project.org.gephi.ui.components=UIComponents
+project.org.gephi.ui.components.SplineEditor=SplineEditor
+project.org.gephi.ui.exporter.plugin=ExportPluginUI
+project.org.gephi.ui.exporter.preview=PreviewExportUI
+project.org.gephi.ui.filters.plugin=FiltersPluginUI
+project.org.gephi.ui.generator.plugin=GeneratorPluginUI
+project.org.gephi.ui.importer.plugin=ImportPluginUI
+project.org.gephi.ui.partition.plugin=PartitionPluginUI
+project.org.gephi.ui.processor.plugin=ProcessorPluginUI
+project.org.gephi.ui.project=ProjectUI
+project.org.gephi.ui.propertyeditor=AttributeColumnPropertyEditor
+project.org.gephi.ui.ranking.plugin=RankingPluginUI
+project.org.gephi.ui.spigot.plugin=SpigotPluginUI
+project.org.gephi.ui.statistics.plugin=StatisticsPluginUI
+project.org.gephi.ui.workspace=WorkspaceUI
+project.org.gephi.lib.validation=ValidationAPI
+project.org.gephi.utils=Utils
+project.org.gephi.utils.collection=CollectionUtils
+project.org.gephi.visualization.api=VisualizationAPI
+project.org.jdesktop.swingx=SwingX
+project.org.jfree=JFreeChart
+project.org.gephi.utils.longtask=LongTaskAPI
+project.org.joda.time=JodaWrapper
+project.org.netbeans.swing.dirchooser=DirectoryChooser
+run.args.extra=-J-Xms256m -J-Xmx1000m -J-Dsun.java2d.noddraw=true -J-Dsun.awt.noerasebackground=true
+branding.token=${app.name}
+app.conf=nbproject/gephi07beta.conf
+modules=\
+    ${project.org.gephi.project.api}:\
+    ${project.org.gephi.branding.desktop}:\
+    ${project.org.gephi.ui.utils}:\
+    ${project.org.gephi.visualization}:\
+    ${project.org.gephi.lib.jogl}:\
+    ${project.org.gephi.graph.api}:\
+    ${project.org.gephi.lib.gleem}:\
+    ${project.org.gephi.data.attributes.api}:\
+    ${project.org.gephi.layout.api}:\
+    ${project.org.gephi.data.attributes}:\
+    ${project.org.gephi.graph.dhns}:\
+    ${project.org.gephi.desktop.generate}:\
+    ${project.org.gephi.lib.validation}:\
+    ${project.org.jdesktop.swingx}:\
+    ${project.org.gephi.utils.longtask}:\
+    ${project.org.gephi.io.database.drivers}:\
+    ${project.org.jfree}:\
+    ${project.org.gephi.timeline.api}:\
+    ${project.org.gephi.ui.components}:\
+    ${project.org.gephi.desktop.io.export}:\
+    ${project.org.netbeans.swing.dirchooser}:\
+    ${project.org.gephi.tools.api}:\
+    ${project.org.gephi.tools.plugin}:\
+    ${project.org.gephi.desktop.tools}:\
+    ${project.org.gephi.desktop.ranking}:\
+    ${project.org.gephi.ui.components.SplineEditor}:\
+    ${project.org.gephi.filters.api}:\
+    ${project.org.gephi.lib.processing}:\
+    ${project.org.gephi.preview.api}:\
+    ${project.org.gephi.preview}:\
+    ${project.org.gephi.desktop.hierarchy}:\
+    ${project.org.gephi.partition.api}:\
+    ${project.org.gephi.desktop.partition}:\
+    ${project.org.gephi.ui.workspace}:\
+    ${project.org.gephi.statistics.api}:\
+    ${project.org.gephi.desktop.statistics}:\
+    ${project.org.gephi.ui.propertyeditor}:\
+    ${project.org.gephi.lib.batik}:\
+    ${project.org.gephi.desktop.filters}:\
+    ${project.org.gephi.statistics.plugin}:\
+    ${project.org.gephi.ui.statistics.plugin}:\
+    ${project.org.gephi.ui.project}:\
+    ${project.org.gephi.layout.plugin}:\
+    ${project.org.gephi.desktop.layout}:\
+    ${project.org.gephi.io.exporter.plugin}:\
+    ${project.org.gephi.ui.exporter.plugin}:\
+    ${project.org.gephi.io.exporter.api}:\
+    ${project.org.gephi.io.generator.plugin}:\
+    ${project.org.gephi.ui.generator.plugin}:\
+    ${project.org.gephi.io.generator.api}:\
+    ${project.org.gephi.io.importer.api}:\
+    ${project.org.gephi.io.importer.plugin}:\
+    ${project.org.gephi.io.processor.plugin}:\
+    ${project.org.gephi.desktop.importer}:\
+    ${project.org.gephi.filters.plugin}:\
+    ${project.org.gephi.ui.filters.plugin}:\
+    ${project.org.gephi.partition.plugin}:\
+    ${project.org.gephi.algorithms}:\
+    ${project.org.gephi.clustering.api}:\
+    ${project.org.gephi.clustering.plugin}:\
+    ${project.org.gephi.desktop.clustering}:\
+    ${project.org.gephi.desktop.context}:\
+    ${project.org.gephi.desktop.preview}:\
+    ${project.org.gephi.desktop.timeline}:\
+    ${project.org.joda.time}:\
+    ${project.org.gephi.ui.ranking.plugin}:\
+    ${project.org.gephi.ranking.api}:\
+    ${project.org.gephi.utils.collection}:\
+    ${project.org.gephi.desktop.welcome}:\
+    ${project.org.gephi.desktop.mrufiles.api}:\
+    ${project.org.gephi.desktop.project}:\
+    ${project.org.gephi.lib.itext}:\
+    ${project.org.gephi.io.exporter.preview}:\
+    ${project.org.gephi.ui.exporter.preview}:\
+    ${project.org.gephi.desktop.progress}:\
+    ${project.org.gephi.filters}:\
+    ${project.org.gephi.visualization.api}:\
+    ${project.org.gephi.lib.beansbinding}:\
+    ${project.org.gephi.utils}:\
+    ${project.org.gephi.ui.importer.plugin}:\
+    ${project.org.gephi.io.spigot.plugin}:\
+    ${project.org.gephi.ui.spigot.plugin}:\
+    ${project.org.gephi.desktop.spigot}:\
+    ${project.org.gephi.ui.partition.plugin}:\
+    ${project.org.gephi.dynamic}:\
+    ${project.org.gephi.dynamic.api}:\
+    ${project.org.gephi.desktop.perspective}:\
+    ${project.org.gephi.ui.processor.plugin}:\
+    ${project.org.gephi.lib.staxutils}:\
+    ${project.org.gephi.lib.commons.codec}:\
+    ${project.org.gephi.lib.flamingo}:\
+    ${project.org.gephi.lib.javacsv}:\
+    ${project.org.gephi.datalab.api}:\
+    ${project.org.gephi.datalab.plugin}:\
+    ${project.org.gephi.desktop.datalab}:\
+    ${project.org.apache.tools.bzip2}:\
+    ${project.org.gephi.desktop.recentfiles}:\
+    ${project.org.gephi.lib.javamail}:\
+    ${project.org.gephi.lib.jcalendar}:\
+    ${project.org.gephi.io.importer.plugin.vnaplugin}
+project.org.gephi.branding.desktop=DesktopBranding
+project.org.gephi.data.attributes=AttributesImpl
+project.org.gephi.data.attributes.api=AttributesAPI
+project.org.gephi.graph.api=GraphAPI
+project.org.gephi.lib.jogl=JOGLWrapper
+project.org.gephi.layout.api=LayoutAPI
+project.org.gephi.project.api=ProjectAPI
+project.org.gephi.ui.utils=UIUtils
+project.org.gephi.visualization=VisualizationModule
+project.org.gephi.lib.gleem=Gleem
+project.org.gephi.graph.dhns=DHNSGraph


Follow ups