28import java.net.URISyntaxException;
 
   29import java.util.HashMap;
 
   30import java.util.Iterator;
 
   32import java.util.Map.Entry;
 
   49public class UriQueryProps {
 
   50   private static final String QMARK = 
"?";
 
   51   private static final char ASSIG = 
'=';
 
   52   private static final String EMPTY = 
"";
 
   53   private final String query_separator;
 
   55   private final HashMap<String, String> properties = 
new HashMap<String, String>();
 
   57   private UriQueryProps(
final char querySeparator) {
 
   58       query_separator = String.valueOf(querySeparator);
 
   65       boolean needsSep = 
false;
 
   66       final StringBuilder sb = 
new StringBuilder();
 
   67       if ( 
null != baseQuery ) {
 
   68           if( baseQuery.startsWith(QMARK) ) {
 
   69               baseQuery = baseQuery.substring(1); 
 
   71           sb.append(baseQuery.get());
 
   72           if( !baseQuery.endsWith(query_separator) ) {
 
   76       final Iterator<Entry<String, String>> entries = properties.entrySet().iterator();
 
   77       while(entries.hasNext()) {
 
   79               sb.append(query_separator);
 
   81           final Entry<String, String> entry = entries.next();
 
   82           sb.append(entry.getKey());
 
   83           if( EMPTY != entry.getValue() ) {
 
   84               sb.append(ASSIG).append(entry.getValue());
 
 
  102   public static final UriQueryProps 
create(
final Uri uri, 
final char querySeparator) 
throws IllegalArgumentException {
 
  103       if( 
';' != querySeparator && 
'&' != querySeparator ) {
 
  104           throw new IllegalArgumentException(
"querySeparator is invalid: "+querySeparator);
 
  106       final UriQueryProps data = 
new UriQueryProps(querySeparator);
 
  108       final int q_l = 
null != q ? q.length() : -1;
 
  111           final int q_b = q_e + 1; 
 
  112           q_e = q.indexOf(querySeparator, q_b);
 
  122           final String part = q.substring(q_b, q_e);
 
  123           final int assignment = part.indexOf(ASSIG);
 
  126               final String k = part.substring(0, assignment);
 
  127               final String v = part.substring(assignment+1);
 
  128               data.properties.put(k, v);
 
  131               data.properties.put(part, EMPTY);
 
 
 
static final UriQueryProps create(final Uri uri, final char querySeparator)
final Uri.Encoded appendQuery(Uri.Encoded baseQuery)
final Uri appendQuery(final Uri base)
final char getQuerySeparator()
final Map< String, String > getProperties()
Immutable RFC3986 encoded string.
This class implements an immutable Uri as defined by RFC 2396.
static String decode(final Encoded encoded)
Safe Encoded#decode() call on optional encoded instance.
static final String QUERY_LEGAL
Valid charset for RFC 2396 query, additional to legal alphanum characters.
Author: Sven Gothel sgothel@jausoft.com Copyright (c) 2020 Gothel Software e.K.