diff --git a/ExcelCsvImporter/manifest.mf b/ExcelCsvImporter/manifest.mf index db2b1abd4..ef36c6c50 100644 --- a/ExcelCsvImporter/manifest.mf +++ b/ExcelCsvImporter/manifest.mf @@ -1,6 +1,7 @@ -Manifest-Version: 1.0 +Manifest-Version: 1.1.1 AutoUpdate-Show-In-Client: true -OpenIDE-Module: ExcelCsvImporter +OpenIDE-Module: ExcelCsvImporter/1 +OpenIDE-Module-Implementation-Version: 1 OpenIDE-Module-Localizing-Bundle: ExcelCsvImporter/Bundle.properties -OpenIDE-Module-Specification-Version: 1.0 +OpenIDE-Module-Specification-Version: 1 diff --git a/ExcelCsvImporter/private/ExcelTest.xlsx b/ExcelCsvImporter/private/ExcelTest.xlsx index a878771a5..17f487fc1 100644 Binary files a/ExcelCsvImporter/private/ExcelTest.xlsx and b/ExcelCsvImporter/private/ExcelTest.xlsx differ diff --git a/ExcelCsvImporter/src/ExcelCsvImporter/Bundle.properties b/ExcelCsvImporter/src/ExcelCsvImporter/Bundle.properties index 2a719d202..98065f192 100644 --- a/ExcelCsvImporter/src/ExcelCsvImporter/Bundle.properties +++ b/ExcelCsvImporter/src/ExcelCsvImporter/Bundle.properties @@ -3,7 +3,10 @@ OpenIDE-Module-Long-Description=\

Convert Excel and csv files to networks

\n\nThis plugin helps you import Excel files and csv files into Gephi, by transforming them into networks.\
\nIt takes the rows of your file and let you define which relations should be found in it.\
\n\nPlease post issues and ask for feature request on Github.\ -
\n\nOr contact me (Clement Levallois) via Twitter @seinecle. +
\n\nOr contact me (Clement Levallois) via Twitter @seinecle.\n\n\n\ + Release History:\n\nVersion 1.1.1 (March 2014)\n-> Bug fix (suggested by Wouters A.H. \ + Spekkink)\nSame names in different columns of the Excel of csv files are now correctly analyzed.\n\n\ + Version 1.0 (October 2014)\n-> Initial release. OpenIDE-Module-Name=Convert Excel and csv files to networks OpenIDE-Module-Short-Description=Converts Excel files and csv files into networks Panel1.jButtonSelectFile.text=select file diff --git a/ExcelCsvImporter/src/Parsers/CsvParser.java b/ExcelCsvImporter/src/Parsers/CsvParser.java index d0ab4afcb..9a7afe6e5 100644 --- a/ExcelCsvImporter/src/Parsers/CsvParser.java +++ b/ExcelCsvImporter/src/Parsers/CsvParser.java @@ -74,6 +74,7 @@ public class CsvParser { public CsvReader csvReader; String textDelimiter; String fieldDelimiter; + Multiset nodes = HashMultiset.create(); Multiset nodesFirst = HashMultiset.create(); Multiset nodesSecond = HashMultiset.create(); Multiset edges = HashMultiset.create(); @@ -117,9 +118,7 @@ public final void init() { } catch (FileNotFoundException ex) { Exceptions.printStackTrace(ex); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } + } } public String[] getHeaders() throws IOException { @@ -181,7 +180,6 @@ public void convertToNetwork() throws IOException { String[] firstAgentSplit; String[] secondAgentSplit; - if (firstDelimiter != null) { firstAgentSplit = firstAgent.trim().split(firstDelimiter); } else { @@ -189,7 +187,9 @@ public void convertToNetwork() throws IOException { firstAgentSplit[0] = firstAgent; } for (String node : firstAgentSplit) { - nodesFirst.add(node.trim()); + node = node.trim(); + nodesFirst.add(node); + nodes.add(node); } if (!oneTypeOfAgent) { @@ -201,56 +201,69 @@ public void convertToNetwork() throws IOException { secondAgentSplit[0] = secondAgent; } for (String node : secondAgentSplit) { - nodesSecond.add(node.trim()); + node = node.trim(); + nodesSecond.add(node); + nodes.add(node); } } else { secondAgentSplit = null; } - String[] both = ArrayUtils.addAll(firstAgentSplit, secondAgentSplit); - //let's find all connections between all the tags for this picture + //let's find all connections between all the agents in this row Utils usefulTools = new Utils(); - List connections = usefulTools.getListOfLinks(both,MyFileImporter.removeSelfLoops); - edges.addAll(connections); - } + if (!MyFileImporter.innerLinksIncluded) { + for (String x : firstAgentSplit) { + for (String xx : secondAgentSplit) { + if (!(MyFileImporter.removeSelfLoops & x.equals(xx))) { + edges.add(x.trim() + "|" + xx.trim()); + } + } + } + } else { + List connections; + String[] both = ArrayUtils.addAll(firstAgentSplit, secondAgentSplit); + connections = usefulTools.getListOfLinks(both, MyFileImporter.removeSelfLoops); + edges.addAll(connections); + } + + } NodeDraft node; AttributeTable atNodes = container.getAttributeModel().getNodeTable(); AttributeColumn acFrequency = atNodes.addColumn("frequency", AttributeType.INT); AttributeColumn acType = atNodes.addColumn("type", AttributeType.STRING); - - for (String n : nodesFirst.elementSet()) { + StringBuilder type; + boolean atLeastOneType = false; + + for (String n : nodes.elementSet()) { node = container.factory().newNodeDraft(); node.setId(n); node.setLabel(n); - node.addAttributeValue(acFrequency, nodesFirst.count(n)); - node.addAttributeValue(acType, MyFileImporter.getFirstConnectedAgent()); - container.addNode(node); - } - - for (String n : nodesSecond.elementSet()) { - node = container.factory().newNodeDraft(); - node.setId(n); - node.setLabel(n); - node.addAttributeValue(acFrequency, nodesSecond.count(n)); - node.addAttributeValue(acType, MyFileImporter.getSecondConnectedAgent()); + type = new StringBuilder(); + node.addAttributeValue(acFrequency, nodes.count(n)); + if (nodesFirst.contains(n)) { + type.append(MyFileImporter.getFirstConnectedAgent()); + atLeastOneType = true; + } + if (nodesSecond.contains(n)) { + if (atLeastOneType) { + type.append("; "); + } + type.append(MyFileImporter.getSecondConnectedAgent()); + } + node.addAttributeValue(acType, type); container.addNode(node); - } + } //loop for edges Integer idEdge = 0; EdgeDraft edge; for (String e : edges.elementSet()) { - System.out.println("edge: " + e); String sourceNode = e.split("\\|")[0].trim(); String targetNode = e.split("\\|")[1].trim(); - if (!MyFileImporter.innerLinksIncluded) { - if ((nodesFirst.contains(sourceNode) & nodesFirst.contains(targetNode)) || (nodesSecond.contains(sourceNode) & nodesSecond.contains(targetNode))) { - continue; - } - } + edge = container.factory().newEdgeDraft(); idEdge = idEdge + 1; edge.setSource(container.getNode(sourceNode)); diff --git a/ExcelCsvImporter/src/Parsers/ExcelParser.java b/ExcelCsvImporter/src/Parsers/ExcelParser.java index 3ee1e420c..b95d468dd 100644 --- a/ExcelCsvImporter/src/Parsers/ExcelParser.java +++ b/ExcelCsvImporter/src/Parsers/ExcelParser.java @@ -77,6 +77,7 @@ public class ExcelParser { String sheetName; boolean headersPresent; Integer columnCount; + Multiset nodes = HashMultiset.create(); Multiset nodesFirst = HashMultiset.create(); Multiset nodesSecond = HashMultiset.create(); Multiset edges = HashMultiset.create(); @@ -205,14 +206,12 @@ public void convertToNetwork() throws IOException, InvalidFormatException { } } - } lineCounter++; String[] firstAgentSplit; String[] secondAgentSplit; - if (firstDelimiter != null) { firstAgentSplit = firstAgent.trim().split(firstDelimiter); } else { @@ -220,7 +219,9 @@ public void convertToNetwork() throws IOException, InvalidFormatException { firstAgentSplit[0] = firstAgent; } for (String node : firstAgentSplit) { - nodesFirst.add(node.trim()); + node = node.trim(); + nodesFirst.add(node); + nodes.add(node); } if (!oneTypeOfAgent) { @@ -232,56 +233,68 @@ public void convertToNetwork() throws IOException, InvalidFormatException { secondAgentSplit[0] = secondAgent; } for (String node : secondAgentSplit) { - nodesSecond.add(node.trim()); + node = node.trim(); + nodesSecond.add(node); + nodes.add(node); } } else { secondAgentSplit = null; } - String[] both = ArrayUtils.addAll(firstAgentSplit, secondAgentSplit); - //let's find all connections between all the tags for this picture + //let's find all connections between all the agents in this row Utils usefulTools = new Utils(); - List connections = usefulTools.getListOfLinks(both,MyFileImporter.removeSelfLoops); - edges.addAll(connections); - } + if (!MyFileImporter.innerLinksIncluded) { + for (String x : firstAgentSplit) { + for (String xx : secondAgentSplit) { + if (!(MyFileImporter.removeSelfLoops & x.equals(xx))) { + edges.add(x.trim() + "|" + xx.trim()); + } + } + } + } else { + List connections; + String[] both = ArrayUtils.addAll(firstAgentSplit, secondAgentSplit); + connections = usefulTools.getListOfLinks(both, MyFileImporter.removeSelfLoops); + edges.addAll(connections); + } + } NodeDraft node; AttributeTable atNodes = container.getAttributeModel().getNodeTable(); AttributeColumn acFrequency = atNodes.addColumn("frequency", AttributeType.INT); AttributeColumn acType = atNodes.addColumn("type", AttributeType.STRING); + StringBuilder type; + boolean atLeastOneType = false; - for (String n : nodesFirst.elementSet()) { + for (String n : nodes.elementSet()) { + type = new StringBuilder(); node = container.factory().newNodeDraft(); node.setId(n); node.setLabel(n); - node.addAttributeValue(acFrequency, nodesFirst.count(n)); - node.addAttributeValue(acType, MyFileImporter.getFirstConnectedAgent()); - container.addNode(node); - } - - for (String n : nodesSecond.elementSet()) { - node = container.factory().newNodeDraft(); - node.setId(n); - node.setLabel(n); - node.addAttributeValue(acFrequency, nodesSecond.count(n)); - node.addAttributeValue(acType, MyFileImporter.getSecondConnectedAgent()); + node.addAttributeValue(acFrequency, nodes.count(n)); + if (nodesFirst.contains(n)) { + type.append(MyFileImporter.getFirstConnectedAgent()); + atLeastOneType = true; + } + if (nodesSecond.contains(n)) { + if (atLeastOneType) { + type.append("; "); + } + type.append(MyFileImporter.getSecondConnectedAgent()); + } + node.addAttributeValue(acType, type); container.addNode(node); - } + } //loop for edges Integer idEdge = 0; EdgeDraft edge; for (String e : edges.elementSet()) { - System.out.println("edge: " + e); +// System.out.println("edge: " + e); String sourceNode = e.split("\\|")[0]; String targetNode = e.split("\\|")[1]; - if (!MyFileImporter.innerLinksIncluded) { - if ((nodesFirst.contains(sourceNode) & nodesFirst.contains(targetNode)) || (nodesSecond.contains(sourceNode) & nodesSecond.contains(targetNode))) { - continue; - } - } edge = container.factory().newEdgeDraft(); idEdge = idEdge + 1; edge.setSource(container.getNode(sourceNode)); diff --git a/ExcelCsvImporter/src/Wizard/Panel5Wizard.java b/ExcelCsvImporter/src/Wizard/Panel5Wizard.java index fb5be3fc3..b7c7ba4f9 100644 --- a/ExcelCsvImporter/src/Wizard/Panel5Wizard.java +++ b/ExcelCsvImporter/src/Wizard/Panel5Wizard.java @@ -100,6 +100,7 @@ public void removeChangeListener(ChangeListener cl) { public void readSettings(WizardDescriptor data) { ((Panel5) getComponent()).jLabel3.setText(MyFileImporter.getFirstConnectedAgent()); ((Panel5) getComponent()).jLabel5.setText(MyFileImporter.getSecondConnectedAgent()); + MyFileImporter.innerLinksIncluded = Panel4.jCheckBoxInnerLinks.isSelected(); }