package dk.kb.yggdrasil.bitmag;
import java.io.File;
import java.util.UUID;
import org.bitrepository.bitrepositoryelements.ChecksumDataForFileTYPE;
import org.bitrepository.bitrepositoryelements.ChecksumSpecTYPE;
import org.bitrepository.bitrepositoryelements.ChecksumType;
import org.bitrepository.common.utils.Base16Utils;
import org.bitrepository.common.utils.CalendarUtils;
import org.bitrepository.common.utils.ChecksumUtils;
import dk.kb.yggdrasil.exceptions.ArgumentCheck;
import dk.kb.yggdrasil.utils.HostName;
/** Utilities used by the Bitrepository class. */
public class BitrepositoryUtils {
/**
* Creates the data structure for encapsulating the validation checksums for validation of the PutFile operation.
* @param file The file to have the checksum calculated.
* @param csSpec A given ChecksumSpecTYPE
* @return The ChecksumDataForFileTYPE for the pillars to validate the PutFile operation.
*/
public static ChecksumDataForFileTYPE getValidationChecksum(File file, ChecksumSpecTYPE csSpec) {
ArgumentCheck.checkExistsNormalFile(file, "File file");
ArgumentCheck.checkNotNull(csSpec, "ChecksumSpecTYPE csSpec");
String checksum = ChecksumUtils.generateChecksum(file, csSpec);
ChecksumDataForFileTYPE res = new ChecksumDataForFileTYPE();
res.setCalculationTimestamp(CalendarUtils.getNow());
res.setChecksumSpec(csSpec);
res.setChecksumValue(Base16Utils.encodeBase16(checksum));
return res;
}
/**
* Specify a checksum.
* @param checksumtype a given type of checksum
* @param salt A string to salt the checksum with (if null, no salting)
* @return The requested checksum spec
*/
public static ChecksumSpecTYPE getRequestChecksumSpec(ChecksumType checksumtype, String salt) {
ChecksumSpecTYPE res = new ChecksumSpecTYPE();
res.setChecksumType(checksumtype);
if (salt != null) {
res.setChecksumSalt(Base16Utils.encodeBase16(salt));
}
return res;
}
/**
* Generates a component id, which includes the hostname and a random UUID.
* @return The Bitrepository component id for this instance of Yggdrasil.
*/
public static String generateComponentID() {
HostName hostname = new HostName();
String hn = hostname.getHostName();
return "YggdrasilClient-" + hn + "-" + UUID.randomUUID();
}
}