1 import com.sun.star.accessibility.XAccessibleContext; 2 3 import java.util.HashMap; 4 5 abstract class NodeMapCallback 6 { 7 public abstract void Apply (AccTreeNode aNode); 8 } 9 10 /** This map translates from XAccessible objects to our internal 11 representations. 12 */ 13 class NodeMap 14 { 15 public NodeMap () 16 { 17 maXAccessibleToNode = new HashMap (); 18 } 19 20 /** Clear the whole map. 21 */ 22 public void Clear () 23 { 24 maXAccessibleToNode.clear(); 25 } 26 27 /** @return 28 whether the new node was different from a previous one 29 repspectively was the first one set. 30 */ 31 public boolean InsertNode (XAccessibleContext xContext, AccessibleTreeNode aNode) 32 { 33 AccessibleTreeNode aPreviousNode = (AccessibleTreeNode)maXAccessibleToNode.put ( 34 xContext, 35 aNode); 36 return aPreviousNode != aNode; 37 } 38 39 protected void RemoveNode (AccessibleTreeNode aNode) 40 { 41 try 42 { 43 if ((aNode != null) && (aNode instanceof AccTreeNode)) 44 { 45 maXAccessibleToNode.remove (((AccTreeNode)aNode).getContext()); 46 } 47 } 48 catch (Exception e) 49 { 50 System.out.println ("caught exception while removing node " 51 + aNode + " : " + e); 52 e.printStackTrace(); 53 } 54 } 55 56 57 public void ForEach (NodeMapCallback aFunctor) 58 { 59 Object[] aNodes = maXAccessibleToNode.values().toArray(); 60 for (int i=0; i<aNodes.length; i++) 61 { 62 if (aNodes[i] != null && (aNodes[i] instanceof AccTreeNode)) 63 { 64 try 65 { 66 aFunctor.Apply ((AccTreeNode)aNodes[i]); 67 } 68 catch (Exception e) 69 { 70 System.out.println ("caught exception applying functor to " 71 + i + "th node " + aNodes[i] + " : " + e); 72 e.printStackTrace(); 73 } 74 } 75 } 76 } 77 78 AccessibleTreeNode GetNode (XAccessibleContext xContext) 79 { 80 return (AccessibleTreeNode)maXAccessibleToNode.get (xContext); 81 } 82 83 AccessibleTreeNode GetNode (Object aObject) 84 { 85 if (aObject instanceof XAccessibleContext) 86 return GetNode ((XAccessibleContext)aObject); 87 else 88 return null; 89 } 90 91 XAccessibleContext GetAccessible (AccessibleTreeNode aNode) 92 { 93 if ((aNode != null) && (aNode instanceof AccTreeNode)) 94 return ((AccTreeNode)aNode).getContext(); 95 else 96 return null; 97 } 98 99 boolean IsMember (XAccessibleContext xContext) 100 { 101 return maXAccessibleToNode.containsKey(xContext); 102 } 103 104 boolean ValueIsMember (AccessibleTreeNode aNode) 105 { 106 return maXAccessibleToNode.containsValue(aNode); 107 } 108 109 110 111 private HashMap maXAccessibleToNode; 112 } 113