001 package net.sf.logdistiller.gui;
002
003 /*
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 import java.awt.event.ActionEvent;
018 import java.awt.event.ActionListener;
019 import java.lang.reflect.*;
020 import java.awt.event.ItemListener;
021 import java.awt.event.ItemEvent;
022
023 public class SwingAdapter
024 {
025 private SwingAdapter()
026 {
027 }
028
029 public static ActionListener getActionListener( Object obj, String methodName )
030 {
031 try
032 {
033 Class[] paramTypes = { ActionEvent.class };
034 Method method = obj.getClass().getMethod( methodName, paramTypes );
035 return new ActionAdapter( obj, method );
036 }
037 catch ( NoSuchMethodException nsme )
038 {
039 throw new RuntimeException( "method 'public void " + methodName + "(ActionEvent ae)' not found in "
040 + obj.getClass().getName(), nsme );
041 }
042 }
043
044 public static Runnable getRunnable( Object obj, String methodName )
045 {
046 try
047 {
048 Class[] paramTypes = {};
049 Method method = obj.getClass().getMethod( methodName, paramTypes );
050 return new RunnableAdapter( obj, method );
051 }
052 catch ( NoSuchMethodException nsme )
053 {
054 throw new RuntimeException( "method 'public void " + methodName + "()' not found in "
055 + obj.getClass().getName(), nsme );
056 }
057 }
058
059 public static ItemListener getItemListener( Object obj, String methodName )
060 {
061 try
062 {
063 Class[] paramTypes = { ItemEvent.class };
064 Method method = obj.getClass().getMethod( methodName, paramTypes );
065 return new ItemAdapter( obj, method );
066 }
067 catch ( NoSuchMethodException nsme )
068 {
069 throw new RuntimeException( "method 'public void " + methodName + "(ItemEvent ie)' not found in "
070 + obj.getClass().getName(), nsme );
071 }
072 }
073
074 private static class ActionAdapter
075 implements ActionListener
076 {
077 private final Object target;
078
079 private final Method method;
080
081 public ActionAdapter( Object target, Method method )
082 {
083 this.target = target;
084 this.method = method;
085 }
086
087 public void actionPerformed( ActionEvent ae )
088 {
089 try
090 {
091 method.invoke( target, new Object[] { ae } );
092 }
093 catch ( InvocationTargetException ite )
094 {
095 throw new RunException( ite );
096 }
097 catch ( IllegalArgumentException iae )
098 {
099 throw new RuntimeException( "IllegalArgumentException invoking method '" + method.getName() + "'", iae );
100 }
101 catch ( IllegalAccessException iae )
102 {
103 throw new RuntimeException( "IllegalAccessException invoking method '" + method.getName() + "'", iae );
104 }
105 }
106 }
107
108 private static class RunnableAdapter
109 implements Runnable
110 {
111 private final Object target;
112
113 private final Method method;
114
115 public RunnableAdapter( Object target, Method method )
116 {
117 this.target = target;
118 this.method = method;
119 }
120
121 public void run()
122 {
123 try
124 {
125 method.invoke( target, new Object[] {} );
126 }
127 catch ( InvocationTargetException ite )
128 {
129 throw new RunException( ite );
130 }
131 catch ( IllegalArgumentException iae )
132 {
133 throw new RuntimeException( "IllegalArgumentException invoking method '" + method.getName() + "'", iae );
134 }
135 catch ( IllegalAccessException iae )
136 {
137 throw new RuntimeException( "IllegalAccessException invoking method '" + method.getName() + "'", iae );
138 }
139 }
140 }
141
142 private static class ItemAdapter
143 implements ItemListener
144 {
145 private final Object target;
146
147 private final Method method;
148
149 public ItemAdapter( Object target, Method method )
150 {
151 this.target = target;
152 this.method = method;
153 }
154
155 public void itemStateChanged( ItemEvent ie )
156 {
157 try
158 {
159 method.invoke( target, new Object[] { ie } );
160 }
161 catch ( InvocationTargetException ite )
162 {
163 throw new RunException( ite );
164 }
165 catch ( IllegalArgumentException iae )
166 {
167 throw new RuntimeException( "IllegalArgumentException invoking method '" + method.getName() + "'", iae );
168 }
169 catch ( IllegalAccessException iae )
170 {
171 throw new RuntimeException( "IllegalAccessException invoking method '" + method.getName() + "'", iae );
172 }
173 }
174 }
175
176 public static class RunException
177 extends RuntimeException
178 {
179 private static final long serialVersionUID = 4688792600015649872L;
180
181 private RunException( Exception nestedException )
182 {
183 super( nestedException );
184 }
185 }
186 }