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}