/*
* Copyright (c) 2012 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.db.client.model;
import org.codehaus.jackson.annotate.JsonValue;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlValue;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URLDecoder;
import java.net.URLEncoder;
/**
* URI with user provided label
*/
public class NamedURI {
private static final String UTF8_ENCODING = "UTF-8";
private URI _reference;
private String _name;
public NamedURI() {
}
public NamedURI(URI reference, String name) {
_reference = reference;
_name = name;
}
@JsonValue
@XmlValue
public URI getURI() {
return _reference;
}
public void setURI(URI reference) {
_reference = reference;
}
@XmlTransient
public String getName() {
return _name;
}
public void setName(String name) {
_name = name;
}
public static NamedURI fromString(String val) {
if (val == null) {
throw new IllegalArgumentException();
}
int lastIndex = val.lastIndexOf(':');
if (lastIndex == -1) {
throw new IllegalArgumentException(val);
}
try {
return new NamedURI(URI.create(val.substring(0, lastIndex)),
URLDecoder.decode(val.substring(lastIndex + 1), UTF8_ENCODING));
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException(e);
}
}
public String toString() {
try {
if (_name == null) {
return _reference.toString();
} else {
return String.format("%1$s:%2$s", _reference.toString(), URLEncoder.encode(_name, UTF8_ENCODING));
}
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException(e);
}
}
@Override
public boolean equals(Object target) {
return toString().equals(target.toString());
}
@Override
public int hashCode() {
return toString().hashCode();
}
}