From 1d81d13525c12872c4b568dee8e8b9c78127b396 Mon Sep 17 00:00:00 2001 From: venu-ta-philips <125430291+venu-ta-philips@users.noreply.github.com> Date: Thu, 14 Sep 2023 19:16:00 +0530 Subject: [PATCH 1/2] Add DatabaseConfigurationBuilder --- .../builder/DatabaseConfigurationBuilder.java | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) 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 From 01826b4b0f2f69f4aaf43d8d384cd60b25fa4042 Mon Sep 17 00:00:00 2001 From: venu-ta-philips <125430291+venu-ta-philips@users.noreply.github.com> Date: Tue, 19 Sep 2023 21:55:25 +0530 Subject: [PATCH 2/2] Singleton_assignment_attempt_1 --- .../FileBasedConfigurationManagerImpl.java | 45 ++++++++++++------- 1 file changed, 30 insertions(+), 15 deletions(-) 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