class URL {

    @Override
    public String toString() {
        StringBuilder url = new StringBuilder();
        
        if (!StringUtil.isEmpty(this.protocol)) {
            url.append(this.protocol);
            url.append("://");
        }
        
        if (!StringUtil.isEmpty(this.username)) {
            url.append(encode(this.username));
            if (this.password != null) {
                url.append(':');
                url.append(encode(this.password));
            }
            url.append('@');
        }

        if (!StringUtil.isEmpty(this.host)) {
            url.append(this.host);
        }

        if (this.port != null) {
            url.append(':');
            url.append(this.port);
        }

        if (!StringUtil.isEmpty(this.path)) {
            url.append(this.path);
        }

        if (!StringUtil.isEmpty(this.query)) {
            url.append('?');
            url.append(this.query);
        }
        
        return url.toString();
    }

    public  URL();

}