Changeset 97 for java/main/src/main/java/com/framsticks/gui/TreeNode.java
- Timestamp:
- 07/06/13 03:51:11 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
java/main/src/main/java/com/framsticks/gui/TreeNode.java
r96 r97 1 1 package com.framsticks.gui; 2 2 3 import com.framsticks.communication.Connection;4 3 import com.framsticks.communication.Subscription; 5 4 import com.framsticks.communication.util.LoggingStateCallback; 6 import com.framsticks.core.Instance; 7 import com.framsticks.core.InstanceUtils; 5 import com.framsticks.core.Mode; 6 import com.framsticks.core.Tree; 7 import com.framsticks.core.TreeOperations; 8 8 import com.framsticks.core.ListChange; 9 9 import com.framsticks.core.Path; … … 18 18 import com.framsticks.util.lang.Holder; 19 19 import com.framsticks.util.swing.TooltipConstructor; 20 import com.framsticks.util.dispatching.Future; 21 import com.framsticks.util.AbstractStateFunctor; 20 import com.framsticks.util.dispatching.ExceptionResultHandler; 21 import com.framsticks.util.dispatching.FutureHandler; 22 import com.framsticks.util.FramsticksException; 22 23 import com.framsticks.util.Logging; 23 24 import org.apache.log4j.Logger; … … 31 32 import static com.framsticks.util.lang.Containers.filterInstanceof; 32 33 import com.framsticks.util.swing.TreeNodeUtils; 33 import static com.framsticks.core. InstanceUtils.*;34 import static com.framsticks.core.TreeOperations.*; 34 35 35 36 /** … … 37 38 */ 38 39 @SuppressWarnings("serial") 39 public class TreeNode extends DefaultMutableTreeNode implements NodeListener {40 public class TreeNode extends DefaultMutableTreeNode implements NodeListener, ExceptionResultHandler { 40 41 41 42 private static final Logger log = Logger.getLogger(TreeNode.class.getName()); … … 44 45 45 46 final protected Frame frame; 46 final protected InstanceAtFrame instanceAtFrame;47 final protected TreeAtFrame treeAtFrame; 47 48 48 49 final protected Map<EventParam, Subscription<?>> userSubscriptions = new HashMap<>(); … … 50 51 protected String tooltip; 51 52 protected String name; 52 protected final String paramId;53 protected final CompositeParam param; 53 54 protected String iconName; 54 55 protected Path path; 55 56 56 public TreeNode( InstanceAtFrame instanceAtFrame, final Path path) {57 this.frame = instanceAtFrame.getFrame();58 assert frame.isActive(); 59 this.param Id = path.getLastElement();60 this.name = this.param Id;57 public TreeNode(TreeAtFrame treeAtFrame, final Path path) { 58 this.frame = treeAtFrame.getFrame(); 59 assert frame.isActive(); 60 this.param = path.getTop().getParam(); 61 this.name = this.param.getId(); 61 62 log.debug("creating treenode " + name + ": " + path); 62 63 this.path = path; 63 this. instanceAtFrame = instanceAtFrame;64 this.treeAtFrame = treeAtFrame; 64 65 65 66 iconName = TreeCellRenderer.findIconName(name, path.getTextual()); 66 67 tooltip = "?"; 67 path.get Instance().dispatch(new RunAt<Instance>() {68 @Override 69 p ublic void run() {68 path.getTree().dispatch(new RunAt<Tree>(this) { 69 @Override 70 protected void runAt() { 70 71 updateDescriptions(path); 71 72 } … … 74 75 75 76 public void fetch(final Path p) { 76 assert p.get Instance().isActive();77 assert p.getTree().isActive(); 77 78 log.debug("fetching: " + p); 78 p.get Instance().fetchValues(p, new AbstractStateFunctor() {79 @Override 80 p ublic void call() {81 // reactForFetchResult(p, e); 79 p.getTree().get(p, Mode.FETCH, new FutureHandler<Object>(this) { 80 @Override 81 protected void result(Object result) { 82 82 83 } 83 84 }); … … 85 86 86 87 protected void reactForFetchResult(final Path p, Exception e) { 87 assert p.get Instance().isActive();88 assert p.getTree().isActive(); 88 89 if (Logging.log(log, "fetch", TreeNode.this, e)) { 89 frame.dispatch(new RunAt<Frame>( ) {90 frame.dispatch(new RunAt<Frame>(this) { 90 91 @Override 91 p ublic void run() {92 protected void runAt() { 92 93 log.debug("removing node from tree: " + p); 93 94 frame.treeModel.removeNodeFromParent(TreeNode.this); … … 97 98 } 98 99 updateChildren(p); 99 frame.dispatch(new RunAt<Frame>( ) {100 @Override 101 p ublic void run() {100 frame.dispatch(new RunAt<Frame>(this) { 101 @Override 102 protected void runAt() { 102 103 //TODO maybe this should be called from some better place 103 104 useOrCreatePanel(); … … 109 110 assert !frame.isActive(); 110 111 /** TODO those two actions could be merged into single closure */ 111 frame.dispatch(new RunAt<Frame>( ) {112 @Override 113 p ublic void run() {112 frame.dispatch(new RunAt<Frame>(this) { 113 @Override 114 protected void runAt() { 114 115 updatePath(newPath); 115 116 } … … 140 141 */ 141 142 protected void updateChildren(final Path p) { 142 assert p.get Instance().isActive();143 assert p.getTree().isActive(); 143 144 log.debug("updating children of " + this); 144 AccessInterface access = InstanceUtils.bindAccess(p.getInstance(), p.getTop()); 145 if (access == null) { 146 return; 147 } 145 AccessInterface access = TreeOperations.bindAccess(p.getTree(), p.getTop()); 148 146 final List<Path> childrenPaths = new LinkedList<Path>(); 149 147 /**Prepare path for each child.*/ … … 154 152 /**If some child were found, update in frame context.*/ 155 153 if (childrenPaths.size() > 0) { 156 frame.dispatch(new RunAt<Frame>( ) {154 frame.dispatch(new RunAt<Frame>(this) { 157 155 @Override 158 p ublic void run() {156 protected void runAt() { 159 157 // TreePath treePath = frame.startChange(); 160 158 updatePath(p); … … 173 171 } 174 172 log.debug("update: treenode for " + p); 175 TreeNode childNode = new TreeNode( instanceAtFrame, childPath);173 TreeNode childNode = new TreeNode(treeAtFrame, childPath); 176 174 177 175 frame.addNode(childNode, TreeNode.this); … … 191 189 final Path p = path; 192 190 193 p.get Instance().dispatch(new RunAt<Instance>() {194 @Override 195 p ublic void run() {191 p.getTree().dispatch(new RunAt<Tree>(this) { 192 @Override 193 protected void runAt() { 196 194 final Path updated = (p.isResolved()) ? p : p.tryFindResolution(); 197 195 if (updated.isResolved()) { … … 201 199 return; 202 200 } 203 p.get Instance().resolve(updated, new Future<Path>(Logging.logger(log, "resolve and select", TreeNode.this)) {201 p.getTree().resolve(updated, new FutureHandler<Path>(Logging.logger(log, "resolve and select", TreeNode.this)) { 204 202 @Override 205 203 protected void result(Path result) { … … 224 222 225 223 protected void updateDescriptions(Path p) { 226 assert p.get Instance().isActive();224 assert p.getTree().isActive(); 227 225 228 226 if (!p.isResolved()) { 229 227 return; 230 228 } 231 AccessInterface access = InstanceUtils.bindAccess(p); 232 233 final String tooltip = new TooltipConstructor() 234 .append("frams", access.getId()) 235 .append("java", p.getTopObject().getClass().getCanonicalName()) 236 .append("access", access.getClass().getSimpleName()) 237 .append("name", name) 238 .append("id", paramId) 239 .append("object", Integer.toHexString(System.identityHashCode(this))) 240 .build() 241 ; 229 AccessInterface access = TreeOperations.bindAccess(p); 230 231 final String tooltip = new TooltipConstructor().append("frams", access.getId()).append("java", p.getTopObject().getClass().getCanonicalName()).append("access", access.getClass().getSimpleName()).append("name", name).append("id", param.getId()).append("object", Integer.toHexString(System.identityHashCode(this))).build(); 242 232 243 233 StringParam nameParam = Casting.tryCast(StringParam.class, access.getParam("name")); 244 234 final String name = (nameParam != null ? access.get(nameParam, String.class) : path.getTop().getParam().getId()); 245 235 246 frame.dispatch(new RunAt<Frame>( ) {247 @Override 248 p ublic void run() {236 frame.dispatch(new RunAt<Frame>(this) { 237 @Override 238 protected void runAt() { 249 239 TreeNode.this.tooltip = tooltip; 250 240 TreeNode.this.name = name; … … 254 244 }); 255 245 } 256 257 /*258 public void updateData() {259 assert browser.isActive();260 final Node node = getNode();261 browser.manager.invokeLater(new Runnable() {262 @Override263 public void run() {264 node.fetchValues(new StateFunctor() {265 @Override266 public void call(Exception e) {267 if (e != null) {268 return;269 }270 browser.invokeLater(new Runnable() {271 @Override272 public void run() {273 assert browser.isActive();274 if (panel.getCurrentTreeNode() == TreeNode.this) {275 panel.refreshComponents();276 }277 278 browser.tree.repaint();279 panel.refreshComponents();280 }281 });282 }283 });284 }285 });286 }287 */288 246 289 247 public void showPanel() { … … 301 259 assert p.isResolved(); 302 260 panel.setCurrentTreeNode(this); 303 p.get Instance().dispatch(new RunAt<Instance>() {304 @Override 305 p ublic void run() {306 AccessInterface access = InstanceUtils.bindAccess(p);261 p.getTree().dispatch(new RunAt<Tree>(this) { 262 @Override 263 protected void runAt() { 264 AccessInterface access = TreeOperations.bindAccess(p); 307 265 panel.pullValuesFromLocalToUser(access); 308 266 309 frame.dispatch(new RunAt<Frame>( ) {267 frame.dispatch(new RunAt<Frame>(this) { 310 268 @Override 311 p ublic void run() {269 protected void runAt() { 312 270 showPanel(); 313 271 } … … 331 289 332 290 CompositeParam param = path.getTop().getParam(); 333 panel = instanceAtFrame.findPanel(param.computeAccessId());291 panel = treeAtFrame.findPanel(param.computeAccessId()); 334 292 if (panel != null) { 335 293 log.debug("found prepared panel for: " + path); … … 339 297 final Path p = path; 340 298 log.debug("preparing panel: " + p); 341 p.get Instance().dispatch(new RunAt<Instance>() {342 @Override 343 p ublic void run() {344 assert p.get Instance().isActive();299 p.getTree().dispatch(new RunAt<Tree>(this) { 300 @Override 301 protected void runAt() { 302 assert p.getTree().isActive(); 345 303 final CompositeParam param = p.getTop().getParam(); 346 final FramsClass framsClass = p.get Instance().getInfoFromCache(param.getContainedTypeName());347 frame.dispatch(new RunAt<Frame>( ) {304 final FramsClass framsClass = p.getTree().getInfoFromCache(param.getContainedTypeName()); 305 frame.dispatch(new RunAt<Frame>(this) { 348 306 @Override 349 p ublic void run() {350 panel = instanceAtFrame.preparePanel(param, framsClass);307 protected void runAt() { 308 panel = treeAtFrame.preparePanel(param, framsClass); 351 309 fillPanelWithValues(); 352 310 } … … 360 318 return tooltip; 361 319 } 362 363 364 365 320 366 321 /*public void subscribe(final EventParam eventParam) { … … 408 363 return; 409 364 } 410 userSubscriptions.get(eventParam).unsubscribe(new LoggingStateCallback <Connection>(log, "unsubscribed " + eventParam));365 userSubscriptions.get(eventParam).unsubscribe(new LoggingStateCallback(log, "unsubscribed " + eventParam)); 411 366 userSubscriptions.remove(eventParam); 412 367 } 413 368 414 /* 415 416 @Override 417 public void onChildChange(final Child child, ListChange.Action action) { 418 assert browser.manager.isActive(); 419 420 switch (action) { 421 case Remove: { 422 Dispatching.invokeDispatch(browser, browser.manager, new Runnable() { 423 @Override 424 public void run() { 425 assert browser.manager.isActive(); 426 final TreeNode treeNode = (TreeNode) child.getUserObject(); 427 if (treeNode == null) { 428 log.error("child " + child + " had no tree node attached"); 429 return; 430 } 431 browser.invokeLater(new Runnable() { 432 @Override 433 public void run() { 434 assert browser.isActive(); 435 TreePath path = browser.startChange(); 436 //assert treeNode.getParent() == TreeNode.this; 437 if (treeNode.getParent() != null) { 438 browser.treeModel.removeNodeFromParent(treeNode); 439 } 440 //remove(treeNode); 441 browser.markNodeChanged(TreeNode.this, path); 442 } 443 }); 444 } 445 }); 446 break; 447 } 448 } 449 450 } 451 */ 369 // @Override 370 // public void onChildChange(final Child child, ListChange.Action action) { 371 // assert browser.manager.isActive(); 372 373 // switch (action) { 374 // case Remove: { 375 // Dispatching.invokeDispatch(browser, browser.manager, new Runnable() { 376 // @Override 377 // public void run() { 378 // assert browser.manager.isActive(); 379 // final TreeNode treeNode = (TreeNode) child.getUserObject(); 380 // if (treeNode == null) { 381 // log.error("child " + child + " had no tree node attached"); 382 // return; 383 // } 384 // browser.invokeLater(new Runnable() { 385 // @Override 386 // public void run() { 387 // assert browser.isActive(); 388 // TreePath path = browser.startChange(); 389 // //assert treeNode.getParent() == TreeNode.this; 390 // if (treeNode.getParent() != null) { 391 // browser.treeModel.removeNodeFromParent(treeNode); 392 // } 393 // //remove(treeNode); 394 // browser.markNodeChanged(TreeNode.this, path); 395 // } 396 // }); 397 // } 398 // }); 399 // break; 400 // } 401 // } 402 403 // } 452 404 453 405 public String getName() { … … 486 438 } 487 439 488 public Path get InstancePath() {440 public Path getTreePath() { 489 441 assert frame.isActive(); 490 442 return path; … … 501 453 final Path p = path; 502 454 503 for (Map.Entry<ValueControl, Object> e : localChanges.entrySet()) {504 s toreValue(p, e.getKey().getParam(), e.getValue(), new AbstractStateFunctor() {455 for (Map.Entry<ValueControl, Object> e : changes.entrySet()) { 456 set(p, e.getKey().getParam(), e.getValue(), new FutureHandler<Integer>(this) { 505 457 @Override 506 p ublic void call() {458 protected void result(Integer flag) { 507 459 counter.set(counter.get() - 1); 508 460 if (counter.get() != 0) { … … 510 462 } 511 463 log.debug("applied changes for: " + p); 512 frame.dispatch(new RunAt<Frame>( ) {464 frame.dispatch(new RunAt<Frame>(this) { 513 465 @Override 514 p ublic void run() {466 protected void runAt() { 515 467 fillPanelWithValues(); 516 468 } 517 469 }); 518 470 } 471 519 472 }); 520 473 } 521 474 } 475 476 @Override 477 public void handle(FramsticksException exception) { 478 frame.handle(exception); 479 } 522 480 }
Note: See TracChangeset
for help on using the changeset viewer.