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}