Class IndexReader

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, java.lang.Iterable<ChunkReader>

    public class IndexReader
    extends java.lang.Object
    implements java.lang.Iterable<ChunkReader>, java.io.Closeable
    Maven 2 Index reader that handles incremental updates if possible and provides one or more ChunkReaders, to read all the required records.
    Since:
    5.1.2
    • Field Detail

      • localIndexProperties

        private final java.util.Properties localIndexProperties
      • remoteIndexProperties

        private final java.util.Properties remoteIndexProperties
      • indexId

        private final java.lang.String indexId
      • publishedTimestamp

        private final java.util.Date publishedTimestamp
      • incremental

        private final boolean incremental
      • chunkNames

        private final java.util.List<java.lang.String> chunkNames
    • Method Detail

      • getIndexId

        public java.lang.String getIndexId()
        Returns the index context ID that published index has set. Usually it is equal to "repository ID" used in Record.Type.DESCRIPTOR but does not have to be.
      • getPublishedTimestamp

        public java.util.Date getPublishedTimestamp()
        Returns the Date when remote index was last published.
      • isIncremental

        public boolean isIncremental()
        Returns true if incremental update is about to happen. If incremental update, the iterator() will return only the diff from the last update.
      • getChunkNames

        public java.util.List<java.lang.String> getChunkNames()
        Returns unmodifiable list of actual chunks that needs to be pulled from remote ResourceHandler. Those are incremental chunks or the big main file, depending on result of isIncremental(). Empty list means local index is up to date, and iterator() will return empty iterator.
      • close

        public void close()
                   throws java.io.IOException
        Closes the underlying ResourceHandlers. In case of incremental update use, it also assumes that user consumed all the iterator and integrated it, hence, it will update the WritableResourceHandler contents to prepare it for future incremental update. If this is not desired (ie. due to aborted update), then this method should NOT be invoked, but rather the ResourceHandlers that caller provided in constructor of this class should be closed manually.
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Throws:
        java.io.IOException
      • iterator

        public java.util.Iterator<ChunkReader> iterator()
        Returns an Iterator of ChunkReaders, that if read in sequence, provide all the (incremental) updates from the index. It is caller responsibility to either consume fully this iterator, or to close current ChunkReader if aborting.
        Specified by:
        iterator in interface java.lang.Iterable<ChunkReader>
      • syncLocalWithRemote

        private void syncLocalWithRemote()
                                  throws java.io.IOException
        Stores the remote index properties into local index properties, preparing local WritableResourceHandler for future incremental updates.
        Throws:
        java.io.IOException
      • calculateChunkNames

        private java.util.List<java.lang.String> calculateChunkNames()
        Calculates the chunk names that needs to be fetched.
      • canRetrieveAllChunks

        private boolean canRetrieveAllChunks()
        Verifies incremental update is possible, as all the diff chunks we need are still enlisted in remote properties.