package co.codewizards.cloudstore.local.persistence; import java.util.Collection; import javax.jdo.Query; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import co.codewizards.cloudstore.core.util.AssertUtil; public class ModificationDao extends Dao<Modification, ModificationDao> { private static final Logger logger = LoggerFactory.getLogger(ModificationDao.class); /** * Gets those {@link Modification}s being assigned to the given {@link Modification#getRemoteRepository() remoteRepository} * whose {@link Modification#getLocalRevision() localRevision} is greater than the given {@code localRevision}. * @param remoteRepository the {@link Modification#getRemoteRepository() remoteRepository} the queried modifications are assigned to. * @param localRevision the {@link Modification#getLocalRevision() localRevision}, after which the modifications * to be queried where created. * @return those {@link Modification}s matching the given criteria. Never <code>null</code>, but maybe empty. */ public Collection<Modification> getModificationsAfter(final RemoteRepository remoteRepository, final long localRevision) { AssertUtil.assertNotNull(remoteRepository, "remoteRepository"); final Query query = pm().newNamedQuery(getEntityClass(), "getModificationsAfter_remoteRepository_localRevision"); try { long startTimestamp = System.currentTimeMillis(); @SuppressWarnings("unchecked") Collection<Modification> modifications = (Collection<Modification>) query.execute(remoteRepository, localRevision); logger.debug("getModificationsAfter: query.execute(...) took {} ms.", System.currentTimeMillis() - startTimestamp); startTimestamp = System.currentTimeMillis(); modifications = load(modifications); logger.debug("getModificationsAfter: Loading result-set with {} elements took {} ms.", modifications.size(), System.currentTimeMillis() - startTimestamp); return modifications; } finally { query.closeAll(); } } public Collection<Modification> getModificationsBeforeOrEqual(final RemoteRepository remoteRepository, final long localRevision) { AssertUtil.assertNotNull(remoteRepository, "remoteRepository"); final Query query = pm().newNamedQuery(getEntityClass(), "getModificationsBeforeOrEqual_remoteRepository_localRevision"); try { long startTimestamp = System.currentTimeMillis(); @SuppressWarnings("unchecked") Collection<Modification> modifications = (Collection<Modification>) query.execute(remoteRepository, localRevision); logger.debug("getModificationsBeforeOrEqual: query.execute(...) took {} ms.", System.currentTimeMillis() - startTimestamp); startTimestamp = System.currentTimeMillis(); modifications = load(modifications); logger.debug("getModificationsBeforeOrEqual: Loading result-set with {} elements took {} ms.", modifications.size(), System.currentTimeMillis() - startTimestamp); return modifications; } finally { query.closeAll(); } } /** * Gets all {@link Modification}s being assigned to the given {@link Modification#getRemoteRepository() remoteRepository}. * @param remoteRepository the {@link Modification#getRemoteRepository() remoteRepository} the queried modifications are assigned to. * @return those {@link Modification}s matching the given criteria. Never <code>null</code>, but maybe empty. */ public Collection<Modification> getModifications(final RemoteRepository remoteRepository) { return getModificationsAfter(remoteRepository, -1); } }