Skip to content

Commit c15d13e

Browse files
committed
Fix #1499 Fill column with value doesn't affect visualization immediately
1 parent 4f51993 commit c15d13e

File tree

2 files changed

+54
-40
lines changed

2 files changed

+54
-40
lines changed

modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/DataTablesObservers.java

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,14 @@ Development and Distribution License("CDDL") (collectively, the
5656

5757
/**
5858
* Class for managing observers of a workspace to automatically refresh data tables.
59+
*
5960
* @author Eduardo Ramos
6061
*/
6162
public class DataTablesObservers {
63+
6264
private final Workspace workspace;
6365
private final GraphModel graphModel;
64-
66+
6567
private GraphObserver graphObserver;
6668
private TableObserver nodesTableObserver;
6769
private TableObserver edgesTableObserver;
@@ -72,106 +74,106 @@ public DataTablesObservers(Workspace workspace) {
7274
this.graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace);
7375
this.columnObservers = new HashSet<>();
7476
}
75-
76-
public synchronized void initialize(){
77-
if(graphObserver != null){
77+
78+
public synchronized void initialize() {
79+
if (graphObserver != null) {
7880
return;
7981
}
80-
82+
8183
graphObserver = graphModel.createGraphObserver(graphModel.getGraph(), false);
8284
nodesTableObserver = graphModel.getNodeTable().createTableObserver(true);
8385
edgesTableObserver = graphModel.getEdgeTable().createTableObserver(true);
84-
86+
8587
for (Column column : graphModel.getNodeTable()) {
8688
createColumnObserver(column);
8789
}
88-
for (Column column : graphModel.getEdgeTable()){
90+
for (Column column : graphModel.getEdgeTable()) {
8991
createColumnObserver(column);
9092
}
93+
94+
workspace.add(new LatestVisibleView(graphModel.getVisibleView()));
9195
}
92-
93-
public synchronized void destroy(){
94-
if(graphObserver != null){
96+
97+
public synchronized void destroy() {
98+
if (graphObserver != null) {
9599
graphObserver.destroy();
96100
graphObserver = null;
97101
}
98-
if(nodesTableObserver != null){
102+
if (nodesTableObserver != null) {
99103
nodesTableObserver.destroy();
100104
nodesTableObserver = null;
101105
}
102-
if(edgesTableObserver != null){
106+
if (edgesTableObserver != null) {
103107
edgesTableObserver.destroy();
104108
edgesTableObserver = null;
105109
}
106-
110+
107111
for (ColumnObserver columnObserver : columnObservers) {
108112
columnObserver.destroy();
109113
}
110114
columnObservers.clear();
111115
}
112-
113-
public boolean hasChanges(){
114-
if(graphObserver == null){
116+
117+
public boolean hasChanges() {
118+
if (graphObserver == null) {
115119
return false;//Not initialized
116120
}
117-
121+
118122
boolean hasChanges = graphObserver.hasGraphChanged();
119123
hasChanges = processTableObseverChanges(nodesTableObserver) || hasChanges;
120124
hasChanges = processTableObseverChanges(edgesTableObserver) || hasChanges;
121-
125+
122126
LatestVisibleView latestVisibleView = workspace.getLookup().lookup(LatestVisibleView.class);
123127

124-
if(latestVisibleView != null){
125-
workspace.remove(latestVisibleView);
126-
if(latestVisibleView.getView().isDestroyed()){
127-
hasChanges = true;
128-
}
128+
if (latestVisibleView.getView() != graphModel.getVisibleView()) {
129+
latestVisibleView.setView(graphModel.getVisibleView());
130+
hasChanges = true;
129131
}
130-
workspace.add(new LatestVisibleView(graphModel.getVisibleView()));
131-
132-
if(!hasChanges){
132+
133+
if (!hasChanges) {
133134
for (ColumnObserver columnObserver : columnObservers) {
134-
if(columnObserver.hasColumnChanged()){
135+
if (columnObserver.hasColumnChanged()) {
135136
hasChanges = true;
136137
break;
137138
}
138139
}
139140
}
140-
141+
141142
return hasChanges;
142143
}
143-
144-
private boolean processTableObseverChanges(TableObserver observer){
144+
145+
private boolean processTableObseverChanges(TableObserver observer) {
145146
boolean hasChanges = false;
146-
if(observer.hasTableChanged()){
147+
if (observer.hasTableChanged()) {
147148
hasChanges = true;
148149
TableDiff diff = observer.getDiff();
149150
for (Column addedColumn : diff.getAddedColumns()) {
150151
createColumnObserver(addedColumn);
151152
}
152153
for (Column removedColumn : diff.getRemovedColumns()) {
153154
for (ColumnObserver columnObserver : columnObservers.toArray(new ColumnObserver[0])) {
154-
if(columnObserver.getColumn() == removedColumn){
155+
if (columnObserver.getColumn() == removedColumn) {
155156
columnObserver.destroy();
156157
columnObservers.remove(columnObserver);
157158
}
158159
}
159160
}
160161
}
161-
162+
162163
return hasChanges;
163164
}
164165

165166
private void createColumnObserver(Column column) {
166167
ColumnObserver observer = column.createColumnObserver(false);
167168
columnObservers.add(observer);
168169
}
169-
170+
170171
/**
171172
* Used only for detecting changes in graph filters (visible view).
172173
*/
173174
class LatestVisibleView {
174-
private final GraphView view;
175+
176+
private GraphView view;
175177

176178
public LatestVisibleView(GraphView view) {
177179
this.view = view;
@@ -180,5 +182,9 @@ public LatestVisibleView(GraphView view) {
180182
public GraphView getView() {
181183
return view;
182184
}
185+
186+
private void setView(GraphView view) {
187+
this.view = view;
188+
}
183189
}
184190
}

modules/VisualizationImpl/src/main/java/org/gephi/visualization/bridge/DataBridge.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,12 @@ public class DataBridge implements VizArchitecture {
8383
private VizConfig vizConfig;
8484
private TextModelImpl textModel;
8585
protected GraphLimits limits;
86+
8687
//Graph
8788
protected GraphModel graphModel;
8889
protected Graph graph;
8990
protected GraphObserver observer;
91+
9092
//Data
9193
protected NodeModel[] nodes;
9294
protected EdgeModel[] edges;
@@ -278,14 +280,16 @@ private boolean hasColumnsChanged() {
278280
return true;
279281
}
280282

281-
boolean nodeC = false, edgeC = false;
282283
for (ColumnObserver c : nodeColumnObservers) {
283-
nodeC = nodeC | c.hasColumnChanged();
284+
if (c.hasColumnChanged()) {
285+
return true;
286+
}
284287
}
285288
for (ColumnObserver c : edgeColumnObservers) {
286-
edgeC = edgeC | c.hasColumnChanged();
289+
if (c.hasColumnChanged()) {
290+
return true;
291+
}
287292
}
288-
return nodeC || edgeC;
289293
}
290294
return false;
291295
}
@@ -367,7 +371,11 @@ private void refreshEdgeColumns(TextModelImpl textModelImpl) {
367371
}
368372
edgeColumnObservers = null;
369373
}
370-
Column[] edgeColumns = textModelImpl.getEdgeTextColumns();
374+
375+
Column[] edgeTextColumns = textModelImpl.getEdgeTextColumns();
376+
Column[] edgeColumns = Arrays.copyOf(edgeTextColumns, edgeTextColumns.length + 1);
377+
edgeColumns[edgeColumns.length - 1] = graphModel.getEdgeTable().getColumn("weight");//Make sure to always observe weight changes
378+
371379
edgeColumnHashCode = Arrays.hashCode(edgeColumns);
372380
edgeColumnObservers = new ColumnObserver[edgeColumns.length];
373381
for (int i = 0; i < edgeColumns.length; i++) {

0 commit comments

Comments
 (0)