001package co.codewizards.cloudstore.local; 002 003import static co.codewizards.cloudstore.core.oio.OioFileFactory.*; 004import static java.util.Objects.*; 005 006import java.io.IOException; 007import java.util.HashMap; 008import java.util.Map; 009import java.util.Properties; 010import java.util.UUID; 011 012import co.codewizards.cloudstore.core.oio.File; 013import co.codewizards.cloudstore.core.repo.local.LocalRepoManager; 014import co.codewizards.cloudstore.core.util.PropertiesUtil; 015 016public class PersistencePropertiesProvider { 017 018 private final UUID repositoryId; 019 private final File localRoot; 020 021 public PersistencePropertiesProvider(final UUID repositoryId, final File localRoot) { 022 this.repositoryId = requireNonNull(repositoryId, "repositoryId"); 023 this.localRoot = requireNonNull(localRoot, "localRoot"); 024 if (!localRoot.isDirectory()) 025 throw new IllegalArgumentException("The given localRoot is not an existing directory: " + localRoot.getAbsolutePath()); 026 } 027 private File getMetaDir() { 028 return createFile(localRoot, LocalRepoManager.META_DIR_NAME); 029 } 030 031 public Map<String, String> getPersistenceProperties() { 032 final File metaDirectory = getMetaDir(); 033 if (!metaDirectory.isDirectory()) 034 throw new IllegalStateException("The localRoot does not contain the meta-directory: " + metaDirectory.getAbsolutePath()); 035 036 final File persistencePropertiesFile = createFile(metaDirectory, LocalRepoManager.PERSISTENCE_PROPERTIES_FILE_NAME); 037 if (!persistencePropertiesFile.isFile()) 038 throw new IllegalStateException("The persistencePropertiesFile does not exist or is not a file: " + persistencePropertiesFile.getAbsolutePath()); 039 040 final Map<String, Object> variablesMap = new HashMap<>(); 041 variablesMap.put(LocalRepoManager.VAR_REPOSITORY_ID, repositoryId); 042 variablesMap.put(LocalRepoManager.VAR_LOCAL_ROOT, localRoot.getPath()); 043 variablesMap.put(LocalRepoManager.VAR_META_DIR, getMetaDir().getPath()); 044 045 Properties rawProperties; 046 try { 047 rawProperties = PropertiesUtil.load(persistencePropertiesFile); 048 } catch (final IOException e) { 049 throw new RuntimeException(e); 050 } 051 final Map<String, String> persistenceProperties = PropertiesUtil.filterProperties(rawProperties, variablesMap); 052// final String connectionURL = persistenceProperties.get(PersistencePropertiesEnum.CONNECTION_URL.key); 053// persistenceProperties.put(PersistencePropertiesEnum.CONNECTION_URL_ORIGINAL.key, connectionURL); 054 055// if (createRepository) { 056// modifyConnectionURLForCreate(persistenceProperties); 057// } 058 return persistenceProperties; 059 } 060 061// private void modifyConnectionURLForCreate(final Map<String, String> persistenceProperties) { 062// final String value = persistenceProperties.get(PersistencePropertiesEnum.CONNECTION_URL.key); 063// if (value == null || value.trim().isEmpty()) { 064// throw new RepositoryCorruptException(localRoot, 065// String.format("Property '%s' missing in '%s'.", PersistencePropertiesEnum.CONNECTION_URL.key, LocalRepoManager.PERSISTENCE_PROPERTIES_FILE_NAME)); 066// } 067// 068// final String newValue = value.trim() + ";create=true"; 069// persistenceProperties.put(PersistencePropertiesEnum.CONNECTION_URL.key, newValue); 070// } 071}