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