| /************************************************************** |
| * |
| * 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.uno.UnoRuntime; |
| import com.sun.star.accessibility.XAccessible; |
| import com.sun.star.accessibility.XAccessibleContext; |
| import com.sun.star.accessibility.AccessibleRelation; |
| import com.sun.star.accessibility.XAccessibleRelationSet; |
| import com.sun.star.accessibility.AccessibleRelationType; |
| import com.sun.star.lang.XServiceInfo; |
| import com.sun.star.lang.XTypeProvider; |
| import com.sun.star.uno.Type; |
| |
| |
| /** This handler displays lower level UNO information. These are the |
| supported services, interfaces, and the implementation name. |
| */ |
| class AccessibleUNOHandler |
| extends NodeHandler |
| { |
| public NodeHandler createHandler (XAccessibleContext xContext) |
| { |
| if (xContext == null) |
| return null; |
| else |
| return new AccessibleUNOHandler (xContext); |
| } |
| |
| public AccessibleUNOHandler() |
| { |
| } |
| |
| public AccessibleUNOHandler (XAccessibleContext xContext) |
| { |
| maChildList.setSize (3); |
| } |
| |
| private XServiceInfo GetServiceInfo (AccessibleTreeNode aNode) |
| { |
| XServiceInfo xServiceInfo = null; |
| if (aNode instanceof AccTreeNode) |
| xServiceInfo = (XServiceInfo)UnoRuntime.queryInterface( |
| XServiceInfo.class, ((AccTreeNode)aNode).getContext()); |
| return xServiceInfo; |
| } |
| private XTypeProvider GetTypeProvider (AccessibleTreeNode aNode) |
| { |
| XTypeProvider xTypeProvider = null; |
| if (aNode instanceof AccTreeNode) |
| xTypeProvider = (XTypeProvider)UnoRuntime.queryInterface( |
| XTypeProvider.class, ((AccTreeNode)aNode).getContext()); |
| return xTypeProvider; |
| } |
| |
| public AccessibleTreeNode createChild (AccessibleTreeNode aParent, |
| int nIndex) |
| { |
| AccessibleTreeNode aChild = null; |
| XServiceInfo xServiceInfo; |
| switch (nIndex) |
| { |
| case 0 : // Implemenation name. |
| xServiceInfo = GetServiceInfo (aParent); |
| aChild = new StringNode ("Implementation name: " + |
| (xServiceInfo!=null ? xServiceInfo.getImplementationName() |
| : "<XServiceInfo not supported>"), |
| aParent); |
| break; |
| case 1 : |
| xServiceInfo = GetServiceInfo (aParent); |
| if (xServiceInfo == null) |
| aChild = new StringNode ( |
| "Supported services: <XServiceInfo not supported>", |
| aParent); |
| else |
| aChild = CreateServiceTree (aParent, xServiceInfo); |
| break; |
| case 2 : |
| XTypeProvider xTypeProvider = GetTypeProvider (aParent); |
| if (xTypeProvider == null) |
| aChild = new StringNode ( |
| "Supported interfaces: <XTypeProvider not supported>", |
| aParent); |
| else |
| aChild = CreateInterfaceTree (aParent, xTypeProvider); |
| break; |
| } |
| |
| return aChild; |
| } |
| |
| |
| private AccessibleTreeNode CreateServiceTree (AccessibleTreeNode aParent, |
| XServiceInfo xServiceInfo) |
| { |
| String[] aServiceNames = xServiceInfo.getSupportedServiceNames(); |
| VectorNode aNode = new VectorNode ("Supported Services", aParent); |
| |
| int nCount = aServiceNames.length; |
| for (int i=0; i<nCount; i++) |
| aNode.addChild (new StringNode (aServiceNames[i], aParent)); |
| |
| return aNode; |
| } |
| |
| private AccessibleTreeNode CreateInterfaceTree (AccessibleTreeNode aParent, |
| XTypeProvider xTypeProvider) |
| { |
| Type[] aTypes = xTypeProvider.getTypes(); |
| VectorNode aNode = new VectorNode ("Supported Interfaces", aParent); |
| |
| int nCount = aTypes.length; |
| for (int i=0; i<nCount; i++) |
| aNode.addChild (new StringNode (aTypes[i].getTypeName(), aParent)); |
| |
| return aNode; |
| } |
| } |