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.*;
23cdf0e10cSrcweir import java.util.Vector;
24cdf0e10cSrcweir 
25cdf0e10cSrcweir import tools.NameProvider;
26cdf0e10cSrcweir 
27cdf0e10cSrcweir /** This singleton class creates nodes for given accessible objects.
28cdf0e10cSrcweir */
29cdf0e10cSrcweir class NodeFactory
30cdf0e10cSrcweir {
Instance()31cdf0e10cSrcweir     public synchronized static NodeFactory Instance ()
32cdf0e10cSrcweir     {
33cdf0e10cSrcweir         if (maInstance == null)
34cdf0e10cSrcweir         {
35cdf0e10cSrcweir             maInstance = new NodeFactory();
36cdf0e10cSrcweir         }
37cdf0e10cSrcweir         return maInstance;
38cdf0e10cSrcweir     }
39cdf0e10cSrcweir 
NodeFactory()40cdf0e10cSrcweir     private NodeFactory ()
41cdf0e10cSrcweir     {
42cdf0e10cSrcweir         mbVerbose = false;
43cdf0e10cSrcweir 
44cdf0e10cSrcweir         maContextHandler = new AccessibleContextHandler();
45cdf0e10cSrcweir         maTextHandler = new AccessibleTextHandler();
46cdf0e10cSrcweir         maEditableTextHandler = new AccessibleEditableTextHandler();
47cdf0e10cSrcweir         maComponentHandler = new AccessibleComponentHandler();
48cdf0e10cSrcweir         maExtendedComponentHandler = new AccessibleExtendedComponentHandler();
49cdf0e10cSrcweir         maActionHandler = new AccessibleActionHandler();
50cdf0e10cSrcweir         maImageHandler = new AccessibleImageHandler();
51cdf0e10cSrcweir         maTableHandler = new AccessibleTableHandler();
52cdf0e10cSrcweir         maCellHandler = new AccessibleCellHandler();
53cdf0e10cSrcweir         maHypertextHandler = new AccessibleHypertextHandler();
54cdf0e10cSrcweir         maHyperlinkHandler = new AccessibleHyperlinkHandler();
55cdf0e10cSrcweir         maSelectionHandler = new AccessibleSelectionHandler();
56cdf0e10cSrcweir         maRelationHandler = new AccessibleRelationHandler();
57cdf0e10cSrcweir         maTreeHandler = new AccessibleTreeHandler();
58cdf0e10cSrcweir         maUNOHandler = new AccessibleUNOHandler();
59cdf0e10cSrcweir     }
60cdf0e10cSrcweir 
61cdf0e10cSrcweir 
62cdf0e10cSrcweir     /** add default handlers based on the supported interfaces */
addDefaultHandlers(AccTreeNode aNode, XAccessibleContext xContext)63cdf0e10cSrcweir     private void addDefaultHandlers (AccTreeNode aNode, XAccessibleContext xContext)
64cdf0e10cSrcweir     {
65cdf0e10cSrcweir         if (false)
66cdf0e10cSrcweir         {
67cdf0e10cSrcweir             // Slow but complete version: try each handler type separately.
68cdf0e10cSrcweir             aNode.addHandler (maContextHandler.createHandler (xContext));
69cdf0e10cSrcweir             aNode.addHandler (maTextHandler.createHandler (xContext));
70cdf0e10cSrcweir             aNode.addHandler (maEditableTextHandler.createHandler (xContext));
71cdf0e10cSrcweir             aNode.addHandler (maComponentHandler.createHandler (xContext));
72cdf0e10cSrcweir             aNode.addHandler (maExtendedComponentHandler.createHandler (xContext));
73cdf0e10cSrcweir             aNode.addHandler (maActionHandler.createHandler (xContext));
74cdf0e10cSrcweir             aNode.addHandler (maImageHandler.createHandler (xContext));
75cdf0e10cSrcweir             aNode.addHandler (maTableHandler.createHandler (xContext));
76cdf0e10cSrcweir             aNode.addHandler (maCellHandler.createHandler (xContext));
77cdf0e10cSrcweir             aNode.addHandler (maHypertextHandler.createHandler (xContext));
78cdf0e10cSrcweir             aNode.addHandler (maHyperlinkHandler.createHandler (xContext));
79cdf0e10cSrcweir             aNode.addHandler (maSelectionHandler.createHandler (xContext));
80cdf0e10cSrcweir             aNode.addHandler (maRelationHandler.createHandler (xContext));
81cdf0e10cSrcweir             aNode.addHandler (maUNOHandler.createHandler (xContext));
82cdf0e10cSrcweir             aNode.addHandler (maTreeHandler.createHandler (xContext));
83cdf0e10cSrcweir         }
84cdf0e10cSrcweir         else
85cdf0e10cSrcweir         {
86cdf0e10cSrcweir             // Exploit dependencies between interfaces.
87cdf0e10cSrcweir             NodeHandler aHandler;
88cdf0e10cSrcweir             aNode.addHandler (maContextHandler.createHandler (xContext));
89cdf0e10cSrcweir 
90cdf0e10cSrcweir             aHandler = maTextHandler.createHandler (xContext);
91cdf0e10cSrcweir             if (aHandler != null)
92cdf0e10cSrcweir             {
93cdf0e10cSrcweir                 aNode.addHandler (aHandler);
94cdf0e10cSrcweir                 aNode.addHandler (maEditableTextHandler.createHandler (xContext));
95cdf0e10cSrcweir                 aNode.addHandler (maHypertextHandler.createHandler (xContext));
96cdf0e10cSrcweir                 aNode.addHandler (maHyperlinkHandler.createHandler (xContext));
97cdf0e10cSrcweir             }
98cdf0e10cSrcweir             aHandler = maComponentHandler.createHandler (xContext);
99cdf0e10cSrcweir             if (aHandler != null)
100cdf0e10cSrcweir             {
101cdf0e10cSrcweir                 aNode.addHandler (aHandler);
102cdf0e10cSrcweir                 aNode.addHandler (maExtendedComponentHandler.createHandler (xContext));
103cdf0e10cSrcweir             }
104cdf0e10cSrcweir             aNode.addHandler (maActionHandler.createHandler (xContext));
105cdf0e10cSrcweir             aNode.addHandler (maImageHandler.createHandler (xContext));
106cdf0e10cSrcweir             aNode.addHandler (maTableHandler.createHandler (xContext));
107cdf0e10cSrcweir             aNode.addHandler (maRelationHandler.createHandler (xContext));
108cdf0e10cSrcweir             aNode.addHandler (maCellHandler.createHandler (xContext));
109cdf0e10cSrcweir             aNode.addHandler (maSelectionHandler.createHandler (xContext));
110cdf0e10cSrcweir             aNode.addHandler (maUNOHandler.createHandler (xContext));
111cdf0e10cSrcweir             aNode.addHandler (maTreeHandler.createHandler (xContext));
112cdf0e10cSrcweir         }
113cdf0e10cSrcweir     }
114cdf0e10cSrcweir 
115cdf0e10cSrcweir     /** create a node with the default handlers */
createDefaultNode(XAccessible xAccessible, AccessibleTreeNode aParent)116cdf0e10cSrcweir     public AccTreeNode createDefaultNode (XAccessible xAccessible, AccessibleTreeNode aParent)
117cdf0e10cSrcweir     {
118cdf0e10cSrcweir         // default: aObject + aDisplay
119cdf0e10cSrcweir         String sDisplay;
120cdf0e10cSrcweir 
121cdf0e10cSrcweir         // if we are accessible, we use the context + name instead
122cdf0e10cSrcweir         XAccessibleContext xContext = null;
123cdf0e10cSrcweir         if (xAccessible != null)
124cdf0e10cSrcweir             xContext = xAccessible.getAccessibleContext();
125cdf0e10cSrcweir         if (xContext != null)
126cdf0e10cSrcweir         {
127cdf0e10cSrcweir             sDisplay = xContext.getAccessibleName();
128cdf0e10cSrcweir             if (sDisplay.length()==0)
129cdf0e10cSrcweir             {
130cdf0e10cSrcweir                 sDisplay = "<no name> Role: "
131cdf0e10cSrcweir                     + NameProvider.getRoleName (
132cdf0e10cSrcweir                         xContext.getAccessibleRole());
133cdf0e10cSrcweir             }
134cdf0e10cSrcweir         }
135cdf0e10cSrcweir         else
136cdf0e10cSrcweir             sDisplay = new String ("not accessible");
137cdf0e10cSrcweir 
138cdf0e10cSrcweir 
139cdf0e10cSrcweir         // create node, and add default handlers
140cdf0e10cSrcweir         AccTreeNode aNode = new AccTreeNode (xAccessible, xContext, sDisplay, aParent);
141cdf0e10cSrcweir         addDefaultHandlers (aNode, xContext);
142cdf0e10cSrcweir 
143cdf0e10cSrcweir         if (aNode == null)
144cdf0e10cSrcweir             System.out.println ("createDefaultNode == null");
145cdf0e10cSrcweir         return aNode;
146cdf0e10cSrcweir     }
147cdf0e10cSrcweir 
148cdf0e10cSrcweir     private static NodeFactory maInstance = null;
149cdf0e10cSrcweir 
150cdf0e10cSrcweir     private boolean mbVerbose;
151cdf0e10cSrcweir 
152cdf0e10cSrcweir     // default handlers
153cdf0e10cSrcweir     private NodeHandler maContextHandler = new AccessibleContextHandler();
154cdf0e10cSrcweir     private NodeHandler maTextHandler = new AccessibleTextHandler();
155cdf0e10cSrcweir     private NodeHandler maEditableTextHandler = new AccessibleEditableTextHandler();
156cdf0e10cSrcweir     private NodeHandler maComponentHandler = new AccessibleComponentHandler();
157cdf0e10cSrcweir     private NodeHandler maExtendedComponentHandler = new AccessibleExtendedComponentHandler();
158cdf0e10cSrcweir     private NodeHandler maActionHandler = new AccessibleActionHandler();
159cdf0e10cSrcweir     private NodeHandler maImageHandler = new AccessibleImageHandler();
160cdf0e10cSrcweir     private NodeHandler maTableHandler = new AccessibleTableHandler();
161cdf0e10cSrcweir     private NodeHandler maCellHandler = new AccessibleCellHandler();
162cdf0e10cSrcweir     private NodeHandler maHypertextHandler = new AccessibleHypertextHandler();
163cdf0e10cSrcweir     private NodeHandler maHyperlinkHandler = new AccessibleHyperlinkHandler();
164cdf0e10cSrcweir     private NodeHandler maSelectionHandler = new AccessibleSelectionHandler();
165cdf0e10cSrcweir     private NodeHandler maRelationHandler = new AccessibleRelationHandler();
166cdf0e10cSrcweir     private NodeHandler maTreeHandler = new AccessibleTreeHandler();
167cdf0e10cSrcweir     private NodeHandler maUNOHandler = new AccessibleUNOHandler();
168cdf0e10cSrcweir }
169