package co.codewizards.cloudstore.core.repo.local; import static co.codewizards.cloudstore.core.oio.OioFileFactory.*; import static co.codewizards.cloudstore.core.util.AssertUtil.*; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.UUID; import co.codewizards.cloudstore.core.oio.File; import co.codewizards.cloudstore.core.util.AssertUtil; public final class LocalRepoHelper { private LocalRepoHelper() { } /** * Gets the local root containing the given {@code file}. * <p> * If {@code file} itself is the root of a repository, it is returned directly. * <p> * If {@code file} is a directory or file inside the repository, the parent-directory * being the repository's root is returned. * <p> * If {@code file} is not contained in any repository, <code>null</code> is returned. * * @param file the directory or file for which to search the repository's local root. Must not be <code>null</code>. * @return the repository's local root. Is <code>null</code>, if {@code file} is not located inside a repository. */ public static File getLocalRootContainingFile(final File file) { File parentFile = AssertUtil.assertNotNull(file, "file"); while (parentFile != null) { final File parentMetaDir = createFile(parentFile, LocalRepoManager.META_DIR_NAME); if (parentMetaDir.exists()) return parentFile; parentFile = parentFile.getParentFile(); } return null; } public static Collection<File> getLocalRootsContainedInDirectory(File directory) { assertNotNull(directory, "directory"); directory = directory.getAbsoluteFile(); if (! directory.isDirectory()) return Collections.emptyList(); final String containerPath = directory.getPath() + java.io.File.separator; final List<File> result = new ArrayList<File>(); final LocalRepoRegistry localRepoRegistry = LocalRepoRegistryImpl.getInstance(); for (final UUID repositoryId : localRepoRegistry.getRepositoryIds()) { final File localRoot = localRepoRegistry.getLocalRoot(repositoryId); if (localRoot == null) continue; if (directory.equals(localRoot)) result.add(localRoot); else { final String localRootPath = localRoot.getAbsolutePath(); if (localRootPath.startsWith(containerPath)) result.add(localRoot); } } return Collections.unmodifiableList(result); } }