← Back to team overview

gephi.team team mailing list archive

[Merge] lp:~megaterik/gephi/exporter-ucinet-dl into lp:gephi

 

Sébastien Heymann has proposed merging lp:~megaterik/gephi/exporter-ucinet-dl into lp:gephi.

Requested reviews:
  Sébastien Heymann (sebastien.heymann)

For more details, see:
https://code.launchpad.net/~megaterik/gephi/exporter-ucinet-dl/+merge/69236

Add DL exporter.
-- 
https://code.launchpad.net/~megaterik/gephi/exporter-ucinet-dl/+merge/69236
Your team Gephi Team is subscribed to branch lp:gephi.
=== added directory 'Exporter DL'
=== added file 'Exporter DL/build.xml'
--- Exporter DL/build.xml	1970-01-01 00:00:00 +0000
+++ Exporter DL/build.xml	2011-07-26 10:13:29 +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.exporter.ucinet" default="netbeans" basedir=".">
+    <description>Builds, tests, and runs the project org.gephi.io.exporter.ucinet.</description>
+    <import file="nbproject/build-impl.xml"/>
+</project>

=== added file 'Exporter DL/manifest.mf'
--- Exporter DL/manifest.mf	1970-01-01 00:00:00 +0000
+++ Exporter DL/manifest.mf	2011-07-26 10:13:29 +0000
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+OpenIDE-Module: org.gephi.io.exporter.ucinet
+OpenIDE-Module-Localizing-Bundle: org/gephi/io/exporter/ucinet/Bundle.properties
+OpenIDE-Module-Specification-Version: 1.0
+

=== added directory 'Exporter DL/nbproject'
=== added file 'Exporter DL/nbproject/build-impl.xml'
--- Exporter DL/nbproject/build-impl.xml	1970-01-01 00:00:00 +0000
+++ Exporter DL/nbproject/build-impl.xml	2011-07-26 10:13:29 +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.exporter.ucinet-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 'Exporter DL/nbproject/genfiles.properties'
--- Exporter DL/nbproject/genfiles.properties	1970-01-01 00:00:00 +0000
+++ Exporter DL/nbproject/genfiles.properties	2011-07-26 10:13:29 +0000
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=aa6ecbf1
+build.xml.script.CRC32=c056b7ef
+build.xml.stylesheet.CRC32=a56c6a5b@1.45.1
+# 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=aa6ecbf1
+nbproject/build-impl.xml.script.CRC32=0f6e55bd
+nbproject/build-impl.xml.stylesheet.CRC32=238281d1@1.45.1

=== added file 'Exporter DL/nbproject/project.properties'
--- Exporter DL/nbproject/project.properties	1970-01-01 00:00:00 +0000
+++ Exporter DL/nbproject/project.properties	2011-07-26 10:13:29 +0000
@@ -0,0 +1,2 @@
+javac.source=1.6
+javac.compilerargs=-Xlint -Xlint:-serial

=== added file 'Exporter DL/nbproject/project.xml'
--- Exporter DL/nbproject/project.xml	1970-01-01 00:00:00 +0000
+++ Exporter DL/nbproject/project.xml	2011-07-26 10:13:29 +0000
@@ -0,0 +1,70 @@
+<?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.exporter.ucinet</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.8.0.1</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.gephi.graph.api</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>0.8.0.1</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.gephi.io.exporter.api</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>0.8</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.gephi.project.api</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>0.8</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.8</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.jdesktop.layout</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <release-version>1</release-version>
+                        <specification-version>1.16.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.6.1</specification-version>
+                    </run-dependency>
+                </dependency>
+            </module-dependencies>
+            <public-packages/>
+        </data>
+    </configuration>
+</project>

=== added file 'Exporter DL/nbproject/suite.properties'
--- Exporter DL/nbproject/suite.properties	1970-01-01 00:00:00 +0000
+++ Exporter DL/nbproject/suite.properties	2011-07-26 10:13:29 +0000
@@ -0,0 +1,1 @@
+suite.dir=${basedir}/..

=== added directory 'Exporter DL/src'
=== added directory 'Exporter DL/src/org'
=== added directory 'Exporter DL/src/org/gephi'
=== added directory 'Exporter DL/src/org/gephi/io'
=== added directory 'Exporter DL/src/org/gephi/io/exporter'
=== added directory 'Exporter DL/src/org/gephi/io/exporter/ucinet'
=== added file 'Exporter DL/src/org/gephi/io/exporter/ucinet/Bundle.properties'
--- Exporter DL/src/org/gephi/io/exporter/ucinet/Bundle.properties	1970-01-01 00:00:00 +0000
+++ Exporter DL/src/org/gephi/io/exporter/ucinet/Bundle.properties	2011-07-26 10:13:29 +0000
@@ -0,0 +1,1 @@
+OpenIDE-Module-Name=Exporter UCINET DL

=== added file 'Exporter DL/src/org/gephi/io/exporter/ucinet/ExporterBuilderDL.java'
--- Exporter DL/src/org/gephi/io/exporter/ucinet/ExporterBuilderDL.java	1970-01-01 00:00:00 +0000
+++ Exporter DL/src/org/gephi/io/exporter/ucinet/ExporterBuilderDL.java	2011-07-26 10:13:29 +0000
@@ -0,0 +1,27 @@
+package org.gephi.io.exporter.ucinet;
+
+import org.gephi.io.exporter.api.FileType;
+import org.gephi.io.exporter.spi.GraphExporter;
+import org.gephi.io.exporter.spi.GraphFileExporterBuilder;
+import org.openide.util.lookup.ServiceProvider;
+
+@ServiceProvider(service = GraphFileExporterBuilder.class)
+public class ExporterBuilderDL implements GraphFileExporterBuilder 
+{
+
+    @Override
+    public GraphExporter buildExporter() {
+       return new ExporterDL();
+    }
+
+    @Override
+    public FileType[] getFileTypes() {
+        return new FileType[]{new FileType(".dl", "dl files(UCINET)")};
+    }
+
+    @Override
+    public String getName() {
+        return "dl";
+    }
+    
+}

=== added file 'Exporter DL/src/org/gephi/io/exporter/ucinet/ExporterDL.java'
--- Exporter DL/src/org/gephi/io/exporter/ucinet/ExporterDL.java	1970-01-01 00:00:00 +0000
+++ Exporter DL/src/org/gephi/io/exporter/ucinet/ExporterDL.java	2011-07-26 10:13:29 +0000
@@ -0,0 +1,242 @@
+package org.gephi.io.exporter.ucinet;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.gephi.data.attributes.api.AttributeModel;
+import org.gephi.graph.api.DirectedGraph;
+import org.gephi.graph.api.Edge;
+import org.gephi.graph.api.EdgeIterable;
+import org.gephi.graph.api.EdgeIterator;
+import org.gephi.graph.api.GraphModel;
+import org.gephi.graph.api.HierarchicalGraph;
+import org.gephi.graph.api.NodeIterable;
+import org.gephi.graph.api.NodeIterator;
+import org.gephi.io.exporter.spi.CharacterExporter;
+import org.gephi.io.exporter.spi.GraphExporter;
+import org.gephi.project.api.Workspace;
+import org.gephi.graph.api.Node;
+import org.gephi.utils.longtask.spi.LongTask;
+import org.gephi.utils.progress.ProgressTicket;
+
+public class ExporterDL implements GraphExporter, CharacterExporter, LongTask {
+
+    private boolean exportVisible = false;
+    private Workspace workspace;
+    private Writer writer;
+    private GraphModel graphModel;
+    private AttributeModel attributeModel;
+    private boolean cancel = false;
+    ProgressTicket progressTicket;
+    private boolean useMatrixFormat = false;
+    private boolean useListFormat = true;
+    private boolean makeSymmetricMatrix = false;
+
+    public boolean isMakeSymmetricMatrix() {
+        return makeSymmetricMatrix;
+    }
+
+    public void setMakeSymmetricMatrix(boolean makeSymmetricMatrix) {
+        this.makeSymmetricMatrix = makeSymmetricMatrix;
+    }
+
+    public boolean isUseListFormat() {
+        return useListFormat;
+    }
+
+    public void setUseListFormat(boolean useListFormat) {
+        this.useListFormat = useListFormat;
+    }
+
+    public boolean isUseMatrixFormat() {
+        return useMatrixFormat;
+    }
+
+    public void setUseMatrixFormat(boolean useMatrixFormat) {
+        this.useMatrixFormat = useMatrixFormat;
+    }
+
+    @Override
+    public void setExportVisible(boolean exportVisible) {
+        this.exportVisible = exportVisible;
+    }
+
+    @Override
+    public boolean isExportVisible() {
+        return exportVisible;
+    }
+
+    @Override
+    public boolean execute() {
+        int max = 0;
+        progressTicket.start();
+        attributeModel = workspace.getLookup().lookup(AttributeModel.class);
+        graphModel = workspace.getLookup().lookup(GraphModel.class);
+        DirectedGraph graph = null;
+        if (exportVisible) {
+            graph = graphModel.getDirectedGraphVisible();
+        } else {
+            graph = graphModel.getDirectedGraph();
+        }
+        graph.readLock();
+
+        NodeIterable nodeIterable = graph.getNodes();
+
+        //use labels only if every node has label
+        boolean useLabels = true;
+        while (nodeIterable.iterator().hasNext()) {
+            if (cancel) {
+                break;
+            }
+            useLabels &= (nodeIterable.iterator().next().getNodeData().getLabel() != null);
+        }
+
+        if (!cancel) {
+            try {
+                if (useListFormat) {
+                    saveAsEdgeList1(useLabels, graph);
+                } else {
+                    saveAsFullMatrix(useLabels, graph);
+                }
+            } catch (IOException ex) {
+                Logger.getLogger(ExporterDL.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+        graph.readUnlock();
+        progressTicket.finish();
+        return true;
+    }
+
+    @Override
+    public void setWorkspace(Workspace workspace) {
+        this.workspace = workspace;
+    }
+
+    @Override
+    public Workspace getWorkspace() {
+        return workspace;
+    }
+
+    @Override
+    public void setWriter(Writer writer) {
+        this.writer = writer;
+    }
+
+    private void saveAsEdgeList1(boolean useLabels, DirectedGraph graph) throws IOException {
+        writer.write("dl\n");
+        writer.write("format = edgelist1\n");
+        writer.write("n = " + graph.getNodeCount() + "\n");
+        EdgeIterable edgeIterator = graph.getEdges();
+        writer.write("labels embedded:\n");
+        writer.write("data:\n");
+        while (edgeIterator.iterator().hasNext()) {
+            if (cancel)
+                break;
+            Edge edge = edgeIterator.iterator().next();
+            if (useLabels) {
+                writer.write(edge.getSource().getNodeData().getLabel() + " "
+                        + edge.getTarget().getNodeData().getLabel() + " " + edge.getWeight() + "\n");
+            } else {
+                writer.write(edge.getSource().getNodeData().getId() + " "
+                        + edge.getTarget().getNodeData().getId() + " " + edge.getWeight() + "\n");
+            }
+        }
+    }
+
+    private void saveAsFullMatrix(boolean useLabels, DirectedGraph graph) throws IOException {
+        writer.write("dl\n");
+        writer.write("format = fullmatrix\n");
+        writer.write("n = " + graph.getNodeCount() + "\n");
+        int maxNumber = 0;
+        NodeIterable nodeIterator = graph.getNodes();
+        while (nodeIterator.iterator().hasNext()) {
+            if (cancel)
+                break;
+            maxNumber = Math.max(maxNumber, nodeIterator.iterator().next().getId());
+        }
+
+        boolean[] isNodeHere = new boolean[maxNumber + 1];
+        nodeIterator = graph.getNodes();
+        while (nodeIterator.iterator().hasNext()) {
+            if (cancel)
+                break;
+            isNodeHere[nodeIterator.iterator().next().getId()] = true;
+        }
+
+        int[] fullNumberOfNode = new int[graph.getNodeCount()];
+        int c = 0;
+        for (int i = 0; i < isNodeHere.length; i++) {
+            if (cancel)
+                break;
+            if (isNodeHere[i]) {
+                fullNumberOfNode[c++] = i;
+            }
+        }
+        int maxLengthOfEdgeWeight = 0;
+        if (makeSymmetricMatrix) {
+            for (int i = 0; i < graph.getNodeCount(); i++) {
+                if (cancel)
+                    break;
+                for (int j = 0; j < graph.getNodeCount(); j++) {
+                    if (cancel)
+                        break;
+                    if (graph.getEdge(graph.getNode(fullNumberOfNode[i]), graph.getNode(fullNumberOfNode[j])) != null) {
+                        maxLengthOfEdgeWeight = Math.max(Float.toString(graph.getEdge(graph.getNode(fullNumberOfNode[i]), graph.getNode(fullNumberOfNode[j])).getWeight()).length(), maxLengthOfEdgeWeight);
+                    }
+                }
+            }
+        }
+
+        writer.write("labels:\n");
+        for (int i = 0; i < graph.getNodeCount(); i++) {
+            if (cancel)
+                break;
+            if (useLabels) {
+                writer.write(graph.getNode(fullNumberOfNode[i]).getNodeData().getLabel());
+            } else {
+                writer.write(graph.getNode(fullNumberOfNode[i]).getNodeData().getId());
+            }
+            if (i != graph.getNodeCount() - 1) {
+                writer.write(",");
+            }
+        }
+        writer.write("\n");
+        writer.write("data:\n");
+        for (int i = 0; i < graph.getNodeCount(); i++) {
+            if (cancel)
+                break;
+            for (int j = 0; j < graph.getNodeCount(); j++) {
+                if (cancel)
+                    break;
+                if (graph.getEdge(graph.getNode(fullNumberOfNode[i]), graph.getNode(fullNumberOfNode[j])) == null) {
+                    writer.write("0 ");
+                    if (makeSymmetricMatrix) {
+                        for (int repeatSpace = 2; repeatSpace < maxLengthOfEdgeWeight + 1; repeatSpace++) {
+                            writer.write(" ");
+                        }
+                    }
+                } else {
+                    writer.write(Float.toString(graph.getEdge(graph.getNode(fullNumberOfNode[i]), graph.getNode(fullNumberOfNode[j])).getWeight()) + " ");
+                    if (makeSymmetricMatrix) {
+                        for (int repeatSpace = Float.toString(graph.getEdge(graph.getNode(fullNumberOfNode[i]), graph.getNode(fullNumberOfNode[j])).getWeight()).length() + 1; repeatSpace < maxLengthOfEdgeWeight + 1; repeatSpace++) {
+                            writer.write(" ");
+                        }
+                    }
+                }
+            }
+            writer.write("\n");
+        }
+    }
+
+    @Override
+    public boolean cancel() {
+        this.cancel = true;
+        return true;
+    }
+
+    @Override
+    public void setProgressTicket(ProgressTicket progressTicket) {
+        this.progressTicket = progressTicket;
+    }
+}

=== added file 'Exporter DL/src/org/gephi/io/exporter/ucinet/UIExporterDL.java'
--- Exporter DL/src/org/gephi/io/exporter/ucinet/UIExporterDL.java	1970-01-01 00:00:00 +0000
+++ Exporter DL/src/org/gephi/io/exporter/ucinet/UIExporterDL.java	2011-07-26 10:13:29 +0000
@@ -0,0 +1,68 @@
+package org.gephi.io.exporter.ucinet;
+
+import javax.swing.JPanel;
+import org.gephi.io.exporter.spi.Exporter;
+import org.gephi.io.exporter.spi.ExporterUI;
+import org.openide.util.lookup.ServiceProvider;
+
+@ServiceProvider(service = ExporterUI.class)
+public class UIExporterDL implements ExporterUI {
+
+    private UIExporterDLPanel panel;
+    private ExporterDL exporter;
+    private ExporterDLSettings settings = new ExporterDLSettings();
+
+    @Override
+    public JPanel getPanel() {
+        panel = new UIExporterDLPanel();
+        return panel;
+    }
+
+    @Override
+    public void setup(Exporter exporter) {
+        this.exporter = (ExporterDL) exporter;
+        settings.load(this.exporter);
+        panel.setup(this.exporter);
+    }
+
+    @Override
+    public void unsetup(boolean update) {
+        if (update) {
+          panel.unsetup(exporter);
+          settings.save(exporter);
+        }
+
+        panel = null;
+        exporter = null;
+    }
+
+    @Override
+    public boolean isUIForExporter(Exporter exporter) {
+        return exporter instanceof ExporterDL;
+    }
+
+    @Override
+    public String getDisplayName() {
+        return "Exporter DL";
+    }
+
+private static class ExporterDLSettings
+{
+    private boolean useListFormat = true;
+    private boolean useMatrixFormat = false;
+    private boolean makeSymmetricMatrix = false;
+   private void load(ExporterDL exporterDL)
+   {
+       exporterDL.setUseListFormat(useListFormat);
+       exporterDL.setUseMatrixFormat(useMatrixFormat);
+       exporterDL.setMakeSymmetricMatrix(makeSymmetricMatrix);
+   }
+   
+   private void save(ExporterDL exporterDL)
+   {
+       useListFormat = exporterDL.isUseListFormat();
+       useMatrixFormat = exporterDL.isUseMatrixFormat();
+       makeSymmetricMatrix = exporterDL.isMakeSymmetricMatrix();
+   }
+}
+}
\ No newline at end of file

=== added file 'Exporter DL/src/org/gephi/io/exporter/ucinet/UIExporterDLPanel.form'
--- Exporter DL/src/org/gephi/io/exporter/ucinet/UIExporterDLPanel.form	1970-01-01 00:00:00 +0000
+++ Exporter DL/src/org/gephi/io/exporter/ucinet/UIExporterDLPanel.form	2011-07-26 10:13:29 +0000
@@ -0,0 +1,83 @@
+<?xml version="1.1" encoding="UTF-8" ?>
+
+<Form version="1.2" maxVersion="1.2" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <NonVisualComponents>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="jLabel1"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.ButtonGroup" name="buttonGroup1">
+    </Component>
+    <Component class="javax.swing.ButtonGroup" name="buttonGroup2">
+    </Component>
+  </NonVisualComponents>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+  </AuxValues>
+
+  <Layout>
+    <DimensionLayout dim="0">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" alignment="0" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="listRadioButton" min="-2" pref="86" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="symmetricCheckBox" alignment="0" min="-2" max="-2" attributes="0"/>
+                  <Component id="matrixRadioButton" alignment="0" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace pref="99" max="32767" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+    <DimensionLayout dim="1">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" alignment="0" attributes="0">
+              <EmptySpace min="-2" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="listRadioButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="matrixRadioButton" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="symmetricCheckBox" min="-2" max="-2" attributes="0"/>
+              <EmptySpace pref="12" max="32767" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JRadioButton" name="matrixRadioButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Matrix"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="matrixRadioButtonActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JRadioButton" name="listRadioButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="List"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="listRadioButtonActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="symmetricCheckBox">
+      <Properties>
+        <Property name="label" type="java.lang.String" value="Symmetric"/>
+      </Properties>
+      <AccessibilityProperties>
+        <Property name="AccessibleContext.accessibleName" type="java.lang.String" value="symmetricCheckBox"/>
+      </AccessibilityProperties>
+    </Component>
+  </SubComponents>
+</Form>

=== added file 'Exporter DL/src/org/gephi/io/exporter/ucinet/UIExporterDLPanel.java'
--- Exporter DL/src/org/gephi/io/exporter/ucinet/UIExporterDLPanel.java	1970-01-01 00:00:00 +0000
+++ Exporter DL/src/org/gephi/io/exporter/ucinet/UIExporterDLPanel.java	2011-07-26 10:13:29 +0000
@@ -0,0 +1,106 @@
+package org.gephi.io.exporter.ucinet;
+
+public class UIExporterDLPanel extends javax.swing.JPanel {
+    
+
+    /** Creates new customizer UIExporterDLPanel */
+    public UIExporterDLPanel() {
+        initComponents();
+    }
+    
+    void setup(ExporterDL exporter)
+    {
+       // normalizeCheckBox.setSelected(exporter.isNormalize());
+        matrixRadioButton.setSelected(exporter.isUseMatrixFormat());
+        listRadioButton.setSelected(exporter.isUseListFormat());
+        symmetricCheckBox.setSelected(exporter.isMakeSymmetricMatrix());
+        symmetricCheckBox.setEnabled(matrixRadioButton.isSelected());
+    }
+    
+    void unsetup(ExporterDL exporter)
+    {
+       // exporter.setNormalize(normalizeCheckBox.isSelected());
+        exporter.setUseMatrixFormat(matrixRadioButton.isSelected());
+        exporter.setUseListFormat(listRadioButton.isSelected());
+        exporter.setMakeSymmetricMatrix(symmetricCheckBox.isSelected());
+    }
+    /** This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the FormEditor.
+     */
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        jLabel1 = new javax.swing.JLabel();
+        buttonGroup1 = new javax.swing.ButtonGroup();
+        buttonGroup2 = new javax.swing.ButtonGroup();
+        matrixRadioButton = new javax.swing.JRadioButton();
+        listRadioButton = new javax.swing.JRadioButton();
+        symmetricCheckBox = new javax.swing.JCheckBox();
+
+        jLabel1.setText("jLabel1");
+
+        matrixRadioButton.setText("Matrix");
+        matrixRadioButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                matrixRadioButtonActionPerformed(evt);
+            }
+        });
+
+        listRadioButton.setText("List");
+        listRadioButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                listRadioButtonActionPerformed(evt);
+            }
+        });
+
+        symmetricCheckBox.setLabel("Symmetric");
+
+        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(listRadioButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 86, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                    .add(symmetricCheckBox)
+                    .add(matrixRadioButton))
+                .addContainerGap(99, Short.MAX_VALUE))
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(listRadioButton)
+                    .add(matrixRadioButton))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(symmetricCheckBox)
+                .addContainerGap(12, Short.MAX_VALUE))
+        );
+
+        symmetricCheckBox.getAccessibleContext().setAccessibleName("symmetricCheckBox");
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void matrixRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_matrixRadioButtonActionPerformed
+      listRadioButton.setSelected(!matrixRadioButton.isSelected());
+      symmetricCheckBox.setEnabled(matrixRadioButton.isSelected());
+    }//GEN-LAST:event_matrixRadioButtonActionPerformed
+
+    private void listRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_listRadioButtonActionPerformed
+      matrixRadioButton.setSelected(!listRadioButton.isSelected());
+      symmetricCheckBox.setEnabled(matrixRadioButton.isSelected());
+    }//GEN-LAST:event_listRadioButtonActionPerformed
+//FIXME: delete invisible variables
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.ButtonGroup buttonGroup1;
+    private javax.swing.ButtonGroup buttonGroup2;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JRadioButton listRadioButton;
+    private javax.swing.JRadioButton matrixRadioButton;
+    private javax.swing.JCheckBox symmetricCheckBox;
+    // End of variables declaration//GEN-END:variables
+}

=== added directory 'Exporter DL/test'
=== added directory 'Exporter DL/test/unit'
=== added directory 'Exporter DL/test/unit/src'
=== modified file 'nbproject/project.properties'
--- nbproject/project.properties	2011-07-19 04:14:33 +0000
+++ nbproject/project.properties	2011-07-26 10:13:29 +0000
@@ -33,6 +33,7 @@
 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.exporter.ucinet=Exporter DL
 project.org.gephi.io.generator.api=GeneratorAPI
 project.org.gephi.io.generator.plugin=GeneratorPlugin
 project.org.gephi.io.importer.api=ImportAPI
@@ -200,7 +201,8 @@
     ${project.org.gephi.lib.javamail}:\
     ${project.org.gephi.lib.jcalendar}:\
     ${project.org.gephi.lib.commonscompress}:\
-    ${project.org.gephi.ranking.plugin}
+    ${project.org.gephi.ranking.plugin}:\
+    ${project.org.gephi.io.exporter.ucinet}
 project.org.gephi.branding.desktop=DesktopBranding
 project.org.gephi.data.attributes=AttributesImpl
 project.org.gephi.data.attributes.api=AttributesAPI


Follow ups