001package co.codewizards.cloudstore.local.persistence; 002 003import static co.codewizards.cloudstore.core.util.AssertUtil.*; 004import static co.codewizards.cloudstore.core.util.HashUtil.*; 005 006import java.util.Collection; 007import java.util.HashMap; 008import java.util.Map; 009import java.util.UUID; 010 011import javax.jdo.Query; 012 013import org.slf4j.Logger; 014import org.slf4j.LoggerFactory; 015 016 017/** 018 * 019 * @author Sebastian Schefczyk 020 */ 021public class FileInProgressMarkerDao extends Dao<FileInProgressMarker, FileInProgressMarkerDao> { 022 023 private static final Logger logger = LoggerFactory.getLogger(FileInProgressMarkerDao.class); 024 025 public Collection<FileInProgressMarker> getFileInProgressMarkers(final UUID fromRepository, final UUID toRepository) { 026 final Query query = pm().newNamedQuery(getEntityClass(), "getFileInProgressMarkers_fromRepositoryId_toRepositoryId"); 027 try { 028 @SuppressWarnings("unchecked") 029 final Collection<FileInProgressMarker> fileInProgressMarkers = (Collection<FileInProgressMarker>) query.execute(convertToString(fromRepository), 030 convertToString(toRepository)); 031 return load(fileInProgressMarkers); 032 } finally { 033 query.closeAll(); 034 } 035 } 036 037 /** 038 * @return <code>null</code> if none was found. 039 */ 040 public FileInProgressMarker getFileInProgressMarker(final UUID fromRepositoryId, final UUID toRepositoryId, final String path) { 041 assertNotNull(fromRepositoryId, "fromRepositoryId"); 042 assertNotNull(toRepositoryId, "toRepositoryId"); 043 assertNotNull(path, "path"); 044 final String pathSha1 = sha1(path); 045 final Query query = pm().newNamedQuery(getEntityClass(), "getFileInProgressMarker_fromRepositoryId_toRepositoryId_pathSha1"); 046 try { 047 final Map<String, Object> m = new HashMap<String, Object>(3); 048 m.put("fromRepositoryId", fromRepositoryId.toString()); 049 m.put("toRepositoryId", toRepositoryId.toString()); 050 m.put("pathSha1", pathSha1); 051 final FileInProgressMarker result = (FileInProgressMarker) query.executeWithMap(m); 052 return result; 053 } finally { 054 query.closeAll(); 055 } 056 } 057 058 public void deleteFileInProgressMarkers(final UUID fromRepositoryId, final UUID toRepositoryId) { 059 final Collection<FileInProgressMarker> fileInProgressMarkers = getFileInProgressMarkers(fromRepositoryId, toRepositoryId); 060 if (fileInProgressMarkers.size() > 0) { 061 logger.info("deleteFileInProgressMarkers: deleting {} FileInProgressMarker(s) from={}, to={}", fileInProgressMarkers.size(), 062 fromRepositoryId, toRepositoryId); 063 deletePersistentAll(fileInProgressMarkers); 064 } 065 } 066 067 static UUID convertToUuid(final String repositoryId) { 068 return repositoryId == null ? null : UUID.fromString(repositoryId); 069 } 070 071 static String convertToString(final UUID repositoryId) { 072 return repositoryId == null ? null : repositoryId.toString(); 073 } 074}