00001 /* 00002 * Copyright (C) 2012 Google Inc. 00003 * 00004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 00005 * use this file except in compliance with the License. You may obtain a copy of 00006 * the License at 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 00012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 00013 * License for the specific language governing permissions and limitations under 00014 * the License. 00015 */ 00016 00017 package org.ros.internal.message; 00018 00019 import org.ros.internal.message.field.Field; 00020 import org.ros.internal.message.field.MessageFields; 00021 00022 import java.lang.reflect.InvocationHandler; 00023 import java.lang.reflect.Method; 00024 00028 public class MessageProxyInvocationHandler implements InvocationHandler { 00029 00030 private final MessageImpl messageImpl; 00031 00032 MessageProxyInvocationHandler(MessageImpl messageImpl) { 00033 this.messageImpl = messageImpl; 00034 } 00035 00036 @Override 00037 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 00038 String methodName = method.getName(); 00039 MessageFields mesageFields = messageImpl.getMessageFields(); 00040 Field getterField = mesageFields.getGetterField(methodName); 00041 if (getterField != null) { 00042 return getterField.getValue(); 00043 } 00044 Field setterField = mesageFields.getSetterField(methodName); 00045 if (setterField != null) { 00046 setterField.setValue(args[0]); 00047 return null; 00048 } 00049 return method.invoke(messageImpl, args); 00050 } 00051 }