diff --git a/src/main/java/com/scaler/lld/design/assignments/builder/DatabaseConfigurationBuilder.java b/src/main/java/com/scaler/lld/design/assignments/builder/DatabaseConfigurationBuilder.java index 592aa32..6451884 100644 --- a/src/main/java/com/scaler/lld/design/assignments/builder/DatabaseConfigurationBuilder.java +++ b/src/main/java/com/scaler/lld/design/assignments/builder/DatabaseConfigurationBuilder.java @@ -2,5 +2,66 @@ @WithBuilder public class DatabaseConfigurationBuilder { + private String databaseUrl; + private String username; + private String password; + private int maxConnections; + private boolean enableCache; + private boolean isReadOnly; + + //step 1:hide the constructor + private DatabaseConfigurationBuilder(){ + + } + + public static DBConfigBuilder BuildDBConfiguration(){ + return new DBConfigBuilder(); + } + + public static class DBConfigBuilder{ + private DatabaseConfigurationBuilder instance; + + public DBConfigBuilder( ){ + + this.instance = new DatabaseConfigurationBuilder(); + } + + public DBConfigBuilder WithDatabaseUrl(String url){ + this.instance.databaseUrl = url; + return this; + } + + public DBConfigBuilder WithUsername(String usrname){ + this.instance.username = usrname; + return this; + } + + public DBConfigBuilder WithPassword(String passwd){ + this.instance.password = passwd; + return this; + } + + public DBConfigBuilder WithMaxConnections(int connections){ + this.instance.maxConnections = connections; + return this; + } + + public DBConfigBuilder enableCache(boolean canEnable){ + this.instance.enableCache = canEnable; + return this; + } + + public DBConfigBuilder isReadOnly(boolean isReadOnly){ + this.instance.isReadOnly = isReadOnly; + return this; + } + + public DatabaseConfigurationBuilder build(){ + return instance; + } + + + + } } \ No newline at end of file diff --git a/src/main/java/com/scaler/lld/design/assignments/singleton/FileBasedConfigurationManagerImpl.java b/src/main/java/com/scaler/lld/design/assignments/singleton/FileBasedConfigurationManagerImpl.java index 15470fc..2ad2d82 100644 --- a/src/main/java/com/scaler/lld/design/assignments/singleton/FileBasedConfigurationManagerImpl.java +++ b/src/main/java/com/scaler/lld/design/assignments/singleton/FileBasedConfigurationManagerImpl.java @@ -1,50 +1,65 @@ package com.scaler.lld.design.assignments.singleton; +import java.util.Optional; + public class FileBasedConfigurationManagerImpl extends FileBasedConfigurationManager { + private static FileBasedConfigurationManagerImpl instance = null; + + private FileBasedConfigurationManagerImpl(){ + + } + + @Override public String getConfiguration(String key) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'getConfiguration'"); + return getProperties().getProperty(key); } @Override public T getConfiguration(String key, Class type) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'getConfiguration'"); + String value = getProperties().getProperty(key); + Optional checkNull = Optional.ofNullable(value); + if(checkNull.isPresent()) + return convert(value,type); + else + return null; } @Override public void setConfiguration(String key, String value) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'setConfiguration'"); + + getProperties().setProperty(key,value); } @Override public void setConfiguration(String key, T value) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'setConfiguration'"); + getProperties().setProperty(key,value.toString()); } @Override public void removeConfiguration(String key) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'removeConfiguration'"); + getProperties().remove(key); } @Override public void clear() { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'clear'"); + getProperties().clear(); } public static FileBasedConfigurationManager getInstance() { - // TODO Auto-generated method stub - return null; + if(instance == null){ + synchronized (FileBasedConfigurationManagerImpl.class){ + if(instance == null){ + instance = new FileBasedConfigurationManagerImpl(); + } + } + } + return instance; } public static void resetInstance() { - // TODO Auto-generated method stub + instance = null; } } \ No newline at end of file