From eec02b73ec76b7491282fb11528ca983b69b5b79 Mon Sep 17 00:00:00 2001 From: Kazi Muktadir Ahmed Date: Sun, 24 Apr 2022 00:37:06 +0600 Subject: [PATCH 01/11] initial commit --- .idea/.gitignore | 3 +++ .idea/.name | 1 + .idea/misc.xml | 6 ++++++ .idea/vcs.xml | 6 ++++++ src/.idea/.gitignore | 3 +++ src/.idea/misc.xml | 6 ++++++ src/.idea/modules.xml | 8 ++++++++ src/.idea/vcs.xml | 6 ++++++ src/MiniDB-design-pattern.iml | 11 +++++++++++ src/cli.java | 7 +++++++ .../production/MiniDB-design-pattern/.idea/.gitignore | 3 +++ .../production/MiniDB-design-pattern/.idea/misc.xml | 6 ++++++ .../MiniDB-design-pattern/.idea/modules.xml | 8 ++++++++ .../production/MiniDB-design-pattern/.idea/vcs.xml | 6 ++++++ .../MiniDB-design-pattern/MiniDB-design-pattern.iml | 11 +++++++++++ 15 files changed, 91 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/.name create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 src/.idea/.gitignore create mode 100644 src/.idea/misc.xml create mode 100644 src/.idea/modules.xml create mode 100644 src/.idea/vcs.xml create mode 100644 src/MiniDB-design-pattern.iml create mode 100644 src/out/production/MiniDB-design-pattern/.idea/.gitignore create mode 100644 src/out/production/MiniDB-design-pattern/.idea/misc.xml create mode 100644 src/out/production/MiniDB-design-pattern/.idea/modules.xml create mode 100644 src/out/production/MiniDB-design-pattern/.idea/vcs.xml create mode 100644 src/out/production/MiniDB-design-pattern/MiniDB-design-pattern.iml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..5b7e300 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +MiniDB \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..5db8ab8 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/.idea/.gitignore b/src/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/src/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/src/.idea/misc.xml b/src/.idea/misc.xml new file mode 100644 index 0000000..09e91bf --- /dev/null +++ b/src/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/.idea/modules.xml b/src/.idea/modules.xml new file mode 100644 index 0000000..e083187 --- /dev/null +++ b/src/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/.idea/vcs.xml b/src/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/src/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/MiniDB-design-pattern.iml b/src/MiniDB-design-pattern.iml new file mode 100644 index 0000000..b107a2d --- /dev/null +++ b/src/MiniDB-design-pattern.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/cli.java b/src/cli.java index d99e647..615efad 100644 --- a/src/cli.java +++ b/src/cli.java @@ -23,6 +23,10 @@ public class cli { * the databases created. It acts as a pointer to the Database File. So, We * instantly load the registry file. */ + + /** + * registry can be a singleton + */ static RegistryFile registry; /** @@ -61,6 +65,9 @@ public static void main(String[] args) { private static void cliInputs(String input) { String[] cmdArgs = input.split(" "); + /** + * Strategy pattern can be implemented to ensure OCP + */ switch (cmdArgs[0]) { case "new": { registry.createNewDatabase(cmdArgs[1]); diff --git a/src/out/production/MiniDB-design-pattern/.idea/.gitignore b/src/out/production/MiniDB-design-pattern/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/src/out/production/MiniDB-design-pattern/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/src/out/production/MiniDB-design-pattern/.idea/misc.xml b/src/out/production/MiniDB-design-pattern/.idea/misc.xml new file mode 100644 index 0000000..09e91bf --- /dev/null +++ b/src/out/production/MiniDB-design-pattern/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/out/production/MiniDB-design-pattern/.idea/modules.xml b/src/out/production/MiniDB-design-pattern/.idea/modules.xml new file mode 100644 index 0000000..e083187 --- /dev/null +++ b/src/out/production/MiniDB-design-pattern/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/out/production/MiniDB-design-pattern/.idea/vcs.xml b/src/out/production/MiniDB-design-pattern/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/src/out/production/MiniDB-design-pattern/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/out/production/MiniDB-design-pattern/MiniDB-design-pattern.iml b/src/out/production/MiniDB-design-pattern/MiniDB-design-pattern.iml new file mode 100644 index 0000000..b107a2d --- /dev/null +++ b/src/out/production/MiniDB-design-pattern/MiniDB-design-pattern.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file From f3a538e62addc67fa1b4236345bb8aad13b253bd Mon Sep 17 00:00:00 2001 From: Kazi Muktadir Ahmed Date: Sun, 24 Apr 2022 04:39:30 +0600 Subject: [PATCH 02/11] static vars removed --- src/MainClass.java | 9 ++ src/cli.java | 119 ++++++++++++++++--------- src/constants/constants.java | 4 + src/minidb/xmlParser/DatabaseFile.java | 11 ++- src/minidb/xmlParser/RegistryFile.java | 4 + src/minidb/xmlParser/XMLFiles.java | 5 +- 6 files changed, 101 insertions(+), 51 deletions(-) create mode 100644 src/MainClass.java diff --git a/src/MainClass.java b/src/MainClass.java new file mode 100644 index 0000000..3cf6039 --- /dev/null +++ b/src/MainClass.java @@ -0,0 +1,9 @@ +public class MainClass { + public static void main(String[] args) { + System.out.println("my smell"); + cli db_cli = new cli(); + db_cli.run(); + } + + +} diff --git a/src/cli.java b/src/cli.java index 615efad..2b8e537 100644 --- a/src/cli.java +++ b/src/cli.java @@ -27,16 +27,19 @@ public class cli { /** * registry can be a singleton */ - static RegistryFile registry; + RegistryFile registry; /** * This attribute is for storing the DatabaseFile instance. Which is assigned * when the user calls the command "use". if the user does not call the command - * "use" then the We show a error message. + * "use" then we show an error message. */ - static DatabaseFile CurrentDb; + DatabaseFile CurrentDb; - public static void main(String[] args) { + /* + function okay + */ + public void run() { print(constants.HEADING); registry = new RegistryFile(constants.DATA_XML_PATH); @@ -45,14 +48,13 @@ public static void main(String[] args) { while (true) { System.out.print(constants.CMD_PREFIX); - String currentCmd = input.nextLine(); + String currentCmdCommand = input.nextLine(); - // break if user wants to exit - if (currentCmd.equals("exit;")) { + if (currentCmdCommand.equals("exit;")) { break; } long startTime = System.nanoTime(); - cliInputs(currentCmd); + executeCliInputs(currentCmdCommand); long endTime = System.nanoTime(); long exeTime = (endTime - startTime) / 1000000; @@ -62,7 +64,7 @@ public static void main(String[] args) { input.close(); } - private static void cliInputs(String input) { + private void executeCliInputs(String input) { String[] cmdArgs = input.split(" "); /** @@ -70,30 +72,22 @@ private static void cliInputs(String input) { */ switch (cmdArgs[0]) { case "new": { - registry.createNewDatabase(cmdArgs[1]); + createNewDatabase(cmdArgs[1]); break; } case "use": { - String path = registry.getDatabasePath(cmdArgs[1], false); - - if (path != null) { - CurrentDb = new DatabaseFile(path); - CurrentDb.EditMode(); - print("Successfully loaded Database named: " + cmdArgs[1]); - } else { - print("Database not found"); - } + useDatabase(cmdArgs[1]); break; } case "list": { - registry.listAllDatabases(); + listAllDatabase(); break; } case "help;": { - print(constants.HELP_COMMANDS); + showHelp(); break; } @@ -103,32 +97,12 @@ private static void cliInputs(String input) { } case "schema": { - if (CurrentDb != null) { - String xy = cmdArgs[1]; - - if (xy.equals("show")) { - print(CurrentDb.getSchema()); - } else { - String[] schemaVals = xy.split(","); - if (schemaVals.length > 1) { - CurrentDb.createSchema(xy); - } else { - print("There should be atleast 2 columns of data"); - } - } - - } else { - print(errors.NO_DATABASE_SELECTED); - } + schemaCommand(cmdArgs[1]); break; } case "add": { - if (CurrentDb != null) { - CurrentDb.addData(cmdArgs[1]); - } else { - print(errors.NO_DATABASE_SELECTED); - } + addRecordToDB(cmdArgs[1]); break; } @@ -152,6 +126,7 @@ private static void cliInputs(String input) { break; } + //code smell case "update": { // TODO if (CurrentDb != null) { @@ -169,12 +144,68 @@ private static void cliInputs(String input) { } default: { - print("UNKNOWN COMMAND: " + cmdArgs[0] + "\nType `help;` for commands list"); + unknownCommandMsg(cmdArgs[0]); break; } } } + private void addRecordToDB(String cmdArgs) { + if (CurrentDb != null) { + CurrentDb.addData(cmdArgs); + } else { + print(errors.NO_DATABASE_SELECTED); + } + } + + private void schemaCommand(String cmdArgs) { + if (CurrentDb != null) { + String xy = cmdArgs; + + if (xy.equals("show")) { + print(CurrentDb.getSchema()); + } else { + String[] schemaVals = xy.split(","); + if (schemaVals.length > 1) { + CurrentDb.createSchema(xy); + } else { + print("There should be at least 2 columns of data"); + } + } + + } else { + print(errors.NO_DATABASE_SELECTED); + } + } + + private void unknownCommandMsg(String cmdArgs) { + print("UNKNOWN COMMAND: " + cmdArgs + "\nType `help;` for commands list"); + } + + private void showHelp() { + print(constants.HELP_COMMANDS); + } + + private void listAllDatabase() { + registry.listAllDatabases(); + } + + private void useDatabase(String name) { + String path = registry.getDatabasePath(name, false); + + if (path != null) { + CurrentDb = new DatabaseFile(path); + CurrentDb.EditMode(); + print("Successfully loaded Database named: " + name); + } else { + print("Database not found"); + } + } + + private void createNewDatabase(String name) { + registry.createNewDatabase(name); + } + private static void print(String x) { System.out.println(x); } diff --git a/src/constants/constants.java b/src/constants/constants.java index 28e2017..8cc48be 100644 --- a/src/constants/constants.java +++ b/src/constants/constants.java @@ -4,6 +4,10 @@ * A Global store for all the constants used in the application. * In future, we can let the user a create configuration file to modify the constants. */ + +/** + * constants can be a singleton + */ public class constants { public static String VERSION = "v0.3.1"; diff --git a/src/minidb/xmlParser/DatabaseFile.java b/src/minidb/xmlParser/DatabaseFile.java index a577eed..4916d0d 100644 --- a/src/minidb/xmlParser/DatabaseFile.java +++ b/src/minidb/xmlParser/DatabaseFile.java @@ -8,11 +8,10 @@ */ public class DatabaseFile extends XMLFiles { // prefix `X` to avoid namespace conflict - private static String TAG_STORAGE = "Xstorage"; - private static String TAG_META = "Xmeta"; // incomplete feature - private static String TAG_DATA = "Xdata"; + private static final String TAG_STORAGE = "Xstorage"; + private static final String TAG_META = "Xmeta"; // incomplete feature + private static final String TAG_DATA = "Xdata"; - private Element metaElem; private Element storageElem; public DatabaseFile(String path) { @@ -32,9 +31,9 @@ protected void createFile() { } public void EditMode() { - metaElem = (Element) doc.getElementsByTagName(TAG_META).item(0); +// Element metaElem = (Element) doc.getElementsByTagName(TAG_META).item(0); storageElem = (Element) doc.getElementsByTagName(TAG_STORAGE).item(0); - // System.out.println("Edit Mode On; " + schemaElem.getAttribute("val")); +// System.out.println("Edit Mode On; " + schemaElem.getAttribute("val")); } public String getSchema() { diff --git a/src/minidb/xmlParser/RegistryFile.java b/src/minidb/xmlParser/RegistryFile.java index a44a4c8..e773348 100644 --- a/src/minidb/xmlParser/RegistryFile.java +++ b/src/minidb/xmlParser/RegistryFile.java @@ -12,6 +12,10 @@ * Contains the methods for performing CRUD operations on the registry file * 'minidb.xml' */ + +/** + * Should be a singleton instance + */ public class RegistryFile extends XMLFiles { public RegistryFile(String path) { diff --git a/src/minidb/xmlParser/XMLFiles.java b/src/minidb/xmlParser/XMLFiles.java index b31faff..ef5f0df 100644 --- a/src/minidb/xmlParser/XMLFiles.java +++ b/src/minidb/xmlParser/XMLFiles.java @@ -31,6 +31,9 @@ public XMLFiles(String path) { } } + /** + * already used factory pattern + */ private void load(boolean NoFile) throws ParserConfigurationException, SAXException, IOException { DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); @@ -39,7 +42,6 @@ private void load(boolean NoFile) throws ParserConfigurationException, SAXExcept createFile(); // abstract method to create the file } else { doc = docBuilder.parse(xmlFile); - ; } } @@ -47,6 +49,7 @@ private void load(boolean NoFile) throws ParserConfigurationException, SAXExcept /** * Call this method to update the XML file. + * also used abstract factory */ protected void updateFile() { try { From b1a0dc4435c857ec4a45c4e94b85cc09b8e56306 Mon Sep 17 00:00:00 2001 From: Kazi Muktadir Ahmed Date: Sun, 24 Apr 2022 04:44:50 +0600 Subject: [PATCH 03/11] extracted methods from switch --- src/cli.java | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/src/cli.java b/src/cli.java index 2b8e537..2b02b2f 100644 --- a/src/cli.java +++ b/src/cli.java @@ -103,26 +103,17 @@ private void executeCliInputs(String input) { case "add": { addRecordToDB(cmdArgs[1]); - break; } case "read": { - if (CurrentDb != null) { - if (cmdArgs.length == 1) { - CurrentDb.readData(); - } else { - CurrentDb.readData(cmdArgs[1]); - } - } else { - print(errors.NO_DATABASE_SELECTED); - } + readFromDB(cmdArgs); break; } case "drop": { - registry.deleteDatabase(cmdArgs[1]); + dropTable(cmdArgs[1]); break; } @@ -135,11 +126,7 @@ private void executeCliInputs(String input) { } case "delete": { - if (CurrentDb != null) { - CurrentDb.deleteData(cmdArgs[1]); - } else { - print(errors.NO_DATABASE_SELECTED); - } + deleteFromDB(cmdArgs[1]); break; } @@ -150,6 +137,30 @@ private void executeCliInputs(String input) { } } + private void deleteFromDB(String cmdArgs) { + if (CurrentDb != null) { + CurrentDb.deleteData(cmdArgs); + } else { + print(errors.NO_DATABASE_SELECTED); + } + } + + private void dropTable(String cmdArgs) { + registry.deleteDatabase(cmdArgs); + } + + private void readFromDB(String[] cmdArgs) { + if (CurrentDb != null) { + if (cmdArgs.length == 1) { + CurrentDb.readData(); + } else { + CurrentDb.readData(cmdArgs[1]); + } + } else { + print(errors.NO_DATABASE_SELECTED); + } + } + private void addRecordToDB(String cmdArgs) { if (CurrentDb != null) { CurrentDb.addData(cmdArgs); From 21f86d89d9e283d8198eb50e2b9af45a8d5ddd4b Mon Sep 17 00:00:00 2001 From: Kazi Muktadir Ahmed Date: Sun, 24 Apr 2022 05:18:07 +0600 Subject: [PATCH 04/11] extracted methods from switch --- src/InputCommand/ArgStrategy.java | 6 ++++++ src/InputCommand/newArg.java | 16 ++++++++++++++++ src/cli.java | 21 ++++++--------------- src/minidb/xmlParser/RegistryFile.java | 11 ++++++++++- 4 files changed, 38 insertions(+), 16 deletions(-) create mode 100644 src/InputCommand/ArgStrategy.java create mode 100644 src/InputCommand/newArg.java diff --git a/src/InputCommand/ArgStrategy.java b/src/InputCommand/ArgStrategy.java new file mode 100644 index 0000000..dc92df6 --- /dev/null +++ b/src/InputCommand/ArgStrategy.java @@ -0,0 +1,6 @@ +package InputCommand; + +public interface ArgStrategy { + public boolean matchArg(String arg); + public void execCmd (String arg); +} diff --git a/src/InputCommand/newArg.java b/src/InputCommand/newArg.java new file mode 100644 index 0000000..dd0a722 --- /dev/null +++ b/src/InputCommand/newArg.java @@ -0,0 +1,16 @@ +package InputCommand; + +import minidb.xmlParser.RegistryFile; + +public class newArg implements ArgStrategy{ + @Override + public boolean matchArg(String arg) { + return arg.equals("new"); + } + + @Override + public void execCmd(String arg) { + RegistryFile registry = RegistryFile.getInstance(); + registry.createNewDatabase(arg); + } +} diff --git a/src/cli.java b/src/cli.java index 2b02b2f..5bc0d15 100644 --- a/src/cli.java +++ b/src/cli.java @@ -27,13 +27,17 @@ public class cli { /** * registry can be a singleton */ - RegistryFile registry; + RegistryFile registry = RegistryFile.getInstance(); /** * This attribute is for storing the DatabaseFile instance. Which is assigned * when the user calls the command "use". if the user does not call the command * "use" then we show an error message. */ + + /** + * can be assigned to a state pattern + */ DatabaseFile CurrentDb; /* @@ -42,7 +46,7 @@ public class cli { public void run() { print(constants.HEADING); - registry = new RegistryFile(constants.DATA_XML_PATH); +// registry = new RegistryFile(constants.DATA_XML_PATH); Scanner input = new Scanner(System.in); while (true) { @@ -91,11 +95,6 @@ private void executeCliInputs(String input) { break; } - case "info": { - // For querying the meta info of the database - // TODO - } - case "schema": { schemaCommand(cmdArgs[1]); break; @@ -117,14 +116,6 @@ private void executeCliInputs(String input) { break; } - //code smell - case "update": { - // TODO - if (CurrentDb != null) { - } - break; - } - case "delete": { deleteFromDB(cmdArgs[1]); break; diff --git a/src/minidb/xmlParser/RegistryFile.java b/src/minidb/xmlParser/RegistryFile.java index e773348..ea1e528 100644 --- a/src/minidb/xmlParser/RegistryFile.java +++ b/src/minidb/xmlParser/RegistryFile.java @@ -18,10 +18,19 @@ */ public class RegistryFile extends XMLFiles { - public RegistryFile(String path) { + private static RegistryFile registryFile; + + private RegistryFile(String path) { super(path); } + public static RegistryFile getInstance() + { + if (registryFile == null) + registryFile = new RegistryFile(constants.DATA_XML_PATH); + return registryFile; + } + void createFile() { Element rootElem = doc.createElement("root"); Element emptyDb = this.addDbEntry("empty", "true"); From 7a9d9c6eb4713c23a06121f44f43149fed727055 Mon Sep 17 00:00:00 2001 From: Kazi Muktadir Ahmed Date: Sun, 24 Apr 2022 05:19:22 +0600 Subject: [PATCH 05/11] created a RegistryFile singleton object --- src/minidb/xmlParser/RegistryFile.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/minidb/xmlParser/RegistryFile.java b/src/minidb/xmlParser/RegistryFile.java index ea1e528..ae605cc 100644 --- a/src/minidb/xmlParser/RegistryFile.java +++ b/src/minidb/xmlParser/RegistryFile.java @@ -20,6 +20,7 @@ public class RegistryFile extends XMLFiles { private static RegistryFile registryFile; + private RegistryFile(String path) { super(path); } From 17f61f6f12ff93a37fe5627d2c757e022b02a357 Mon Sep 17 00:00:00 2001 From: Kazi Muktadir Ahmed Date: Sun, 24 Apr 2022 06:07:29 +0600 Subject: [PATCH 06/11] created a template strategy --- src/InputCommand/addArg.java | 19 ++++++++++++++++ src/InputCommand/deleteArg.java | 19 ++++++++++++++++ src/InputCommand/dropArg.java | 16 +++++++++++++ src/InputCommand/helpArg.java | 15 +++++++++++++ src/InputCommand/listArg.java | 16 +++++++++++++ src/InputCommand/notFoundArg.java | 13 +++++++++++ src/InputCommand/readArg.java | 24 ++++++++++++++++++++ src/InputCommand/schemaArg.java | 31 ++++++++++++++++++++++++++ src/InputCommand/useArg.java | 25 +++++++++++++++++++++ src/cli.java | 5 +++-- src/minidb/xmlParser/RegistryFile.java | 1 - 11 files changed, 181 insertions(+), 3 deletions(-) create mode 100644 src/InputCommand/addArg.java create mode 100644 src/InputCommand/deleteArg.java create mode 100644 src/InputCommand/dropArg.java create mode 100644 src/InputCommand/helpArg.java create mode 100644 src/InputCommand/listArg.java create mode 100644 src/InputCommand/notFoundArg.java create mode 100644 src/InputCommand/readArg.java create mode 100644 src/InputCommand/schemaArg.java create mode 100644 src/InputCommand/useArg.java diff --git a/src/InputCommand/addArg.java b/src/InputCommand/addArg.java new file mode 100644 index 0000000..e6fcf58 --- /dev/null +++ b/src/InputCommand/addArg.java @@ -0,0 +1,19 @@ +package InputCommand; + +import constants.errors; + +public class addArg implements ArgStrategy{ + @Override + public boolean matchArg(String arg) { + return arg.equals("add"); + } + + @Override + public void execCmd(String arg) { +// if (CurrentDb != null) { +// CurrentDb.addData(cmdArgs); +// } else { +// System.out.println(errors.NO_DATABASE_SELECTED); +// } + } +} diff --git a/src/InputCommand/deleteArg.java b/src/InputCommand/deleteArg.java new file mode 100644 index 0000000..7c1acd7 --- /dev/null +++ b/src/InputCommand/deleteArg.java @@ -0,0 +1,19 @@ +package InputCommand; + +import constants.errors; + +public class deleteArg implements ArgStrategy{ + @Override + public boolean matchArg(String arg) { + return arg.equals("delete"); + } + + @Override + public void execCmd(String arg) { +// if (CurrentDb != null) { +// CurrentDb.deleteData(arg); +// } else { +// print(errors.NO_DATABASE_SELECTED); +// } + } +} diff --git a/src/InputCommand/dropArg.java b/src/InputCommand/dropArg.java new file mode 100644 index 0000000..dfacbc3 --- /dev/null +++ b/src/InputCommand/dropArg.java @@ -0,0 +1,16 @@ +package InputCommand; + +import minidb.xmlParser.RegistryFile; + +public class dropArg implements ArgStrategy{ + @Override + public boolean matchArg(String arg) { + return arg.equals("drop"); + } + + @Override + public void execCmd(String arg) { + RegistryFile registry = RegistryFile.getInstance(); + registry.deleteDatabase(arg); + } +} diff --git a/src/InputCommand/helpArg.java b/src/InputCommand/helpArg.java new file mode 100644 index 0000000..ca831bf --- /dev/null +++ b/src/InputCommand/helpArg.java @@ -0,0 +1,15 @@ +package InputCommand; + +import constants.constants; + +public class helpArg implements ArgStrategy{ + @Override + public boolean matchArg(String arg) { + return arg.equals("help;"); + } + + @Override + public void execCmd(String arg) { + System.out.println(constants.HELP_COMMANDS); + } +} diff --git a/src/InputCommand/listArg.java b/src/InputCommand/listArg.java new file mode 100644 index 0000000..f75400f --- /dev/null +++ b/src/InputCommand/listArg.java @@ -0,0 +1,16 @@ +package InputCommand; + +import minidb.xmlParser.RegistryFile; + +public class listArg implements ArgStrategy{ + @Override + public boolean matchArg(String arg) { + return arg.equals("list"); + } + + @Override + public void execCmd(String arg) { + RegistryFile registry = RegistryFile.getInstance(); + registry.listAllDatabases(); + } +} diff --git a/src/InputCommand/notFoundArg.java b/src/InputCommand/notFoundArg.java new file mode 100644 index 0000000..2cd88f5 --- /dev/null +++ b/src/InputCommand/notFoundArg.java @@ -0,0 +1,13 @@ +package InputCommand; + +public class notFoundArg implements ArgStrategy{ + @Override + public boolean matchArg(String arg) { + return false; + } + + @Override + public void execCmd(String arg) { + System.out.println("UNKNOWN COMMAND: " + arg + "\nType `help;` for commands list"); + } +} diff --git a/src/InputCommand/readArg.java b/src/InputCommand/readArg.java new file mode 100644 index 0000000..5e77f26 --- /dev/null +++ b/src/InputCommand/readArg.java @@ -0,0 +1,24 @@ +package InputCommand; + +import constants.errors; + +public class readArg implements ArgStrategy{ + @Override + public boolean matchArg(String arg) { + return arg.equals("read"); + } + + @Override + public void execCmd(String arg) { + String[] cmdArgs = arg.split(" "); +// if (CurrentDb != null) { +// if (cmdArgs.length == 1) { +// CurrentDb.readData(); +// } else { +// CurrentDb.readData(cmdArgs[1]); +// } +// } else { +// System.out.println(errors.NO_DATABASE_SELECTED); +// } + } +} diff --git a/src/InputCommand/schemaArg.java b/src/InputCommand/schemaArg.java new file mode 100644 index 0000000..f64d81c --- /dev/null +++ b/src/InputCommand/schemaArg.java @@ -0,0 +1,31 @@ +package InputCommand; + +import constants.errors; + +public class schemaArg implements ArgStrategy{ + @Override + public boolean matchArg(String arg) { + return arg.equals("schema"); + } + + @Override + public void execCmd(String arg) { +// if (CurrentDb != null) { +// String xy = cmdArgs; +// +// if (xy.equals("show")) { +// System.out.println(CurrentDb.getSchema()); +// } else { +// String[] schemaVals = xy.split(","); +// if (schemaVals.length > 1) { +// CurrentDb.createSchema(xy); +// } else { +// System.out.println("There should be at least 2 columns of data"); +// } +// } +// +// } else { +// System.out.println(errors.NO_DATABASE_SELECTED); +// } + } +} diff --git a/src/InputCommand/useArg.java b/src/InputCommand/useArg.java new file mode 100644 index 0000000..f7f9011 --- /dev/null +++ b/src/InputCommand/useArg.java @@ -0,0 +1,25 @@ +package InputCommand; + +import minidb.xmlParser.DatabaseFile; +import minidb.xmlParser.RegistryFile; + +public class useArg implements ArgStrategy{ + @Override + public boolean matchArg(String arg) { + return arg.equals("use"); + } + + @Override + public void execCmd(String arg) { + RegistryFile registry = RegistryFile.getInstance(); + String path = registry.getDatabasePath(arg, false); + + if (path != null) { +// CurrentDb = new DatabaseFile(path); +// CurrentDb.EditMode(); + System.out.println("Successfully loaded Database named: " + arg); + } else { + System.out.println("Database not found"); + } + } +} diff --git a/src/cli.java b/src/cli.java index 5bc0d15..fbddc3f 100644 --- a/src/cli.java +++ b/src/cli.java @@ -106,7 +106,7 @@ private void executeCliInputs(String input) { } case "read": { - readFromDB(cmdArgs); + readFromDB(input); break; } @@ -140,7 +140,8 @@ private void dropTable(String cmdArgs) { registry.deleteDatabase(cmdArgs); } - private void readFromDB(String[] cmdArgs) { + private void readFromDB(String inpArgs) { + String[] cmdArgs = inpArgs.split(" "); if (CurrentDb != null) { if (cmdArgs.length == 1) { CurrentDb.readData(); diff --git a/src/minidb/xmlParser/RegistryFile.java b/src/minidb/xmlParser/RegistryFile.java index ae605cc..ea1e528 100644 --- a/src/minidb/xmlParser/RegistryFile.java +++ b/src/minidb/xmlParser/RegistryFile.java @@ -20,7 +20,6 @@ public class RegistryFile extends XMLFiles { private static RegistryFile registryFile; - private RegistryFile(String path) { super(path); } From d0045d30af2e0b2cc63b631f350683723d5456bb Mon Sep 17 00:00:00 2001 From: Kazi Muktadir Ahmed Date: Sun, 24 Apr 2022 08:07:53 +0600 Subject: [PATCH 07/11] okay --- src/.idea/uiDesigner.xml | 124 +++++++++++++++++++++ src/InputCommand/UseSetCurrentDb.java | 7 ++ src/InputCommand/addArg.java | 20 +++- src/InputCommand/deleteArg.java | 20 +++- src/InputCommand/readArg.java | 28 +++-- src/InputCommand/schemaArg.java | 44 +++++--- src/InputCommand/useArg.java | 10 +- src/MainClass.java | 2 - src/cli.java | 37 ------ src/minidb/xmlParser/CurrentDBOserver.java | 17 +++ 10 files changed, 229 insertions(+), 80 deletions(-) create mode 100644 src/.idea/uiDesigner.xml create mode 100644 src/InputCommand/UseSetCurrentDb.java create mode 100644 src/minidb/xmlParser/CurrentDBOserver.java diff --git a/src/.idea/uiDesigner.xml b/src/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/src/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/InputCommand/UseSetCurrentDb.java b/src/InputCommand/UseSetCurrentDb.java new file mode 100644 index 0000000..b57381d --- /dev/null +++ b/src/InputCommand/UseSetCurrentDb.java @@ -0,0 +1,7 @@ +package InputCommand; + +import minidb.xmlParser.DatabaseFile; + +public interface UseSetCurrentDb { + public void setCurrentDb(DatabaseFile currentDb); +} diff --git a/src/InputCommand/addArg.java b/src/InputCommand/addArg.java index e6fcf58..17feda2 100644 --- a/src/InputCommand/addArg.java +++ b/src/InputCommand/addArg.java @@ -1,8 +1,16 @@ package InputCommand; import constants.errors; +import minidb.xmlParser.DatabaseFile; + +public class addArg implements ArgStrategy, UseSetCurrentDb { + private DatabaseFile CurrentDb; + + @Override + public void setCurrentDb(DatabaseFile currentDb){ + this.CurrentDb = currentDb; + } -public class addArg implements ArgStrategy{ @Override public boolean matchArg(String arg) { return arg.equals("add"); @@ -10,10 +18,10 @@ public boolean matchArg(String arg) { @Override public void execCmd(String arg) { -// if (CurrentDb != null) { -// CurrentDb.addData(cmdArgs); -// } else { -// System.out.println(errors.NO_DATABASE_SELECTED); -// } + if (CurrentDb != null) { + CurrentDb.addData(arg); + } else { + System.out.println(errors.NO_DATABASE_SELECTED); + } } } diff --git a/src/InputCommand/deleteArg.java b/src/InputCommand/deleteArg.java index 7c1acd7..e9763cd 100644 --- a/src/InputCommand/deleteArg.java +++ b/src/InputCommand/deleteArg.java @@ -1,8 +1,16 @@ package InputCommand; import constants.errors; +import minidb.xmlParser.DatabaseFile; + +public class deleteArg implements ArgStrategy, UseSetCurrentDb { + private DatabaseFile CurrentDb; + + @Override + public void setCurrentDb(DatabaseFile currentDb){ + this.CurrentDb = currentDb; + } -public class deleteArg implements ArgStrategy{ @Override public boolean matchArg(String arg) { return arg.equals("delete"); @@ -10,10 +18,10 @@ public boolean matchArg(String arg) { @Override public void execCmd(String arg) { -// if (CurrentDb != null) { -// CurrentDb.deleteData(arg); -// } else { -// print(errors.NO_DATABASE_SELECTED); -// } + if (CurrentDb != null) { + CurrentDb.deleteData(arg); + } else { + System.out.println(errors.NO_DATABASE_SELECTED); + } } } diff --git a/src/InputCommand/readArg.java b/src/InputCommand/readArg.java index 5e77f26..d070dd7 100644 --- a/src/InputCommand/readArg.java +++ b/src/InputCommand/readArg.java @@ -1,8 +1,16 @@ package InputCommand; import constants.errors; +import minidb.xmlParser.DatabaseFile; + +public class readArg implements ArgStrategy, UseSetCurrentDb { + private DatabaseFile CurrentDb; + + @Override + public void setCurrentDb(DatabaseFile currentDb){ + this.CurrentDb = currentDb; + } -public class readArg implements ArgStrategy{ @Override public boolean matchArg(String arg) { return arg.equals("read"); @@ -11,14 +19,14 @@ public boolean matchArg(String arg) { @Override public void execCmd(String arg) { String[] cmdArgs = arg.split(" "); -// if (CurrentDb != null) { -// if (cmdArgs.length == 1) { -// CurrentDb.readData(); -// } else { -// CurrentDb.readData(cmdArgs[1]); -// } -// } else { -// System.out.println(errors.NO_DATABASE_SELECTED); -// } + if (CurrentDb != null) { + if (cmdArgs.length == 1) { + CurrentDb.readData(); + } else { + CurrentDb.readData(cmdArgs[1]); + } + } else { + System.out.println(errors.NO_DATABASE_SELECTED); + } } } diff --git a/src/InputCommand/schemaArg.java b/src/InputCommand/schemaArg.java index f64d81c..ef9dede 100644 --- a/src/InputCommand/schemaArg.java +++ b/src/InputCommand/schemaArg.java @@ -1,8 +1,16 @@ package InputCommand; import constants.errors; +import minidb.xmlParser.DatabaseFile; + +public class schemaArg implements ArgStrategy, UseSetCurrentDb { + private DatabaseFile CurrentDb; + + @Override + public void setCurrentDb(DatabaseFile currentDb){ + this.CurrentDb = currentDb; + } -public class schemaArg implements ArgStrategy{ @Override public boolean matchArg(String arg) { return arg.equals("schema"); @@ -10,22 +18,22 @@ public boolean matchArg(String arg) { @Override public void execCmd(String arg) { -// if (CurrentDb != null) { -// String xy = cmdArgs; -// -// if (xy.equals("show")) { -// System.out.println(CurrentDb.getSchema()); -// } else { -// String[] schemaVals = xy.split(","); -// if (schemaVals.length > 1) { -// CurrentDb.createSchema(xy); -// } else { -// System.out.println("There should be at least 2 columns of data"); -// } -// } -// -// } else { -// System.out.println(errors.NO_DATABASE_SELECTED); -// } + if (CurrentDb != null) { + String xy = arg; + + if (xy.equals("show")) { + System.out.println(CurrentDb.getSchema()); + } else { + String[] schemaVals = xy.split(","); + if (schemaVals.length > 1) { + CurrentDb.createSchema(xy); + } else { + System.out.println("There should be at least 2 columns of data"); + } + } + + } else { + System.out.println(errors.NO_DATABASE_SELECTED); + } } } diff --git a/src/InputCommand/useArg.java b/src/InputCommand/useArg.java index f7f9011..1c000e4 100644 --- a/src/InputCommand/useArg.java +++ b/src/InputCommand/useArg.java @@ -1,9 +1,17 @@ package InputCommand; +import minidb.xmlParser.CurrentDBOserver; import minidb.xmlParser.DatabaseFile; import minidb.xmlParser.RegistryFile; public class useArg implements ArgStrategy{ + private DatabaseFile CurrentDb; + private final CurrentDBOserver currentDBO; + + public useArg(CurrentDBOserver currentDBO) { + this.currentDBO = currentDBO; + } + @Override public boolean matchArg(String arg) { return arg.equals("use"); @@ -15,7 +23,7 @@ public void execCmd(String arg) { String path = registry.getDatabasePath(arg, false); if (path != null) { -// CurrentDb = new DatabaseFile(path); + CurrentDb = new DatabaseFile(path); // CurrentDb.EditMode(); System.out.println("Successfully loaded Database named: " + arg); } else { diff --git a/src/MainClass.java b/src/MainClass.java index 3cf6039..cd9d2a5 100644 --- a/src/MainClass.java +++ b/src/MainClass.java @@ -4,6 +4,4 @@ public static void main(String[] args) { cli db_cli = new cli(); db_cli.run(); } - - } diff --git a/src/cli.java b/src/cli.java index fbddc3f..1ec9d7f 100644 --- a/src/cli.java +++ b/src/cli.java @@ -3,50 +3,13 @@ import minidb.xmlParser.RegistryFile; import constants.*; -/* -To do -- Comment the code -- Table Layout for the data. -- usage of threads -*/ - -/** - * Javadoc comments. All are static methods because we are not creating any - * object of this class. - * - * @author Chanakya - */ public class cli { - - /** - * The Registry File is a XML file which contains the information about the all - * the databases created. It acts as a pointer to the Database File. So, We - * instantly load the registry file. - */ - - /** - * registry can be a singleton - */ RegistryFile registry = RegistryFile.getInstance(); - - /** - * This attribute is for storing the DatabaseFile instance. Which is assigned - * when the user calls the command "use". if the user does not call the command - * "use" then we show an error message. - */ - - /** - * can be assigned to a state pattern - */ DatabaseFile CurrentDb; - /* - function okay - */ public void run() { print(constants.HEADING); -// registry = new RegistryFile(constants.DATA_XML_PATH); Scanner input = new Scanner(System.in); while (true) { diff --git a/src/minidb/xmlParser/CurrentDBOserver.java b/src/minidb/xmlParser/CurrentDBOserver.java new file mode 100644 index 0000000..deb9ca8 --- /dev/null +++ b/src/minidb/xmlParser/CurrentDBOserver.java @@ -0,0 +1,17 @@ +package minidb.xmlParser; + +import InputCommand.UseSetCurrentDb; + +import java.util.ArrayList; + +public class CurrentDBOserver { + private final ArrayList strategyArrayList; + + public CurrentDBOserver(ArrayList strategyArrayList) { + this.strategyArrayList = strategyArrayList; + } + + public void updateAll() { + + } +} From f21ccc3238b62d1bd199b3ef824964196da9bd99 Mon Sep 17 00:00:00 2001 From: Kazi Muktadir Ahmed Date: Sun, 24 Apr 2022 08:32:54 +0600 Subject: [PATCH 08/11] created a template strategy --- src/InputCommand/useArg.java | 17 ++++++++++----- src/minidb/xmlParser/CurrentDBObserver.java | 23 +++++++++++++++++++++ src/minidb/xmlParser/CurrentDBOserver.java | 17 --------------- 3 files changed, 35 insertions(+), 22 deletions(-) create mode 100644 src/minidb/xmlParser/CurrentDBObserver.java delete mode 100644 src/minidb/xmlParser/CurrentDBOserver.java diff --git a/src/InputCommand/useArg.java b/src/InputCommand/useArg.java index 1c000e4..cca9103 100644 --- a/src/InputCommand/useArg.java +++ b/src/InputCommand/useArg.java @@ -1,17 +1,22 @@ package InputCommand; -import minidb.xmlParser.CurrentDBOserver; +import minidb.xmlParser.CurrentDBObserver; import minidb.xmlParser.DatabaseFile; import minidb.xmlParser.RegistryFile; -public class useArg implements ArgStrategy{ +public class useArg implements ArgStrategy, UseSetCurrentDb{ private DatabaseFile CurrentDb; - private final CurrentDBOserver currentDBO; + private CurrentDBObserver currentDBO; - public useArg(CurrentDBOserver currentDBO) { + public void setCurrentDBO(CurrentDBObserver currentDBO) { this.currentDBO = currentDBO; } + @Override + public void setCurrentDb(DatabaseFile currentDb) { + this.CurrentDb = currentDb; + } + @Override public boolean matchArg(String arg) { return arg.equals("use"); @@ -23,8 +28,10 @@ public void execCmd(String arg) { String path = registry.getDatabasePath(arg, false); if (path != null) { - CurrentDb = new DatabaseFile(path); +// CurrentDb = new DatabaseFile(path); // CurrentDb.EditMode(); + currentDBO.updateAll(path); + CurrentDb.EditMode(); System.out.println("Successfully loaded Database named: " + arg); } else { System.out.println("Database not found"); diff --git a/src/minidb/xmlParser/CurrentDBObserver.java b/src/minidb/xmlParser/CurrentDBObserver.java new file mode 100644 index 0000000..f32900c --- /dev/null +++ b/src/minidb/xmlParser/CurrentDBObserver.java @@ -0,0 +1,23 @@ +package minidb.xmlParser; + +import InputCommand.UseSetCurrentDb; + +import java.util.ArrayList; + +public class CurrentDBObserver { + private final ArrayList strategyArrayList; + + public CurrentDBObserver(ArrayList strategyArrayList) { + this.strategyArrayList = strategyArrayList; + } + + public void updateAll(String path) { + for (UseSetCurrentDb argStart: strategyArrayList) { + argStart.setCurrentDb(getNewDatabaseFile(path)); + } + } + + private DatabaseFile getNewDatabaseFile (String path) { + return new DatabaseFile(path); + } +} diff --git a/src/minidb/xmlParser/CurrentDBOserver.java b/src/minidb/xmlParser/CurrentDBOserver.java deleted file mode 100644 index deb9ca8..0000000 --- a/src/minidb/xmlParser/CurrentDBOserver.java +++ /dev/null @@ -1,17 +0,0 @@ -package minidb.xmlParser; - -import InputCommand.UseSetCurrentDb; - -import java.util.ArrayList; - -public class CurrentDBOserver { - private final ArrayList strategyArrayList; - - public CurrentDBOserver(ArrayList strategyArrayList) { - this.strategyArrayList = strategyArrayList; - } - - public void updateAll() { - - } -} From 89b49ff4e084cefba6da3b687ea4e287c74d37f6 Mon Sep 17 00:00:00 2001 From: Kazi Muktadir Ahmed Date: Sun, 24 Apr 2022 09:36:25 +0600 Subject: [PATCH 09/11] created a pushed the splitting in strat class --- src/CliBuilder.java | 77 +++++++++++++++++++++ src/InputCommand/UseSetCurrentDb.java | 1 + src/InputCommand/addArg.java | 6 +- src/InputCommand/deleteArg.java | 6 +- src/InputCommand/dropArg.java | 6 +- src/InputCommand/helpArg.java | 3 +- src/InputCommand/listArg.java | 3 +- src/InputCommand/newArg.java | 6 +- src/InputCommand/readArg.java | 3 +- src/InputCommand/schemaArg.java | 6 +- src/InputCommand/useArg.java | 8 +-- src/cli.java | 23 ++++++ src/minidb/xmlParser/CurrentDBObserver.java | 6 +- 13 files changed, 136 insertions(+), 18 deletions(-) create mode 100644 src/CliBuilder.java diff --git a/src/CliBuilder.java b/src/CliBuilder.java new file mode 100644 index 0000000..249c59f --- /dev/null +++ b/src/CliBuilder.java @@ -0,0 +1,77 @@ +import InputCommand.ArgStrategy; +import InputCommand.UseSetCurrentDb; +import InputCommand.*; +import minidb.xmlParser.CurrentDBObserver; + +import java.util.ArrayList; + +public class CliBuilder { + public cli buildCli () { + cli c = null; + + ArrayList argslist = new ArrayList<>(); + ArrayList usedInCurrentDBO = new ArrayList<>(); + + addArg add = new addArg(); + argslist.add(add); + usedInCurrentDBO.add(add); + + deleteArg delete = new deleteArg(); + argslist.add(delete); + usedInCurrentDBO.add(delete); + + readArg read = new readArg(); + argslist.add(read); + usedInCurrentDBO.add(read); + + schemaArg schema = new schemaArg(); + argslist.add(schema); + usedInCurrentDBO.add(schema); + + useArg use = new useArg(); + argslist.add(use); + usedInCurrentDBO.add(use); + CurrentDBObserver observer = new CurrentDBObserver(usedInCurrentDBO); + use.setCurrentDBO(observer); + + dropArg drop = new dropArg(); + argslist.add(drop); + + helpArg help = new helpArg(); + argslist.add(help); + + listArg list = new listArg(); + argslist.add(list); + + newArg newA = new newArg(); + argslist.add(newA); + + + + return c; + } +} + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/InputCommand/UseSetCurrentDb.java b/src/InputCommand/UseSetCurrentDb.java index b57381d..5ef65e0 100644 --- a/src/InputCommand/UseSetCurrentDb.java +++ b/src/InputCommand/UseSetCurrentDb.java @@ -1,5 +1,6 @@ package InputCommand; +import minidb.xmlParser.CurrentDBObserver; import minidb.xmlParser.DatabaseFile; public interface UseSetCurrentDb { diff --git a/src/InputCommand/addArg.java b/src/InputCommand/addArg.java index 17feda2..b4ebe20 100644 --- a/src/InputCommand/addArg.java +++ b/src/InputCommand/addArg.java @@ -13,13 +13,15 @@ public void setCurrentDb(DatabaseFile currentDb){ @Override public boolean matchArg(String arg) { - return arg.equals("add"); + String[] cmdArgs = arg.split(" "); + return cmdArgs[0].equals("add"); } @Override public void execCmd(String arg) { + String[] cmdArgs = arg.split(" "); if (CurrentDb != null) { - CurrentDb.addData(arg); + CurrentDb.addData(cmdArgs[1]); } else { System.out.println(errors.NO_DATABASE_SELECTED); } diff --git a/src/InputCommand/deleteArg.java b/src/InputCommand/deleteArg.java index e9763cd..876095f 100644 --- a/src/InputCommand/deleteArg.java +++ b/src/InputCommand/deleteArg.java @@ -13,13 +13,15 @@ public void setCurrentDb(DatabaseFile currentDb){ @Override public boolean matchArg(String arg) { - return arg.equals("delete"); + String[] cmdArgs = arg.split(" "); + return cmdArgs[0].equals("delete"); } @Override public void execCmd(String arg) { + String[] cmdArgs = arg.split(" "); if (CurrentDb != null) { - CurrentDb.deleteData(arg); + CurrentDb.deleteData(cmdArgs[1]); } else { System.out.println(errors.NO_DATABASE_SELECTED); } diff --git a/src/InputCommand/dropArg.java b/src/InputCommand/dropArg.java index dfacbc3..645af79 100644 --- a/src/InputCommand/dropArg.java +++ b/src/InputCommand/dropArg.java @@ -5,12 +5,14 @@ public class dropArg implements ArgStrategy{ @Override public boolean matchArg(String arg) { - return arg.equals("drop"); + String[] cmdArgs = arg.split(" "); + return cmdArgs[0].equals("drop"); } @Override public void execCmd(String arg) { + String[] cmdArgs = arg.split(" "); RegistryFile registry = RegistryFile.getInstance(); - registry.deleteDatabase(arg); + registry.deleteDatabase(cmdArgs[1]); } } diff --git a/src/InputCommand/helpArg.java b/src/InputCommand/helpArg.java index ca831bf..a6d5f55 100644 --- a/src/InputCommand/helpArg.java +++ b/src/InputCommand/helpArg.java @@ -5,7 +5,8 @@ public class helpArg implements ArgStrategy{ @Override public boolean matchArg(String arg) { - return arg.equals("help;"); + String[] cmdArgs = arg.split(" "); + return cmdArgs[0].equals("help;"); } @Override diff --git a/src/InputCommand/listArg.java b/src/InputCommand/listArg.java index f75400f..2f13abb 100644 --- a/src/InputCommand/listArg.java +++ b/src/InputCommand/listArg.java @@ -5,7 +5,8 @@ public class listArg implements ArgStrategy{ @Override public boolean matchArg(String arg) { - return arg.equals("list"); + String[] cmdArgs = arg.split(" "); + return cmdArgs[0].equals("list"); } @Override diff --git a/src/InputCommand/newArg.java b/src/InputCommand/newArg.java index dd0a722..99ed48f 100644 --- a/src/InputCommand/newArg.java +++ b/src/InputCommand/newArg.java @@ -5,12 +5,14 @@ public class newArg implements ArgStrategy{ @Override public boolean matchArg(String arg) { - return arg.equals("new"); + String[] cmdArgs = arg.split(" "); + return cmdArgs[0].equals("new"); } @Override public void execCmd(String arg) { + String[] cmdArgs = arg.split(" "); RegistryFile registry = RegistryFile.getInstance(); - registry.createNewDatabase(arg); + registry.createNewDatabase(cmdArgs[1]); } } diff --git a/src/InputCommand/readArg.java b/src/InputCommand/readArg.java index d070dd7..331b4ef 100644 --- a/src/InputCommand/readArg.java +++ b/src/InputCommand/readArg.java @@ -13,7 +13,8 @@ public void setCurrentDb(DatabaseFile currentDb){ @Override public boolean matchArg(String arg) { - return arg.equals("read"); + String[] cmdArgs = arg.split(" "); + return cmdArgs[0].equals("read"); } @Override diff --git a/src/InputCommand/schemaArg.java b/src/InputCommand/schemaArg.java index ef9dede..be0a592 100644 --- a/src/InputCommand/schemaArg.java +++ b/src/InputCommand/schemaArg.java @@ -13,13 +13,15 @@ public void setCurrentDb(DatabaseFile currentDb){ @Override public boolean matchArg(String arg) { - return arg.equals("schema"); + String[] cmdArgs = arg.split(" "); + return cmdArgs[0].equals("schema"); } @Override public void execCmd(String arg) { + String[] cmdArgs = arg.split(" "); if (CurrentDb != null) { - String xy = arg; + String xy = cmdArgs[1]; if (xy.equals("show")) { System.out.println(CurrentDb.getSchema()); diff --git a/src/InputCommand/useArg.java b/src/InputCommand/useArg.java index cca9103..7707f13 100644 --- a/src/InputCommand/useArg.java +++ b/src/InputCommand/useArg.java @@ -19,17 +19,17 @@ public void setCurrentDb(DatabaseFile currentDb) { @Override public boolean matchArg(String arg) { - return arg.equals("use"); + String[] cmdArgs = arg.split(" "); + return cmdArgs[0].equals("use"); } @Override public void execCmd(String arg) { + String[] cmdArgs = arg.split(" "); RegistryFile registry = RegistryFile.getInstance(); - String path = registry.getDatabasePath(arg, false); + String path = registry.getDatabasePath(cmdArgs[1], false); if (path != null) { -// CurrentDb = new DatabaseFile(path); -// CurrentDb.EditMode(); currentDBO.updateAll(path); CurrentDb.EditMode(); System.out.println("Successfully loaded Database named: " + arg); diff --git a/src/cli.java b/src/cli.java index 1ec9d7f..e88661a 100644 --- a/src/cli.java +++ b/src/cli.java @@ -1,12 +1,21 @@ +import java.util.ArrayList; import java.util.Scanner; + +import InputCommand.ArgStrategy; +import InputCommand.notFoundArg; import minidb.xmlParser.DatabaseFile; import minidb.xmlParser.RegistryFile; import constants.*; public class cli { + private ArrayList argsList; + RegistryFile registry = RegistryFile.getInstance(); DatabaseFile CurrentDb; + public cli() { + } + public void run() { print(constants.HEADING); @@ -31,6 +40,20 @@ public void run() { input.close(); } + private void eCI (String cmdInp) { + String[] matchInp = cmdInp.split(" ", 0); + ArgStrategy responseStrat = new notFoundArg(); + + for(ArgStrategy arg: argsList) { + if(arg.matchArg(matchInp[0])){ + responseStrat = arg; + break; + } + } + + + } + private void executeCliInputs(String input) { String[] cmdArgs = input.split(" "); diff --git a/src/minidb/xmlParser/CurrentDBObserver.java b/src/minidb/xmlParser/CurrentDBObserver.java index f32900c..bd14050 100644 --- a/src/minidb/xmlParser/CurrentDBObserver.java +++ b/src/minidb/xmlParser/CurrentDBObserver.java @@ -5,12 +5,16 @@ import java.util.ArrayList; public class CurrentDBObserver { - private final ArrayList strategyArrayList; + private ArrayList strategyArrayList; public CurrentDBObserver(ArrayList strategyArrayList) { this.strategyArrayList = strategyArrayList; } + public void attach(UseSetCurrentDb observer){ + strategyArrayList.add(observer); + } + public void updateAll(String path) { for (UseSetCurrentDb argStart: strategyArrayList) { argStart.setCurrentDb(getNewDatabaseFile(path)); From f490015eca8f91c1e41330f1dc9b9dfc77e8f4d3 Mon Sep 17 00:00:00 2001 From: Kazi Muktadir Ahmed Date: Sun, 24 Apr 2022 10:58:16 +0600 Subject: [PATCH 10/11] created a pushed the splitting in strat class --- src/CliBuilder.java | 6 +++--- src/InputCommand/UseSetCurrentDb.java | 2 +- src/InputCommand/addArg.java | 4 ++-- src/InputCommand/deleteArg.java | 4 ++-- src/InputCommand/notFoundArg.java | 3 ++- src/InputCommand/readArg.java | 4 ++-- src/InputCommand/schemaArg.java | 4 ++-- src/InputCommand/useArg.java | 8 +++++--- src/MainClass.java | 3 ++- src/cli.java | 15 ++++++++------- src/minidb/xmlParser/CurrentDBObserver.java | 8 ++------ src/minidb/xmlParser/DatabaseFile.java | 5 +++-- 12 files changed, 34 insertions(+), 32 deletions(-) diff --git a/src/CliBuilder.java b/src/CliBuilder.java index 249c59f..438bbde 100644 --- a/src/CliBuilder.java +++ b/src/CliBuilder.java @@ -7,7 +7,7 @@ public class CliBuilder { public cli buildCli () { - cli c = null; + cli c = new cli(); ArrayList argslist = new ArrayList<>(); ArrayList usedInCurrentDBO = new ArrayList<>(); @@ -30,7 +30,7 @@ public cli buildCli () { useArg use = new useArg(); argslist.add(use); - usedInCurrentDBO.add(use); +// usedInCurrentDBO.add(use); CurrentDBObserver observer = new CurrentDBObserver(usedInCurrentDBO); use.setCurrentDBO(observer); @@ -46,7 +46,7 @@ public cli buildCli () { newArg newA = new newArg(); argslist.add(newA); - + c.setArgsList(argslist); return c; } diff --git a/src/InputCommand/UseSetCurrentDb.java b/src/InputCommand/UseSetCurrentDb.java index 5ef65e0..3f1e050 100644 --- a/src/InputCommand/UseSetCurrentDb.java +++ b/src/InputCommand/UseSetCurrentDb.java @@ -4,5 +4,5 @@ import minidb.xmlParser.DatabaseFile; public interface UseSetCurrentDb { - public void setCurrentDb(DatabaseFile currentDb); + public void setCurrentDb(String path); } diff --git a/src/InputCommand/addArg.java b/src/InputCommand/addArg.java index b4ebe20..ad3ca5c 100644 --- a/src/InputCommand/addArg.java +++ b/src/InputCommand/addArg.java @@ -7,8 +7,8 @@ public class addArg implements ArgStrategy, UseSetCurrentDb { private DatabaseFile CurrentDb; @Override - public void setCurrentDb(DatabaseFile currentDb){ - this.CurrentDb = currentDb; + public void setCurrentDb(String path){ + this.CurrentDb = new DatabaseFile(path); } @Override diff --git a/src/InputCommand/deleteArg.java b/src/InputCommand/deleteArg.java index 876095f..aa58c15 100644 --- a/src/InputCommand/deleteArg.java +++ b/src/InputCommand/deleteArg.java @@ -7,8 +7,8 @@ public class deleteArg implements ArgStrategy, UseSetCurrentDb { private DatabaseFile CurrentDb; @Override - public void setCurrentDb(DatabaseFile currentDb){ - this.CurrentDb = currentDb; + public void setCurrentDb(String path){ + this.CurrentDb = new DatabaseFile(path); } @Override diff --git a/src/InputCommand/notFoundArg.java b/src/InputCommand/notFoundArg.java index 2cd88f5..1eb7e84 100644 --- a/src/InputCommand/notFoundArg.java +++ b/src/InputCommand/notFoundArg.java @@ -8,6 +8,7 @@ public boolean matchArg(String arg) { @Override public void execCmd(String arg) { - System.out.println("UNKNOWN COMMAND: " + arg + "\nType `help;` for commands list"); + String[] cmdArgs = arg.split(" "); + System.out.println("UNKNOWN COMMAND: " + cmdArgs[0] + "\nType `help;` for commands list"); } } diff --git a/src/InputCommand/readArg.java b/src/InputCommand/readArg.java index 331b4ef..7cef79e 100644 --- a/src/InputCommand/readArg.java +++ b/src/InputCommand/readArg.java @@ -7,8 +7,8 @@ public class readArg implements ArgStrategy, UseSetCurrentDb { private DatabaseFile CurrentDb; @Override - public void setCurrentDb(DatabaseFile currentDb){ - this.CurrentDb = currentDb; + public void setCurrentDb(String path){ + this.CurrentDb = new DatabaseFile(path); } @Override diff --git a/src/InputCommand/schemaArg.java b/src/InputCommand/schemaArg.java index be0a592..5fa66d0 100644 --- a/src/InputCommand/schemaArg.java +++ b/src/InputCommand/schemaArg.java @@ -7,8 +7,8 @@ public class schemaArg implements ArgStrategy, UseSetCurrentDb { private DatabaseFile CurrentDb; @Override - public void setCurrentDb(DatabaseFile currentDb){ - this.CurrentDb = currentDb; + public void setCurrentDb(String path){ + this.CurrentDb = new DatabaseFile(path); } @Override diff --git a/src/InputCommand/useArg.java b/src/InputCommand/useArg.java index 7707f13..504457a 100644 --- a/src/InputCommand/useArg.java +++ b/src/InputCommand/useArg.java @@ -13,8 +13,8 @@ public void setCurrentDBO(CurrentDBObserver currentDBO) { } @Override - public void setCurrentDb(DatabaseFile currentDb) { - this.CurrentDb = currentDb; + public void setCurrentDb(String path) { + this.CurrentDb = new DatabaseFile(path); } @Override @@ -30,9 +30,11 @@ public void execCmd(String arg) { String path = registry.getDatabasePath(cmdArgs[1], false); if (path != null) { + CurrentDb = new DatabaseFile(path); currentDBO.updateAll(path); CurrentDb.EditMode(); - System.out.println("Successfully loaded Database named: " + arg); + System.out.println(path); + System.out.println("Successfully loaded Database named: " + cmdArgs[0]); } else { System.out.println("Database not found"); } diff --git a/src/MainClass.java b/src/MainClass.java index cd9d2a5..3275b71 100644 --- a/src/MainClass.java +++ b/src/MainClass.java @@ -1,7 +1,8 @@ public class MainClass { public static void main(String[] args) { System.out.println("my smell"); - cli db_cli = new cli(); + CliBuilder cb = new CliBuilder(); + cli db_cli = cb.buildCli(); db_cli.run(); } } diff --git a/src/cli.java b/src/cli.java index e88661a..0003f01 100644 --- a/src/cli.java +++ b/src/cli.java @@ -16,6 +16,10 @@ public class cli { public cli() { } + public void setArgsList(ArrayList argsList) { + this.argsList = argsList; + } + public void run() { print(constants.HEADING); @@ -30,7 +34,8 @@ public void run() { break; } long startTime = System.nanoTime(); - executeCliInputs(currentCmdCommand); +// executeCliInputs(currentCmdCommand); + eCI(currentCmdCommand); long endTime = System.nanoTime(); long exeTime = (endTime - startTime) / 1000000; @@ -41,25 +46,21 @@ public void run() { } private void eCI (String cmdInp) { - String[] matchInp = cmdInp.split(" ", 0); ArgStrategy responseStrat = new notFoundArg(); for(ArgStrategy arg: argsList) { - if(arg.matchArg(matchInp[0])){ + if(arg.matchArg(cmdInp)){ responseStrat = arg; break; } } - + responseStrat.execCmd(cmdInp); } private void executeCliInputs(String input) { String[] cmdArgs = input.split(" "); - /** - * Strategy pattern can be implemented to ensure OCP - */ switch (cmdArgs[0]) { case "new": { createNewDatabase(cmdArgs[1]); diff --git a/src/minidb/xmlParser/CurrentDBObserver.java b/src/minidb/xmlParser/CurrentDBObserver.java index bd14050..15de19d 100644 --- a/src/minidb/xmlParser/CurrentDBObserver.java +++ b/src/minidb/xmlParser/CurrentDBObserver.java @@ -5,7 +5,7 @@ import java.util.ArrayList; public class CurrentDBObserver { - private ArrayList strategyArrayList; + private final ArrayList strategyArrayList; public CurrentDBObserver(ArrayList strategyArrayList) { this.strategyArrayList = strategyArrayList; @@ -17,11 +17,7 @@ public void attach(UseSetCurrentDb observer){ public void updateAll(String path) { for (UseSetCurrentDb argStart: strategyArrayList) { - argStart.setCurrentDb(getNewDatabaseFile(path)); + argStart.setCurrentDb(path); } } - - private DatabaseFile getNewDatabaseFile (String path) { - return new DatabaseFile(path); - } } diff --git a/src/minidb/xmlParser/DatabaseFile.java b/src/minidb/xmlParser/DatabaseFile.java index 4916d0d..949e865 100644 --- a/src/minidb/xmlParser/DatabaseFile.java +++ b/src/minidb/xmlParser/DatabaseFile.java @@ -12,6 +12,7 @@ public class DatabaseFile extends XMLFiles { private static final String TAG_META = "Xmeta"; // incomplete feature private static final String TAG_DATA = "Xdata"; + private Element metaElem; private Element storageElem; public DatabaseFile(String path) { @@ -31,9 +32,9 @@ protected void createFile() { } public void EditMode() { -// Element metaElem = (Element) doc.getElementsByTagName(TAG_META).item(0); + metaElem = (Element) doc.getElementsByTagName(TAG_META).item(0); storageElem = (Element) doc.getElementsByTagName(TAG_STORAGE).item(0); -// System.out.println("Edit Mode On; " + schemaElem.getAttribute("val")); + // System.out.println("Edit Mode On; " + schemaElem.getAttribute("val")); } public String getSchema() { From b9df7e5637eee279c24bfbbf91a31870d35f95ba Mon Sep 17 00:00:00 2001 From: Kazi Muktadir Ahmed Date: Sun, 24 Apr 2022 12:03:11 +0600 Subject: [PATCH 11/11] okay --- src/MainClass.java | 2 +- src/cli.java | 6 ++--- src/minidb/xmlParser/CurrentDBObserver.java | 4 --- src/minidb/xmlParser/RegistryFile.java | 30 --------------------- 4 files changed, 4 insertions(+), 38 deletions(-) diff --git a/src/MainClass.java b/src/MainClass.java index 3275b71..8f581a7 100644 --- a/src/MainClass.java +++ b/src/MainClass.java @@ -1,6 +1,6 @@ public class MainClass { public static void main(String[] args) { - System.out.println("my smell"); +// System.out.println("my smell"); CliBuilder cb = new CliBuilder(); cli db_cli = cb.buildCli(); db_cli.run(); diff --git a/src/cli.java b/src/cli.java index 0003f01..d5cfc77 100644 --- a/src/cli.java +++ b/src/cli.java @@ -34,8 +34,8 @@ public void run() { break; } long startTime = System.nanoTime(); -// executeCliInputs(currentCmdCommand); - eCI(currentCmdCommand); + executeCliInputs(currentCmdCommand); +// executeCliInputs1(currentCmdCommand); long endTime = System.nanoTime(); long exeTime = (endTime - startTime) / 1000000; @@ -45,7 +45,7 @@ public void run() { input.close(); } - private void eCI (String cmdInp) { + private void executeCliInputs1 (String cmdInp) { ArgStrategy responseStrat = new notFoundArg(); for(ArgStrategy arg: argsList) { diff --git a/src/minidb/xmlParser/CurrentDBObserver.java b/src/minidb/xmlParser/CurrentDBObserver.java index 15de19d..a9f0210 100644 --- a/src/minidb/xmlParser/CurrentDBObserver.java +++ b/src/minidb/xmlParser/CurrentDBObserver.java @@ -11,10 +11,6 @@ public CurrentDBObserver(ArrayList strategyArrayList) { this.strategyArrayList = strategyArrayList; } - public void attach(UseSetCurrentDb observer){ - strategyArrayList.add(observer); - } - public void updateAll(String path) { for (UseSetCurrentDb argStart: strategyArrayList) { argStart.setCurrentDb(path); diff --git a/src/minidb/xmlParser/RegistryFile.java b/src/minidb/xmlParser/RegistryFile.java index ea1e528..0037b4b 100644 --- a/src/minidb/xmlParser/RegistryFile.java +++ b/src/minidb/xmlParser/RegistryFile.java @@ -8,14 +8,6 @@ import org.w3c.dom.*; import constants.constants; -/** - * Contains the methods for performing CRUD operations on the registry file - * 'minidb.xml' - */ - -/** - * Should be a singleton instance - */ public class RegistryFile extends XMLFiles { private static RegistryFile registryFile; @@ -44,13 +36,6 @@ void createFile() { System.out.println("Intialized: " + xmlFile.getPath()); } - /** - * - * @param name - Name of the database - * @param disabled - Always false for user created databases - * @return The XML Element which can be appended into the doc - * @throws ParserConfigurationException - */ private Element addDbEntry(String name, String disabled) { Document doc = this.doc; @@ -78,12 +63,6 @@ private Element addDbEntry(String name, String disabled) { return databaseElem; } - /** - * Method for creating a new database. Which means both creating a entry in the - * minidb.xml and A new database-xml file. - * - * @param name - The name of the database - */ public void createNewDatabase(String name) { try { if (!this.isDatabaseExists(name)) { @@ -102,9 +81,6 @@ public void createNewDatabase(String name) { } } - /** - * To list all the created databases in the register - */ public void listAllDatabases() { NodeList list = this.doc.getElementsByTagName("name"); @@ -115,12 +91,6 @@ public void listAllDatabases() { } } - /** - * Checks if the database name already exists in the register - * - * @param name - The name of the database - * @return The index of the database in the register, if not found returns -1 - */ public int checkDatabase(String name) { int x = -1; NodeList list = this.doc.getElementsByTagName("name");