/******************************************************************************
* Copyright (c) 2011 GitHub Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Kevin Sawicki (GitHub Inc.) - initial API and implementation
*****************************************************************************/
package org.eclipse.egit.github.core;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.net.URL;
/**
* Repository id
*/
public class RepositoryId implements IRepositoryIdProvider, Serializable {
/** serialVersionUID */
private static final long serialVersionUID = -57313931704393200L;
/**
* Create repository from url.
*
* @see #createFromId(String)
* @param url
* @return repository or null if parsing fails
*/
public static RepositoryId createFromUrl(URL url) {
return url != null ? createFromId(url.getPath()) : null;
}
/**
* Create repository from id. The id is split on the '/' character and the
* first two non-empty segments are interpreted to be the repository owner
* and name.
*
* @param id
* @return repository
*/
public static RepositoryId createFromId(String id) {
if (id == null || id.length() == 0)
return null;
String owner = null;
String name = null;
for (String segment : id.split("/")) //$NON-NLS-1$
if (segment.length() > 0)
if (owner == null)
owner = segment;
else if (name == null)
name = segment;
else
break;
return owner != null && owner.length() > 0 && name != null
&& name.length() > 0 ? new RepositoryId(owner, name) : null;
}
/**
* Create from string URL
*
* @see #createFromUrl(URL)
* @param url
* @return repository or null if it could not be parsed from URL path
*/
public static RepositoryId createFromUrl(String url) {
if (url == null || url.length() == 0)
return null;
try {
return createFromUrl(new URL(url));
} catch (MalformedURLException e) {
return null;
}
}
/**
* Create repository id from given owner and name.
*
* @param owner
* @param name
* @return repository id
*/
public static RepositoryId create(String owner, String name) {
return new RepositoryId(owner, name);
}
private final String owner;
private final String name;
/**
* Create repository id with given owner and name. This constructor
* validates the parameters and throws an {@link IllegalArgumentException}
* if either is null or empty.
*
* @param owner
* must be non-null and non-empty
* @param name
* must be non-null and non-empty
*/
public RepositoryId(final String owner, final String name) {
if (owner == null)
throw new IllegalArgumentException("Owner cannot be null"); //$NON-NLS-1$
if (owner.length() == 0)
throw new IllegalArgumentException("Owner cannot be empty"); //$NON-NLS-1$
if (name == null)
throw new IllegalArgumentException("Name cannot be null"); //$NON-NLS-1$
if (name.length() == 0)
throw new IllegalArgumentException("Name cannot be empty"); //$NON-NLS-1$
this.owner = owner;
this.name = name;
}
/**
* @return owner
*/
public String getOwner() {
return owner;
}
/**
* @return name
*/
public String getName() {
return name;
}
public String generateId() {
return owner + "/" + name; //$NON-NLS-1$
}
@Override
public int hashCode() {
return generateId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == this)
return true;
if (!(obj instanceof RepositoryId))
return false;
RepositoryId other = (RepositoryId) obj;
return name.equals(other.name) && owner.equals(other.owner);
}
@Override
public String toString() {
return generateId();
}
}