1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 package org.openoffice.java.accessibility.logging; 25 26 import com.sun.star.accessibility.*; 27 import com.sun.star.uno.*; 28 29 /** 30 * 31 */ 32 public class XAccessibleEventLog implements XAccessibleEventListener { 33 34 private static XAccessibleEventLog theEventListener = null; 35 36 private static java.util.Hashtable proxyList = new java.util.Hashtable(); 37 38 /** Creates a new instance of UNOAccessibleEventListener */ XAccessibleEventLog()39 public XAccessibleEventLog() { 40 } 41 get()42 private static XAccessibleEventListener get() { 43 if (theEventListener == null) { 44 theEventListener = new XAccessibleEventLog(); 45 } 46 return theEventListener; 47 } 48 addEventListener(XAccessibleContext xac, java.awt.Component c)49 public static void addEventListener(XAccessibleContext xac, java.awt.Component c) { 50 XAccessibleEventBroadcaster broadcaster = (XAccessibleEventBroadcaster) 51 UnoRuntime.queryInterface(XAccessibleEventBroadcaster.class, xac); 52 if (broadcaster != null) { 53 broadcaster.addEventListener(XAccessibleEventLog.get()); 54 55 // remember the proxy objects 56 synchronized (proxyList) { 57 // proxyList.put(UnoRuntime.generateOid(xac), new WeakReference(c)); 58 proxyList.put(UnoRuntime.generateOid(xac), c); 59 } 60 } 61 } 62 disposing(com.sun.star.lang.EventObject eventObject)63 public void disposing(com.sun.star.lang.EventObject eventObject) { 64 } 65 notifyEvent(com.sun.star.accessibility.AccessibleEventObject accessibleEventObject)66 public void notifyEvent(com.sun.star.accessibility.AccessibleEventObject accessibleEventObject) { 67 switch (accessibleEventObject.EventId) { 68 case AccessibleEventId.ACTIVE_DESCENDANT_CHANGED: 69 logMessage(accessibleEventObject.Source, "Retrieved active descendant event."); 70 break; 71 case AccessibleEventId.STATE_CHANGED: 72 logStateChange(accessibleEventObject.Source, 73 accessibleEventObject.OldValue, 74 accessibleEventObject.NewValue); 75 break; 76 case AccessibleEventId.CHILD: 77 logMessage(accessibleEventObject.Source, "Retrieved children event."); 78 break; 79 case AccessibleEventId.BOUNDRECT_CHANGED: 80 logMessage(accessibleEventObject.Source, "Retrieved boundrect changed event."); 81 break; 82 case AccessibleEventId.VISIBLE_DATA_CHANGED: 83 logMessage(accessibleEventObject.Source, "Retrieved visible data changed event."); 84 break; 85 case AccessibleEventId.INVALIDATE_ALL_CHILDREN: 86 logMessage(accessibleEventObject.Source, "Retrieved invalidate children event."); 87 break; 88 default: 89 break; 90 } 91 } 92 logStateChange(Object o, Object any1, Object any2)93 public void logStateChange(Object o, Object any1, Object any2) { 94 try { 95 if (AnyConverter.isShort(any1)) { 96 logStateChange(o, AnyConverter.toShort(any1), " is no longer "); 97 } 98 99 if (AnyConverter.isShort(any2)) { 100 logStateChange(o, AnyConverter.toShort(any2), " is now "); 101 } 102 } catch (com.sun.star.lang.IllegalArgumentException e) { 103 } 104 } 105 logStateChange(Object o, short n, String s)106 public void logStateChange(Object o, short n, String s) { 107 switch(n) { 108 case AccessibleStateType.ACTIVE: 109 logMessage(o, s + javax.accessibility.AccessibleState.ACTIVE); 110 break; 111 case AccessibleStateType.ARMED: 112 logMessage(o, s + javax.accessibility.AccessibleState.ARMED); 113 break; 114 case AccessibleStateType.CHECKED: 115 logMessage(o, s + javax.accessibility.AccessibleState.CHECKED); 116 break; 117 case AccessibleStateType.ENABLED: 118 logMessage(o, s + javax.accessibility.AccessibleState.ENABLED); 119 break; 120 case AccessibleStateType.FOCUSED: 121 logMessage(o, s + javax.accessibility.AccessibleState.FOCUSED); 122 break; 123 case AccessibleStateType.PRESSED: 124 logMessage(o, s + javax.accessibility.AccessibleState.PRESSED); 125 break; 126 case AccessibleStateType.SELECTED: 127 logMessage(o, s + javax.accessibility.AccessibleState.SELECTED); 128 break; 129 case AccessibleStateType.SENSITIVE: 130 logMessage(o, s + "sensitive"); 131 break; 132 case AccessibleStateType.SHOWING: 133 logMessage(o, s + javax.accessibility.AccessibleState.SHOWING); 134 break; 135 case AccessibleStateType.VISIBLE: 136 logMessage(o, s + javax.accessibility.AccessibleState.VISIBLE); 137 break; 138 default: 139 logMessage(o, s + "??? (FIXME)"); 140 break; 141 } 142 } 143 logMessage(Object o, String s)144 protected static void logMessage(Object o, String s) { 145 XAccessibleContext xac = (XAccessibleContext) UnoRuntime.queryInterface(XAccessibleContext.class, o); 146 if( xac != null ) { 147 String oid = UnoRuntime.generateOid(xac); 148 synchronized (proxyList) { 149 logMessage( (javax.accessibility.Accessible) proxyList.get( oid ), s ); 150 // WeakReference r = (WeakReference) proxyList.get( oid ); 151 // if(r != null) { 152 // System.err.println( "*** Warning *** event is " + r.get() ); 153 // logMessage( (javax.accessibility.Accessible) r.get(), s ); 154 // } else { 155 // System.err.println( "*** Warning *** event source not found in broadcaster list" ); 156 // } 157 } 158 } else 159 System.err.println( "*** Warning *** event source does not implement XAccessibleContext" ); 160 } 161 logMessage(javax.accessibility.Accessible a, String s)162 protected static void logMessage(javax.accessibility.Accessible a, String s) { 163 if (a != null) { 164 logMessage(a.getAccessibleContext(), s); 165 } else { 166 logMessage(s); 167 } 168 } 169 logMessage(javax.accessibility.AccessibleContext ac, String s)170 protected static void logMessage(javax.accessibility.AccessibleContext ac, String s) { 171 if (ac != null) { 172 logMessage("[" + ac.getAccessibleRole() + "] " 173 + ac.getAccessibleName() + ": " + s); 174 } else { 175 logMessage(s); 176 } 177 } 178 logMessage(String s)179 protected static void logMessage(String s) { 180 System.err.println(s); 181 } 182 } 183