/**
 *  Copyright 2005-2016 Red Hat, Inc.
 *
 *  Red Hat licenses this file to you under the Apache License, version
 *  2.0 (the "License"); you may not use this file except in compliance
 *  with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 *  implied.  See the License for the specific language governing
 *  permissions and limitations under the License.
 */
package io.fabric8.apmagent;

public class FilterItem {
    private String className;
    private String methodName;

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
        if (className != null) {
            this.className = className.replace('/', '.');
        }
    }

    public String getMethodName() {
        return methodName;
    }

    public void setMethodName(String methodName) {
        this.methodName = methodName;
    }

    public boolean matches(String className) {
        className = className.replace('/', '.');
        return className != null && (className.startsWith(getClassName()) || className.matches(getClassName()));
    }

    public boolean matches(String className, String method, boolean matchIfNoFilterMethod) {
        boolean result = matches(className);
        if (result) {
            result = false;
            if (method == null || method.isEmpty()) {
                if (getMethodName() == null || getMethodName().isEmpty()) {
                    result = true;
                }
            } else if (method != null && getMethodName() != null && !getMethodName().isEmpty()) {
                result = method.matches(getMethodName());
            } else {
                result = matchIfNoFilterMethod;
            }
        }
        return result;
    }
}
