| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| import com.sun.star.accessibility.*; |
| import java.util.Vector; |
| |
| import tools.NameProvider; |
| |
| /** This singleton class creates nodes for given accessible objects. |
| */ |
| class NodeFactory |
| { |
| public synchronized static NodeFactory Instance () |
| { |
| if (maInstance == null) |
| { |
| maInstance = new NodeFactory(); |
| } |
| return maInstance; |
| } |
| |
| private NodeFactory () |
| { |
| mbVerbose = false; |
| |
| maContextHandler = new AccessibleContextHandler(); |
| maTextHandler = new AccessibleTextHandler(); |
| maEditableTextHandler = new AccessibleEditableTextHandler(); |
| maComponentHandler = new AccessibleComponentHandler(); |
| maExtendedComponentHandler = new AccessibleExtendedComponentHandler(); |
| maActionHandler = new AccessibleActionHandler(); |
| maImageHandler = new AccessibleImageHandler(); |
| maTableHandler = new AccessibleTableHandler(); |
| maCellHandler = new AccessibleCellHandler(); |
| maHypertextHandler = new AccessibleHypertextHandler(); |
| maHyperlinkHandler = new AccessibleHyperlinkHandler(); |
| maSelectionHandler = new AccessibleSelectionHandler(); |
| maRelationHandler = new AccessibleRelationHandler(); |
| maTreeHandler = new AccessibleTreeHandler(); |
| maUNOHandler = new AccessibleUNOHandler(); |
| } |
| |
| |
| /** add default handlers based on the supported interfaces */ |
| private void addDefaultHandlers (AccTreeNode aNode, XAccessibleContext xContext) |
| { |
| if (false) |
| { |
| // Slow but complete version: try each handler type separately. |
| aNode.addHandler (maContextHandler.createHandler (xContext)); |
| aNode.addHandler (maTextHandler.createHandler (xContext)); |
| aNode.addHandler (maEditableTextHandler.createHandler (xContext)); |
| aNode.addHandler (maComponentHandler.createHandler (xContext)); |
| aNode.addHandler (maExtendedComponentHandler.createHandler (xContext)); |
| aNode.addHandler (maActionHandler.createHandler (xContext)); |
| aNode.addHandler (maImageHandler.createHandler (xContext)); |
| aNode.addHandler (maTableHandler.createHandler (xContext)); |
| aNode.addHandler (maCellHandler.createHandler (xContext)); |
| aNode.addHandler (maHypertextHandler.createHandler (xContext)); |
| aNode.addHandler (maHyperlinkHandler.createHandler (xContext)); |
| aNode.addHandler (maSelectionHandler.createHandler (xContext)); |
| aNode.addHandler (maRelationHandler.createHandler (xContext)); |
| aNode.addHandler (maUNOHandler.createHandler (xContext)); |
| aNode.addHandler (maTreeHandler.createHandler (xContext)); |
| } |
| else |
| { |
| // Exploit dependencies between interfaces. |
| NodeHandler aHandler; |
| aNode.addHandler (maContextHandler.createHandler (xContext)); |
| |
| aHandler = maTextHandler.createHandler (xContext); |
| if (aHandler != null) |
| { |
| aNode.addHandler (aHandler); |
| aNode.addHandler (maEditableTextHandler.createHandler (xContext)); |
| aNode.addHandler (maHypertextHandler.createHandler (xContext)); |
| aNode.addHandler (maHyperlinkHandler.createHandler (xContext)); |
| } |
| aHandler = maComponentHandler.createHandler (xContext); |
| if (aHandler != null) |
| { |
| aNode.addHandler (aHandler); |
| aNode.addHandler (maExtendedComponentHandler.createHandler (xContext)); |
| } |
| aNode.addHandler (maActionHandler.createHandler (xContext)); |
| aNode.addHandler (maImageHandler.createHandler (xContext)); |
| aNode.addHandler (maTableHandler.createHandler (xContext)); |
| aNode.addHandler (maRelationHandler.createHandler (xContext)); |
| aNode.addHandler (maCellHandler.createHandler (xContext)); |
| aNode.addHandler (maSelectionHandler.createHandler (xContext)); |
| aNode.addHandler (maUNOHandler.createHandler (xContext)); |
| aNode.addHandler (maTreeHandler.createHandler (xContext)); |
| } |
| } |
| |
| /** create a node with the default handlers */ |
| public AccTreeNode createDefaultNode (XAccessible xAccessible, AccessibleTreeNode aParent) |
| { |
| // default: aObject + aDisplay |
| String sDisplay; |
| |
| // if we are accessible, we use the context + name instead |
| XAccessibleContext xContext = null; |
| if (xAccessible != null) |
| xContext = xAccessible.getAccessibleContext(); |
| if (xContext != null) |
| { |
| sDisplay = xContext.getAccessibleName(); |
| if (sDisplay.length()==0) |
| { |
| sDisplay = "<no name> Role: " |
| + NameProvider.getRoleName ( |
| xContext.getAccessibleRole()); |
| } |
| } |
| else |
| sDisplay = new String ("not accessible"); |
| |
| |
| // create node, and add default handlers |
| AccTreeNode aNode = new AccTreeNode (xAccessible, xContext, sDisplay, aParent); |
| addDefaultHandlers (aNode, xContext); |
| |
| if (aNode == null) |
| System.out.println ("createDefaultNode == null"); |
| return aNode; |
| } |
| |
| private static NodeFactory maInstance = null; |
| |
| private boolean mbVerbose; |
| |
| // default handlers |
| private NodeHandler maContextHandler = new AccessibleContextHandler(); |
| private NodeHandler maTextHandler = new AccessibleTextHandler(); |
| private NodeHandler maEditableTextHandler = new AccessibleEditableTextHandler(); |
| private NodeHandler maComponentHandler = new AccessibleComponentHandler(); |
| private NodeHandler maExtendedComponentHandler = new AccessibleExtendedComponentHandler(); |
| private NodeHandler maActionHandler = new AccessibleActionHandler(); |
| private NodeHandler maImageHandler = new AccessibleImageHandler(); |
| private NodeHandler maTableHandler = new AccessibleTableHandler(); |
| private NodeHandler maCellHandler = new AccessibleCellHandler(); |
| private NodeHandler maHypertextHandler = new AccessibleHypertextHandler(); |
| private NodeHandler maHyperlinkHandler = new AccessibleHyperlinkHandler(); |
| private NodeHandler maSelectionHandler = new AccessibleSelectionHandler(); |
| private NodeHandler maRelationHandler = new AccessibleRelationHandler(); |
| private NodeHandler maTreeHandler = new AccessibleTreeHandler(); |
| private NodeHandler maUNOHandler = new AccessibleUNOHandler(); |
| } |