1*1b0aaa91SAndrew Rist /**************************************************************
2*1b0aaa91SAndrew Rist  *
3*1b0aaa91SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*1b0aaa91SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*1b0aaa91SAndrew Rist  * distributed with this work for additional information
6*1b0aaa91SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*1b0aaa91SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*1b0aaa91SAndrew Rist  * "License"); you may not use this file except in compliance
9*1b0aaa91SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*1b0aaa91SAndrew Rist  *
11*1b0aaa91SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*1b0aaa91SAndrew Rist  *
13*1b0aaa91SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*1b0aaa91SAndrew Rist  * software distributed under the License is distributed on an
15*1b0aaa91SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*1b0aaa91SAndrew Rist  * KIND, either express or implied.  See the License for the
17*1b0aaa91SAndrew Rist  * specific language governing permissions and limitations
18*1b0aaa91SAndrew Rist  * under the License.
19*1b0aaa91SAndrew Rist  *
20*1b0aaa91SAndrew Rist  *************************************************************/
21*1b0aaa91SAndrew Rist 
22cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleContext;
23cdf0e10cSrcweir 
24cdf0e10cSrcweir import java.util.HashMap;
25cdf0e10cSrcweir 
26cdf0e10cSrcweir abstract class NodeMapCallback
27cdf0e10cSrcweir {
Apply(AccTreeNode aNode)28cdf0e10cSrcweir     public abstract void Apply (AccTreeNode aNode);
29cdf0e10cSrcweir }
30cdf0e10cSrcweir 
31cdf0e10cSrcweir /** This map translates from XAccessible objects to our internal
32cdf0e10cSrcweir     representations.
33cdf0e10cSrcweir */
34cdf0e10cSrcweir class NodeMap
35cdf0e10cSrcweir {
NodeMap()36cdf0e10cSrcweir     public NodeMap ()
37cdf0e10cSrcweir     {
38cdf0e10cSrcweir         maXAccessibleToNode = new HashMap ();
39cdf0e10cSrcweir     }
40cdf0e10cSrcweir 
41cdf0e10cSrcweir     /** Clear the whole map.
42cdf0e10cSrcweir     */
Clear()43cdf0e10cSrcweir     public void Clear ()
44cdf0e10cSrcweir     {
45cdf0e10cSrcweir         maXAccessibleToNode.clear();
46cdf0e10cSrcweir     }
47cdf0e10cSrcweir 
48cdf0e10cSrcweir     /** @return
49cdf0e10cSrcweir             whether the new node was different from a previous one
50cdf0e10cSrcweir             repspectively was the first one set.
51cdf0e10cSrcweir     */
InsertNode(XAccessibleContext xContext, AccessibleTreeNode aNode)52cdf0e10cSrcweir     public boolean InsertNode (XAccessibleContext xContext, AccessibleTreeNode aNode)
53cdf0e10cSrcweir     {
54cdf0e10cSrcweir         AccessibleTreeNode aPreviousNode = (AccessibleTreeNode)maXAccessibleToNode.put (
55cdf0e10cSrcweir             xContext,
56cdf0e10cSrcweir             aNode);
57cdf0e10cSrcweir         return aPreviousNode != aNode;
58cdf0e10cSrcweir     }
59cdf0e10cSrcweir 
RemoveNode(AccessibleTreeNode aNode)60cdf0e10cSrcweir     protected void RemoveNode (AccessibleTreeNode aNode)
61cdf0e10cSrcweir     {
62cdf0e10cSrcweir         try
63cdf0e10cSrcweir         {
64cdf0e10cSrcweir             if ((aNode != null) && (aNode instanceof AccTreeNode))
65cdf0e10cSrcweir             {
66cdf0e10cSrcweir                 maXAccessibleToNode.remove (((AccTreeNode)aNode).getContext());
67cdf0e10cSrcweir             }
68cdf0e10cSrcweir         }
69cdf0e10cSrcweir         catch (Exception e)
70cdf0e10cSrcweir         {
71cdf0e10cSrcweir             System.out.println ("caught exception while removing node "
72cdf0e10cSrcweir                 + aNode + " : " + e);
73cdf0e10cSrcweir             e.printStackTrace();
74cdf0e10cSrcweir         }
75cdf0e10cSrcweir     }
76cdf0e10cSrcweir 
77cdf0e10cSrcweir 
ForEach(NodeMapCallback aFunctor)78cdf0e10cSrcweir     public void ForEach (NodeMapCallback aFunctor)
79cdf0e10cSrcweir     {
80cdf0e10cSrcweir         Object[] aNodes = maXAccessibleToNode.values().toArray();
81cdf0e10cSrcweir         for (int i=0; i<aNodes.length; i++)
82cdf0e10cSrcweir         {
83cdf0e10cSrcweir             if (aNodes[i] != null && (aNodes[i] instanceof AccTreeNode))
84cdf0e10cSrcweir             {
85cdf0e10cSrcweir                 try
86cdf0e10cSrcweir                 {
87cdf0e10cSrcweir                     aFunctor.Apply ((AccTreeNode)aNodes[i]);
88cdf0e10cSrcweir                 }
89cdf0e10cSrcweir                 catch (Exception e)
90cdf0e10cSrcweir                 {
91cdf0e10cSrcweir                     System.out.println ("caught exception applying functor to "
92cdf0e10cSrcweir                         + i + "th node " + aNodes[i] + " : " + e);
93cdf0e10cSrcweir                     e.printStackTrace();
94cdf0e10cSrcweir                 }
95cdf0e10cSrcweir             }
96cdf0e10cSrcweir         }
97cdf0e10cSrcweir     }
98cdf0e10cSrcweir 
GetNode(XAccessibleContext xContext)99cdf0e10cSrcweir     AccessibleTreeNode GetNode (XAccessibleContext xContext)
100cdf0e10cSrcweir     {
101cdf0e10cSrcweir         return (AccessibleTreeNode)maXAccessibleToNode.get (xContext);
102cdf0e10cSrcweir     }
103cdf0e10cSrcweir 
GetNode(Object aObject)104cdf0e10cSrcweir     AccessibleTreeNode GetNode (Object aObject)
105cdf0e10cSrcweir     {
106cdf0e10cSrcweir         if (aObject instanceof XAccessibleContext)
107cdf0e10cSrcweir             return GetNode ((XAccessibleContext)aObject);
108cdf0e10cSrcweir         else
109cdf0e10cSrcweir             return null;
110cdf0e10cSrcweir     }
111cdf0e10cSrcweir 
GetAccessible(AccessibleTreeNode aNode)112cdf0e10cSrcweir     XAccessibleContext GetAccessible (AccessibleTreeNode aNode)
113cdf0e10cSrcweir     {
114cdf0e10cSrcweir         if ((aNode != null) && (aNode instanceof AccTreeNode))
115cdf0e10cSrcweir             return ((AccTreeNode)aNode).getContext();
116cdf0e10cSrcweir         else
117cdf0e10cSrcweir             return null;
118cdf0e10cSrcweir     }
119cdf0e10cSrcweir 
IsMember(XAccessibleContext xContext)120cdf0e10cSrcweir     boolean IsMember (XAccessibleContext xContext)
121cdf0e10cSrcweir     {
122cdf0e10cSrcweir         return maXAccessibleToNode.containsKey(xContext);
123cdf0e10cSrcweir     }
124cdf0e10cSrcweir 
ValueIsMember(AccessibleTreeNode aNode)125cdf0e10cSrcweir     boolean ValueIsMember (AccessibleTreeNode aNode)
126cdf0e10cSrcweir     {
127cdf0e10cSrcweir         return maXAccessibleToNode.containsValue(aNode);
128cdf0e10cSrcweir     }
129cdf0e10cSrcweir 
130cdf0e10cSrcweir 
131cdf0e10cSrcweir 
132cdf0e10cSrcweir     private HashMap maXAccessibleToNode;
133cdf0e10cSrcweir }
134