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