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..ff9093d 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,70 @@ @WithBuilder public class DatabaseConfigurationBuilder { + private String databaseUrl; + private String username; + private String password; + private int maxConnections; + private boolean enableCache; + private boolean isReadOnly; -} \ No newline at end of file + /// immutable + private DatabaseConfigurationBuilder() { + + } + + //// friend class + public static class Builder { + + private String databaseUrl; + private String username; + private String password; + private int maxConnections; + private boolean enableCache; + private boolean isReadOnly; + + private Builder(){ + + } + + + public Builder setDatabaseUrl(String databaseUrl) { + this.databaseUrl = databaseUrl; + return this; + } + + public Builder setUsernameAndPassword(String username, String password) { + this.username = username; + this.password = password; + return this; + } + + public Builder setMaxConnections(int maxConnections) { + this.maxConnections = maxConnections; + return this; + } + + public Builder isEnableCache(boolean enableCache) { + this.enableCache = enableCache; + return this; + } + + public Builder isReadOnly(boolean isReadOnly) { + this.isReadOnly = isReadOnly; + return this; + } + + public DatabaseConfigurationBuilder build() { + DatabaseConfigurationBuilder obj =new DatabaseConfigurationBuilder(); + obj.databaseUrl=this.databaseUrl; + obj.username=this.username; + obj.password=this.password; + obj.maxConnections=this.maxConnections; + obj.enableCache=this.enableCache; + obj.isReadOnly=this.isReadOnly; + return obj; + } + + } + +} diff --git a/src/main/java/com/scaler/lld/design/assignments/factory/AudioPlayer.java b/src/main/java/com/scaler/lld/design/assignments/factory/AudioPlayer.java index bfcfd06..ee5c907 100644 --- a/src/main/java/com/scaler/lld/design/assignments/factory/AudioPlayer.java +++ b/src/main/java/com/scaler/lld/design/assignments/factory/AudioPlayer.java @@ -2,5 +2,21 @@ public abstract class AudioPlayer { + private int volume; + private double playBackRate; + + AudioPlayer(int volume, double playBackRate) { + this.playBackRate = playBackRate; + this.volume = volume; + } + public abstract MediaFormat supportsType(); + + public abstract void play(); + + public abstract void pause(); + + public abstract void stop(); + + } \ No newline at end of file diff --git a/src/main/java/com/scaler/lld/design/assignments/factory/AudioPlayerFactory.java b/src/main/java/com/scaler/lld/design/assignments/factory/AudioPlayerFactory.java index 8c05c29..d00c290 100644 --- a/src/main/java/com/scaler/lld/design/assignments/factory/AudioPlayerFactory.java +++ b/src/main/java/com/scaler/lld/design/assignments/factory/AudioPlayerFactory.java @@ -1,4 +1,16 @@ package com.scaler.lld.design.assignments.factory; public class AudioPlayerFactory { + static AudioPlayer createAudioPlayer(MediaFormat format, int volume, double playBackRate) { + if (format == MediaFormat.FLAC) { + FLACPlayer FlacObj = new FLACPlayer(volume, playBackRate); + return FlacObj; + } else if (format == MediaFormat.MP3) { + MP3Player Mp3Obj = new MP3Player(volume, playBackRate); + return Mp3Obj; + } else { + WAVPlayer WavObj = new WAVPlayer(volume, playBackRate); + return WavObj; + } + } } \ No newline at end of file diff --git a/src/main/java/com/scaler/lld/design/assignments/factory/FLACPlayer.java b/src/main/java/com/scaler/lld/design/assignments/factory/FLACPlayer.java index 8b39d1c..f0f61e2 100644 --- a/src/main/java/com/scaler/lld/design/assignments/factory/FLACPlayer.java +++ b/src/main/java/com/scaler/lld/design/assignments/factory/FLACPlayer.java @@ -1,12 +1,11 @@ package com.scaler.lld.design.assignments.factory; -public class FLACPlayer { +public class FLACPlayer extends AudioPlayer { private int volume; private double playBackRate; public FLACPlayer(int volume, double playBackRate) { - this.volume = volume; - this.playBackRate = playBackRate; + super(volume, playBackRate); } public void play() { diff --git a/src/main/java/com/scaler/lld/design/assignments/factory/MP3Player.java b/src/main/java/com/scaler/lld/design/assignments/factory/MP3Player.java index 9e727db..e5c3b00 100644 --- a/src/main/java/com/scaler/lld/design/assignments/factory/MP3Player.java +++ b/src/main/java/com/scaler/lld/design/assignments/factory/MP3Player.java @@ -1,12 +1,11 @@ package com.scaler.lld.design.assignments.factory; -public class MP3Player { +public class MP3Player extends AudioPlayer { private int volume; private double playBackRate; public MP3Player(int volume, double playBackRate) { - this.volume = volume; - this.playBackRate = playBackRate; + super(volume, playBackRate); } public void play() { diff --git a/src/main/java/com/scaler/lld/design/assignments/factory/WAVPlayer.java b/src/main/java/com/scaler/lld/design/assignments/factory/WAVPlayer.java index c2e22fa..8ac216b 100644 --- a/src/main/java/com/scaler/lld/design/assignments/factory/WAVPlayer.java +++ b/src/main/java/com/scaler/lld/design/assignments/factory/WAVPlayer.java @@ -1,12 +1,11 @@ package com.scaler.lld.design.assignments.factory; -public class WAVPlayer { +public class WAVPlayer extends AudioPlayer { private int volume; private double playBackRate; public WAVPlayer(int volume, double playBackRate) { - this.volume = volume; - this.playBackRate = playBackRate; + super(volume, playBackRate); } public void play() { 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..8dd5483 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; @@ -9,7 +9,8 @@ public class Configuration { private String fontFamily; private ConfigurationType type; - public Configuration(String themeColor, Boolean autoSave, String language, Boolean darkMode, Integer fontSize, String fontFamily, ConfigurationType type) { + public Configuration(String themeColor, Boolean autoSave, String language, Boolean darkMode, Integer fontSize, + String fontFamily, ConfigurationType type) { this.themeColor = themeColor; this.autoSave = autoSave; this.language = language; @@ -19,6 +20,21 @@ public Configuration(String themeColor, Boolean autoSave, String language, Boole this.type = type; } + public Configuration() { + + } + + public Configuration Configuration(Configuration ref) { + ref.themeColor = this.themeColor; + ref.autoSave = this.autoSave; + ref.language = this.language; + ref.darkMode = this.darkMode; + ref.fontSize = this.fontSize; + ref.fontFamily = this.fontFamily; + ref.type = this.type; + return ref; + } + public String getThemeColor() { return themeColor; } @@ -46,4 +62,12 @@ public String getFontFamily() { public ConfigurationType getType() { return type; } + + @Override + public Object cloneObject() { + Configuration ref = new Configuration(); + return Configuration(ref); + + } + } \ No newline at end of file diff --git a/src/main/java/com/scaler/lld/design/assignments/prototype/Registry.java b/src/main/java/com/scaler/lld/design/assignments/prototype/Registry.java new file mode 100644 index 0000000..ded8086 --- /dev/null +++ b/src/main/java/com/scaler/lld/design/assignments/prototype/Registry.java @@ -0,0 +1,29 @@ +package com.scaler.lld.design.assignments.prototype; + +import java.util.HashMap; + +public class Registry implements ConfigurationPrototypeRegistry { + + HashMap storage = new HashMap<>(); + + @Override + public void addPrototype(Configuration user) { + + storage.put(user.getType(), user); + + } + + @Override + public Configuration getPrototype(ConfigurationType type) { + + return storage.get(type); + } + + @Override + public Configuration clone(ConfigurationType type) { + + return (Configuration) storage.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..76dcc04 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,81 @@ package com.scaler.lld.design.assignments.singleton; +import java.util.Properties; + public class FileBasedConfigurationManagerImpl extends FileBasedConfigurationManager { + private static FileBasedConfigurationManagerImpl instance = null; + Properties s = this.properties; + + private FileBasedConfigurationManagerImpl() { + + } + @Override public String getConfiguration(String key) { // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'getConfiguration'"); + // throw new UnsupportedOperationException("Unimplemented method + // 'getConfiguration'"); + if (s.containsKey(key)) { + return s.getProperty(key); + } else { + return null; + } + } @Override public T getConfiguration(String key, Class type) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'getConfiguration'"); + T ans = null; + if (s.containsKey(key)) { + ans = convert(key, type); + return ans; + } else { + return ans; + } } @Override public void setConfiguration(String key, String value) { // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'setConfiguration'"); + // throw new UnsupportedOperationException("Unimplemented method + // 'setConfiguration'"); + s.setProperty(key, value); } @Override public void setConfiguration(String key, T value) { // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'setConfiguration'"); + // throw new UnsupportedOperationException("Unimplemented method + // 'setConfiguration'"); } @Override public void removeConfiguration(String key) { // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'removeConfiguration'"); + // throw new UnsupportedOperationException("Unimplemented method + // 'removeConfiguration'"); + s.remove(key); } @Override public void clear() { // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'clear'"); + // throw new UnsupportedOperationException("Unimplemented method 'clear'"); + s.clear(); } public static FileBasedConfigurationManager getInstance() { - // TODO Auto-generated method stub - return null; + if (instance == null) { + instance = new FileBasedConfigurationManagerImpl(); + return instance; + } else { + return instance; + } } public static void resetInstance() { - // TODO Auto-generated method stub + instance = null; } } \ No newline at end of file