提交 502cf40d 编写于 作者: E Eduardo Ramos

Some improvements in datalab code.

上级 77468d87
......@@ -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 {
* <p>No special column must be provided.</p>
* <p>If a column name is not already in nodes table, it will be created with the corresponding columnType index.</p>
* <p>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</p>
* @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);
/**
* <p>Method for importing csv data to edges table.</p>
......@@ -438,6 +440,7 @@ public interface AttributeColumnsController {
* <li>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.</li>
* </ul>
* </p>
* @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);
/**
* <p>Merges the given rows values to the given result row using one merge strategy for each column of the table.</p>
......
......@@ -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.
......
......@@ -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<Column> columnsList = new ArrayList<Column>();
HashMap<Column, String> columnHeaders = new HashMap<Column, String>();//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;
......
......@@ -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;
}
......
......@@ -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<Node> 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);
......
......@@ -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();
......
......@@ -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);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册