diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/AttributeColumnsController.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/AttributeColumnsController.java index 638222e2143465c697e3fd43913c67c163d549c7..38864a099716e813f5324df71a02a374ace01031 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/AttributeColumnsController.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/AttributeColumnsController.java @@ -51,6 +51,7 @@ import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; import org.gephi.graph.api.Node; import org.gephi.graph.api.Table; @@ -415,6 +416,7 @@ public interface AttributeColumnsController { *

No special column must be provided.

*

If a column name is not already in nodes table, it will be created with the corresponding columnType index.

*

If a node id already exists, depending on assignNewNodeIds, a new id will be assigned to it or instead, the already existing node attributes will be updated with the CSV data

+ * @param graph Graph to import nodes * @param file CSV file * @param separator Separator of values of the CSV file * @param charset Charset of the CSV file @@ -422,7 +424,7 @@ public interface AttributeColumnsController { * @param columnTypes Types of the columns in the CSV file to use when creating columns * @param assignNewNodeIds Indicates if nodes should be assigned new ids when the ids are already in nodes table or not provided. */ - void importCSVToNodesTable(File file, Character separator, Charset charset, String[] columnNames, Class[] columnTypes, boolean assignNewNodeIds); + void importCSVToNodesTable(Graph graph, File file, Character separator, Charset charset, String[] columnNames, Class[] columnTypes, boolean assignNewNodeIds); /** *

Method for importing csv data to edges table.

@@ -438,6 +440,7 @@ public interface AttributeColumnsController { *
  • First column named 'Type' (case insensitive) will be used as edge type, matching 'Directed' or 'Undirected' strings (case insensitive). The next ones will be used as normal columns, and created if not already existing.
  • * *

    + * @param graph Graph to import edges * @param file CSV file * @param separator Separator of values of the CSV file * @param charset Charset of the CSV file @@ -445,7 +448,7 @@ public interface AttributeColumnsController { * @param columnTypes Types of the columns in the CSV file to use when creating columns * @param createNewNodes Indicates if missing nodes should be created when an edge declares a source or target id not already existing */ - void importCSVToEdgesTable(File file, Character separator, Charset charset, String[] columnNames, Class[] columnTypes, boolean createNewNodes); + void importCSVToEdgesTable(Graph graph, File file, Character separator, Charset charset, String[] columnNames, Class[] columnTypes, boolean createNewNodes); /** *

    Merges the given rows values to the given result row using one merge strategy for each column of the table.

    diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/GraphElementsController.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/GraphElementsController.java index de41b4756f5182dd9dd5772e42ffd911ca117c7d..ba5d2930de93050cb2d99861f29edaf6fec8c817 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/GraphElementsController.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/GraphElementsController.java @@ -201,6 +201,7 @@ public interface GraphElementsController { /** * Merges 2 or more nodes into a new one node that has all the edges of the merged nodes. * An AttributeRowsMergeStrategy must be provided for each column of the nodes. + * @param graph Graph that contains the nodes * @param nodes Nodes to merge (at least 1) * @param selectedNode Main selected node of the nodes to merge (or null to use first node) * @param columns Columns to apply a merge strategy in each row @@ -208,7 +209,7 @@ public interface GraphElementsController { * @param deleteMergedNodes Indicates if merged nodes should be deleted * @return New resulting node */ - Node mergeNodes(Node[] nodes, Node selectedNode, Column[] columns, AttributeRowsMergeStrategy[] mergeStrategies, boolean deleteMergedNodes); + Node mergeNodes(Graph graph, Node[] nodes, Node selectedNode, Column[] columns, AttributeRowsMergeStrategy[] mergeStrategies, boolean deleteMergedNodes); /** * Sets the fixed state of a node to the indicated. diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/AttributeColumnsControllerImpl.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/AttributeColumnsControllerImpl.java index 201afed5863706fceefa59b6647c1e18cd690551..c7307622a5ea16e0de60b563e800f322b75df482 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/AttributeColumnsControllerImpl.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/AttributeColumnsControllerImpl.java @@ -71,7 +71,6 @@ import org.gephi.graph.api.GraphController; import org.gephi.graph.api.Node; import org.gephi.graph.api.types.IntervalMap; import org.gephi.graph.api.types.TimestampMap; -import org.gephi.graph.impl.GraphStoreConfiguration; import org.gephi.utils.StatisticsUtils; import org.openide.util.Exceptions; import org.openide.util.Lookup; @@ -481,7 +480,7 @@ public class AttributeColumnsControllerImpl implements AttributeColumnsControlle } if (isNodeColumn(column) || isEdgeColumn(column)) { - return !GraphStoreConfiguration.ENABLE_ELEMENT_LABEL || column.getIndex() != GraphStoreConfiguration.ELEMENT_LABEL_INDEX; + return !column.getTitle().equalsIgnoreCase("Label"); } else { return true; } @@ -554,7 +553,7 @@ public class AttributeColumnsControllerImpl implements AttributeColumnsControlle } @Override - public void importCSVToNodesTable(File file, Character separator, Charset charset, String[] columnNames, Class[] columnTypes, boolean assignNewNodeIds) { + public void importCSVToNodesTable(Graph graph, File file, Character separator, Charset charset, String[] columnNames, Class[] columnTypes, boolean assignNewNodeIds) { if (columnNames == null || columnNames.length == 0) { return; } @@ -566,7 +565,7 @@ public class AttributeColumnsControllerImpl implements AttributeColumnsControlle CsvReader reader = null; try { //Prepare attribute columns for the column names, creating the not already existing columns: - Table nodesTable = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getNodeTable(); + Table nodesTable = graph.getModel().getNodeTable(); String idColumn = null; ArrayList columnsList = new ArrayList(); HashMap columnHeaders = new HashMap();//Necessary because of column name case insensitivity, to map columns to its corresponding csv header. @@ -591,7 +590,6 @@ public class AttributeColumnsControllerImpl implements AttributeColumnsControlle //Create nodes: GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - Graph graph = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph(); String id = null; Node node; reader = new CsvReader(new FileInputStream(file), separator, charset); @@ -635,7 +633,7 @@ public class AttributeColumnsControllerImpl implements AttributeColumnsControlle } @Override - public void importCSVToEdgesTable(File file, Character separator, Charset charset, String[] columnNames, Class[] columnTypes, boolean createNewNodes) { + public void importCSVToEdgesTable(Graph graph, File file, Character separator, Charset charset, String[] columnNames, Class[] columnTypes, boolean createNewNodes) { if (columnNames == null || columnNames.length == 0) { return; } @@ -647,7 +645,7 @@ public class AttributeColumnsControllerImpl implements AttributeColumnsControlle CsvReader reader = null; try { //Prepare attribute columns for the column names, creating the not already existing columns: - Table edgesTable = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getEdgeTable(); + Table edgesTable = graph.getModel().getEdgeTable(); String idColumn = null; String sourceColumn = null; String targetColumn = null; @@ -684,7 +682,6 @@ public class AttributeColumnsControllerImpl implements AttributeColumnsControlle //Create edges: GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - Graph graph = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph(); String id; Edge edge; String sourceId, targetId; diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/GraphElementsControllerImpl.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/GraphElementsControllerImpl.java index 7125912002c24a511bd74e502c8a5785f5f9db3a..3e4fc33abf2f45ea4ac2413725eb259f341212b3 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/GraphElementsControllerImpl.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/GraphElementsControllerImpl.java @@ -41,22 +41,18 @@ */ package org.gephi.datalab.impl; -import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; -import java.util.List; import java.util.Set; import org.gephi.graph.api.Column; import org.gephi.graph.api.Table; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.GraphElementsController; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.graph.api.DirectedGraph; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.Node; -import org.gephi.graph.api.UndirectedGraph; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; @@ -80,7 +76,7 @@ public class GraphElementsControllerImpl implements GraphElementsController { @Override public Node createNode(String label, Graph graph) { - Node newNode = buildNode(label); + Node newNode = buildNode(graph, label); graph.addNode(newNode); return newNode; } @@ -93,7 +89,7 @@ public class GraphElementsControllerImpl implements GraphElementsController { @Override public Node createNode(String label, String id, Graph graph) { if (graph.getNode(id) == null) { - Node newNode = buildNode(label, id); + Node newNode = buildNode(graph, label, id); graph.addNode(newNode); return newNode; } else { @@ -135,14 +131,14 @@ public class GraphElementsControllerImpl implements GraphElementsController { public Edge createEdge(String id, Node source, Node target, boolean directed, Graph graph) { Edge newEdge; if (directed) { - newEdge = buildEdge(id, source, target, true); + newEdge = buildEdge(graph, id, source, target, true); if (graph.addEdge(newEdge)) {//The edge will be created if it does not already exist. return newEdge; } else { return null; } } else { - newEdge = buildEdge(id, source, target, false); + newEdge = buildEdge(graph, id, source, target, false); if (graph.addEdge(newEdge)) {//The edge will be created if it does not already exist. return newEdge; } else { @@ -205,12 +201,12 @@ public class GraphElementsControllerImpl implements GraphElementsController { } @Override - public Node mergeNodes(Node[] nodes, Node selectedNode, Column[] columns, AttributeRowsMergeStrategy[] mergeStrategies, boolean deleteMergedNodes) { - Table edgesTable = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getEdgeTable(); + public Node mergeNodes(Graph graph, Node[] nodes, Node selectedNode, Column[] columns, AttributeRowsMergeStrategy[] mergeStrategies, boolean deleteMergedNodes) { + Table edgesTable = graph.getModel().getEdgeTable(); if (selectedNode == null) { selectedNode = nodes[0];//Use first node as selected node if null } - + //Create empty new node: Node newNode = createNode(""); @@ -359,32 +355,32 @@ public class GraphElementsControllerImpl implements GraphElementsController { return Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph(); } - private Node buildNode(String label) { - Node newNode = Lookup.getDefault().lookup(GraphController.class).getGraphModel().factory().newNode(); + private Node buildNode(Graph graph, String label) { + Node newNode = graph.getModel().factory().newNode(); newNode.setSize(DEFAULT_NODE_SIZE); newNode.setLabel(label); return newNode; } - private Node buildNode(String label, String id) { - Node newNode = Lookup.getDefault().lookup(GraphController.class).getGraphModel().factory().newNode(id); + private Node buildNode(Graph graph, String label, String id) { + Node newNode = graph.getModel().factory().newNode(id); newNode.setSize(DEFAULT_NODE_SIZE); newNode.setLabel(label); return newNode; } - private Edge buildEdge(String id, Node source, Node target, boolean directed) { + private Edge buildEdge(Graph graph, String id, Node source, Node target, boolean directed) { Edge newEdge; if (id != null) { - newEdge = Lookup.getDefault().lookup(GraphController.class).getGraphModel().factory().newEdge(id, source, target, DEFAULT_EDGE_TYPE, DEFAULT_EDGE_WEIGHT, directed); + newEdge = graph.getModel().factory().newEdge(id, source, target, DEFAULT_EDGE_TYPE, DEFAULT_EDGE_WEIGHT, directed); } else { - newEdge = Lookup.getDefault().lookup(GraphController.class).getGraphModel().factory().newEdge(source, target, DEFAULT_EDGE_TYPE, DEFAULT_EDGE_WEIGHT, directed); + newEdge = graph.getModel().factory().newEdge(source, target, DEFAULT_EDGE_TYPE, DEFAULT_EDGE_WEIGHT, directed); } return newEdge; } - private Node copyNode(Node node, Graph g) { - Node copy = buildNode(node.getLabel()); + private Node copyNode(Node node, Graph graph) { + Node copy = buildNode(graph, node.getLabel()); //Copy properties (position, size and color): copy.setX(node.x()); @@ -396,7 +392,7 @@ public class GraphElementsControllerImpl implements GraphElementsController { copy.setB(node.b()); copy.setAlpha(node.alpha()); - Table nodeTable = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getNodeTable(); + Table nodeTable = graph.getModel().getNodeTable(); //Copy attributes: for (Column column : nodeTable) { @@ -405,7 +401,7 @@ public class GraphElementsControllerImpl implements GraphElementsController { } } - g.addNode(copy); + graph.addNode(copy); return copy; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/MergeNodeDuplicates.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/MergeNodeDuplicates.java index 7d74e6f6a474b8f11b2891a2ddaf10d35f5fbdfa..f62880613e1481af6b879b2fe74627df312ebc31 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/MergeNodeDuplicates.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/MergeNodeDuplicates.java @@ -51,6 +51,7 @@ import org.gephi.datalab.plugin.manipulators.general.ui.MergeNodeDuplicatesUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.general.PluginGeneralActionsManipulator; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; +import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.Node; import org.openide.util.ImageUtilities; @@ -79,9 +80,10 @@ public class MergeNodeDuplicates implements PluginGeneralActionsManipulator { @Override public void execute() { + Graph graph = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph(); GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); for (List nodes : duplicateGroups) { - gec.mergeNodes(nodes.toArray(new Node[0]), nodes.get(0), columns, mergeStrategies, deleteMergedNodes); + gec.mergeNodes(graph, nodes.toArray(new Node[0]), nodes.get(0), columns, mergeStrategies, deleteMergedNodes); } NbPreferences.forModule(MergeNodeDuplicates.class).putBoolean(DELETE_MERGED_NODES_SAVED_PREFERENCES, deleteMergedNodes); NbPreferences.forModule(MergeNodeDuplicates.class).putBoolean(CASE_SENSITIVE_SAVED_PREFERENCES, caseSensitive); diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIWizardAction.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIWizardAction.java index 5637591fd21533d607d5f9291b832c3864100416..57a9d1909ebd06edb86815baf676b43407a071d7 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIWizardAction.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIWizardAction.java @@ -49,6 +49,8 @@ import java.text.MessageFormat; import javax.swing.JComponent; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.datatables.DataTablesController; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; import org.openide.DialogDisplayer; import org.openide.WizardDescriptor; import org.openide.util.HelpCtx; @@ -97,16 +99,17 @@ public final class ImportCSVUIWizardAction extends CallableSystemAction { //Edges import parameters: Boolean createNewNodes = (Boolean) wizardDescriptor.getProperty("create-new-nodes"); + Graph graph = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph(); AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); DataTablesController dtc = Lookup.getDefault().lookup(DataTablesController.class); dtc.setAutoRefreshEnabled(false); switch ((Mode) wizardDescriptor.getProperty("mode")) { case NODES_TABLE: - ac.importCSVToNodesTable(file, separator, charset, columnNames, columnTypes, assignNewNodeIds); + ac.importCSVToNodesTable(graph, file, separator, charset, columnNames, columnTypes, assignNewNodeIds); break; case EDGES_TABLE: - ac.importCSVToEdgesTable(file, separator, charset, columnNames, columnTypes, createNewNodes); + ac.importCSVToEdgesTable(graph, file, separator, charset, columnNames, columnTypes, createNewNodes); break; } dtc.refreshCurrentTable(); diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MergeNodes.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MergeNodes.java index ffc4ca4ce80ea114d10dfc06f44e45fd30f2853e..3772402f180b207a02d702c11508c7627486d397 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MergeNodes.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MergeNodes.java @@ -50,6 +50,7 @@ import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.plugin.manipulators.nodes.ui.MergeNodesUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; +import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.Node; import org.gephi.graph.api.Table; @@ -101,8 +102,10 @@ public class MergeNodes extends BasicNodesManipulator { @Override public void execute() { + Graph graph = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph(); + GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - Node newNode = gec.mergeNodes(nodes, selectedNode, columns, mergeStrategies, deleteMergedNodes); + Node newNode = gec.mergeNodes(graph, nodes, selectedNode, columns, mergeStrategies, deleteMergedNodes); Lookup.getDefault().lookup(DataTablesController.class).setNodeTableSelection(new Node[]{newNode}); NbPreferences.forModule(MergeNodes.class).putBoolean(DELETE_MERGED_NODES_SAVED_PREFERENCES, deleteMergedNodes); }