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..0043df1 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 @@ -1,6 +1,86 @@ package com.scaler.lld.design.assignments.builder; +import lombok.Setter; + @WithBuilder public class DatabaseConfigurationBuilder { + private String databaseUrl; + private String username; + private String password; + private int maxConnections; + private boolean enableCache; + private boolean isReadOnly; + +// public DatabaseConfiguration(String databaseUrl, String username, String password, int maxConnections, boolean enableCache, boolean isReadOnly) { +// this.databaseUrl = databaseUrl; +// this.username = username; +// this.password = password; +// this.maxConnections = maxConnections; +// this.enableCache = enableCache; +// this.isReadOnly = isReadOnly; +// } + + private DatabaseConfigurationBuilder(){ + + } + + public static Builder builder(){ + return new Builder(); + } + + public static class Builder{ + private DatabaseConfigurationBuilder builder; + + Builder(){ + builder=new DatabaseConfigurationBuilder(); + } + + + + public DatabaseConfigurationBuilder build(){ + DatabaseConfigurationBuilder database=new DatabaseConfigurationBuilder(); + database.databaseUrl=builder.databaseUrl; + database.username=builder.username; + database.password=builder.password; + database.maxConnections=builder.maxConnections; + database.enableCache=builder.enableCache; + database.isReadOnly=builder.isReadOnly; + builder=new DatabaseConfigurationBuilder(); + return database; + } + + + public Builder setDatabaseUrl(String databaseUrl) { + builder.databaseUrl=databaseUrl; + return this; + } + + public Builder setUsername(String username) { + builder.username=username; + return this; + } + + public Builder setPassword(String password) { + builder.password=password; + return this; + } + + public Builder getMaxConnections(int maxConnections) { + builder.maxConnections=maxConnections; + return this; + } + + public Builder isEnableCache(boolean enableCache) { + builder.enableCache=enableCache; + return this; + } + + public Builder isReadOnly(boolean isReadOnly) { + builder.isReadOnly=isReadOnly; + return 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..307d92b 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; @@ -19,6 +19,10 @@ public Configuration(String themeColor, Boolean autoSave, String language, Boole this.type = type; } + public Configuration() { + + } + public String getThemeColor() { return themeColor; } @@ -46,4 +50,17 @@ public String getFontFamily() { public ConfigurationType getType() { return type; } + + @Override + public Configuration cloneObject() { + Configuration clone=new Configuration(); + clone.themeColor=this.themeColor; + clone.autoSave=this.autoSave; + clone.language=this.language; + clone.darkMode=this.darkMode; + clone.fontSize=this.fontSize; + clone.fontFamily=this.fontFamily; + clone.type=this.type; + return clone; + } } \ 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..f74f991 --- /dev/null +++ b/src/main/java/com/scaler/lld/design/assignments/prototype/ConfigurationPrototypeRegistryImpl.java @@ -0,0 +1,21 @@ +package com.scaler.lld.design.assignments.prototype; + +import java.util.HashMap; + +public class ConfigurationPrototypeRegistryImpl implements ConfigurationPrototypeRegistry{ + HashMap registry=new HashMap<>(); + @Override + public void addPrototype(Configuration user) { + registry.put(user.getType(),user); + } + + @Override + public Configuration getPrototype(ConfigurationType type) { + return registry.get(type); + } + + @Override + public Configuration clone(ConfigurationType type) { + return registry.get(type).cloneObject(); + } +} 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..64d5b8c 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,60 @@ public class FileBasedConfigurationManagerImpl extends FileBasedConfigurationManager { + private static FileBasedConfigurationManagerImpl fileBasedConfigurationManager=null; + + + private FileBasedConfigurationManagerImpl(){ + + } @Override public String getConfiguration(String key) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'getConfiguration'"); + return properties.getProperty(key); } @Override public T getConfiguration(String key, Class type) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'getConfiguration'"); + + return properties.getProperty(key)!=null?convert(properties.getProperty(key),type):null; } @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, value.toString()); + } @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 + synchronized (FileBasedConfigurationManagerImpl.class) { + fileBasedConfigurationManager = null; + } } } \ No newline at end of file