Package org.syncany.operations.down
Class DatabaseFileReader
- java.lang.Object
-
- org.syncany.operations.down.DatabaseFileReader
-
- All Implemented Interfaces:
java.util.Iterator<MemoryDatabase>
public class DatabaseFileReader extends java.lang.Object implements java.util.Iterator<MemoryDatabase>
The DatabaseFileReader provides a way to read a series of database files in a memory-efficient way, by converting them to a series of MemoryDatabases, none of which are too large.
-
-
Constructor Summary
Constructors Constructor Description DatabaseFileReader(DatabaseXmlSerializer databaseSerializer, DatabaseBranch winnersApplyBranch, java.util.Map<DatabaseVersionHeader,java.io.File> databaseVersionLocations)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
hasNext()
MemoryDatabase
next()
Loads the winner's database branch into the memory in aMemoryDatabase
object, by using the already downloaded list of remote database files.void
remove()
-
-
-
Constructor Detail
-
DatabaseFileReader
public DatabaseFileReader(DatabaseXmlSerializer databaseSerializer, DatabaseBranch winnersApplyBranch, java.util.Map<DatabaseVersionHeader,java.io.File> databaseVersionLocations)
-
-
Method Detail
-
hasNext
public boolean hasNext()
- Specified by:
hasNext
in interfacejava.util.Iterator<MemoryDatabase>
-
next
public MemoryDatabase next()
Loads the winner's database branch into the memory in aMemoryDatabase
object, by using the already downloaded list of remote database files.Because database files can contain multiple
DatabaseVersion
s per client, a range for which to load the database versions must be determined.Example 1:
db-A-0001 (A1) Already known Not loaded db-A-0005 (A2) Already known Not loaded (A3) Already known Not loaded (A4) Part of winner's branch Loaded (A5) Purge database version Ignored (only DEFAULT) db-B-0001 (A5,B1) Part of winner's branch Loaded db-A-0006 (A6,B1) Part of winner's branch Loaded
In example 1, only (A4)-(A5) must be loaded from db-A-0005, and not all four database versions.
Other example:
db-A-0005 (A1) Part of winner's branch Loaded db-A-0005 (A2) Part of winner's branch Loaded db-B-0001 (A2,B1) Part of winner's branch Loaded db-A-0005 (A3,B1) Part of winner's branch Loaded db-A-0005 (A4,B1) Part of winner's branch Loaded db-A-0005 (A5,B1) Purge database version Ignored (only DEFAULT)
In example 2, (A1)-(A5,B1) [except (A2,B1)] are contained in db-A-0005 (after merging!), so db-A-0005 must be processed twice; each time loading separate parts of the file. In this case: First load (A1)-(A2) from db-A-0005, then load (A2,B1) from db-B-0001, then load (A3,B1)-(A4,B1) from db-A-0005, and ignore (A5,B1).
- Specified by:
next
in interfacejava.util.Iterator<MemoryDatabase>
- Returns:
- Returns a loaded memory database containing all metadata from the winner's branch
-
remove
public void remove()
- Specified by:
remove
in interfacejava.util.Iterator<MemoryDatabase>
-
-