Example #1
0
 /**
  * Ctor.
  *
  * @param txt Text of the link
  * @todo #558:30min Href ctor. According to new qulice version, constructor must contain only
  *     variables initialization and other constructor calls. Refactor code according to that rule
  *     and remove `ConstructorOnlyInitializesOrCallOtherConstructors` warning suppression.
  */
 @SuppressWarnings({
   "PMD.AvoidInstantiatingObjectsInLoops",
   "PMD.ConstructorOnlyInitializesOrCallOtherConstructors"
 })
 public Href(final CharSequence txt) {
   this.params = new ConcurrentHashMap<String, List<String>>(0);
   final URI link = Href.createURI(txt.toString());
   final String query = link.getRawQuery();
   if (query == null) {
     this.uri = link;
   } else {
     final String href = link.toString();
     this.uri = URI.create(href.substring(0, href.length() - query.length() - 1));
     final String[] pairs = query.split("&");
     for (final String pair : pairs) {
       final String[] parts = pair.split("=", 2);
       final String key = Href.decode(parts[0]);
       final String value;
       if (parts.length > 1) {
         value = Href.decode(parts[1]);
       } else {
         value = "";
       }
       this.params.putIfAbsent(key, new LinkedList<String>());
       this.params.get(key).add(value);
     }
   }
 }
Example #2
0
 /**
  * Parses the specified content to create the corresponding {@code URI} instance. In case of an
  * {@code URISyntaxException}, it will automatically encode the character that causes the issue
  * then it will try again if it is possible otherwise an {@code IllegalArgumentException} will be
  * thrown.
  *
  * @param txt The content to parse
  * @return The {@code URI} corresponding to the specified content.
  * @throws IllegalArgumentException in case the content could not be parsed
  * @throws IllegalStateException in case an invalid character could not be encoded properly.
  */
 private static URI createURI(final String txt) {
   URI result;
   try {
     result = new URI(txt);
   } catch (final URISyntaxException ex) {
     final int index = ex.getIndex();
     if (index == -1) {
       throw new IllegalArgumentException(ex.getMessage(), ex);
     }
     final StringBuilder value = new StringBuilder(txt);
     value.replace(index, index + 1, Href.encode(value.substring(index, index + 1)));
     result = Href.createURI(value.toString());
   }
   return result;
 }
Example #3
0
 /**
  * Add this path to the URI.
  *
  * @param suffix The suffix
  * @return New HREF
  */
 public Href path(final Object suffix) {
   return new Href(
       URI.create(
           new StringBuilder(this.uri.toString().replaceAll("/$", ""))
               .append('/')
               .append(Href.encode(suffix.toString()))
               .toString()),
       this.params);
 }
Example #4
0
 @Override
 public String toString() {
   final StringBuilder text = new StringBuilder(this.bare());
   if (!this.params.isEmpty()) {
     boolean first = true;
     for (final Map.Entry<String, List<String>> ent : this.params.entrySet()) {
       for (final String value : ent.getValue()) {
         if (first) {
           text.append('?');
           first = false;
         } else {
           text.append('&');
         }
         text.append(Href.encode(ent.getKey()));
         if (!value.isEmpty()) {
           text.append('=').append(Href.encode(value));
         }
       }
     }
   }
   return text.toString();
 }