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