001package co.codewizards.cloudstore.local.persistence; 002 003import static co.codewizards.cloudstore.core.util.HashUtil.*; 004import static co.codewizards.cloudstore.core.util.Util.*; 005 006import java.net.URL; 007import java.util.Collection; 008import java.util.UUID; 009 010import javax.jdo.Query; 011 012import co.codewizards.cloudstore.core.util.UrlUtil; 013 014public class RemoteRepositoryDAO extends DAO<RemoteRepository, RemoteRepositoryDAO> { 015 public RemoteRepository getRemoteRepository(UUID repositoryId) { 016 assertNotNull("repositoryId", repositoryId); 017 Query query = pm().newNamedQuery(getEntityClass(), "getRemoteRepository_repositoryId"); 018 try { 019 RemoteRepository remoteRepository = (RemoteRepository) query.execute(repositoryId.toString()); 020 return remoteRepository; 021 } finally { 022 query.closeAll(); 023 } 024 } 025 026 public RemoteRepository getRemoteRepository(URL remoteRoot) { 027 assertNotNull("remoteRoot", remoteRoot); 028 remoteRoot = UrlUtil.canonicalizeURL(remoteRoot); 029 Query query = pm().newNamedQuery(getEntityClass(), "getRemoteRepository_remoteRootSha1"); 030 try { 031 String remoteRootSha1 = sha1(remoteRoot.toExternalForm()); 032 RemoteRepository remoteRepository = (RemoteRepository) query.execute(remoteRootSha1); 033 return remoteRepository; 034 } finally { 035 query.closeAll(); 036 } 037 } 038 039 public RemoteRepository getRemoteRepositoryOrFail(UUID repositoryId) { 040 RemoteRepository remoteRepository = getRemoteRepository(repositoryId); 041 if (remoteRepository == null) 042 throw new IllegalArgumentException(String.format( 043 "There is no RemoteRepository with repositoryId='%s'!", 044 repositoryId)); 045 046 return remoteRepository; 047 } 048 049 public RemoteRepository getRemoteRepositoryOrFail(URL remoteRoot) { 050 RemoteRepository remoteRepository = getRemoteRepository(remoteRoot); 051 if (remoteRepository == null) 052 throw new IllegalArgumentException(String.format( 053 "There is no RemoteRepository with remoteRoot='%s'!", 054 UrlUtil.canonicalizeURL(remoteRoot))); 055 056 return remoteRepository; 057 } 058 059 @Override 060 public void deletePersistent(RemoteRepository entity) { 061 assertNotNull("entity", entity); 062 deleteDependentObjects(entity); 063 pm().flush(); 064 super.deletePersistent(entity); 065 } 066 067 @Override 068 public void deletePersistentAll(Collection<? extends RemoteRepository> entities) { 069 assertNotNull("entities", entities); 070 for (RemoteRepository remoteRepository : entities) { 071 deleteDependentObjects(remoteRepository); 072 } 073 pm().flush(); 074 super.deletePersistentAll(entities); 075 } 076 077 protected void deleteDependentObjects(RemoteRepository remoteRepository) { 078 assertNotNull("remoteRepository", remoteRepository); 079 080 final ModificationDAO modificationDAO = getDAO(ModificationDAO.class); 081 modificationDAO.deletePersistentAll(modificationDAO.getModifications(remoteRepository)); 082 083 final LastSyncToRemoteRepoDAO lastSyncToRemoteRepoDAO = getDAO(LastSyncToRemoteRepoDAO.class); 084 LastSyncToRemoteRepo lastSyncToRemoteRepo = lastSyncToRemoteRepoDAO.getLastSyncToRemoteRepo(remoteRepository); 085 if (lastSyncToRemoteRepo != null) 086 lastSyncToRemoteRepoDAO.deletePersistent(lastSyncToRemoteRepo); 087 } 088 089}