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..418a95b 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,88 @@ @WithBuilder public class DatabaseConfigurationBuilder { + private String databaseUrl; + private String username; + private String password; + private int maxConnections; + private boolean enableCache; + private boolean isReadOnly; + private DatabaseConfigurationBuilder(DBConfigureBuilder dbConfigurationBuilder){ + this.databaseUrl = dbConfigurationBuilder.databaseUrl; + this.username = dbConfigurationBuilder.username; + this.password = dbConfigurationBuilder.password; + this.maxConnections = dbConfigurationBuilder.maxConnections; + this.enableCache = dbConfigurationBuilder.enableCache; + this.isReadOnly = dbConfigurationBuilder.isReadOnly; + } + public static DBConfigureBuilder builder(){ + return new DBConfigureBuilder(); + } + + public static class DBConfigureBuilder{ + private String databaseUrl; + private String username; + private String password; + private int maxConnections; + private boolean enableCache; + private boolean isReadOnly; + + public String getDatabaseUrl() { + return databaseUrl; + } + + public DBConfigureBuilder setDatabaseUrl(String databaseUrl) { + this.databaseUrl = databaseUrl; + return this; + } + + public String getUsername() { + return username; + } + + public DBConfigureBuilder setUsername(String username) { + this.username = username; + return this; + } + + public String getPassword() { + return password; + } + + public DBConfigureBuilder setPassword(String password) { + this.password = password; + return this; + } + + public int getMaxConnections() { + return maxConnections; + } + + public DBConfigureBuilder setMaxConnections(int maxConnections) { + this.maxConnections = maxConnections; + return this; + } + + public boolean isEnableCache() { + return enableCache; + } + + public DBConfigureBuilder setEnableCache(boolean enableCache) { + this.enableCache = enableCache; + return this; + } + + public boolean isReadOnly() { + return isReadOnly; + } + + public DBConfigureBuilder setReadOnly(boolean readOnly) { + isReadOnly = readOnly; + return this; + } + public DatabaseConfigurationBuilder build(){ + return new DatabaseConfigurationBuilder(this); + } + } } \ No newline at end of file diff --git a/src/main/java/com/scaler/lld/design/assignments/prototype/Configuration.java b/src/main/java/com/scaler/lld/design/assignments/prototype/Configuration.java index 597f36e..d1af316 100644 --- a/src/main/java/com/scaler/lld/design/assignments/prototype/Configuration.java +++ b/src/main/java/com/scaler/lld/design/assignments/prototype/Configuration.java @@ -1,6 +1,6 @@ package com.scaler.lld.design.assignments.prototype; -public class Configuration { +public class Configuration implements ClonableObject{ private String themeColor; private Boolean autoSave; private String language; @@ -46,4 +46,11 @@ public String getFontFamily() { public ConfigurationType getType() { return type; } + + @Override + public Configuration cloneObject() { + return new Configuration(this.themeColor,this.autoSave, + this.language,this.darkMode,this.fontSize, + this.fontFamily,this.type); + } } \ No newline at end of file diff --git a/src/main/java/com/scaler/lld/design/assignments/prototype/ConfigurationPrototypeRegistryImpl.java b/src/main/java/com/scaler/lld/design/assignments/prototype/ConfigurationPrototypeRegistryImpl.java new file mode 100644 index 0000000..be693f0 --- /dev/null +++ b/src/main/java/com/scaler/lld/design/assignments/prototype/ConfigurationPrototypeRegistryImpl.java @@ -0,0 +1,27 @@ +package com.scaler.lld.design.assignments.prototype; + +import java.util.HashMap; +import java.util.Map; + +public class ConfigurationPrototypeRegistryImpl implements ConfigurationPrototypeRegistry{ + + private Map map=new HashMap<>(); + @Override + public void addPrototype(Configuration user) { + map.put(user.getType(),user); + } + + @Override + public Configuration getPrototype(ConfigurationType type) { + if(map.containsKey(type)) return map.get(type); + return null; + } + + @Override + public Configuration clone(ConfigurationType type) { + if(map.containsKey(type)){ + return map.get(type).cloneObject(); + } + return null; + } +} 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..b676404 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 @@ -2,49 +2,68 @@ public class FileBasedConfigurationManagerImpl extends FileBasedConfigurationManager { + private static FileBasedConfigurationManager fileBasedConfigurationManager; + + private FileBasedConfigurationManagerImpl(){ + } + @Override public String getConfiguration(String key) { // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'getConfiguration'"); + if(properties.containsKey(key)) return properties.getProperty(key); + return null; } @Override public T getConfiguration(String key, Class type) { // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'getConfiguration'"); + String value=properties.getProperty(key); + T ans=null; + if(value!=null){ + ans=convert(value,type); + } + return ans; } @Override public void setConfiguration(String key, String value) { // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'setConfiguration'"); + properties.setProperty(key,value); } @Override public void setConfiguration(String key, T value) { // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'setConfiguration'"); + properties.setProperty(key,(String)value); } @Override public void removeConfiguration(String key) { // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'removeConfiguration'"); + properties.remove(key); } @Override public void clear() { // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'clear'"); + properties.clear(); } public static FileBasedConfigurationManager getInstance() { // TODO Auto-generated method stub - return null; + if(fileBasedConfigurationManager==null){ + synchronized (FileBasedConfigurationManagerImpl.class){ + if(fileBasedConfigurationManager==null){ + fileBasedConfigurationManager=new FileBasedConfigurationManagerImpl(); + } + } + } + return fileBasedConfigurationManager; } public static void resetInstance() { - // TODO Auto-generated method stub + fileBasedConfigurationManager=null; + //test changes } } \ No newline at end of file