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