@@ -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 */
6162public 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}
0 commit comments