1 19 20 package org.netbeans.modules.xml.xam.ui.multiview; 21 22 import java.beans.PropertyChangeEvent ; 23 import java.beans.PropertyChangeListener ; 24 import java.beans.PropertyVetoException ; 25 import java.util.ArrayList ; 26 import java.util.List ; 27 import org.openide.explorer.ExplorerManager; 28 import org.openide.nodes.Node; 29 import org.openide.util.Lookup; 30 import org.openide.util.lookup.AbstractLookup; 31 import org.openide.util.lookup.InstanceContent; 32 33 47 public class ActivatedNodesMediator 48 implements Lookup.Provider, PropertyChangeListener { 49 50 private InstanceContent nodesHack; 51 52 private Lookup lookup; 53 55 private Node delegate; 56 57 private boolean propertyChanging; 58 59 private ExplorerManager.Provider explorerManagerProvider; 60 61 67 public ActivatedNodesMediator(Node delegate) { 68 nodesHack = new InstanceContent(); 69 lookup = new AbstractLookup(nodesHack); 70 this.delegate = delegate; 71 } 72 73 public Lookup getLookup() { 74 return lookup; 75 } 76 77 public void setExplorerManager(ExplorerManager.Provider provider) { 78 explorerManagerProvider = provider; 79 } 80 81 public synchronized void propertyChange(PropertyChangeEvent event) { 82 if (propertyChanging) { 83 return; 86 } 87 propertyChanging = true; 88 try { 89 Node[] nodes = (Node[]) event.getNewValue(); 90 List <Node> list = new ArrayList <Node>(); 91 for (Node node : nodes) { 92 if (delegate == null || !node.equals(delegate)) { 94 list.add(node); 95 } 96 } 97 nodesHack.set(list, null); 98 updateExplorerManager(list.toArray(new Node[list.size()])); 99 } finally { 100 propertyChanging = false; 101 } 102 } 103 104 private void updateExplorerManager(Node[] selected) { 105 if (explorerManagerProvider != null) { 106 if (selected.length > 0) { 107 explorerManagerProvider.getExplorerManager().setRootContext( 108 getRoot(selected[0])); 109 } 110 try { 111 explorerManagerProvider.getExplorerManager().setSelectedNodes( 112 selected); 113 } catch (PropertyVetoException pve) { 114 } catch (IllegalArgumentException iae) { 116 } 119 } 120 } 121 122 private Node getRoot(final Node n) { 123 assert n != null; 124 Node root = n; 125 while (root.getParentNode() != null) { 126 root = root.getParentNode(); 127 } 128 return root; 129 } 130 } 131 | Popular Tags |