1 /* 2 * This file is part of the LibreOffice project. 3 * 4 * This Source Code Form is subject to the terms of the Mozilla Public 5 * License, v. 2.0. If a copy of the MPL was not distributed with this 6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 * 8 * This file incorporates work covered by the following license notice: 9 * 10 * Licensed to the Apache Software Foundation (ASF) under one or more 11 * contributor license agreements. See the NOTICE file distributed 12 * with this work for additional information regarding copyright 13 * ownership. The ASF licenses this file to you under the Apache 14 * License, Version 2.0 (the "License"); you may not use this file 15 * except in compliance with the License. You may obtain a copy of 16 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 17 */ 18 19 import com.sun.star.uno.UnoRuntime; 20 import com.sun.star.accessibility.XAccessibleContext; 21 import com.sun.star.lang.XServiceInfo; 22 import com.sun.star.lang.XTypeProvider; 23 import com.sun.star.uno.Type; 24 25 26 /** This handler displays lower level UNO information. These are the 27 supported services, interfaces, and the implementation name. 28 */ 29 class AccessibleUNOHandler 30 extends NodeHandler 31 { 32 @Override createHandler(XAccessibleContext xContext)33 public NodeHandler createHandler (XAccessibleContext xContext) 34 { 35 if (xContext == null) 36 return null; 37 else 38 { 39 AccessibleUNOHandler h = new AccessibleUNOHandler(); 40 h.maChildList.setSize (3); 41 return h; 42 } 43 } 44 GetServiceInfo(AccessibleTreeNode aNode)45 private XServiceInfo GetServiceInfo (AccessibleTreeNode aNode) 46 { 47 XServiceInfo xServiceInfo = null; 48 if (aNode instanceof AccTreeNode) 49 xServiceInfo = UnoRuntime.queryInterface( 50 XServiceInfo.class, ((AccTreeNode)aNode).getContext()); 51 return xServiceInfo; 52 } GetTypeProvider(AccessibleTreeNode aNode)53 private XTypeProvider GetTypeProvider (AccessibleTreeNode aNode) 54 { 55 XTypeProvider xTypeProvider = null; 56 if (aNode instanceof AccTreeNode) 57 xTypeProvider = UnoRuntime.queryInterface( 58 XTypeProvider.class, ((AccTreeNode)aNode).getContext()); 59 return xTypeProvider; 60 } 61 62 @Override createChild(AccessibleTreeNode aParent, int nIndex)63 public AccessibleTreeNode createChild (AccessibleTreeNode aParent, 64 int nIndex) 65 { 66 AccessibleTreeNode aChild = null; 67 XServiceInfo xServiceInfo; 68 switch (nIndex) 69 { 70 case 0 : // Implementation name. 71 xServiceInfo = GetServiceInfo (aParent); 72 aChild = new StringNode ("Implementation name: " + 73 (xServiceInfo!=null ? xServiceInfo.getImplementationName() 74 : "<XServiceInfo not supported>"), 75 aParent); 76 break; 77 case 1 : 78 xServiceInfo = GetServiceInfo (aParent); 79 if (xServiceInfo == null) 80 aChild = new StringNode ( 81 "Supported services: <XServiceInfo not supported>", 82 aParent); 83 else 84 aChild = CreateServiceTree (aParent, xServiceInfo); 85 break; 86 case 2 : 87 XTypeProvider xTypeProvider = GetTypeProvider (aParent); 88 if (xTypeProvider == null) 89 aChild = new StringNode ( 90 "Supported interfaces: <XTypeProvider not supported>", 91 aParent); 92 else 93 aChild = CreateInterfaceTree (aParent, xTypeProvider); 94 break; 95 } 96 97 return aChild; 98 } 99 100 CreateServiceTree(AccessibleTreeNode aParent, XServiceInfo xServiceInfo)101 private AccessibleTreeNode CreateServiceTree (AccessibleTreeNode aParent, 102 XServiceInfo xServiceInfo) 103 { 104 String[] aServiceNames = xServiceInfo.getSupportedServiceNames(); 105 VectorNode aNode = new VectorNode ("Supported Services", aParent); 106 107 int nCount = aServiceNames.length; 108 for (int i=0; i<nCount; i++) 109 aNode.addChild (new StringNode (aServiceNames[i], aParent)); 110 111 return aNode; 112 } 113 CreateInterfaceTree(AccessibleTreeNode aParent, XTypeProvider xTypeProvider)114 private AccessibleTreeNode CreateInterfaceTree (AccessibleTreeNode aParent, 115 XTypeProvider xTypeProvider) 116 { 117 Type[] aTypes = xTypeProvider.getTypes(); 118 VectorNode aNode = new VectorNode ("Supported Interfaces", aParent); 119 120 int nCount = aTypes.length; 121 for (int i=0; i<nCount; i++) 122 aNode.addChild (new StringNode (aTypes[i].getTypeName(), aParent)); 123 124 return aNode; 125 } 126 } 127