001package co.codewizards.cloudstore.local.persistence;
002
003import java.util.ArrayList;
004import java.util.Collection;
005import java.util.HashMap;
006import java.util.Map;
007import java.util.UUID;
008
009import javax.jdo.Query;
010
011import org.slf4j.Logger;
012import org.slf4j.LoggerFactory;
013
014import co.codewizards.cloudstore.core.repo.transport.TransferDoneMarkerType;
015import co.codewizards.cloudstore.core.util.AssertUtil;
016
017public class TransferDoneMarkerDao extends Dao<TransferDoneMarker, TransferDoneMarkerDao> {
018        private static final Logger logger = LoggerFactory.getLogger(TransferDoneMarkerDao.class);
019
020        public TransferDoneMarker getTransferDoneMarker(final UUID fromRepositoryId, final UUID toRepositoryId, final TransferDoneMarkerType transferDoneMarkerType, final long fromEntityId) {
021                AssertUtil.assertNotNull(fromRepositoryId, "fromRepositoryId");
022                AssertUtil.assertNotNull(toRepositoryId, "toRepositoryId");
023                AssertUtil.assertNotNull(transferDoneMarkerType, "transferDoneMarkerType");
024                final Query query = pm().newNamedQuery(getEntityClass(), "getTransferDoneMarker_fromRepositoryId_toRepositoryId_transferDoneMarkerType_fromEntityId");
025                try {
026                        final Map<String, Object> m = new HashMap<String, Object>(4);
027                        m.put("fromRepositoryId", fromRepositoryId.toString());
028                        m.put("toRepositoryId", toRepositoryId.toString());
029                        m.put("transferDoneMarkerType", transferDoneMarkerType);
030                        m.put("fromEntityId", fromEntityId);
031                        final TransferDoneMarker result = (TransferDoneMarker) query.executeWithMap(m);
032                        return result;
033                } finally {
034                        query.closeAll();
035                }
036        }
037
038        public Collection<TransferDoneMarker> getRepoFileTransferDones(final UUID fromRepositoryId, final UUID toRepositoryId) {
039                AssertUtil.assertNotNull(fromRepositoryId, "fromRepositoryId");
040                AssertUtil.assertNotNull(toRepositoryId, "toRepositoryId");
041                final Query query = pm().newNamedQuery(getEntityClass(), "getTransferDoneMarkers_fromRepositoryId_toRepositoryId");
042                try {
043                        long startTimestamp = System.currentTimeMillis();
044                        @SuppressWarnings("unchecked")
045                        Collection<TransferDoneMarker> result = (Collection<TransferDoneMarker>) query.execute(
046                                        fromRepositoryId.toString(), toRepositoryId.toString());
047                        logger.debug("getRepoFileTransferDones: query.execute(...) took {} ms.", System.currentTimeMillis() - startTimestamp);
048
049                        startTimestamp = System.currentTimeMillis();
050                        result = load(result);
051                        logger.debug("getRepoFileTransferDones: Loading result-set with {} elements took {} ms.", result.size(), System.currentTimeMillis() - startTimestamp);
052
053                        return result;
054                } finally {
055                        query.closeAll();
056                }
057        }
058
059        public void deleteRepoFileTransferDones(final UUID fromRepositoryId, final UUID toRepositoryId) {
060                final Collection<TransferDoneMarker> transferDoneMarkers = getRepoFileTransferDones(fromRepositoryId, toRepositoryId);
061                deletePersistentAll(transferDoneMarkers);
062        }
063
064        @Override
065        protected Collection<TransferDoneMarker> load(final Collection<TransferDoneMarker> entities) {
066                // no sub-classes => no need for real load method
067                return new ArrayList<>(entities);
068        }
069}