001/**
002 *
003 * Licensed to the Apache Software Foundation (ASF) under one
004 * or more contributor license agreements.  See the NOTICE file
005 * distributed with this work for additional information
006 * regarding copyright ownership.  The ASF licenses this file
007 * to you under the Apache License, Version 2.0 (the
008 * "License"); you may not use this file except in compliance
009 * with the License.  You may obtain a copy of the License at
010 *
011 *     http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 */
019
020package org.apache.hadoop.hbase.tool.coprocessor;
021
022import java.util.ArrayList;
023import java.util.List;
024import java.util.Objects;
025
026import org.apache.yetus.audience.InterfaceAudience;
027
028@InterfaceAudience.Private
029public class CoprocessorMethod {
030  private final String name;
031  private final List<String> parameters;
032
033  public CoprocessorMethod(String name) {
034    this.name = name;
035
036    parameters = new ArrayList<>();
037  }
038
039  public CoprocessorMethod withParameters(String ... parameters) {
040    for (String parameter : parameters) {
041      this.parameters.add(parameter);
042    }
043
044    return this;
045  }
046
047  public CoprocessorMethod withParameters(Class<?> ... parameters) {
048    for (Class<?> parameter : parameters) {
049      this.parameters.add(parameter.getCanonicalName());
050    }
051
052    return this;
053  }
054
055  @Override
056  public boolean equals(Object obj) {
057    if (obj == this) {
058      return true;
059    } else if (!(obj instanceof CoprocessorMethod)) {
060      return false;
061    }
062
063    CoprocessorMethod other = (CoprocessorMethod)obj;
064
065    return Objects.equals(name, other.name) &&
066        Objects.equals(parameters, other.parameters);
067  }
068
069  @Override
070  public int hashCode() {
071    return Objects.hash(name, parameters);
072  }
073}