/*******************************************************************************
 * Copyright (c) 2008-2010 Sonatype, Inc.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *      Sonatype, Inc. - initial API and implementation
 *******************************************************************************/

package org.eclipse.m2e.core.embedder;

import java.io.Serializable;

import org.apache.maven.artifact.repository.ArtifactRepository;


public class ArtifactRepositoryRef implements Serializable {

  private static final long serialVersionUID = 8859289246547259912L;

  private final String id;

  private final String url;

  private final String username;

  public ArtifactRepositoryRef(ArtifactRepository repository) {
    this.id = repository.getId();
    this.url = repository.getUrl();
    this.username = repository.getAuthentication() != null ? repository.getAuthentication().getUsername() : null;
  }

  public String getId() {
    return id;
  }

  public String getUrl() {
    return url;
  }

  public String getUsername() {
    return username;
  }

  public int hashCode() {
    int hash = 17;
    hash = hash * 31 + (id != null ? id.hashCode() : 0);
    hash = hash * 31 + (url != null ? url.hashCode() : 0);
    hash = hash * 31 + (username != null ? username.hashCode() : 0);
    return hash;
  }

  public boolean equals(Object o) {
    if(o == this) {
      return true;
    }
    if(!(o instanceof ArtifactRepositoryRef)) {
      return false;
    }
    ArtifactRepositoryRef other = (ArtifactRepositoryRef) o;
    return eq(id, other.id) && eq(url, other.url) && eq(username, other.username);
  }

  private static <T> boolean eq(T a, T b) {
    return a != null ? a.equals(b) : b == null;
  }
}
