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