X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=dist%2Fhttp-resources%2F2.0.0%2Fxref%2Fde%2Fjuplo%2Fhttpresources%2FHttpResources.html;fp=dist%2Fhttp-resources%2F2.0.0%2Fxref%2Fde%2Fjuplo%2Fhttpresources%2FHttpResources.html;h=6d2a2b686b8472a96574a14c80cbfcd209cd56fc;hb=96ec104e2974d001e9bc82c3af8b21029b2042d4;hp=0000000000000000000000000000000000000000;hpb=de1fa457a1c69c673d4dd5c0a2c9af568f74ea12;p=website diff --git a/dist/http-resources/2.0.0/xref/de/juplo/httpresources/HttpResources.html b/dist/http-resources/2.0.0/xref/de/juplo/httpresources/HttpResources.html new file mode 100644 index 00000000..6d2a2b68 --- /dev/null +++ b/dist/http-resources/2.0.0/xref/de/juplo/httpresources/HttpResources.html @@ -0,0 +1,198 @@ + + + +HttpResources xref + + + +
View Javadoc
+1   package de.juplo.httpresources;
+2   
+3   
+4   import org.slf4j.Logger;
+5   import org.slf4j.LoggerFactory;
+6   import org.springframework.core.io.Resource;
+7   import org.springframework.util.Assert;
+8   
+9   import java.io.*;
+10  import java.net.URI;
+11  import java.net.URISyntaxException;
+12  import java.time.Clock;
+13  import java.util.regex.Pattern;
+14  
+15  
+16  /**
+17   *
+18   * @author Kai Moritz
+19   */
+20  public class HttpResources
+21  {
+22    private final static Logger LOG =
+23        LoggerFactory.getLogger(HttpResources.class);
+24    private final static Pattern RESOURCE_PATH_PATTERN =
+25        Pattern.compile("^http", Pattern.CASE_INSENSITIVE);
+26    private final static URI ABSOLUTE_PATH = URI.create("/");
+27  
+28  
+29    private final HttpResourceFetcher fetcher;
+30    private final Clock clock;
+31  
+32  
+33    public HttpResources(HttpResourceFetcher fetcher, Clock clock)
+34    {
+35      Assert.notNull(fetcher, "The HttpResourceFetcher must not be null");
+36      Assert.notNull(clock, "The Clock must not be null");
+37      this.fetcher = fetcher;
+38      this.clock = clock;
+39    }
+40  
+41  
+42    /**
+43     * @param uri the resource location (must be a valid <code>URI</code>)
+44     * @return the corresponding Resource handle (never {@code null})
+45     * @see {@link HttpResources#getResource(String)}
+46     */
+47    public HttpResource getResource(String uri)
+48    {
+49      return getResource(HttpResources.convert(uri));
+50    }
+51  
+52    /**
+53     * Returns the {@link HttpResource}, that represents the given {@link URI}.
+54  	 * <p>Note that a Resource handle does not imply an existing resource;
+55  	 * you need to invoke {@link Resource#exists} to check for existence.
+56  	 * @param uri the resource location, represented as an {@link URI}
+57  	 * @return the corresponding Resource handle (never {@code null})
+58     */
+59    public HttpResource getResource(URI uri)
+60    {
+61      HttpData data = fetcher.fetch(uri, HttpData.NOT_FETCHED);
+62      return new HttpResource(this, fetcher, clock, uri, data);
+63    }
+64  
+65  
+66    public static URI convert(String url)
+67    {
+68      return HttpResources.normalize(URI.create(url));
+69    }
+70  
+71    public static URI normalize(URI uri)
+72    {
+73      uri = uri.normalize();
+74  
+75      // An URI is opaque, if it is absolute and the scheme-specific part does
+76      // not start with a slash. A HTTP-URL cannot be opaque in this meaning!
+77      if (uri.isOpaque())
+78        throw new IllegalArgumentException("An opaque URI is no valid HTTP-URL: " + uri);
+79  
+80      String scheme = null;
+81      if (uri.isAbsolute())
+82      {
+83        // Enforce scheme "HTTP" or "HTTPS"
+84        switch (uri.getScheme().toLowerCase())
+85        {
+86          case "http":
+87            scheme = "http";
+88            break;
+89          case "https":
+90            scheme = "https";
+91            break;
+92          default:
+93            throw new IllegalArgumentException("Unallowed scheme: " + uri);
+94        }
+95      }
+96  
+97      String host = uri.getHost();
+98      String path = uri.getRawPath();
+99  
+100     if (host == null)
+101     {
+102       if (scheme != null)
+103         throw new IllegalArgumentException("Host is missing, although scheme is not empty: " + scheme);
+104     }
+105     else
+106     {
+107       host = host.toLowerCase();
+108       path = path == null || path.isEmpty() ? "/" : path;
+109     }
+110 
+111     try
+112     {
+113       return new URI(
+114           scheme,
+115           uri.getUserInfo(),
+116           host,
+117           uri.getPort(),
+118           path,
+119           uri.getQuery(),
+120           uri.getFragment()
+121           );
+122     }
+123     catch (URISyntaxException e)
+124     {
+125       throw new IllegalArgumentException("Invalid HTTP-URL: ", e);
+126     }
+127   }
+128 
+129   public static URI resolve(URI relative, URI uri) throws IOException
+130   {
+131     if (relative.getAuthority() != null)
+132       throw new IOException("URI is not relative: " + relative);
+133 
+134     URI cleaned;
+135     try
+136     {
+137       String path = relative.getRawPath();
+138       int length = path == null ? -1 : path.length();
+139       int i = 0;
+140 
+141       while (i < length)
+142       {
+143         switch (path.charAt(i))
+144         {
+145           case '.':
+146           case '/':
+147             i++;
+148             break;
+149           default:
+150             length = -1;
+151         }
+152       }
+153 
+154       cleaned = i > 0
+155               ? new URI(
+156               null,
+157               null,
+158               null,
+159               0,
+160               i == path.length() ? null : path.substring(i),
+161               relative.getQuery(),
+162               relative.getFragment()
+163       )
+164               : relative;
+165 
+166       path = uri.getPath();
+167       if (path == null || path.length() == 0)
+168         uri = uri.resolve(ABSOLUTE_PATH);
+169     }
+170     catch (URISyntaxException e)
+171     {
+172       throw new IOException("Invalid relative path: " + relative, e);
+173     }
+174 
+175     URI resolved = uri.resolve(cleaned);
+176     LOG.trace("resolved {} as {} in context {}", relative, resolved, uri);
+177     return resolved;
+178   }
+179 
+180 
+181   public static boolean isHttpResource(String resourcePath)
+182   {
+183     return RESOURCE_PATH_PATTERN.matcher(resourcePath).find();
+184   }
+185 }
+
+
+ + +