001package dk.netarkivet.archive.tools; 002 003import java.io.File; 004import java.io.IOException; 005import java.util.Collection; 006 007import org.apache.commons.io.FileUtils; 008 009import dk.netarkivet.archive.arcrepositoryadmin.Admin; 010import dk.netarkivet.archive.arcrepositoryadmin.AdminFactory; 011import dk.netarkivet.common.distribute.Channels; 012import dk.netarkivet.common.distribute.arcrepository.Replica; 013import dk.netarkivet.common.distribute.arcrepository.ReplicaStoreState; 014import dk.netarkivet.common.utils.KeyValuePair; 015import dk.netarkivet.common.utils.batch.ChecksumJob; 016 017/** 018 * Creates the admin database from scratch using a file in the checksum archive format: filename##checksum 019 * It assumes that every file is in state UPLOAD_COMPLETED in every replica. Before running this tool, 020 * manually delete all file and replicafileinfo entries in the database. 021 */ 022public class CreateAdminDatabase { 023 024 public static void main(String[] args) throws IOException { 025 File checksumFile = new File(args[0]); 026 Admin admin = AdminFactory.getInstance(); 027 Collection<Replica> replicas = Replica.getKnown(); 028 for (String line: FileUtils.readLines(checksumFile) ) { 029 KeyValuePair<String, String> parsedLine = ChecksumJob.parseLine(line); 030 String filename = parsedLine.getKey(); 031 String checksum = parsedLine.getValue(); 032 admin.addEntry(filename, null, checksum); 033 for (Replica replica: replicas) { 034 admin.setState(filename, Channels.retrieveReplicaChannelNameFromReplicaId(replica.getId()), ReplicaStoreState.UPLOAD_COMPLETED); 035 } 036 } 037 } 038}