/bpel.editors/src/org/netbeans/modules/bpel/design/SelectionBridge.java

https://bitbucket.org/rsaqc/netbeans-soa · Java · 183 lines · 115 code · 32 blank · 36 comment · 34 complexity · 6ddc83f6f6ffa2b394d12cb33dd70368 MD5 · raw file

  1. /*
  2. * The contents of this file are subject to the terms of the Common Development
  3. * and Distribution License (the License). You may not use this file except in
  4. * compliance with the License.
  5. *
  6. * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
  7. * or http://www.netbeans.org/cddl.txt.
  8. *
  9. * When distributing Covered Code, include this CDDL Header Notice in each file
  10. * and include the License file at http://www.netbeans.org/cddl.txt.
  11. * If applicable, add the following below the CDDL Header, with the fields
  12. * enclosed by brackets [] replaced by your own identifying information:
  13. * "Portions Copyrighted [year] [name of copyright owner]"
  14. *
  15. * The Original Software is NetBeans. The Initial Developer of the Original
  16. * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
  17. * Microsystems, Inc. All Rights Reserved.
  18. */
  19. package org.netbeans.modules.bpel.design;
  20. import java.awt.Container;
  21. import java.beans.PropertyChangeEvent;
  22. import java.beans.PropertyChangeListener;
  23. import org.netbeans.modules.bpel.design.model.patterns.Pattern;
  24. import org.netbeans.modules.bpel.design.selection.DiagramSelectionListener;
  25. import org.netbeans.modules.bpel.model.api.BpelEntity;
  26. import org.netbeans.modules.bpel.model.api.BpelModel;
  27. import org.netbeans.modules.bpel.nodes.BpelNode;
  28. import org.openide.ErrorManager;
  29. import org.openide.loaders.DataObject;
  30. import org.openide.nodes.Node;
  31. import org.openide.windows.TopComponent;
  32. /**
  33. *
  34. * @author root
  35. */
  36. public class SelectionBridge implements
  37. PropertyChangeListener,
  38. DiagramSelectionListener {
  39. private DesignView designView;
  40. private boolean insideChangeNode = false;
  41. public SelectionBridge(DesignView designView) {
  42. this.designView = designView;
  43. TopComponent.getRegistry().addPropertyChangeListener(this);
  44. designView.getSelectionModel().addSelectionListener(this);
  45. }
  46. public void release() {
  47. TopComponent.getRegistry().removePropertyChangeListener(this);
  48. designView.getSelectionModel().removeSelectionListener(this);
  49. designView = null;
  50. }
  51. public void selectionChanged(BpelEntity oldSelection, final BpelEntity newSelection) {
  52. try {
  53. Node node = null;
  54. if (newSelection != null) {
  55. node = designView.getNodeForPattern(designView.getModel().getPattern(newSelection));
  56. } else {
  57. // Workaround for bug xxx:
  58. // Set process as active node when nothing is been
  59. // selected on diagram
  60. // Otherwise the printing is broken
  61. // See IZ138932
  62. node = designView.getNodeForPattern(designView.getModel().getRootPattern());
  63. if (node == null) {
  64. DataObject dobj = designView.getLookup().lookup(DataObject.class);
  65. if (dobj != null) {
  66. node = dobj.getNodeDelegate();
  67. }
  68. }
  69. // Hack. Reset the active node before deleting element
  70. // related to active node.
  71. // see bug 6377934
  72. }
  73. insideChangeNode = true;
  74. if (node != null) {
  75. setActivatedNodes(new Node[]{node});
  76. } else {
  77. setActivatedNodes(new Node[]{});
  78. }
  79. insideChangeNode = false;
  80. } catch (Exception ex) {
  81. ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, ex);
  82. }
  83. }
  84. public void propertyChange(PropertyChangeEvent evt) {
  85. if (designView != null) {
  86. if (!designView.isVisible()) {
  87. return;
  88. }
  89. }
  90. if (insideChangeNode) {
  91. return;
  92. }
  93. String propertyName = evt.getPropertyName();
  94. //ignore this event if model is in broken state
  95. if (designView.getBPELModel().getState() != BpelModel.State.VALID) {
  96. return;
  97. }
  98. if (propertyName.equals(TopComponent.Registry.PROP_ACTIVATED_NODES)) {
  99. Node[] nodes = TopComponent.getRegistry().getActivatedNodes();
  100. if (nodes.length != 1) {
  101. return;
  102. }
  103. TopComponent tc = TopComponent.getRegistry().getActivated();
  104. /* Ignore event coming from my TC */
  105. if (nodes[0] instanceof BpelNode) {
  106. Object ref = ((BpelNode) nodes[0]).getReference();
  107. if (ref == null) {
  108. return;
  109. }
  110. if (ref instanceof BpelEntity) {
  111. BpelEntity entity = (BpelEntity) ref;
  112. /**
  113. * Iterate up to the root of entity hierarchy
  114. * To find first entity wrapped with pattern
  115. **/
  116. designView.getModel().expandToBeVisible(entity);
  117. Pattern pattern = null;
  118. while (entity != null) {
  119. pattern = designView.getModel().getPattern(entity);
  120. if (pattern != null) {
  121. break;
  122. }
  123. entity = entity.getParent();
  124. }
  125. if (pattern != null) {
  126. designView.getSelectionModel().setSelected(entity);
  127. }
  128. designView.scrollSelectedToView();
  129. }
  130. }
  131. }
  132. }
  133. private void setActivatedNodes(final Node[] nodes) {
  134. try {
  135. TopComponent targetTopComponent = null;
  136. Container container = (Container) designView;
  137. while (container != null) { // Find TopComponent
  138. if (container instanceof TopComponent) {
  139. targetTopComponent = (TopComponent) container;
  140. break;
  141. }
  142. container = container.getParent();
  143. }
  144. if (targetTopComponent != null) {
  145. targetTopComponent.setActivatedNodes(nodes);
  146. }
  147. } catch (Exception ex) {
  148. ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, ex);
  149. }
  150. }
  151. }