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.uno.UnoRuntime; 23cdf0e10cSrcweir import com.sun.star.accessibility.XAccessible; 24cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleContext; 25cdf0e10cSrcweir import com.sun.star.accessibility.AccessibleRelation; 26cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleRelationSet; 27cdf0e10cSrcweir import com.sun.star.accessibility.AccessibleRelationType; 28cdf0e10cSrcweir import com.sun.star.lang.IndexOutOfBoundsException; 29cdf0e10cSrcweir 30cdf0e10cSrcweir import tools.NameProvider; 31cdf0e10cSrcweir 32cdf0e10cSrcweir class AccessibleRelationHandler 33cdf0e10cSrcweir extends NodeHandler 34cdf0e10cSrcweir { createHandler( XAccessibleContext xContext )35cdf0e10cSrcweir public NodeHandler createHandler( XAccessibleContext xContext ) 36cdf0e10cSrcweir { 37cdf0e10cSrcweir AccessibleRelationHandler aHandler = null; 38cdf0e10cSrcweir if (xContext != null) 39cdf0e10cSrcweir { 40cdf0e10cSrcweir XAccessibleRelationSet xRelation = xContext.getAccessibleRelationSet(); 41cdf0e10cSrcweir if (xRelation != null) 42cdf0e10cSrcweir aHandler = new AccessibleRelationHandler(xContext); 43cdf0e10cSrcweir } 44cdf0e10cSrcweir return aHandler; 45cdf0e10cSrcweir } 46cdf0e10cSrcweir AccessibleRelationHandler()47cdf0e10cSrcweir public AccessibleRelationHandler() 48cdf0e10cSrcweir { 49cdf0e10cSrcweir } 50cdf0e10cSrcweir AccessibleRelationHandler( XAccessibleContext xContext )51cdf0e10cSrcweir public AccessibleRelationHandler( XAccessibleContext xContext ) 52cdf0e10cSrcweir { 53cdf0e10cSrcweir XAccessibleRelationSet xRelation = xContext.getAccessibleRelationSet(); 54cdf0e10cSrcweir if (xRelation != null) 55cdf0e10cSrcweir maChildList.setSize( 1 ); 56cdf0e10cSrcweir } 57cdf0e10cSrcweir createChild( AccessibleTreeNode aParent, int nIndex )58cdf0e10cSrcweir public AccessibleTreeNode createChild( AccessibleTreeNode aParent, 59cdf0e10cSrcweir int nIndex ) 60cdf0e10cSrcweir { 61cdf0e10cSrcweir XAccessibleRelationSet xRelation = null; 62cdf0e10cSrcweir AccessibleTreeNode aChild = null; 63cdf0e10cSrcweir 64cdf0e10cSrcweir if( aParent instanceof AccTreeNode ) 65cdf0e10cSrcweir { 66cdf0e10cSrcweir xRelation = 67cdf0e10cSrcweir ((AccTreeNode)aParent).getContext().getAccessibleRelationSet(); 68cdf0e10cSrcweir } 69cdf0e10cSrcweir if( xRelation == null ) 70cdf0e10cSrcweir return aChild; 71cdf0e10cSrcweir 72cdf0e10cSrcweir 73cdf0e10cSrcweir VectorNode aVNode = new VectorNode( "RelationSet", aParent); 74cdf0e10cSrcweir int nCount = xRelation.getRelationCount(); 75cdf0e10cSrcweir try 76cdf0e10cSrcweir { 77cdf0e10cSrcweir for( int i = 0; i < nCount; i++ ) 78cdf0e10cSrcweir { 79cdf0e10cSrcweir AccessibleRelation aRelation = xRelation.getRelation( i ); 80cdf0e10cSrcweir 81cdf0e10cSrcweir StringBuffer aBuffer = new StringBuffer(); 82cdf0e10cSrcweir aBuffer.append (NameProvider.getRelationName (aRelation.RelationType)); 83cdf0e10cSrcweir aBuffer.append( ": " ); 84cdf0e10cSrcweir 85cdf0e10cSrcweir for( int j = 0; j < aRelation.TargetSet.length; j++ ) 86cdf0e10cSrcweir { 87cdf0e10cSrcweir Object aTarget = aRelation.TargetSet[j]; 88cdf0e10cSrcweir XAccessible xAccTarget = 89cdf0e10cSrcweir (XAccessible)UnoRuntime.queryInterface( 90cdf0e10cSrcweir XAccessible.class, aTarget ); 91cdf0e10cSrcweir if( xAccTarget == null ) 92cdf0e10cSrcweir { 93cdf0e10cSrcweir aBuffer.append( aTarget.toString() ); 94cdf0e10cSrcweir } 95cdf0e10cSrcweir else 96cdf0e10cSrcweir { 97cdf0e10cSrcweir aBuffer.append( xAccTarget.getAccessibleContext(). 98cdf0e10cSrcweir getAccessibleName() ); 99cdf0e10cSrcweir } 100cdf0e10cSrcweir aBuffer.append( ", " ); 101cdf0e10cSrcweir } 102cdf0e10cSrcweir aBuffer.delete( aBuffer.length() - 2, aBuffer.length() ); 103cdf0e10cSrcweir 104cdf0e10cSrcweir aVNode.addChild( new StringNode( aBuffer.toString(), 105cdf0e10cSrcweir aParent ) ); 106cdf0e10cSrcweir } 107cdf0e10cSrcweir 108cdf0e10cSrcweir aChild = aVNode; 109cdf0e10cSrcweir } 110cdf0e10cSrcweir catch( IndexOutOfBoundsException e ) 111cdf0e10cSrcweir { 112cdf0e10cSrcweir aChild = new StringNode( "IndexOutOfBounds", aParent ); 113cdf0e10cSrcweir } 114cdf0e10cSrcweir 115cdf0e10cSrcweir return aChild; 116cdf0e10cSrcweir } 117cdf0e10cSrcweir } 118