提交 1e0f99d9 编写于 作者: E Eduardo Ramos

Fix #1848 Import CSV error edges: force undirected makes edges disappear when merged

上级 8ee2579d
......@@ -333,6 +333,16 @@ public class ImportContainerImpl implements Container, ContainerLoader, Containe
edgeMap.put(edgeDraft.getId(), index);
}
private void removeNode(NodeDraftImpl node) {
String id = node.getId();
if (!nodeMap.containsKey(id)) {
return;
}
int index = nodeMap.removeInt(id);
nodeList.set(index, null);
}
@Override
public void removeEdge(EdgeDraft edgeDraft) {
checkElementDraftImpl(edgeDraft);
......@@ -343,6 +353,8 @@ public class ImportContainerImpl implements Container, ContainerLoader, Containe
if (!edgeMap.containsKey(id)) {
return;
}
boolean directed = edgeDraftImpl.getDirection() == EdgeDirection.DIRECTED;
if (edgeDraftImpl.getDirection() != null) {
//UnCounting
......@@ -361,12 +373,12 @@ public class ImportContainerImpl implements Container, ContainerLoader, Containe
}
int edgeType = getEdgeType(edgeDraftImpl.getType());
long sourceTargetLong = getLongId(edgeDraftImpl);
long sourceTargetLong = getLongId(edgeDraftImpl.getSource(), edgeDraftImpl.getTarget(), directed);
ensureLongSetArraySize(edgeType);
Long2ObjectMap<int[]> edgeTypeSet = edgeTypeSets[edgeType];
//Get index
int index = edgeMap.remove(id);
int index = edgeMap.removeInt(id);
//Update edgeType set
int[] edges = edgeTypeSet.remove(sourceTargetLong);
......@@ -727,14 +739,14 @@ public class ImportContainerImpl implements Container, ContainerLoader, Containe
if (directedEdgesCount > 0 && edgeDefault.equals(EdgeDirectionDefault.UNDIRECTED)) {
//Force undirected
for (EdgeDraftImpl edge : edgeList.toArray(new EdgeDraftImpl[0])) {
if (edge != null && edge.getDirection().equals(EdgeDirection.DIRECTED)) {
final boolean notAlreadyRemoved = edge != null
&& edgeMap.containsKey(edge.getId());
if (notAlreadyRemoved && edge.getDirection().equals(EdgeDirection.DIRECTED)) {
EdgeDraftImpl opposite = getOpposite(edge);
if (opposite != null) {
int oppositeIndex = edgeMap.getInt(opposite.getId());
mergeDirectedEdges(opposite, edge);
edgeMap.removeInt(opposite.getId());
edgeList.set(oppositeIndex, null);
removeEdge(opposite);
}
}
}
......@@ -745,14 +757,12 @@ public class ImportContainerImpl implements Container, ContainerLoader, Containe
if (!allowAutoNode()) {
for (NodeDraftImpl node : nodeList) {
if (node != null && node.isCreatedAuto()) {
int index = nodeMap.removeInt(node.getId());
nodeList.set(index, null);
removeNode(node);
}
}
for (EdgeDraftImpl edge : edgeList) {
if (edge != null && (edge.getSource().isCreatedAuto() || edge.getTarget().isCreatedAuto())) {
int index = edgeMap.remove(edge.getId());
edgeList.set(index, null);
removeEdge(edge);
}
}
}
......
Manifest-Version: 1.0
AutoUpdate-Essential-Module: true
OpenIDE-Module-Localizing-Bundle: org/gephi/io/importer/api/Bundle.properties
OpenIDE-Module-Specification-Version: 0.9.2.1
OpenIDE-Module-Specification-Version: 0.9.2.2
OpenIDE-Module-Display-Category: Gephi Core
OpenIDE-Module-Name: Import API
\ No newline at end of file
......@@ -61,6 +61,7 @@ import org.gephi.graph.api.types.IntervalLongMap;
import org.gephi.graph.api.types.IntervalSet;
import org.gephi.io.exporter.plugin.ExporterSpreadsheet;
import org.gephi.io.importer.api.Container;
import org.gephi.io.importer.api.EdgeDirectionDefault;
import org.gephi.io.importer.api.EdgeMergeStrategy;
import org.gephi.io.importer.api.ImportController;
import org.gephi.io.importer.plugin.file.spreadsheet.ImporterSpreadsheetCSV;
......@@ -343,7 +344,7 @@ public class SpreadsheetNGTest {
@Test
public void testEdgesTableDynamicWeightsMerged() throws FileNotFoundException, IOException {
File file = FileUtil.archiveOrDirForURL(SpreadsheetNGTest.class.getResource("/org/gephi/io/importer/plugin/file/spreadsheet/edgest_table_dynamic_weights.csv"));
File file = FileUtil.archiveOrDirForURL(SpreadsheetNGTest.class.getResource("/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_dynamic_weights.csv"));
ImporterSpreadsheetCSV importer = new ImporterSpreadsheetCSV();
......@@ -491,6 +492,39 @@ public class SpreadsheetNGTest {
checkNodesSpreadsheet();
}
@Test
public void testEdgesTableOppositeForceUndirected_Merged() throws FileNotFoundException, IOException {
File file = FileUtil.archiveOrDirForURL(SpreadsheetNGTest.class.getResource("/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_opposite_force_undirected_merged.csv"));
Container container = importController.importFile(file);
Assert.assertNotNull(container);
//Force undirected:
container.getLoader().setEdgeDefault(EdgeDirectionDefault.UNDIRECTED);
container.getLoader().setEdgesMergeStrategy(EdgeMergeStrategy.SUM);
importController.process(container, new DefaultProcessor(), workspace);
checkEdgesSpreadsheet();
}
@Test
public void testEdgesTableOppositeForceUndirected_Issue1848() throws FileNotFoundException, IOException {
//https://github.com/gephi/gephi/issues/1848
File file = FileUtil.archiveOrDirForURL(SpreadsheetNGTest.class.getResource("/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_opposite_force_undirected_issue_1848.csv"));
Container container = importController.importFile(file);
Assert.assertNotNull(container);
//Force undirected:
container.getLoader().setEdgeDefault(EdgeDirectionDefault.UNDIRECTED);
container.getLoader().setEdgesMergeStrategy(EdgeMergeStrategy.SUM);
importController.process(container, new DefaultProcessor(), workspace);
checkEdgesSpreadsheet();
}
private void checkEdgesSpreadsheet() throws IOException {
checkEdgesSpreadsheet(true);
......
Source,Target,Type,Label,timeset,Weight
imbabura,loja,Undirected,,,2
elarteviveenloja,unl,Undirected,,,833
loja,municipiodeloja,Undirected,,,58
felizviernes,loja,Undirected,,,6
videovigilanciaecu911durante,elarteviveenloja,Undirected,,,28
elarteviveenloja,cbamprendo,Undirected,,,4
cbamprendo,artesvivasloja,Undirected,,,1
artesvivasloja,3i,Undirected,,,1
cbamprendo,3i,Undirected,,,1
3h,elarteviveenloja,Undirected,,,1
acreditacionunl2018,elarteviveenloja,Undirected,,,12
elarteviveenloja,enlanacionaldelojalacorrupcion,Undirected,,,4
elarteviveenloja,ecuadorunido,Undirected,,,6
unl,sosunl,Undirected,,,71
arcsa,salud,Undirected,,,12
salud,elarteviveenloja,Undirected,,,35
patriciovallejo,elarteviveenloja,Undirected,,,21
elarteviveenloja,fiavl,Undirected,,,76
elscomediants,loja,Undirected,,,2
temblor,loja,Undirected,,,6
loja,fiestasdequito,Undirected,,,4
fiestasdequito,elarteviveenloja,Undirected,,,4
ecu911,elarteviveenloja,Undirected,,,130
cbamprendo,3h,Undirected,,,2
todaunavida,elarteviveenloja,Undirected,,,164
temblor,elarteviveenloja,Undirected,,,2
unl,ecuador,Undirected,,,26
municipiodeloja,elarteviveenloja,Undirected,,,38
elarteviveenloja,telediario,Undirected,,,10
loja,ecuador,Undirected,,,70
ecuador,elarteviveenloja,Undirected,,,174
elarteviveenloja,leninmoreno,Undirected,,,4
leninmoreno,loja,Undirected,,,4
elarteviveenloja,fiestasdeloja,Undirected,,,1
graph,networkscience,Undirected,,,7
networkscience,fiavl2017,Undirected,,,7
fiavl2017,elarteviveenloja,Undirected,,,359
sosunl,atender,Undirected,,,27
elarteviveenloja,igf2017ec,Undirected,,,3
igf2017ec,loja,Undirected,,,3
loja,postalecu911,Undirected,,,2
elarteviveenloja,zoocarcel,Undirected,,,1
loja,unl,Undirected,,,3
elarteviveenloja,agendapresidencialec,Undirected,,,110
elarteviveenloja,sueno,Undirected,,,2
sueno,quito,Undirected,,,2
quito,stepbystep,Undirected,,,2
rectorunl,elarteviveenloja,Undirected,,,10
elarteviveenloja,soslenin,Undirected,,,10
elarteviveenloja,festivaldeartesvivas,Undirected,,,4
festivaldeartesvivas,loja,Undirected,,,4
cryptomonedas,latingrammy,Undirected,,,1
latingrammy,hagamosunpacto,Undirected,,,1
hagamosunpacto,elarteviveenloja,Undirected,,,1
elarteviveenloja,bitcoins,Undirected,,,1
rociodemoreno,elarteviveenloja,Undirected,,,1
elarteviveenloja,compromisosocial,Undirected,,,2
argentina,loja,Undirected,,,48
ecuador,fiav2017,Undirected,,,48
fiav2017,elarteviveenloja,Undirected,,,82
95anosdeluchaobrera,clasicodelastillero,Undirected,,,3
clasicodelastillero,encuentromujeres,Undirected,,,3
encuentromujeres,laconsultamalva,Undirected,,,3
laconsultamalva,elarteviveenloja,Undirected,,,3
loja,arte,Undirected,,,1
arte,cultura,Undirected,,,1
elarteviveenloja,elscomediants,Undirected,,,1
moreno,elarteviveenloja,Undirected,,,2
fiavl2017,los4mundosdelsur,Undirected,,,1
blogs,educativos,Undirected,,,1
educativos,latinoamerica,Undirected,,,1
revistameets,elarteviveenloja,Undirected,,,1
fiavl2017,ilovecrepesncofee,Undirected,,,1
ilovecrepesncofee,undulceantojo,Undirected,,,1
undulceantojo,lojaecuador,Undirected,,,1
sebusca,loja,Undirected,,,3
loja,cuckold,Undirected,,,3
cuckold,hotwife,Undirected,,,4
hotwife,imbox,Undirected,,,3
imbox,elarteviveenloja,Undirected,,,3
elarteviveenloja,latingrammystnt,Undirected,,,1
elarteviveenloja,raulpereztorres,Undirected,,,10
festivalinternacionaldeartesvivas,loja,Undirected,,,2
loja,teatro,Undirected,,,1
teatro,benjamincarrion,Undirected,,,1
cultura,elarteviveenloja,Undirected,,,2
lojamiciudad,loja,Undirected,,,1
ecu911,loja,Undirected,,,10
videovigilanciaecu911,elarteviveenloja,Undirected,,,29
elarteviveenloja,atenter,Undirected,,,16
loja,elarteviveenloja,Undirected,,,714
faustomino,elarteviveenloja,Undirected,,,1
loja,moreno,Undirected,,,1
elarteviveenloja,guadual,Undirected,,,1
bsc,mrsanta,Undirected,,,4
mrsanta,emelec,Undirected,,,4
emelec,cell,Undirected,,,4
cell,clasicodelastillero,Undirected,,,4
clasicodelastillero,peru,Undirected,,,4
peru,elarteviveenloja,Undirected,,,4
fiavloja2017,elarteviveenloja,Undirected,,,2
criacuervos,elarteviveenloja,Undirected,,,7
elarteviveenloja,manabi,Undirected,,,1
elarteviveenloja,perualmundial,Undirected,,,1
perualmundial,rusia2018,Undirected,,,1
rusia2018,gasolinazo,Undirected,,,1
gasolinazo,thursdaythoughts,Undirected,,,1
bicifest,elarteviveenloja,Undirected,,,1
degostudio,todoesdiseno,Undirected,,,1
todoesdiseno,diseno,Undirected,,,1
diseno,design,Undirected,,,1
design,ecuador,Undirected,,,1
ecuador,quito,Undirected,,,1
quito,uio,Undirected,,,1
uio,branding,Undirected,,,1
branding,publicidad,Undirected,,,1
lojamiciudad,elarteviveenloja,Undirected,,,8
loja,sosunl,Undirected,,,16
fiav2017,calasanz,Undirected,,,1
sos,elarteviveenloja,Undirected,,,1
elarteviveenloja,felizjueves,Undirected,,,1
felizjueves,ecuador,Undirected,,,1
loja,palza,Undirected,,,1
fiavloja2017,noviembre,Undirected,,,1
elarteviveenloja,unloja,Undirected,,,22
elarteviveenloja,los4mundosdelsur,Undirected,,,95
elarteviveenloja,coracao,Undirected,,,1
coracao,thehills,Undirected,,,1
filosofia,elarteviveenloja,Undirected,,,2
loja,festivalartesvivas,Undirected,,,11
festivalartesvivas,elarteviveenloja,Undirected,,,11
parquerecreacionaljipiro,loja,Undirected,,,26
los4mundosdelsur,parquenacionalpodocarpus,Undirected,,,16
parquenacionalpodocarpus,elarteviveenloja,Undirected,,,16
hotwife,loja,Undirected,,,1
huesosdebuda,utpl,Undirected,,,1
utpl,ecuador,Undirected,,,1
loja,wanted,Undirected,,,1
wanted,sebusca,Undirected,,,1
sebusca,cornudo,Undirected,,,1
cornudo,hotwife,Undirected,,,1
cuckold,swinger,Undirected,,,1
swinger,loja,Undirected,,,1
loja,zamora,Undirected,,,1
zamora,cuenca,Undirected,,,1
cuenca,machala,Undirected,,,1
elarteviveenloja,presidencia_ec,Undirected,,,1
sosunl,elarteviveenloja,Undirected,,,2883
loja,economianaranja,Undirected,,,1
economianaranja,elarteviveenloja,Undirected,,,1
raulperez,elarteviveenloja,Undirected,,,7
utpl,elarteviveenloja,Undirected,,,1
fiav2017,loja,Undirected,,,3
elarteviveenloja,foto,Undirected,,,3
caminoaloja,giavl2017,Undirected,,,1
elarteviveenloja,elcisne,Undirected,,,19
elarteviveenloja,lapuertadelaciudaddeloja,Undirected,,,18
fiav2017,raulperez,Undirected,,,3
utpl,fiavl2017,Undirected,,,1
felizmiercoles,15nov,Undirected,,,2
15nov,diamundialdeladiabetes,Undirected,,,2
diamundialdeladiabetes,elarteviveenloja,Undirected,,,2
elarteviveenloja,usabienel911,Undirected,,,2
usabienel911,comienzaelcambio,Undirected,,,2
comienzaelcambio,adelantesedespejaelcamino,Undirected,,,2
loja,los4mundosdelsur,Undirected,,,33
vilcabamba,loja,Undirected,,,1
elarteviveenloja,consultapopular,Undirected,,,1
consultapopular,sialaconsulta,Undirected,,,1
sialaconsulta,lojacontigolenin,Undirected,,,1
los4mundosdelsur,parquenacionalpodoparpus,Undirected,,,3
parquenacionalpodoparpus,elarteviveenloja,Undirected,,,3
loja,fiavl2017,Undirected,,,4
conexionecu911,elarteviveenloja,Undirected,,,36
iwia,loja,Undirected,,,2
loja,saraguro,Undirected,,,6
pinas,los4mundosdelsur,Undirected,,,7
los4mundosdelsur,eloro,Undirected,,,5
eloro,islasantaclara,Undirected,,,5
zamora,parquenacionalpodocarpus,Undirected,,,2
loja,conexionecu911,Undirected,,,1
elarteviveenloja,revistaviajeromedio,Undirected,,,4
elarteviveenloja,arcsa,Undirected,,,10
cinemasin,wayakcirco,Undirected,,,1
elarteviveenloja,campanadehospitalidadturistica,Undirected,,,13
programacion,loja,Undirected,,,10
elarteviveenloja,artesvivas,Undirected,,,4
artesvivas,loja,Undirected,,,4
felizviernes,elarteviveenloja,Undirected,,,2
elarteviveenloja,cifiunl2017,Undirected,,,2
elarteviveenloja,somosculturautpl,Undirected,,,5
zaruma,los4mundosdelsur,Undirected,,,20
karcocha,elarteviveenloja,Undirected,,,4
elarteviveenloja,weareproudofyoulauren,Undirected,,,2
weareproudofyoulauren,lavadodeactivos,Undirected,,,2
elarteviveenloja,evento,Undirected,,,3
evento,loja,Undirected,,,3
loja,embajadorturistico,Undirected,,,3
elarteviveenloja,pablopalacio,Undirected,,,2
tena,fiavl2017,Undirected,,,9
fiavl2017,caminoaloja,Undirected,,,10
caminoaloja,elarteviveenloja,Undirected,,,59
cantanta,todoslospueblostodaslasvoces,Undirected,,,2
todoslospueblostodaslasvoces,elarteviveenloja,Undirected,,,2
elarteviveenloja,artesvivas2017,Undirected,,,2
cafetv,elarteviveenloja,Undirected,,,14
caminoaloja,maac,Undirected,,,9
maac,elarteviveenloja,Undirected,,,9
teamfestivaloff,festivalinternacionaldeartesvivas,Undirected,,,1
festivalinternacionaldeartesvivas,elarteviveenloja,Undirected,,,1
lima,elarteviveenloja,Undirected,,,1
caminoaloja,quito,Undirected,,,14
quito,elarteviveenloja,Undirected,,,14
raulpereztorres,bogota,Undirected,,,2
bogota,elarteviveenloja,Undirected,,,3
colombia,elarteviveenloja,Undirected,,,1
guayaquil,elarteviveenloja,Undirected,,,5
mevoyaloja,elarteviveenloja,Undirected,,,1
esmeraldas,caminoaloja,Undirected,,,2
lojacunadeartistas,elarteviveenloja,Undirected,,,3
loja,musica,Undirected,,,3
babahoyo,caminoaloja,Undirected,,,1
confirmado,karcocha,Undirected,,,1
karcocha,loja,Undirected,,,1
\ No newline at end of file
......@@ -45,7 +45,6 @@ import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
import java.awt.Color;
import java.util.HashSet;
import java.util.Set;
import org.gephi.graph.api.AttributeUtils;
import org.gephi.graph.api.Column;
import org.gephi.graph.api.Edge;
import org.gephi.graph.api.Element;
......
......@@ -228,7 +228,7 @@ public class DefaultProcessor extends AbstractProcessor {
Edge edge = graph.getEdge(source, target, edgeType);
if (edgesMergeStrategy == EdgeMergeStrategy.NO_MERGE) {
if (edge != null && edgesMergeStrategy == EdgeMergeStrategy.NO_MERGE) {
//Undirected and directed edges are incompatible, check for them or we could get an exception:
final Edge incompatibleEdge = findIncompatibleEdge(graph, source, target, createDirected, edgeType);
if (incompatibleEdge == null) {
......
Manifest-Version: 1.0
AutoUpdate-Essential-Module: true
OpenIDE-Module-Localizing-Bundle: org/gephi/io/processor/plugin/Bundle.properties
OpenIDE-Module-Specification-Version: 0.9.2.1
OpenIDE-Module-Specification-Version: 0.9.2.2
OpenIDE-Module-Display-Category: Plugin
OpenIDE-Module-Name: Processor Plugin
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册