All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gihub.gkutiel.Url Maven / Gradle / Ivy

There is a newer version: 6-RELEASE
Show newest version
package com.gihub.gkutiel;

import static java.net.URLEncoder.encode;
import static java.util.Arrays.asList;

import java.io.UnsupportedEncodingException;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public abstract class Url {
	@SuppressWarnings("unchecked")
	private static List getFields(final Class c) {
		if (c.equals(Url.class)) return new ArrayList<>();
		final List fields = getFields((Class) c.getSuperclass());
		fields.addAll(asList(c.getDeclaredFields()));
		return fields;
	}

	public final String base;

	public Url(final String base) {
		this.base = base;
	}

	private void addParam(final StringBuilder url, final Field field) {
		try {
			url.append(encode(field.getName(), "utf-8") + "=" + encode(field.get(this).toString(), "utf-8"));
		} catch (IllegalArgumentException | IllegalAccessException | UnsupportedEncodingException e) {
			throw new RuntimeException(e);
		}
	}

	private void addParams(final StringBuilder url, final Field[] fs) {
		if (fs.length == 0) return;
		AccessibleObject.setAccessible(fs, true);

		url.append("?");
		addParam(url, fs[0]);

		for (int i = 1; i < fs.length; i++) {
			url.append("&");
			addParam(url, fs[i]);
		}
	}

	public String asString() {
		final StringBuilder url = new StringBuilder(base);

		addParams(url, getFields(getClass()).toArray(new Field[] {}));

		return url.toString();
	}

	@Override
	public String toString() {
		return asString();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy