package ilarkesto.base;
import ilarkesto.di.BeanStorage;
import java.util.HashMap;
import java.util.Map;
/**
* Data type for URL's.
*/
public final class Url implements BeanStorage<String> {
private String base;
private Map<String, String> parameters;
private boolean immutable;
public Url(Url template) {
this.base = template.base;
this.parameters = template.parameters == null ? null : new HashMap<String, String>(template.parameters);
}
public Url(String base) {
this.base = base;
}
public boolean isInternal() {
return !isExternal();
}
public boolean isExternal() {
return isExternal(base);
}
public static boolean isExternal(String url) {
return url.startsWith("http://") || url.startsWith("ftp://") || url.startsWith("mailto:")
|| url.startsWith("javascript:");
}
public String getBase() {
return base;
}
public Url putAll(Map<String, ? extends String> parameters) {
if (immutable) throw new RuntimeException("Url is immutable");
if (this.parameters == null) this.parameters = new HashMap<String, String>();
this.parameters.putAll(parameters);
return this;
}
public Url put(String name, String value) {
if (immutable) throw new RuntimeException("Url is immutable");
if (value == null) return this;
if (parameters == null) parameters = new HashMap<String, String>();
parameters.put(name, value);
return this;
}
public Url put(String name, Integer value) {
if (value == null) return this;
return put(name, value.toString());
}
public Url put(String name, Long value) {
if (value == null) return this;
return put(name, value.toString());
}
public Url setImmutable() {
this.immutable = true;
return this;
}
@Override
public String toString() {
return Str.constructUrl(base, parameters == null ? null : parameters);
}
}