/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF 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 org.apache.metron.solr.matcher;

import org.apache.solr.common.params.ModifiableSolrParams;
import org.mockito.ArgumentMatcher;

public class ModifiableSolrParamsMatcher implements ArgumentMatcher<ModifiableSolrParams> {

  private ModifiableSolrParams expectedModifiableSolrParams;

  public ModifiableSolrParamsMatcher(ModifiableSolrParams modifiableSolrParams) {
    this.expectedModifiableSolrParams = modifiableSolrParams;
  }

  @Override
  public boolean matches(ModifiableSolrParams modifiableSolrParams) {
    for(String name: expectedModifiableSolrParams.getParameterNames()) {
      String expectedValue = expectedModifiableSolrParams.get(name);
      String value = modifiableSolrParams.get(name);
      if(expectedValue == null) {
        if (value != null) {
          return false;
        }
      } else {
        if (!expectedValue.equals(value)) {
          return false;
        }
      }
    }
    return true;
  }

  @Override
  public String toString() {
    return expectedModifiableSolrParams.toString();
  }
}
