001package co.codewizards.cloudstore.client; 002 003import static co.codewizards.cloudstore.core.util.Util.*; 004 005import java.io.File; 006import java.util.Collection; 007 008import co.codewizards.cloudstore.core.dto.DateTime; 009import co.codewizards.cloudstore.core.repo.local.LocalRepoManager; 010import co.codewizards.cloudstore.core.repo.local.LocalRepoManagerFactory; 011import co.codewizards.cloudstore.core.repo.local.LocalRepoRegistry; 012import co.codewizards.cloudstore.core.repo.local.LocalRepoTransaction; 013import co.codewizards.cloudstore.core.util.HashUtil; 014import co.codewizards.cloudstore.local.persistence.CopyModificationDAO; 015import co.codewizards.cloudstore.local.persistence.DeleteModificationDAO; 016import co.codewizards.cloudstore.local.persistence.DirectoryDAO; 017import co.codewizards.cloudstore.local.persistence.NormalFileDAO; 018import co.codewizards.cloudstore.local.persistence.RemoteRepository; 019import co.codewizards.cloudstore.local.persistence.RemoteRepositoryDAO; 020import co.codewizards.cloudstore.local.persistence.RemoteRepositoryRequest; 021import co.codewizards.cloudstore.local.persistence.RemoteRepositoryRequestDAO; 022 023/** 024 * {@link SubCommand} implementation for showing information about a repository in the local file system. 025 * 026 * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de 027 */ 028public class RepoInfoSubCommand extends SubCommandWithExistingLocalRepo 029{ 030 public RepoInfoSubCommand() { } 031 032 protected RepoInfoSubCommand(File localRoot) { 033 this.localRoot = assertNotNull("localRoot", localRoot); 034 this.localFile = this.localRoot; 035 this.local = localRoot.getPath(); 036 } 037 038 @Override 039 public String getSubCommandDescription() { 040 return "Show information about an existing repository."; 041 } 042 043 @Override 044 public void run() throws Exception { 045 LocalRepoManager localRepoManager = LocalRepoManagerFactory.Helper.getInstance().createLocalRepoManagerForExistingRepository(localRoot); 046 try { 047 LocalRepoTransaction transaction = localRepoManager.beginReadTransaction(); 048 try { 049 showMainProperties(transaction); 050// showRepositoryAliases(transaction); 051 showRemoteRepositories(transaction); 052 showRemoteRepositoryRequests(transaction); 053 showRepositoryStats(transaction); 054 055 transaction.commit(); 056 } finally { 057 transaction.rollbackIfActive(); 058 } 059 } finally { 060 localRepoManager.close(); 061 } 062 } 063 064 private void showMainProperties(LocalRepoTransaction transaction) { 065 LocalRepoManager localRepoManager = transaction.getLocalRepoManager(); 066 Collection<String> repositoryAliases = LocalRepoRegistry.getInstance().getRepositoryAliasesOrFail(localRepoManager.getRepositoryId().toString()); 067 System.out.println("Local repository:"); 068 System.out.println(" repository.repositoryId = " + localRepoManager.getRepositoryId()); 069 System.out.println(" repository.localRoot = " + localRepoManager.getLocalRoot()); 070 System.out.println(" repository.aliases = " + repositoryAliases); 071 System.out.println(" repository.publicKeySha1 = " + HashUtil.sha1ForHuman(localRepoManager.getPublicKey())); 072 System.out.println(); 073 } 074 075// private void showRepositoryAliases(LocalRepoTransaction transaction) { 076// LocalRepoManager localRepoManager = transaction.getLocalRepoManager(); 077// Collection<String> repositoryAliases = LocalRepoRegistry.getInstance().getRepositoryAliasesOrFail(localRepoManager.getRepositoryId().toString()); 078// if (repositoryAliases.isEmpty()) 079// System.out.println("Aliases: {NONE}"); 080// else { 081// System.out.println("Aliases:"); 082// for (String repositoryAlias : repositoryAliases) 083// System.out.println(" * " + repositoryAlias); 084// } 085// System.out.println(); 086// } 087 088 private void showRemoteRepositories(LocalRepoTransaction transaction) { 089 Collection<RemoteRepository> remoteRepositories = transaction.getDAO(RemoteRepositoryDAO.class).getObjects(); 090 if (remoteRepositories.isEmpty()) { 091 System.out.println("Remote repositories connected: {NONE}"); 092 System.out.println(); 093 } 094 else { 095 System.out.println("Remote repositories connected:"); 096 for (RemoteRepository remoteRepository : remoteRepositories) { 097 System.out.println(" * remoteRepository.repositoryId = " + remoteRepository.getRepositoryId()); 098 if (remoteRepository.getRemoteRoot() != null) 099 System.out.println(" remoteRepository.remoteRoot = " + remoteRepository.getRemoteRoot()); 100 101 System.out.println(" remoteRepository.publicKeySha1 = " + HashUtil.sha1ForHuman(remoteRepository.getPublicKey())); 102 System.out.println(); 103 } 104 } 105 } 106 107 private void showRemoteRepositoryRequests(LocalRepoTransaction transaction) { 108 Collection<RemoteRepositoryRequest> remoteRepositoryRequests = transaction.getDAO(RemoteRepositoryRequestDAO.class).getObjects(); 109 if (remoteRepositoryRequests.isEmpty()) { 110 System.out.println("Remote repositories requesting connection: {NONE}"); 111 System.out.println(); 112 } 113 else { 114 System.out.println("Remote repositories requesting connection:"); 115 for (RemoteRepositoryRequest remoteRepositoryRequest : remoteRepositoryRequests) { 116 System.out.println(" * remoteRepositoryRequest.repositoryId = " + remoteRepositoryRequest.getRepositoryId()); 117 System.out.println(" remoteRepositoryRequest.publicKeySha1 = " + HashUtil.sha1ForHuman(remoteRepositoryRequest.getPublicKey())); 118 System.out.println(" remoteRepositoryRequest.created = " + new DateTime(remoteRepositoryRequest.getCreated())); 119 System.out.println(" remoteRepositoryRequest.changed = " + new DateTime(remoteRepositoryRequest.getChanged())); 120 System.out.println(); 121 } 122 } 123 } 124 125 private void showRepositoryStats(LocalRepoTransaction transaction) { 126 NormalFileDAO normalFileDAO = transaction.getDAO(NormalFileDAO.class); 127 DirectoryDAO directoryDAO = transaction.getDAO(DirectoryDAO.class); 128 CopyModificationDAO copyModificationDAO = transaction.getDAO(CopyModificationDAO.class); 129 DeleteModificationDAO deleteModificationDAO = transaction.getDAO(DeleteModificationDAO.class); 130 long normalFileCount = normalFileDAO.getObjectsCount(); 131 long directoryCount = directoryDAO.getObjectsCount(); 132 long copyModificationCount = copyModificationDAO.getObjectsCount(); 133 long deleteModificationCount = deleteModificationDAO.getObjectsCount(); 134 135 System.out.println("Statistics:"); 136 System.out.println(" * Count(NormalFile): " + normalFileCount); 137 System.out.println(" * Count(Directory): " + directoryCount); 138 System.out.println(" * Count(CopyModification): " + copyModificationCount); 139 System.out.println(" * Count(DeleteModification): " + deleteModificationCount); 140 System.out.println(); 141 } 142}