X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=dist%2Fhttp-resources%2F2.0.0%2Fxref%2Fde%2Fjuplo%2Fhttpresources%2FHttpResource.html;fp=dist%2Fhttp-resources%2F2.0.0%2Fxref%2Fde%2Fjuplo%2Fhttpresources%2FHttpResource.html;h=4c5ee19730bfddafca4814fa2e4243e5337e0f97;hb=96ec104e2974d001e9bc82c3af8b21029b2042d4;hp=0000000000000000000000000000000000000000;hpb=de1fa457a1c69c673d4dd5c0a2c9af568f74ea12;p=website diff --git a/dist/http-resources/2.0.0/xref/de/juplo/httpresources/HttpResource.html b/dist/http-resources/2.0.0/xref/de/juplo/httpresources/HttpResource.html new file mode 100644 index 00000000..4c5ee197 --- /dev/null +++ b/dist/http-resources/2.0.0/xref/de/juplo/httpresources/HttpResource.html @@ -0,0 +1,271 @@ + + + +HttpResource xref + + + +
View Javadoc
+1   package de.juplo.httpresources;
+2   
+3   import org.springframework.http.HttpHeaders;
+4   import org.springframework.util.MimeType;
+5   
+6   import java.io.*;
+7   import java.net.URI;
+8   import java.net.URL;
+9   import java.time.Clock;
+10  import java.util.Objects;
+11  
+12  
+13  public class HttpResource implements org.springframework.web.servlet.resource.HttpResource
+14  {
+15    final HttpResources resources;
+16    final HttpResourceFetcher fetcher;
+17    final Clock clock;
+18    final URI uri;
+19  
+20    HttpData data;
+21    boolean modified;
+22  
+23    HttpResource(
+24        HttpResources resources,
+25        HttpResourceFetcher fetcher,
+26        Clock clock,
+27        URI uri)
+28    {
+29      this(resources, fetcher, clock, uri, HttpData.NOT_FETCHED);
+30    }
+31  
+32    HttpResource(
+33          HttpResources resources,
+34          HttpResourceFetcher fetcher,
+35          Clock clock,
+36          URI uri,
+37          HttpData data)
+38      {
+39      this.resources = resources;
+40      this.fetcher = fetcher;
+41      this.clock = clock;
+42      this.uri = uri;
+43      this.data = data;
+44    }
+45  
+46  
+47    synchronized public long expires()
+48    {
+49      return data.expires;
+50    }
+51  
+52    synchronized public boolean isExpired()
+53    {
+54      return data.expires < clock.millis();
+55    }
+56  
+57    @Override
+58    synchronized public boolean exists()
+59    {
+60      if (isExpired())
+61        fetch();
+62      return data.content != null;
+63    }
+64  
+65    @Override
+66    synchronized public boolean isReadable()
+67    {
+68      return exists();
+69    }
+70  
+71    @Override
+72    public boolean isOpen()
+73    {
+74      return false;
+75    }
+76  
+77    @Override
+78    public URL getURL() throws IOException
+79    {
+80      return uri.toURL();
+81    }
+82  
+83    @Override
+84    public URI getURI()
+85    {
+86      return uri;
+87    }
+88  
+89    @Override
+90    public File getFile() throws IOException
+91    {
+92      throw new FileNotFoundException("The resource " + getDescription() + " cannot be retrived as file");
+93    }
+94  
+95    @Override
+96    synchronized public long contentLength() throws IOException
+97    {
+98      if (!fetched())
+99        fetch();
+100 
+101     if (data.content == null)
+102       throw new FileNotFoundException("The resource " + getDescription() + " cannot be retrived");
+103 
+104     return data.content.length;
+105   }
+106 
+107   synchronized public MimeType contentType()
+108   {
+109     return data.headers.getContentType();
+110   }
+111 
+112   @Override
+113   synchronized public long lastModified() throws IOException
+114   {
+115     if (!fetched())
+116       fetch();
+117 
+118     if (data.content == null)
+119       throw new FileNotFoundException("The resource " + getDescription() + " cannot be retrived");
+120 
+121     return data.lastModified;
+122   }
+123 
+124   synchronized public String eTag()
+125   {
+126     return data.eTag;
+127   }
+128 
+129   @Override
+130   public HttpResource createRelative(String relativePath) throws IOException
+131   {
+132     try
+133     {
+134       return createRelative(HttpResources.convert(relativePath));
+135     }
+136     catch (IllegalArgumentException e)
+137     {
+138       throw new IOException("Invalid relative path: " + relativePath, e);
+139     }
+140   }
+141 
+142   public HttpResource createRelative(URI relative) throws IOException
+143   {
+144     return resources.getResource(HttpResources.resolve(relative, uri));
+145   }
+146 
+147   @Override
+148   public String getFilename()
+149   {
+150     return uri.getPath();
+151   }
+152 
+153   @Override
+154   public String getDescription()
+155   {
+156     return "HTTP [" + this.uri + "]";
+157   }
+158 
+159   @Override
+160   synchronized public InputStream getInputStream() throws IOException
+161   {
+162     if (!fetched())
+163     {
+164       fetch();
+165     }
+166     else
+167     {
+168       isModified();
+169     }
+170 
+171     // Clear the modified-flag
+172     modified = false;
+173 
+174     if (data.content == null)
+175       throw new FileNotFoundException("The resource " + getDescription() + " cannot be retrived as file");
+176 
+177     return new ByteArrayInputStream(data.content);
+178   }
+179 
+180   synchronized public boolean isModified()
+181   {
+182     if (modified)
+183     {
+184       return true;
+185     }
+186 
+187     if (!isExpired())
+188     {
+189       return false;
+190     }
+191 
+192     return fetch();
+193   }
+194 
+195   /**
+196    * Checks, if the remote resource was already fetched.
+197    *
+198    * @return {@code true}, if the resource was already fetched, otherwise
+199    * {@code false}
+200    */
+201   synchronized public boolean fetched()
+202   {
+203     return data.expires != Long.MIN_VALUE;
+204   }
+205 
+206   /**
+207    * Fetches the remote resource and reports, if it was modified.
+208    * <p>
+209    * This method fetches the remote resource, if was not already fetched.
+210    * If the resource was already fetched, it revalidates it, if necessary.
+211    *
+212    * @return {@code true}, if the resource has changed or was fetched for
+213    * the first time, otherwise {@code false}
+214    */
+215   synchronized public boolean fetch()
+216   {
+217     HttpData result = fetcher.fetch(uri, data);
+218 
+219     // Flag the resource as modified, if the data has changed
+220     // Otherwise, keep the old state of the modified-flag.
+221     modified = !data.equals(result);
+222 
+223     data = result;
+224 
+225     return modified;
+226   }
+227 
+228   @Override
+229   synchronized public HttpHeaders getResponseHeaders()
+230   {
+231     return data.headers;
+232   }
+233 
+234 
+235   @Override
+236   public int hashCode()
+237   {
+238     return uri.hashCode();
+239   }
+240 
+241   @Override
+242   public boolean equals(Object o)
+243   {
+244     if (o == null)
+245       return false;
+246     if (o == this)
+247       return true;
+248     if (!(o instanceof HttpResource))
+249       return false;
+250     return Objects.equals(uri, ((HttpResource) o).uri);
+251   }
+252 
+253   @Override
+254   public String toString()
+255   {
+256     return getDescription();
+257   }
+258 }
+
+
+ + +