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}