001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.commons.pool;
019
020 import java.util.List;
021 import java.util.Collections;
022 import java.util.Arrays;
023
024 /**
025 * Holds method names, parameters, and return values for tracing method calls.
026 *
027 * @author Sandy McArthur
028 * @version $Revision: 480413 $ $Date: 2006-11-29 00:16:05 -0500 (Wed, 29 Nov 2006) $
029 */
030 public class MethodCall {
031 private final String name;
032 private final List params;
033 private Object returned;
034
035 public MethodCall(final String name) {
036 this(name, null);
037 }
038
039 public MethodCall(final String name, final Object param) {
040 this(name, Collections.singletonList(param));
041 }
042
043 public MethodCall(final String name, final Object param1, final Object param2) {
044 this(name, Arrays.asList(new Object[] {param1, param2}));
045 }
046
047 public MethodCall(final String name, final List params) {
048 if (name == null) {
049 throw new IllegalArgumentException("name must not be null.");
050 }
051 this.name = name;
052 if (params != null) {
053 this.params = params;
054 } else {
055 this.params = Collections.EMPTY_LIST;
056 }
057 }
058
059 public String getName() {
060 return name;
061 }
062
063 public List getParams() {
064 return params;
065 }
066
067 public Object getReturned() {
068 return returned;
069 }
070
071 public void setReturned(final Object returned) {
072 this.returned = returned;
073 }
074
075 public MethodCall returned(Object obj) {
076 setReturned(obj);
077 return this;
078 }
079
080 public boolean equals(final Object o) {
081 if (this == o) return true;
082 if (o == null || getClass() != o.getClass()) return false;
083
084 final MethodCall that = (MethodCall)o;
085
086 if (name != null ? !name.equals(that.name) : that.name != null) return false;
087 if (params != null ? !params.equals(that.params) : that.params != null) return false;
088 if (returned != null ? !returned.equals(that.returned) : that.returned != null) return false;
089
090 return true;
091 }
092
093 public int hashCode() {
094 int result;
095 result = (name != null ? name.hashCode() : 0);
096 result = 29 * result + (params != null ? params.hashCode() : 0);
097 result = 29 * result + (returned != null ? returned.hashCode() : 0);
098 return result;
099 }
100
101 public String toString() {
102 final StringBuffer sb = new StringBuffer();
103 sb.append("MethodCall");
104 sb.append("{name='").append(name).append('\'');
105 if (!params.isEmpty()) {
106 sb.append(", params=").append(params);
107 }
108 if (returned != null) {
109 sb.append(", returned=").append(returned);
110 }
111 sb.append('}');
112 return sb.toString();
113 }
114 }