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}