JMadModelPackageRepository.java
/**
* Copyright (c) 2018 European Organisation for Nuclear Research (CERN), All Rights Reserved.
*/
package org.jmad.modelpack.domain;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Objects;
import static java.util.Objects.requireNonNull;
public class JMadModelPackageRepository {
private final URI repositoryUri;
private JMadModelPackageRepository(URI uri) {
this.repositoryUri = requireNonNull(uri, "URI must not be null");
}
public static JMadModelPackageRepository fromUri(URI uri) {
return new JMadModelPackageRepository(normalizedUri(uri.toASCIIString()));
}
public static JMadModelPackageRepository fromUri(String uri) {
return new JMadModelPackageRepository(normalizedUri(uri));
}
private static URI normalizedUri(String uriString) {
try {
URI uri = new URI(uriString).normalize();
if (uri.getPath() == null || uri.getPath().isEmpty() || uri.getPath().endsWith("/")) {
return uri;
}
return new URI(uri.getScheme(), uri.getAuthority(), uri.getPath() + "/",
uri.getQuery(), uri.getFragment());
} catch (URISyntaxException e) {
throw new IllegalArgumentException(e);
}
}
public URI uri() {
return repositoryUri;
}
public String connectorScheme() {
return repositoryUri.getScheme();
}
@Override
public String toString() {
return repositoryUri.toString();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
JMadModelPackageRepository that = (JMadModelPackageRepository) o;
return Objects.equals(repositoryUri, that.repositoryUri);
}
@Override
public int hashCode() {
return Objects.hash(repositoryUri);
}
}